스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
ARKit 6 소개
ARKit 6를 통해 더 세련되고 강력한 증강 현실 앱을 빌드하는 방법을 확인하세요. 4K HDR로 렌더링되는 AR 경험을 만드는 방법을 살펴보고 앱을 위한 카메라 설정 맞춤화에 대해 안내합니다. 또한 ARKit 세션에서 고해상도 정지 이미지를 내보내고, 평면 추정 및 모션 캡처를 활용하며, 새로운 지역에 AR 위치 앵커를 추가하는 방법을 공유합니다.
리소스
- ARKit
- Explore the ARKit Developer Forums
- Human Interface Guidelines: Augmented reality
- Tracking Geographic Locations in AR
관련 비디오
Tech Talks
WWDC22
WWDC21
-
다운로드
♪ ♪ 안녕하세요 Christian입니다 저는 ARKit 팀의 엔지니어이며 Discover ARKit 6 세션에 여러분을 환영합니다 증강 현실 프레임워크의 최신 기술을 활용하는 방법을 배우게 됩니다 여러분이 지난 몇 년간 ARKit을 사용하여 제작한 것을 보게 되어 기쁩니다 인테리어 디자인 여행, 가상 전시회 게임, 그 외에도 여러 멋진 앱이 있었습니다 우리 팀은 피드백에 세심한 주의를 기울였으며 많은 피드백을 ARKit 6에 통합했습니다 한번 봅시다 가장 높은 이미지 해상도로 카메라 스트림을 실행할 수 있는 새로운 4K 동영상 모드를 소개합니다 그런 다음 동영상 배경을 더 잘 제어할 수 있도록 하는 추가 카메라 개선 사항 몇 가지를 이야기하겠습니다 또한 평면 앵커의 동작에 대한 업데이트 Motion Capture API 추가 마지막으로 위치 앵커가 지원될 새로운 도시를 알려드립니다
4K 동영상부터 시작하겠습니다 지난 몇 년 간 고해상도 콘텐츠의 수요가 굉장히 높아지고 있습니다 특히 영화 제작을 위해 증강 현실의 힘을 활용하는 앱은 더 많은 픽셀을 필요로 합니다 ARKit에서 이미지를 캡처하고 처리하는 방법을 보여드리겠습니다 iPhone 13 Pro의 카메라 모듈입니다 열면 설정을 볼 수 있습니다 와이드 및 울트라와이드 카메라에 대해 이야기해 보겠습니다 이 두 카메라는 세계 추적 모션 캡처, 사람 분할 같은 다양한 컴퓨터 비전 작업에 사용할 수 있습니다 와이드 카메라는 렌더링 배경을 위한 이미지를 전달하기 때문에 우리 마음속에서 특별합니다 렌더링용 이미지 처리 방식을 이해할 수 있도록 센서 수준으로 확대하겠습니다
ARKit용으로 이미지를 캡처할 때 이미지 센서의 많은 부분이 사용됩니다 이 특정 모델에서는 정확히 3840x2880 픽셀 영역입니다 캡처 후 ‘비닝’이라는 프로세스를 사용합니다 다음과 같이 작동합니다 비닝은 2x2 픽셀 영역을 취하고 픽셀 값의 평균을 낸 후 단일 픽셀을 다시 씁니다 여기에는 두 가지 중요한 이점이 있습니다 먼저 이미지 크기가 반으로 감소합니다 이 경우 1920x1440 픽셀로 축소됩니다 결과적으로 각 프레임은 훨씬 적은 메모리와 처리 능력을 소비합니다 이를 통해 장치는 초당 최대 60프레임으로 카메라를 실행할 수 있고 렌더링 리소스를 확보합니다 둘째, 이 프로세스는 저조도 환경에서 이점을 제공합니다 여기서 픽셀 값의 평균화는 센서 노이즈의 영향을 줄입니다 대략 17밀리초마다 HD 해상도의 이미지를 제공하는 카메라 스트림을 갖게 됩니다 ARKit은 다양한 컴퓨터 비전 작업에 현재 프레임을 사용한 후 렌더링을 위해 표시합니다 자체 금속 렌더러를 작성한다면 ARSession의 currentFrame.capturedImage를 통해 액세스할 수 있습니다
RealityKit을 사용하는 경우 이미지를 배경으로 사용할 수 있도록 자동으로 추가 처리됩니다 기기에서 너비가 2532픽셀에 일치하도록 조정되고 디스플레이 종횡비에 맞게 잘립니다 RealityKit은 가상 콘텐츠를 렌더링하고 합성합니다 이 해적선처럼요 프레임 위에 합성해 최종 결과를 화면에 표시합니다 이제 최신 하드웨어의 힘으로 ARKit에서 풀 4K 동영상 모드를 활성화했습니다 이제 앱에서 비닝을 건너뛰고 직접 액세스 해 풀 4K 고해상도 이미지를 활용할 수 있습니다 4K 모드에선 3840x2160 픽셀의 이미지 영역이 사용되며 초당 30프레임으로 동영상을 캡처할 수 있습니다 이런 변경 사항을 제외하면 이전과 동일하게 작동합니다 RealityKit을 사용하면 크기 조정, 자르기 렌더링을 알아서 해줍니다
새 4K 모드를 간단하게 활성화할 수 있습니다 코드에서 어떻게 보이는지 봅시다
'ARConfiguration'에 새로운 편의 기능이 추가되었습니다 'recommendedVideoFormatFor4KResolution'은 지원되는 장치에서 4K 동영상 형식을 반환합니다 장치나 구성이 4K를 지원하지 않으면 이 함수는 nil을 반환합니다 그러면 이 동영상 형식을 구성에 할당한 다음 조정된 구성으로 세션을 실행할 수 있습니다
4K 동영상 모드는 iPhone 11 이상 및 M1 칩이 탑재된 iPad Pro에서 지원됩니다 해상도는 초당 30프레임에서 3840x2160 픽셀입니다 화면 비율은 16:9입니다 iPad의 경우 전체 화면을 위해 이미지 측면이 잘리고 최종 렌더링이 확대되어 보일 수 있습니다
ARKit을 사용할 때 특히 새 4K 해상도에서 최적의 결과를 얻으려면 모범 사례를 따라야 합니다 ARFrame을 너무 오래 잡고 있지 마십시오 이렇게 하면 시스템이 메모리를 확보하지 못하여 ARKit이 새 프레임을 표시하지 못할 수 있습니다 이건 렌더링 프레임 저하로 알 수 있습니다 AR 카메라의 추적 상태가 제한적으로 돌아갈 수 있습니다 어느 때건 너무 많은 이미지를 유지하지 않도록 콘솔 경고를 확인하세요 또 새 4K 동영상이 실제로 앱에 적합한지 고려하세요 동영상, 영화 제작 가상 프로덕션 앱과 같이 고해상도 동영상의 이점을 활용하는 앱은 좋은 후보입니다 고해상도 이미지를 처리하려면 추가 시스템 리소스가 필요하므로 높은 재생 빈도에 의존하는 게임 및 기타 앱의 경우 여전히 초당 60프레임의 풀 HD 동영상을 쓰는 것이 좋습니다
새로운 4K 모드 외에도 카메라를 더 잘 제어하기 위한 몇 가지 추가 개선 사항이 있습니다 먼저 고해상도 배경 사진 API를 소개하면서 새로운 HDR 모드의 활성 방법을 보여드리겠습니다 또한 보다 세분화된 제어를 위해 기본 AVCaptureDevice에 액세스하는 방법과 ARKit에서 EXIF 태그를 읽는 방법을 보여드리겠습니다 새 고해상도 배경 사진 API를 살펴보겠습니다
ARSession을 실행하는 동안에도 평소와 같이 동영상 스트림에 액세스할 수 있습니다 또한 ARKit을 사용하면 백그라운드에서 단일 사진 캡처를 요청할 수 있습니다 동영상 스트림이 그동안 중단 없이 실행됩니다 이러한 단일 사진 프레임은 카메라 센서를 최대한 활용합니다 iPhone 13에서는 와이드 카메라의 12 메가픽셀이죠 WWDC를 준비할 때 ARKit에서 사진 앱에 대한 재미있는 아이디어가 있었습니다 새 API가 무엇을 만드는 데 도움이 되는지 보여주는 거였죠 이 예에서는 유명한 해적 깃발이 등장한 2016년 4월 1일로 시간을 되돌립니다 Apple Infinite Loop Campus에 깃발이 휘날리고 있었죠 원본 사진가인 토미에게 6년 전에 그 사진을 정확히 어디에서 촬영했는지 물었습니다
그 좌표를 기반으로 토미가 2016년 4월에 서 있던 정확히 같은 지점으로 안내하는 위치 앵커를 만들었고 큰 파란색 점으로 표시했죠 해당 지점에 도달하면 초점 사각형을 표시하여 완벽한 사진의 구도를 잡도록 돕습니다 마지막으로 앱에서 화면을 탭해 사진을 찍을 수 있습니다 ARKit 세션이 실행되는 동안 기본 카메라 해상도로 촬영할 수 있습니다 다른 AVCapture 세션을 실행할 필요가 없죠 AR과 사진을 결합하는 여러분의 아이디어가 기대됩니다 이 API에서 큰 이점을 얻을 수 있는 또 사례는 개체 캡처로 3D 모델을 만드는 것입니다 개체 캡처는 이 운동화와 같은 실제 개체의 사진을 찍습니다 최신 사진 측량 알고리즘으로 AR 앱에서 배포할 수 있는 3D 모델로 변환합니다 ARKit을 사용하면 물리적 개체 위에 3D UI를 오버레이하고 더 나은 캡처 안내를 제공할 수 있습니다 이제 새로운 고해상도 배경 이미지 API를 통해 물체의 고해상도 사진을 촬영하고 더욱 사실적인 3D 모델을 만들 수 있습니다 전 사진 측량을 정말 좋아합니다 거기 관련된 올해 세션을 적극 추천합니다 ‘세상을 증강 현실로 가져오기’ 세션입니다 코드로 고해상도 사진 캡처를 활성화하는 법을 보여드리죠 먼저 hiResCapture를 지원하는 동영상 형식을 확인합니다 편의 함수를 사용하면 됩니다 recommendedVideoFormatForHighResolutionFrameCapturing 입니다 형식이 지원되는지 확인한 후 새 동영상 형식을 설정하고 세션을 실행할 수 있습니다 또한 고해상도 이미지를 캡처할 시기를 ARKit에 알려야 합니다 이전 예에서 사진 캡처는 화면을 탭하면 트리거됩니다 애플리케이션에서 다양한 이벤트가 고해상도 프레임 캡처를 트리거하게 하고 싶을 수 있습니다 사용 사례에 따라 다릅니다 ARSession에는 captureHighResolutionFrame이란 새 기능이 있습니다 이 함수를 호출하면 고해상도 이미지의 대역 외 캡처가 트리거됩니다 완료 핸들러에서 고해상도 이미지가 포함된 ARFrame과 다른 프레임 속성에 비동기적으로 액세스할 수 있습니다 콘텐츠에 액세스하기 전에 프레임 캡처가 성공했는지 확인해야 합니다 이 예에서는 프레임을 디스크에 저장합니다 또한 앞서 언급한 이미지 보존에 대한 모범 사례를 염두에 두세요 이러한 이미지는 이미지 센서의 전체 해상도를 사용하기 때문입니다 다음으로 HDR에 대해 알아보겠습니다 High Dynamic Range는 더 넓은 범위의 색상을 캡처해 디스플레이에 매핑합니다 고대비 환경에서 가장 잘 보입니다 여기 제 뒤뜰이 좋은 예입니다 아주 어두운 영역과 밝은 영역이 같이 있습니다 예를 들어 나무 울타리는 어둡고 하늘의 구름 같은 영역은 아주 밝습니다 HDR 모드를 켜면 오른쪽과 같이 해당 부분의 디테일을 볼 수 있습니다 구름의 솜털 같은 것이 HDR에서 훨씬 더 잘 보존됩니다 HDR이 코드에서 어떻게 켜져 있는지 봅시다 isVideoHDRSupported 속성을 통해 모든 HDR 지원 동영상 형식을 쿼리할 수 있습니다 현재는 비닝된 동영상 형식만 HDR을 지원합니다 HDR이 지원되는 경우 구성에서 videoHDRAllowed를 true로 설정하고 해당 구성으로 세션을 실행합니다 HDR을 켜면 성능에 영향을 미치므로 필요할 때만 사용해야 합니다 노출이나 화이트 밸런스 같은 설정을 수동으로 제어하려는 경우 이제 편리하게 AVCaptureDevice에 직접 액세스하고 설정을 변경할 수 있습니다 이 코드 예제는 구성에서 ConfigurableCaptureDeviceForPrimaryCamera를 호출해서 기본 AVCaptureDevice에 액세스를 얻습니다 이 기능으로 ARKit 앱에 대한 사용자 정의 모양을 만들 수 있지만 이미지는 렌더링 배경으로만 사용되는 것이 아니라 ARKit에서 장면을 분석하는 데에도 적극 사용된다는 점을 명심하세요 따라서 강한 과다 노출과 같은 변경 사항은 ARKit의 출력 품질에 부정적 영향을 미칠 수 있습니다 포커스 이벤트 트리거와 같은 고급 작업을 수행할 수도 있습니다 AVCaptureSessions의 구성 방법에 대한 자세한 정보는 developer.apple.com에서 AVCapture 문서를 참조하세요 마지막으로 ARKit은 EXIF 태그를 앱에 노출합니다 이제 모든 ARFrame에서 사용할 수 있습니다 EXIF 태그에는 화이트 밸런스나 노출, 기타 설정 정보가 포함되어 사후 처리에 유용할 수 있습니다 이로써 이미지 캡처 파이프라인의 모든 업데이트를 소개했습니다 이제 평면 앵커의 변경 사항을 살펴보겠습니다
ARKit 첫 버전부터 인기 있는 기능이었습니다 많은 분들이 평면 앵커와 기본 평면 기하를 보다 명확하게 분리해야 한다고 주장하셨습니다 그래서 평면 앵커의 동작과 평면 기하에 대한 업데이트를 발표합니다 이건 iOS 15의 일반적인 평면 앵커입니다 AR 세션 시작 시 평면을 이 좋은 질감의 수첩에 맞춥니다 세션 실행 중 뷰에 들어오는 테이블의 새 부분을 고려해 평면이 점진적으로 업데이트됩니다 평면 기하가 업데이트될 때마다 앵커 회전도 업데이트되면서 평면의 새로운 방향을 반영합니다 iOS 16에서는 평면 앵커와 평면 기하를 보다 깔끔하게 분리할 수 있습니다
평면 앵커 및 기하 업데이트가 이제 완전히 분리되었습니다 테이블 전체가 뷰에 들어오면서 평면이 확장되고 업데이트되지만 앵커 회전 자체는 일정하게 유지됩니다
왼쪽의 이전 동작과 대조하면 iOS 16의 평면은 앵커가 그대로 유지되었음을 알 수 있습니다 전체 AR 세션 동안 동일한 방향으로 수첩에 정렬됩니다
평면 기하에 대한 모든 정보는 이제 ARPlaneExtent라는 클래스에 포함됩니다 회전 업데이트는 평면 앵커 회전으로 표현되지 않습니다 대신 ARPlaneExtent에 회전 각도를 나타내는 새 속성인 rotationOnYAxis가 포함되어 있습니다 이 새로운 속성 외에도 평면은 너비와 높이, 그리고 PlaneAnchor의 중심 좌표로 완전히 정의됩니다 이 평면 시각화를 코딩하는 법을 보여드리겠습니다
먼저 지정된 너비와 높이에 따라 평면 메쉬에 엔터티를 생성합니다 그런 다음 y축의 회전에 따라 엔터티가 변환되도록 설정하고 center 속성 값으로 오프셋합니다 평면이 업데이트될 때마다 너비, 높이, 중심 좌표와 새 rotationOnYAxis가 변경될 수 있다는 점을 고려하세요 이 새로운 동작을 쓰려면 Xcode 설정에서 배포 대상을 iOS 16으로 설정하세요 다음 업데이트는 MotionCapture입니다 머신 러닝 설계자들이 개선을 위해 열심히 일했습니다 2D 뼈대와 3D 관절이 대폭적으로 업데이트됐습니다 2D 뼈대는 새 관절 2개를 추적하게 됐습니다 왼쪽 귀와 오른쪽 귀입니다 또한 포즈 감지 기능을 전반적으로 개선했습니다 iPhone 12 이상과 M1 칩이 탑재된 최신 iPad Pro 및 iPad Air 모델에서는 빨간색으로 표시된 3D 뼈대가 개선되었습니다 지터가 줄어들고 전반적으로 시간적 일관성이 향상됩니다 사람의 일부가 가려지거나 카메라에 가까이 다가가도 추적이 더 안정적입니다 개선된 MotionCapture를 사용하려면 Xcode 설정에서 배포 대상을 iOS 16으로 설정하세요 다음으로 LocationAnchors가 지원될 새로운 도시와 국가도 발표하려 합니다 참고로 Apple Maps는 LocationAnchor API로 보행자에게 보행 지침을 제공합니다 이 예에서 런던의 거리를 안내하고 있습니다 LocationAnchors의 힘 덕분입니다 LocationAnchors는 이미 미국 여러 도시에서 사용 중이며 영국 런던에서도 사용할 수 있습니다 오늘부터는 캐나다 밴쿠버 토론토, 몬트리올에서도 사용할 수 있습니다 또한 싱가포르와 도쿄를 포함한 일본의 대도시 7개에서도 제공할 예정입니다 호주 멜버른과 시드니도 마찬가지입니다 올해 말에는 뉴질랜드 오클랜드 이스라엘 텔아비브와 프랑스 파리에도 제공하려 합니다 특정 좌표에서 LocationAnchors가 지원되는지 알고 싶다면 ARGeoTrackingConfiguration의 checkAvailability 메소드를 사용하면 됩니다 지금까지 ARKit 6에 대한 모든 업데이트였습니다 요약하자면 새 4K 동영상 형식으로 ARKit를 실행하는 법을 제시했습니다 고급 사용 사례의 경우 HDR을 활성화하거나 AVCaptureDevice를 수동 제어하는 방법을 시연했습니다 더 많은 픽셀이 필요한 애플리케이션의 경우 ARKit 세션에서 고해상도 사진을 얻는 방법을 시연했습니다 Plane Anchors의 새로운 동작에 대해 얘기하고 새로운 귀 관절을 소개했습니다 MotionCapture의 기타 개선 사항도 얘기했습니다 또 올해 후반에 LocationAnchors를 사용할 수 있는 국가에 대해서도 말씀드렸습니다
경청해 주셔서 감사합니다 WWDC 2022 잘 보내세요!
-
-
5:00 - HighRes Capturing
if let hiResCaptureVideoFormat = ARWorldTrackingConfiguration.recommendedVideoFormatForHighResolutionFrameCapturing { // Assign the video format that supports hi-res capturing. config.videoFormat = hiResCaptureVideoFormat } // Run the session. session.run(config)
-
10:55 - highRes background photos
session.captureHighResolutionFrame { (frame, error) in if let frame = frame { saveHiResImage(frame.capturedImage) } }
-
12:00 - HDR support
if (config.videoFormat.isVideoHDRSupported) { config.videoHDRAllowed = true } session.run(config)
-
12:35 - AVCapture Session
if let device = ARWorldTrackingConfiguration.configurableCaptureDeviceForPrimaryCamera { do { try device.lockForConfiguration() // configure AVCaptureDevice settings … device.unlockForConfiguration() } catch { // error handling … } }
-
16:00 - plane anchors
// Create a model entity sized to the plane's extent. let planeEntity = ModelEntity( mesh: .generatePlane ( width: planeExtent.width, depth: planeExtent.height), materials: [material]) // Orient the entity. planeEntity.transform = Transform( pitch: 0, yaw: planeExtent.rotationOnYAxis, roll: 0) // Center the entity on the plane. planeEntity.transform.translation = planeAnchor.center
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.