Slide 1

Slide 1 text

4BOTBOגࣜձٕࣾज़ຊ෦.PCJMF"QQMJDBUJPOάϧʔϓ ฏࢁஐݾ "3,JUΛ৮Γͳ͕ΒৼΓฦΔ 88%$ J04%$ J04%$+BQBO"GUFS5BML

Slide 2

Slide 2 text

ࣗݾ঺հ w !FMV w 4BOTBOגࣜձࣾ৽ଔೖࣾ w J04ΤϯδχΞ📱 w ޷͖ήʔϜ🎮 ෩ܠ🏞

Slide 3

Slide 3 text

͓͠ͳ͕͖ "3,JUτϐοΫ 0CKFDU$BQUVSF .PUJPO$BQUVSF ͓·͚

Slide 4

Slide 4 text

"3,JU 88%$

Slide 5

Slide 5 text

w ೥ʹ"3,JU͔Βຖ೥Ξοϓσʔτ͕ଓ͘ w ೥ͷJ1BE1SPʹഎ໘5SVF%FQUIΧϝϥ͕౥ࡌ w ೥͔Β1SPγϦʔζʹ-J%"3εΩϟφ౥ࡌ w νοϓͷੑೳ͕޲্͠ෳࡶͳ͜ͱ͕Ͱ͖ΔΑ͏ʹͳͬͨ

Slide 6

Slide 6 text

w ,ʹରԠ w ΧϝϥػೳڧԽ w 1MBOFBODIPSͷਫ਼౓޲্ w ϞʔγϣϯΩϟϓνϟͷੑೳ޲্ w -PDBUJPOBODIPSͷ஍Ҭ֦େ τϐοΫ %JTDPWFS"3,JU

Slide 7

Slide 7 text

w ,ʹରԠ👉ϚγϯύϫʔͰॲཧͷޮ཰Խ w ΧϝϥػೳڧԽ👉"34FTTJPOதʹ੩ࢭըΛΩϟϓνϟՄೳʹ)%3 w 1MBOFBODIPSͷਫ਼౓޲্👉ฏ໘ೝࣝ΍ํ޲౳ͷਫ਼౓͕޲্ w ϞʔγϣϯΩϟϓνϟੑೳ޲্👉શମతͳਫ਼౓޲্ࣖ΋ݕग़Մೳ w -PDBUJPOBODIPSͷ஍Ҭ֦େ👉஍Ҭ֦େͰ౦ژ௥Ճ

Slide 8

Slide 8 text

,ʹରԠ w ैདྷը૾Λॖখ͔ͯ͠ΒॲཧΛߦͬͯϨϯμϦϯά͍ͯͨ͠ w ,ͷը૾Λॲཧ͢ΔϝϞϦϦιʔε΍ܭࢉೳྗෆ଍ނ w ࠷৽ͷϋʔυ΢ΣΞύϫʔ 💪 Ͱ,ॲཧ͕Ͱ͖ΔΑ͏ʹͳͬͨ

Slide 9

Slide 9 text

,ʹରԠ w ,ͰࡱӨ w ͰฏۉԽ͠ॖখ w ໿NTຖʹॲཧ 㲈GQT w ϨϯμϦϯά #FGPSF IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

Slide 10

Slide 10 text

,ʹରԠ w ,ͰࡱӨ w ͰฏۉԽ͠ॖখ w ໿NTຖʹॲཧ 㲈GQT w ϨϯμϦϯά #FGPSF IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

Slide 11

Slide 11 text

,ʹରԠ w ,ͰࡱӨ w ͰฏۉԽ͠ॖখ w ໿NTຖʹॲཧ 㲈GQT w ϨϯμϦϯά #FGPSF IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

Slide 12

Slide 12 text

,ʹରԠ w ,ͰࡱӨ w ͰฏۉԽ͠ॖখ w ໿NTຖʹॲཧ 㲈GQT w ϨϯμϦϯά #FGPSF IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

Slide 13

Slide 13 text

,ʹରԠ w ,ͰࡱӨ w ͰฏۉԽ͠ॖখ w ໿NTຖʹॲཧ 㲈GQT w ϨϯμϦϯά "GUFS ,NPEF IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 💪

