스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
USD 도구 및 렌더링 살펴보기
USD(Universal Scene Description) 자산을 생성, 검사 및 변환할 수 있는 툴링의 향상된 최신 기능을 확인하세요. 이러한 도구의 업데이트에 대해 알아보고 여러분의 콘텐츠 제작 파이프라인에 통합하는 데 도움을 드립니다. 또한 USD Hydra 렌더링의 강력한 기능을 알아보고, 나만의 앱에 통합하는 방법을 보여드립니다. USD에 대한 소개는 WWDC22의 ‘Understand USD fundamentals(USD 기초 이해)'를 시청하시기 바랍니다.
리소스
- ASWF USD Working Group
- Creating a 3D application with Hydra rendering
- Introduction to Universal Scene Description (USD)
- USDZ schemas for AR
관련 비디오
WWDC22
WWDC21
- Create 3D models with Object Capture
- Create 3D workflows with USD
- Explore advanced rendering with RealityKit 2
WWDC20
-
다운로드
♪ ♪
안녕하세요 올해의 WWDC에 오신 것을 환영합니다 제 이름은 Stella입니다 그리고 저는 Alex입니다 Stella와 저는 Apple에서 USD의 많은 부분에서 함께 일합니다 오늘 우리는 USD 도구 및 렌더링 업데이트를 살펴보겠습니다 Stella, 부탁해요
콘텐츠 제작 도구에 대한 통합이 증가하고 심화됨에 따라 USD를 중심으로 게임, AR, 영화 및 웹용 렌더링에 필요한 더 많은 방법을 제공하는 기반 기술을 USD라 합니다 오늘 우리는 에코시스템 내 두 부분인 도구와 렌더링에 초점을 맞출 것입니다 USD 도구 업데이트부터 알아보도록 하죠
그 다음, 새로운 조명을 장착한 AR Quick Look을 활용해 자산을 더욱 돋보이는 방법을 안내하고 USD 렌더링에 대해 자세히 살펴본 후 마지막으로 Hydra를 통합하는 방법을 보여 드리겠습니다
Apple 에코시스템 내의 USD 도구 먼저 시작하죠
USDZTools, Reality Converter에 대해 알아본 후 USDZ 콘텐츠를 만드는 데 도움이 되는 추가 도구와 프레임워크에 대해 설명합니다
USDZ 도구는 USDZ 파일을 생성, 검증 및 검사하는 데 도움이 되는 필수 명령줄 USD Python 도구가 포함된 패키지입니다 패키지에는 다른 주요 3D 파일 형식에서 USDZ 파일을 생성하는 usdzconvert라는 변환기도 포함되어 있습니다
Python 스크립트는 자동화 및 일괄 처리에 필요한 강력한 도구를 제공합니다 또한 USD를 탐색하고 API 사용 방법을 배울 수 있는 좋은 방법입니다 올해 우리는 Python 3 및 Apple Silicon 지원을 제공합니다 또한 USD 버전을 업그레이드하여 새로운 USD 기능 및 성능 개선 사항에 간편하게 액세스할 수 있습니다
게다가 usdzconvert에 멋진 새로운 기능도 추가됐습니다 이제 useObjMtl 플래그를 사용하여 자료가 포함된 OBJ 파일을 USDZ로 변환할 수 있습니다 또한 GLTF 파일의 점과 선에 대한 지원과 FBX 파일의 애니메이션에 대한 장면 시간에 필요한 지원을 추가했습니다 사용자 정의된 변환을 위해 모든 usdzconvert 옵션 및 방식을 표시하려면 터미널에 "usdzconvert --help"를 입력하기만 하면 됩니다
이것은 저작권 정보를 추가하거나 3D 모델에 대해 diffuseColor 또는 normalMap을 제공하는 등
usdzconvert와 함께 사용할 수 있는 모든 옵션을 보여줍니다 명령줄을 사용하는 것보다 워크플로에 대한 편집기를
선호하는 경우, USDZ 도구를 사용하여 빌드되고 usdzconvert와 동일한 기능을 제공하지만 편집기 창에서 쉽게 변환할 수 있는 Reality Converter도 있습니다 MacOS에서 USD 콘텐츠를 변환, 보기 및 사용자 지정하는 것이 쉬워집니다
변환된 USDZ 결과를 보려면 OBJ, GLTF 및 FBX와 같은 일반적인 3D 파일 형식을 가져오기만 하면 됩니다 올해에는 워크플로를 간소화하기 위해 UI도 개선했습니다 텍스처를 선택하여 자세한 정보를 볼 수 있습니다
자신만의 텍스처로 재질 속성을 사용자 정의할 수 있습니다
저작권 추가 또는 파일 메타데이터 편집,
클래식 또는 새 조명 선택에 관한 방법은 세션의 뒷부분에서 다루도록 하겠습니다
내장된 옵션을 사용하여 다양한 조명 조건에서 USDZ 개체를 미리 보고 그에 따라 노출을 조정할 수도 있습니다
자산에는 USDZ 파일을 내보내는 동안 텍스처 품질을 선택할 수 있는 새로운 기능이 추가되었습니다 기본적으로, 텍스처는 압축되지 않은 원래 크기로 보내집니다 그러나 USDZ 파일 크기를 줄이고 싶다면 이제 텍스터를 JPEG 형식으로 압축할 수 있는 옵션이 있습니다
이 예시에는 개체 캡처를 사용하여 이 체스 말을
고해상도로 스캔했습니다 메쉬 디테일을 잃지 않고 파일 크기를 줄이기 위해 RealityConverter를 사용하여 압축된 텍스처가 있는 모델을 내보냈습니다 시각적 차이는 거의 눈에 띄지 않으며 결과 파일 크기가 80%나 줄었네요
더 흥미로운 소식은 이제 RealityConverter에서 USD 자산 문제를 자동으로 해결할 수 있다는 점입니다 일치하지 않는 속성 및 연결 유형을 수정하고 여러 최상위 프림과 누락된 기본 프림이 있는 단계를 수정한 뒤 더 이상 사용되지 않는 속성을 업데이트하고 누락된 단계 메타데이터를 추가합니다 범용 바이너리 지원도 추가되어 이제 Apple Silicon에서 기본적으로 실행됩니다
이제 처음부터 3D 모델을 만들고 싶다면 어떻게 하시겠습니까?
작년에 USDZ 자산을 생성하는 혁신적인 방법을 제공하는 macOS에서 RealityKit API로 Object Capture를 출시했습니다 그런 다음 Reality Composer를 사용하여 여러 자산이 있는 장면을 구성할 수 있습니다 올해는 방의 파라미터 3D 스캔을 생성할 수 있는 RoomPlan API를 제공합니다 이 3개의 세션이 많은 도움이 될 것입니다 이러한 기술을 함께 사용하면 그 어느 때보다 쉽게 몰입형 AR 경험을 만들 수 있습니다 오늘 다룬 이 모든 도구는 Apple 개발자 웹 사이트의 AR Creation Tools 페이지에서 지금 다운로드할 수 있습니다 꼭 확인해 보세요! 다음은 AR Quick Look의 새로운 조명에 대해 살펴보겠습니다 AR Quick Look은 테이블, 벽 또는 바닥과 같은 물리적 공간에 3D USDZ 개체를 배치하고 간단한 터치 제스처로 상호 작용할 수 있도록 하는 iOS에 내장된 시스템 전체 AR 뷰어입니다 Reality Composer로 인터랙티브한 장면을 만들어 iMessage, Mail, Notes 등에서 다른 사람들과 공유할 수 있는 USDZ 파일로 저장할 수도 있습니다 보다 사실적인 AR Quick Look 렌더링을 제공하기 위해 끊임없이 노력하고 있으며 올해에는 향상된 대비와 개선된 모양 정의를 통해 더 밝은 조명으로 자산을 더욱 돋보이게 하는 향상된 AR Quick Look을 선보입니다
클래식 조명과 새로운 조명이 있는 개체 모드를 사용중인 AirPods Pro의 예시입니다 AirPods Pro는 두 조명 조건 모두에서 멋지게 보이며 새로운 조명 옵션이 더 밝은 색상, 더 높은 대비 및 더 많은 하이라이트를 제공한다는 것을 알 수 있습니다
이제 AirPods Max를 책상 위에 올려놓고 새로운 조명과 함께 AR 모드로 감상해 보죠 놀랍지 않나요?
그러면 새 조명을 자산에 어떻게 적용해야 할까요? 정말 간단합니다 USDZ 파일에서 새로운 preferredIblVersion 메타데이터를 설정하여 콘텐츠에 가장 적합한 조명을 선택하기만 하면 됩니다
여기에서 preferredIblVersion의 값을 2로 설정했어요 이는 AR Quick Look이 새로운 조명 시스템을 사용함을 나타냅니다
이것을 더 자세히 살펴보죠 PreferredIBLVersion 메타데이터는 0,1, 2의 값을 가질 수 있습니다
PreferredIblVersion이 0으로 설정된 자산은 시스템 기본 조명을 사용합니다 1로 설정하면 클래식 조명을 계속 사용합니다
값 2는 새로운 조명을 제공합니다
즉, 현재 자산도 새 조명으로 쉽게 업데이트할 수 있습니다 명시적으로 선택하고 모든 자산에서 이 메타데이터를 설정하는 것이 좋습니다 그렇게 하려면, 플래그 preferrediblversion와 usdzconvert를 함께 사용할 수 있습니다 예를 들어, 플래그를 사용하여 소화전 OBJ 파일을 새 조명을 사용하는 USDZ로 변환하는 방법은 다음과 같습니다 또는, 이제 기본적으로 새 조명을 사용하는 Reality Converter를 사용할 수 있습니다 그러나 클래식 조명을 사용하려면 속성 패널에 새로운 옵션이 있습니다
여기에서 클래식 조명과 새로운 조명이 모두 포함된 AirPods Max 자산을 미리 봅니다
각각의 차이를 비교하는 간단한 방법을 제공합니다
조명 아이콘을 클릭하면 적용된 조명도 참조용으로 강조 표시됩니다
마지막으로, 이 메타데이터가 없는 자산의 경우 AR Quick Look은 파일의 날짜-시간 스탬프를 기반으로 조명 버전을 자동으로 결정합니다
자산이 2022년 7월 1일 이후에 생성된 경우 새 조명을 사용합니다
이전 자산은 계속해서 클래식 조명을 사용하므로 모습이 변경되지 않습니다
그럼 지금부터는 Alex가 USD 렌더링에 대해 소개하겠습니다 고맙습니다, Stella 오늘 렌더링된 USD 자산을 이미 많이 살펴보았는데요 지금부터는 USD 렌더링과 Hydra가 3D 콘텐츠 제작 파이프라인에 탁월한 선택인 이유와 자체 애플리케이션에 이를 통합하는 방법을 알아보겠습니다
먼저, 한 걸음 뒤로 물러나서 일반적인 렌더링에 대해 이야기해 보죠
렌더러는 3D 모델, 카메라 및 조명 컬렉션을 입력하고 이를 사용하여 이미지를 생성합니다 특정 목적을 위해 구축된 다양한 종류의 렌더러가 존재하며 모두 각기 다른 용례에 최적화되어 있습니다
일부 렌더러는 게임이나 AR 장면에서 캐릭터를 렌더링하는 것과 같은 실시간 응용 프로그램을 위해 설계되었습니다 훨씬 오래 걸리지만 헐리우드 영화의 시각 효과를 만드는 것과 같은 보다 사실적인 이미지를 생성하는 것들도 있습니다
모든 렌더러는 각각의 기능을 선택하고 고유합니다
Apple 플랫폼에도 각기 다른 용례를 위한 USD 렌더러가 존재합니다 이러한 다양한 렌더러에 대한 문서를 developer.apple.com에 추가중입니다 이는 각 렌더러 간의 차이를 이해하고 지원가능한 USD 기능 및 지원가능한 USD 기능 및 가장 적합한 USD를 작성하는 방법에 대한 지침을 제공하는 데 도움이 될 것입니다
Apple 플랫폼의 렌더러 중 하나는 사실적인 렌더링 시스템을 특징으로 하는 RealityKit으로 대화형 증강 현실 경험에 최적화되어 있으며 AR Quick Look에 사용됩니다 이는 USDZ 파일의 기본 렌더러입니다 macOS에서 USD 렌더링을 위한 또 다른 옵션은 Pixar의 오픈 소스 렌더러 Storm입니다 프로덕션 등급 자산에 최적화되어 있으며 대규모 장면을 실시간으로 미리 볼 수 있도록 설계되었습니다
자산이 콘텐츠 생성 파이프라인을 통과할 때 이를 시각화하고 반복할 수 있는 훌륭한 기술이죠 Storm은 Hydra라 불리는 기술을 사용합니다 Hydra는 USD 오픈 소스 프로젝트의 핵심이죠 다음으로, Hydra와 Storm과의 관계에 대해 알아보겠습니다 이전에 보여드렸던 다이어그램을 먼저 보시죠 여기서는 Storm을 렌더러로 사용합니다
입력은 일반적으로 "the scene graph,"라 하고 Storm이 미리보리 렌더링을 생성합니다
그러나 다른 렌더러를 사용하여 동일한 장면의 사실적인 이미지를 생성하려면 어떻게 해야 할까요?
바로 이를 위해서 Hydra가 탄생했습니다 장면을 렌더러에 단단히 연결하는 대신 Hydra는 장면에서 렌더러로 데이터를 전송하기 위해 그들 사이에서 추상 레이어의 역할을 합니다
이를 통해 장면 그래프를 변경하지 않고도 언제든지 필요에 따라 렌더러를 쉽게 교체할 수 있습니다 예를 들어, 콘텐츠 생성 파이프라인에서
빠른 렌더링과 빠른 반복을 위해 Storm을 사용한 다음 준비가 되면 RenderMan으로 전환하여 최종 이미지를 생성할 수 있습니다 장면 그래프도 마찬가지입니다 Hydra에 USD 장면 그래프 또는 다른 그래프를 입력할 수 있습니다
이렇게 하면 각각 완전히 다른 장면 그래프가 있는 경우에도 여러 응용 프로그램에서 동일한 렌더러를 활용할 수 있습니다 Hydra를 장면 그래프 및 렌더러와 연결하는 인터페이스를 델리게이트라고 부릅니다 장면 그래프는 장면 델리게이트를 통해 Hydra에 연결되고 렌더러는 렌더 델리게이트를 통해 Hydra에 연결됩니다 여러분이 찾던 Hydra가 여기 있습니다 Foundry의 Nuke 13은 이미 Hydra를 사용하여 뷰포트를 렌더링하고 있으므로 macOS의 Nuke아티스트는 Nuke의 3D 시스템에서 더 나은 품질과 대화형 겸험이 가능합니다
이것은 사용자 지정 장면 델리게이트와 Metal-accelerated Storm과 함께 Hydra를 사용하여 달성됩니다
Metal Accelerated Storm을 오픈 소스로 공개하기 위해 Pixar Animation Studios와 협력했다는 소식을 전하게 되어 매우 기쁩니다 USD 22.05로 사용가능합니다 이제 Hydra의 파워를 확인했으니 USD 장면 그래프와 Storm을 렌더러로 사용하는 일반적인 용례를 사용하여 Hydra 샘플 응용 프로그램을 살펴보겠습니다 Hydra를 사용하여 콘텐츠 생성 도구 및 3D 워크플로 애플리케이션을 구축하는 방법에 대해 알아보겠습니다 샘플 애플리케이션인 HydraPlayer는 매우 간단하지만 강력합니다 Storm을 사용하여 USD 파일을 렌더링하고 카메라를 주변으로 이동할 수 있습니다
여러분이 바로 사용할 수 있도록 HydraPlayer를 공개 샘플 프로젝트로 선보이게 되어 매우 기쁩니다 세션 리소스에서 사용할 수 있으며 추가 정보에 전체 지침이 함께 제공됩니다
지금 이 영상을 일시 중지하고 프로젝트를 다운로드한 후 영상을 보시며 함께 따라해 보시길 바랍니다
Xcode 프로젝트 내에 다음 4가지 클래스가 있습니다 AppDelegate, Camera, Renderer 및 View Controller입니다 AppDelegate는 기본적으로 루트 개체이며 시스템과 상호작용을 관리합니다 카메라 클래스는 사용자 입력을 쉽게 번역할 수 있도록 USD 카메라를 간단하게 표현한 것입니다 렌더러 클래스는 USD 및 Hydra와의 모든 상호 작용을 처리합니다
마지막으로 ViewController는 사용자 입력을 처리합니다 HydraPlayer를 구축하고 실행하기 전에 해야할 일이 3가지 있습니다
Apple Silicon Macs에서 Rosetta를 사용하여 USD 및 Hydra를 다운로드 및 구축하여 환경을 준비합니다 그럼 시작해 보죠
먼저 개발 환경을 준비합니다 Xcode, Python 및 CMake가 설치되어 있는지 확인하세요
이제 다른 두 단계를 위해 터미널을 열어 보시죠
Apple Silicon Mac 사용자라면 USD가 arm64를 완전히 지원하도록 전환되는 동안 Rosetta에서 실행해야 합니다 이를 위해서는, arch 명령을 사용하세요
환경이 준비되면 USD 및 Hydra 소스 코드를 다운로드해야 합니다 둘 다 PixarAnimationStudios/USD의 동일한 GitHub 리포지토리에 있습니다 이제 코드가 있으니 빌드할 수 있습니다 USD는 편리한 Python 빌드 스크립트와 함께 제공됩니다 "generator Xcode" 및 "no-python" 플래그를 추가하고 USD를 설치할 위치를 지정합니다 "USDInstall"에 있는 소스 코드 옆에 두도록 하죠 USD 구축이 완료되면 HydraPlayer를 구축할 준비 완료입니다 이 다이어그램으로 한번 더 돌아가서 HydraPlayer의 주요 부분을 자세히 파악해 보도록 하죠 3D 모델을 로드하는 방법, 카메라를 설정하는 방법, 장면 조명을 설정하는 방법을 살펴보겠습니다 그런 다음 장면 그래프를 Storm으로 가져오는 방법과 마지막으로 애플리케이션 창에 이미지를 생성하는 법을 배웁니다
이제 USD에서 3D 모델을 로딩하는 작업을 시작하죠 ViewController의 viewDidAppear에서 뷰가 처음 나타날 때 NSOpenPanel을 사용하여 파일 선택기를 만듭니다
파일이 선택되면 렌더러는 장면 설정을 시작하고 SD 파일을 로딩할 수 있습니다
USD API를 사용하면 파일 로딩이 매우 간단합니다 파일 경로에서 USD 단계를 열기만 하면 됩니다
이렇게 해서 파일이 로딩되었습니다
다음으로 카메라를 설정합니다 코드가 아주 간단합니다 setupCamera에서 먼저 새 장면 카메라를 만듭니다
그런 다음 장면을 기반으로 세계 크기와 중심을 계산합니다 다음으로, 카메라를 적당한 거리로 이동한 다음 중앙에 초점을 맞춥니다 이렇게 하면 카메라가 전체 장면을 캡처합니다
좋습니다, 이제 카메라가 설정되었습니다 다음은 조명입니다 간단하게 하나의 주변 조명을 만들고 카메라와 일치하도록 위치를 설정하기만 하면 됩니다 이를 통해 3D 모델, 카메라 및 조명으로 전체 장면을 볼 수 있습니다 이제 장면을 Storm에 전달할 수 있습니다 먼저 렌더 엔진을 초기화해야 합니다 Storm의 클래스 이름인 새로운 UsdImagingGLEngine을 만듭니다 여기서 가장 중요한 매개변수는 rootPath입니다 3D 모델을 사용하여 엔진이 USD 단계를 가리키도록 합니다 다른 매개변수와 UsdImagingGLEngine에 대해 자세히 알아보려면 Pixar의 USD API 문서를 확인하세요
다음으로 엔진에 카메라를 설정하고 조명 설정을 설정합니다 마지막으로 렌더링 매개변수를 설정하여 Storm이 렌더링할 방법을 정의합니다 예를 들어, 렌더링된 이미지가 앱 색 구성표와 잘 작동하도록 투명한 배경을 렌더링한다고 하면 애니메이션이 있는 장면의 경우 여기에서 타임 코드를 지정하는 것도 중요합니다
이제 이미지를 렌더링할 준비가 되었습니다
필요한 모든 설정이 이미 완료되었고 render 명령은 한 줄의 코드만 넣으면 됩니다 결과를 얻어 창에 표시되죠, 바로 이렇게요 USD 장난감 비행기를 렌더링하고 있어요 그리고 비행기를 하나만 렌더링하는 것이 아니에요 HydraPlayer는 수천만 개의 삼각형이 있는 수천 개의 애니메이션 자산을 쉽게 렌더링할 수 있습니다
아직 리소스 확인을 안했다면 이 세션의 리소스를 확인하고 샘플 프로젝트를 다운로드하여 다양한 프로젝트를 즐기세요
오늘 우리는 Apple의 USD 도구를 활용하여 이를 강화하고 자산을 더욱 돋보이게 하는 업데이트에 대해 살펴보았습니다 Hydra의 기능에 대해 배웠고 Hydra를 자신의 응용 프로그램에 통합하는 방법을 살펴보았습니다
USD의 중요한 개념에 대해 자세히 알아보려면 'USD 기초에 대한 이해'의 세션을 확인하세요
고맙습니다 ♪ ♪
-
-
3:00 - Phyton usdconvert --help
% python usdzconvert --help usdzconvert 0.66 usage: usdzconvert inputFile [outputFile] [-h] [-version] [-f file] [-v] [-path path[+path2[...]]] [-url url] [-copyright copyright] [-copytextures] [-metersPerUnit value] // ... [-diffuseColor r,g,b] [-diffuseColor <file> fr,fg,fb] [-normal x,y,z] [-normal <file> fx,fy,fz] // ...
-
9:00 - choosing lighting in usda metadata
// asset.usda #usda 1.0 ( customLayerData = { dictionary Apple = { int preferredIblVersion = 2 } } )
-
17:50 - Build USD + Hydra
// Rosetta % arch -x86_64 /bin/zsh // Download source code % git clone https://github.com/PixarAnimationStudios/USD.git // Build USD + Hydra % python3 USD/build_scripts/build_usd.py --generator Xcode --no-python USDInstall
-
18:54 - Load USD ViewController
// AAPLViewController.mm - (void)viewDidAppear { NSOpenPanel* panel = [NSOpenPanel openPanel]; panel.allowedContentTypes = @[UTTypeUSD, UTTypeUSDZ]; [panel beginWithCompletionHandler:^(NSModalResponse result) { if (result == NSModalResponseOK) { NSURL* url = panel.URLs[0]; [self->_renderer setupScene:[url path]]; } }]; } // AAPLRenderer.mm - (bool)loadStage:(NSString*)filePath { _stage = UsdStage::Open([filePath UTF8String]); // ... }
-
19:30 - Create Scene Camera
// AAPLRenderer.mm - (void)setupCamera { _viewCamera = [[AAPLCamera alloc] initWithRenderer:self]; [self calculateWorldCenterAndSize]; [_viewCamera setDistance:_worldSize]; [_viewCamera setFocus:_worldCenter]; }
-
19:54 - Create Scene Light
// AAPLRenderer.mm GlfSimpleLight computeCameraLight(const GfMatrix4d& cameraTransform) { GlfSimpleLight light; light.SetPosition(GfVec4f(cameraPosition[0], cameraPosition[1], cameraPosition[2], 1)); return light; }
-
20:17 - transport to storm
// AAPLRenderer.mm - (void)initializeEngine { _engine.reset(new UsdImagingGLEngine(_stage->GetPseudoRoot().GetPath(), excludedPaths, SdfPathVector(), SdfPath::AbsoluteRootPath(), driver)); } // AAPLRenderer.mm - (HgiTextureHandle)drawWithHydraAt:(double)timeCode viewSize:(CGSize)viewSize { _engine->SetCameraState(modelViewMatrix, projMatrix); _engine->SetLightingState(lights, _material, _sceneAmbient); UsdImagingGLRenderParams params; params.clearColor = GfVec4f(0.0f, 0.0f, 0.0f, 0.0f); params.frame = timeCode; // ... }
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.