Slide 14

Slide 14 text

,ʹରԠ w ,ͰࡱӨ w ͰฏۉԽ͠ॖখ w ໿NTຖʹॲཧ 㲈GQT w ϨϯμϦϯά "GUFS ,NPEF IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 💪

Slide 15

Slide 15 text

,ʹରԠ w ,ͰࡱӨ w ͰฏۉԽ͠ॖখ w ໿NTຖʹॲཧ 㲈GQT w ϨϯμϦϯά "GUFS ,NPEF IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 💪

Slide 16

Slide 16 text

w ୯७ͳಈըͰ΋,GQT্͕ݶ w ЋͳॲཧΛ͢ΔͷͰGQT͸ݶք

Slide 17

Slide 17 text

w ,ʹରԠ👉ϚγϯύϫʔͰॲཧͷޮ཰Խ w ΧϝϥػೳڧԽ👉"34FTTJPOதʹ੩ࢭըΛΩϟϓνϟՄೳʹ)%3 w 1MBOFBODIPSͷਫ਼౓޲্👉ฏ໘ೝࣝ΍ํ޲౳ͷਫ਼౓͕޲্ w ϞʔγϣϯΩϟϓνϟੑೳ޲্👉શମతͳਫ਼౓޲্ࣖ΋ݕग़Մೳ w -PDBUJPOBODIPSͷ஍Ҭ֦େ👉஍Ҭ֦େͰ౦ژ௥Ճ

Slide 18

Slide 18 text

w ,ʹରԠ👉ϚγϯύϫʔͰॲཧͷޮ཰Խ w ΧϝϥػೳڧԽ👉"34FTTJPOதʹ੩ࢭըΛΩϟϓνϟՄೳʹ)%3 w 1MBOFBODIPSͷਫ਼౓޲্👉ฏ໘ೝࣝ΍ํ޲౳ͷਫ਼౓͕޲্ w ϞʔγϣϯΩϟϓνϟੑೳ޲্👉શମతͳਫ਼౓޲্ࣖ΋ݕग़Մೳ w -PDBUJPOBODIPSͷ஍Ҭ֦େ👉஍Ҭ֦େͰ౦ژ௥Ճ

Slide 19

Slide 19 text

1MBOFBODIPSͷਫ਼౓޲্ w 1MBOFBODIPSʹઃఆͨ͠ΦϒδΣΫτ w ֯౓ɼ෯ͱߴ͞ΛೝࣝՄೳʹ IUUQTEFWFMPQFSBQQMFDPN

Slide 20

Slide 20 text

w ,ʹରԠ👉ϚγϯύϫʔͰॲཧͷޮ཰Խ w ΧϝϥػೳڧԽ👉"34FTTJPOதʹ੩ࢭըΛΩϟϓνϟՄೳʹ)%3 w 1MBOFBODIPSͷਫ਼౓޲্👉ฏ໘ೝࣝ΍ํ޲౳ͷਫ਼౓͕޲্ w ϞʔγϣϯΩϟϓνϟੑೳ޲্👉શମతͳਫ਼౓޲্ࣖ΋ݕग़Մೳ w -PDBUJPOBODIPSͷ஍Ҭ֦େ👉஍Ҭ֦େͰ౦ژ௥Ճ

Slide 21

Slide 21 text

w ,ʹରԠ👉ϚγϯύϫʔͰॲཧͷޮ཰Խ w ΧϝϥػೳڧԽ👉"34FTTJPOதʹ੩ࢭըΛΩϟϓνϟՄೳʹ)%3 w 1MBOFBODIPSͷਫ਼౓޲্👉ฏ໘ೝࣝ΍ํ޲౳ͷਫ਼౓͕޲্ w ϞʔγϣϯΩϟϓνϟੑೳ޲্👉શମతͳਫ਼౓޲্ࣖ΋ݕग़Մೳ w -PDBUJPOBODIPSͷ஍Ҭ֦େ👉஍Ҭ֦େͰ౦ژ௥Ճ

Slide 22

Slide 22 text

-PDBUJPOBODIPSͷ஍Ҭ֦େ w 714ͱ͍͏Ґஔਪఆٕज़ w Ґஔਪఆʹ͸ۭؒͷεΩϟϯσʔλ͕ඞཁ w (14 ηϯαʔ ө૾ʹΑΓ୺຤Ґஔ޲͖ͷਪఆ w ౦ژؚΊෳ਺ͷ౎ࢢ͕௥Ճ͞Εͨ IUUQTEFWFMPQFSBQQMFDPN

Slide 23

Slide 23 text

-PDBUJPOBODIPSͷ஍Ҭ֦େ w 714ͱ͍͏Ґஔਪఆٕज़ w Ґஔਪఆʹ͸ۭؒͷεΩϟϯσʔλ͕ඞཁ w (14 ηϯαʔ ө૾ʹΑΓ୺຤Ґஔ޲͖ͷਪఆ w ౦ژؚΊෳ਺ͷ౎ࢢ͕௥Ճ͞Εͨ IUUQTEFWFMPQFSBQQMFDPN

Slide 24

Slide 24 text

w ,ʹରԠ👉ϚγϯύϫʔͰॲཧͷޮ཰Խ w ΧϝϥػೳڧԽ👉"34FTTJPOதʹ੩ࢭըΛΩϟϓνϟՄೳʹ)%3 w 1MBOFBODIPSͷਫ਼౓޲্👉ฏ໘ೝࣝ΍ํ޲౳ͷਫ਼౓͕޲্ w ϞʔγϣϯΩϟϓνϟੑೳ޲্👉શମతͳਫ਼౓޲্ࣖ΋ݕग़Մೳ w -PDBUJPOBODIPSͷ஍Ҭ֦େ👉஍Ҭ֦େͰ౦ژ௥Ճ

Slide 25

Slide 25 text

w ,ʹରԠ👉ϚγϯύϫʔͰॲཧͷޮ཰Խ w ΧϝϥػೳڧԽ👉"34FTTJPOதʹ੩ࢭըΛΩϟϓνϟՄೳʹ)%3 w 1MBOFBODIPSͷਫ਼౓޲্👉ฏ໘ೝࣝ΍ํ޲౳ͷਫ਼౓͕޲্ w ϞʔγϣϯΩϟϓνϟੑೳ޲্👉શମతͳਫ਼౓޲্ࣖ΋ݕग़Մೳ w -PDBUJPOBODIPSͷ஍Ҭ֦େ👉஍Ҭ֦େͰ౦ژ௥Ճ

Slide 26

Slide 26 text

͓࿳ͼ

Slide 27

Slide 27 text

XBSOJOHMJCPCKD"EZMJCJTCFJOHSFBEGSPNQSPDFTTNFNPSZ 5IJTJOEJDBUFTUIBU--%#DPVMEOPUGJOEUIFPOEJTLTIBSFE DBDIFGPSUIJTEFWJDF5IJTXJMMMJLFMZSFEVDFEFCVHHJOH QFSGPSNBODF

Slide 28

Slide 28 text

࣮ػσόοάΛ͠Α͏ͱ͢Δͱىಈʹd෼͔͔ͬͨΓ "34FTTPO్͕தͰམͪɼσϞΛ༻ҙͰ͖·ͤΜͰͨ͠

Slide 29

Slide 29 text

w SNSd-JCSBSZ%FWFMPQFS9DPEFJ04a%FWJDF4VQQPSU w J04΋CFUBͰ͸ͳ͘ϦϦʔε൛΁෮ݩ w 9DPEFCFUBΛ࡟আ ϦϦʔε൛ͷΈଘࡏ w 👆Ͱͳ͔ͥ໰୊ղܾ

Slide 30

Slide 30 text

0CKFDU$BQUVSF 88%$

Slide 31

Slide 31 text

0CKFDU$BQUVSF w 88%$Ͱ3FBMJUZLJUʹ௥Ճ w ϞϊΛෳ਺໘͔ΒࡱӨ w ߹੒ͯ̏͠%ΦϒδΣΫτΛ࡞੒ w ཁ݅-J%"3౥ࡌ J04 "Ҏ߱ w ..BDPS".%(16 IUUQTEFWFMPQFSBQQMFDPN

Slide 32

Slide 32 text

0CKFDU$BQUVSF "3,JUͱ3FBMJUZ,JU w "3,JUϕʔεͱͳΔϑϨʔϜϫʔΫ w εΩϟϯ΍ΦϒδΣΫτදࣔ w 3FBMJUZ,JUԾ૝ͱݱ࣮ͷ౷߹ w ΦϒδΣΫτͷૢ࡞ w ॲཧɾܭࢉ w %ϨϯμϦϯά IUUQTEFWFMPQFSBQQMFDPN

Slide 33

Slide 33 text

0CKFDU$BQUVSF w "QQMFͷެࣜαϯϓϧ w ಺༰͸ʜࡱӨॲཧΛݟͯΈΔ

Slide 34

Slide 34 text

/// - Tag: WillBeginCapture func photoOutput(_ output: AVCapturePhotoOutput, willBeginCaptureFor resolvedSettings: AVCaptureResolvedPhotoSettings) { maxPhotoProcessingTime = resolvedSettings.photoProcessingTimeRange.start + resolvedSettings.photoProcessingTimeRange.duration } /// - Tag: WillCapturePhoto func photoOutput(_ output: AVCapturePhotoOutput, willCapturePhotoFor resolvedSettings: AVCaptureResolvedPhotoSettings) { willCapturePhotoAnimation() // Retrieve the gravity vector at capture time. if motionManager.isDeviceMotionActive { gravity = motionManager.deviceMotion?.gravity logger.log("Captured gravity vector: \(String(describing: self.gravity))") } guard let maxPhotoProcessingTime = maxPhotoProcessingTime else { return } // Show a spinner if processing time exceeds one second. let oneSecond = CMTime(seconds: 1, preferredTimescale: 1) if maxPhotoProcessingTime > oneSecond { photoProcessingHandler(true) } } ॏྗՃ଎౓Λอଘ

Slide 35

Slide 35 text

/// - Tag: DidFinishProcessingPhoto func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) { photoProcessingHandler(false) if let error = error { print("Error capturing photo: \(error)") photoData = nil } else { // Cache the HEIF representation of the data. photoData = photo } // Cache the depth data, if it exists, as a disparity map. logger.log("DidFinishProcessingPhoto: photo=\(String(describing: photo))") if let depthData = photo.depthData?.converting(toDepthDataType: kCVPixelFormatType_DisparityFloat32), let colorSpace = CGColorSpace(name: CGColorSpace.linearGray) { let depthImage = CIImage( cvImageBuffer: depthData.depthDataMap, options: [ .auxiliaryDisparity: true ] ) depthMapData = context.tiffRepresentation(of: depthImage, format: .Lf, colorSpace: colorSpace, options: [.disparityImage: depthImage]) } else { logger.error("colorSpace .linearGray not available... can't save depth data!") depthMapData = nil } } ਂ౓ϚοϓΛอଘ

Slide 36

Slide 36 text

if let photoOutputConnection = self.photoOutput.connection(with: .video) { photoOutputConnection.videoOrientation = videoPreviewLayerOrientation } var photoSettings = AVCapturePhotoSettings() // Request HEIF photos if supported and enable high-resolution photos. if self.photoOutput.availablePhotoCodecTypes.contains(.hevc) { photoSettings = AVCapturePhotoSettings( format: [AVVideoCodecKey: AVVideoCodecType.hevc]) } // Turn off the flash. The app relies on ambient lighting to avoid specular highlights. if self.videoDeviceInput!.device.isFlashAvailable { photoSettings.flashMode = .off } // Turn on high-resolution, depth data, and quality prioritzation mode. photoSettings.isHighResolutionPhotoEnabled = true photoSettings.isDepthDataDeliveryEnabled = self.photoOutput.isDepthDataDeliveryEnabled photoSettings.photoQualityPrioritization = self.photoQualityPrioritizationMode // Request that the camera embed a depth map into the HEIC output file. photoSettings.embedsDepthDataInPhoto = true // Specify a preview image. if !photoSettings.__availablePreviewPhotoPixelFormatTypes.isEmpty { photoSettings.previewPhotoFormat = [kCVPixelBufferPixelFormatTypeKey: photoSettings.__availablePreviewPhotoPixelFormatTypes.first!, kCVPixelBufferWidthKey: self.previewWidth, kCVPixelBufferHeightKey: self.previewHeight] as [String: Any] logger.log("Found available previewPhotoFormat: \(String(describing: photoSettings.previewPhotoFormat))") } else { logger.warning("Can't find preview photo formats! Not setting...") } // Tell the camera to embed a preview image in the output file. photoSettings.embeddedThumbnailPhotoFormat = [ AVVideoCodecKey: AVVideoCodecType.jpeg, AVVideoWidthKey: self.thumbnailWidth, AVVideoHeightKey: self.thumbnailHeight ] DispatchQueue.main.async { self.isHighQualityMode = photoSettings.isHighResolutionPhotoEnabled && photoSettings.photoQualityPrioritization == .quality } Χϝϥͱը૾ͷઃఆ

Slide 37

Slide 37 text

ࡱӨը૾ ਂ౓Ϛοϓ ॏྗՃ଎౓ 9 : ;

Slide 38

Slide 38 text

let inputFolderUrl = URL(fileURLWithPath: inputFolder, isDirectory: true) let configuration = makeConfigurationFromArguments() logger.log("Using configuration: \(String(describing: configuration))") // Try to create the session, or else exit. var maybeSession: PhotogrammetrySession? = nil do { maybeSession = try PhotogrammetrySession(input: inputFolderUrl, configuration: configuration) logger.log("Successfully created session.") } catch { logger.error("Error creating session: \(String(describing: error))") Foundation.exit(1) } ϑΥϧμΛ౉͚ͩ͢

Slide 39

Slide 39 text

Slide 40

Slide 40 text

let entity = try! ModelEntity.load(named: "test.usdz") let anchorEntity = AnchorEntity(plane: .any) anchorEntity.addChild(entity) arView.scene.addAnchor(anchorEntity) &OUJUZͷ௥Ճ

Slide 41

Slide 41 text

w ෳ਺ͷࣸਅσʔλ͔Β%ΦϒδΣΫτΛ࡞੒ w ղ૾౓΍৘ใ͕ଟ͍΄Ͳਫ਼౓͕ߴ͘ͳΔ w "3,JUͰ,ࡱӨ͕ରԠ͠Ͳ͏มΘͬͨʁ

Slide 42

Slide 42 text

let config = ARWorldTrackingConfiguration() // ୺຤͕ѻ͑Δ࠷ߴը࣭ͰͷϑΥʔϚοτΛฦ͢ if let hiResCaptureVideoFormat = ARWorldTrackingConfiguration.recommendedVideoFormatForHighResolutionFrameCapturing { config.videoFormat = hiResCaptureVideoFormat } // 4kը࣭͕ѻ͑Δ৔߹ͷΈϑΥʔϚοτΛฦ͢ if let res4kCaptureVideoFormat = ARWorldTrackingConfiguration.recommendedVideoFormatFor4KResolution { config.videoFormat = res4kCaptureVideoFormat } "34FTTJPOͰͷө૾ϑΥʔϚοτ

Slide 43

Slide 43 text

arView.session.captureHighResolutionFrame { arFrame, error in guard let imageBuffer = arFrame?.capturedImage else { return } let ciImage = CIImage(cvPixelBuffer: imageBuffer) let w = CGFloat(CVPixelBufferGetWidth(imageBuffer)) let h = CGFloat(CVPixelBufferGetHeight(imageBuffer)) let rect:CGRect = CGRect.init(x: 0, y: 0, width: w, height: h) let context = CIContext.init() guard let cgImage = context.createCGImage(ciImage, from: rect) else { return } let uiimage = UIImage(cgImage: cgImage).rotated(by: 90.0 * CGFloat.pi / 180) UIImageWriteToSavedPhotosAlbum(uiimage, self, nil, nil) } "34FTTJPOதͷϑϨʔϜऔಘ "34FTTJPO͕ઃఆΛΑ͠ͳʹͯ͘͠Εͯ "3,JUͷϝιου͸Θ͔Γ΍͍͢

Slide 44

Slide 44 text

.PUJPO$BQUVSF 88%$

Slide 45

Slide 45 text

.PUJPO$BQUVSF w 88%$"3,JUͰൃද͞Εͨػೳ w ࣍ݩը૾ͱ-J%"3εΩϟφΛ༻͍ͨਂ౓৘ใ͔Βͷ࢟੎ਪఆ w ਪఆ͞Εͨؔઅ౳ͷ৘ใΛ"3"ODIPS͔ΒऔಘͰ͖Δɽ

Slide 46

Slide 46 text

"3"ODIPS w Ծ૝ۭ͔ؒΒݟͨݱ࣮ੈքʹ͓͚ΔΦϒδΣΫτͷҐஔ΍޲͖ w ϫʔϧυ࠲ඪܥʹ͓͚Δ࠲ඪϙΠϯτʹͳΔ

Slide 47

Slide 47 text

"3"ODIPSͷछྨ w "31MBOF"ODIPSݱ࣮ۭ͔ؒΒݕग़͞Εͨฏ໘ͷҐஔ΍ܗঢ়৘ใ w "3*NBHF"ODIPS"3ϚʔΧʔ౳༧Ί༻ҙ͞Εͨը૾ͷ৘ใ w "30CKFDU"ODIPSϙϦΰϯϝογϡ͔Βݕग़ͨ͠෺ཧతͳ৘ใ w "3#PEZ"ODIPSਓͷؔઅͷ৘ใ w "3'BDF"ODIPSਓͷإͷύʔπ΍޲͖౳ͷ৘ใ w "3.FTI"ODIPS "3(FP"ODIPS "3"QQ$MJQ$PEF"ODIPSʜ

Slide 48

Slide 48 text

let entity = try! ModelEntity.load(named: "test.usdz") let anchorEntity = AnchorEntity(plane: .any) anchorEntity.addChild(entity) arView.scene.addAnchor(anchorEntity) &OUJUZͷ௥Ճ

Slide 49

Slide 49 text

"34$/7JFX "3,JU4DFOF,JU "34FTTJPJO "3'SBNF "3"ODIPS "37JFX 3FBMJUZ,JU 4DFOF "ODIPS&OUJUZ .PEFM&OUJUZ "ODIPS&OUJUZ &OUJUZ &OUJUZ $PO fi HVSBUJPO "3'SBNF "3"ODIPS

Slide 50

Slide 50 text

"3,JU3FBMJUZ,JU "37JFX 4DFOF "ODIPS&OUJUZ .PEFM&OUJUZ "ODIPS&OUJUZ &OUJUZ &OUJUZ "34FTTJPJO $PO fi HVSBUJPO

Slide 51

Slide 51 text

.PUJPO$BQUVSF w Ͳ͏࣮ߦ͢Δͷ͔ w ͜Ε΋ެࣜͰ΋༗Γl$BQUVSJOH#PEZ.PUJPOJO%z w ద౰ͳϞσϧͷ༻ҙ w "3#PEZ5SBDLJOH$PO fi HVSBUJPOͰ"34FTTJPOΛىಈ w Ϟσϧϩʔυ

Slide 52

Slide 52 text

Ϟσϧͷ༻ҙ

Slide 53

Slide 53 text

Slide 54

Slide 54 text

Slide 55

Slide 55 text

Slide 56

Slide 56 text

let configuration = ARBodyTrackingConfiguration() arView.session.run(configuration) arView.scene.addAnchor(characterAnchor) if let entity = try? Entity.loadBodyTracked(named: "character/robot") { self.character = entity } Ϟσϧͷϩʔυ 4DFOFʹϞσϧͷ"ODIPSΛઃஔ Ϟσϧͷ#PEZ5SBDLFE&OUJUZͷ༻ҙ

Slide 57

Slide 57 text

func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) { for anchor in anchors { guard let bodyAnchor = anchor as? ARBodyAnchor else { continue } let bodyPosition = simd_make_float3(bodyAnchor.transform.columns.3) characterAnchor.position = bodyPosition + characterOffset characterAnchor.orientation = Transform(matrix: bodyAnchor.transform).rotation if let character = character, character.parent == nil { characterAnchor.addChild(character) } } } Ϟσϧͱ"3#PEZ"ODIPSͷ઀ଓ ϞσϧଆͰKPJOU/BNF΋߹Θ͍ͤͯΔͷͰɼ"ODIPSʹॏͶΔ͚ͩ

Slide 58

Slide 58 text

Slide 59

Slide 59 text

Slide 60

Slide 60 text

͓·͚

Slide 61

Slide 61 text

w ϐʔϓϧΦΫϧʔδϣϯ w 3PPN1MBO

Slide 62

Slide 62 text

ϐʔϓϧΦΫϧʔδϣϯ w ਂ౓৘ใ͔Βਓ෺ͷલޙؔ܎Λೝࣝ w "38PSME5SBDLJOH$PO fi HVSBUJPO w DPO fi HGSBNF4FNBOUJDT<QFSTPO4FHNFOUBUJPO8JUI%FQUI>

Slide 63

Slide 63 text

let cameraAnchor = AnchorEntity(.camera) self.scene.addAnchor(cameraAnchor) cameraAnchor.addChild(background) background.position = [0,0,-5] എܠΛۭؒͷNޙΖʹઃஔ ਓ෺ͷલޙҐஔΛೝ͍ࣝͯ͠ΔͷͰɼ ਓ͕̑NޙΖʹ͕͞Δͱਓ͕ӅΕΔ

Slide 64

Slide 64 text

w ;PPNͷഎܠ͸كʹޙΖͷՈ۩͕ࣸΓࠐΜͩΓ͢Δ w ਓ෺ͷલޙҐஔΛೝࣝͰ͖Δͨͩը૾͔Βͷਓ෺நग़Ͱ͸ͳ͍ w ࠓճͷ88%$ͰJ1IPOFΛ΢ΣϒΧϝϥʹ͢ΔτϐοΫ͋Γ w Ξοϓσʔτʹظ଴

Slide 65

Slide 65 text

3PPN1MBO w "3,JUΛར༻ͯ͠Χϝϥͱ-J%"3Λར༻ͨ͠ϑϩΞϚοϐϯά͕Մೳ w ڪΖ͘͠؆୯ͳίʔυͰ෦԰ͷ%؃औΓਤ͕࡞੒Մೳ w "QQMFͷαϯϓϧ͕ར༻Մೳ w l$SFBUFB%NPEFMPGBOJOUFSJPSSPPNCZHVJEJOHUIFVTFSUISPVHI BO"3FYQFSJFODFz

Slide 66

Slide 66 text

let roomCaptureView = RoomCaptureView(frame: view.frame) view.addSubview(roomCaptureView) roomCaptureView.captureSession.run(configuration: .init()) roomCaptureView.captureSession.stop() %FMFHBUFͰ׬ྃ࣌ʹ෦԰ͷΩϟϓνϟʔσʔλ͕ड͚औΕΔ

Slide 67

Slide 67 text

Slide 68

Slide 68 text

"3,JU·ͱΊ w ػೳ͕ॆ࣮͠؆୯ͳࣄͰ͋Ε͹༻ҙʹࢼͤΔ؀ڥʹͳ͖ͬͯͨ w 75VCFS౳J1IPOFΛ࢖ͬͯΩϟϥΫλʔϞσϧΛಈ͔ͤΔ෯͕޿͕ͬͨ w ͨͩࢼ͚ͩ͢Ͱ΋ਫ਼౓͕ߴ͍ͷͰ݁ߏΫΦϦςΟߴ͘ײָ͍ͯ͡͠ ͥͻ"3,JUΛ৮ͬͨ͜ͱແ͍ํ͸৮ΕͯΈ͍ͯͩ͘͞ʂ

Slide 69

Slide 69 text

5IBOLT

Slide 70

Slide 70 text