스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
USD 기초 이해
Pixar의 USD(Universal Scene Description)에 대한 기초를 살펴보고 이를 통해 우수한 3D 자산 및 작업 흐름을 빌드하는 방법을 배울 수 있습니다. USD의 핵심 개념을 소개하고, 콘텐츠 제작 파이프라인에 형식을 통합하는 방법을 살펴보겠습니다. 또한 컴포지션을 사용하여 USD의 강력한 기능을 활용함으로써 유연하고 유용한 자산을 만드는 방법을 보여드립니다.
리소스
- ASWF USD Working Group
- Creating a 3D application with Hydra rendering
- Introduction to Universal Scene Description (USD)
- USDZ schemas for AR
관련 비디오
WWDC23
WWDC22
WWDC21
-
다운로드
♪ 부드러운 힙합 음악 ♪ ♪ 안녕하세요 WWDC에 잘 오셨습니다 제 이름은 Casey예요 Universal Scene Description을 들어 보셨나요? USD라고도 하죠 이미 증강 현실에서 USD 파일과 상호 작용 했을 수도 있어요 아니면 자산을 다른 형식에서 USD로 변환했을 수도 있고요 그런데 USD 파일의 진짜 내용은 뭘까요? USD는 독특한 기능을 가진 중요한 기술이기 때문에 자세히 들여다보고 USD의 원리를 함께 탐험해 보시죠 우리는 USD가 뭔지 배우고 USD의 기본적인 개념을 알아보고 USD와 장면을 구성하는 법을 배우고 USD 파일 형식을 이해해 보겠습니다 먼저, USD란 뭘까요? USD는 픽사 애니메이션 스튜디오가 우리가 좋아하는 복잡한 영화를 만들기 위해 개발한 기술로 영화, 엔터테인먼트와 기타 산업 전반에 걸쳐 널리 활용되고 있어요 설계상 확장이 가능하고 협업의 핵심 워크플로 기술로 급부상하고 있죠 영화 산업에서 수십 년의 제작 경험을 바탕으로 만들어진 오픈 소스 프로젝트로 점점 게임이나 시뮬레이션, 제조, 전자 상거래와 AR에 도입되고 있죠 USD에는 세 가지 핵심 측면이 있어요 장면 설명 사양, API 그리고 렌더링 시스템이죠 여러분의 앱은 API를 사용해 USD와 상호 작용 해요 렌더링 시스템은 상이한 렌더러를 사용해 장면을 시각화하죠 Apple에는 USD를 위한 여러 렌더링 시스템이 있어요 'USD 도구 및 렌더링 살펴보기’ 세션으로 자세한 내용을 알아보세요 이 세션에서는 장면 설명 사양에 집중할 거예요 장면 자료가 어떻게 설명되고 어떻게 구성되고 파일 형식으로 어떻게 표현되는지 설명하겠습니다 기본적으로 USD 파일에는 장면의 모양을 설명하는 데이터가 포함돼 있습니다 렌더링 앱은 데이터를 해석하고 화면에 이미지를 생성하죠 예를 들어 작년 WWDC 세션에서 우리는 이 USD 장면을 생성하고 Octane으로 렌더링했어요 이제 기본적인 개념을 알아보고 렌더링 이전의 데이터에 대해 배워 봅시다 간단한 설명을 위해서 텍스트로 USD를 표현해 볼 거예요 USD에는 언급할 만한 멋진 기능이 많지만 시간이 없으니까 핵심 기능에만 집중할게요 USD를 다루는 일을 하면 가장 흔하게 접하는 스테이지, 프림, 레이어죠 몇 개만 다뤄 볼게요 스테이지(stage)부터 시작하죠 우리가 극장에 연극을 보러 갔다고 상상해 보세요 관객이니까 우리는 무대를 관찰하며 배우의 연기를 보고 환경을 둘러보겠죠 조명, 소품 같은 거요 USD에서 스테이지의 역할에 대한 좋은 비유예요 스테이지는 장면 그래프 또는 데이터 구조예요 모든 장면 요소가 함께 모이는 계층적 방식으로 그래픽 정보를 구성합니다 스테이지는 하나 이상의 레이어(layers)로된 구성이고 보통 장면 정보를 포함하는 파일이에요 일반적으로 스테이지는 프림으로 구성되죠 프림(prim)은 장면의 주요 컨테이너 객체입니다 프림은 다른 프림을 포함할 수 있어서 장면 요소의 계층을 만들어요 예를 들어 봅시다 왼쪽에 샘플 USD 레이어가 있어요 오른쪽에는 스테이지의 시각 표현 미리 보기가 있죠 프림이 두 개 보이네요 구와 정육면체입니다 각 프림은 스테이지에서 무엇을 표현하는지 정의하는 특정한 유형이 있어요 프림의 유형은 다양해요 그물망, 조명, 재료 같은 것들로 스테이지를 구성하죠 이 예시의 경우 구 프림은 '구'라는 유형이고 정육면체는 '정육면체'라는 유형이에요 그런데 좋은 질문이 제기되죠 USD는 이 프림의 유형이 뭘 의미하는지 어떻게 알까요? USD는 스키마 사용을 통해 이걸 알고 있어요 스키마(schemas)는 구조화된 데이터로 스테이지에서 프림의 역할을 정의해요 기하학, 재료처럼 일반적인 장면 개념에 의미를 제공하죠 이 예시에서는 구에 대한 스키마 정의가 있어요 모든 구에는 반지름과 경계 상자 범위가 있음을 정의합니다 기존 스키마를 통해 USD는 장면을 묘사할 수 있는 풍부한 기본 유형들을 제공합니다 사용자 정의 스키마로 USD를 훨씬 더 확장할 수 있죠 실제 사용 사례나 워크플로에 사용자 정의 데이터로 표현한 나름의 스키마를 제공할 수 있습니다 스키마는 시각 표현이 필요 없습니다 구조적이고 의미 있는 방식으로 그냥 스테이지에서 필요한 데이터인 거죠 예를 들어서 여기서 저는 새로운 스키마 'WWDC'를 만들었어요 제목과 연도가 관련된 프림을 정의하고 여기에 그 스키마를 사용하는 프림 'WWDC22'가 있습니다 연도는 2022년으로 제목은 '코드 호출'로 정했죠 연도와 제목은 프림의 '속성'으로 불립니다 프림엔 다양한 속성이 있을 수 있습니다 속성마다 유형과 값이 있죠 속성에는 기본값을 작성할 수도 있습니다 따라서 스키마를 사용하는 프림에서 명시적으로 정의할 필요가 없죠 아까 구 스키마로 돌아가 볼게요 반지름과 범위 속성에 기본값을 어떻게 정의했는지 보일 겁니다 이 레이어에는 구 프림이 하나 있어요 반지름 속성이 정의되지 않아서 구 스키마에서 값을 가져옵니다 반지름의 기본값은 1이에요 그런데 명시할 수도 있으니 반지름 속성을 설정합니다 보기에는 구가 똑같아요 기본값처럼 1이라는 값이 스키마에서 설정됐기 때문이죠 두 번째 구를 더해 봅시다 반지름은 0.5로 설정합니다 절반 크기의 구를 확인할 수 있습니다 속성, 프림, 스테이지는 메타데이터를 포함할 수 있습니다 장면의 일부에 대한 보조 데이터를 제공할 수 있는 정보의 핵심 값 쌍입니다 메타데이터는 적용되는 수준에서 설정됩니다 스테이지 전체와 그 안의 프림에 다 영향을 미치는 메타데이터는 스테이지 수준에서 설정되죠 프림 하나에 관한 메타데이터는 프림에서 설정됩니다 속성도 메타데이터를 가질 수 있죠 예시로 여기에 일반적인 스테이지 메타데이터가 있습니다 metersPerUnit은 장면의 규모 단위를 정하죠 upAxis는 장면에서 카메라의 위쪽 방향으로 간주되는 X, Y, Z축을 정의합니다 doc 문자열은 유용한 문서를 저장합니다 워크 플로 추적에 쓰이죠 이제 기본은 정의했으니 USD 사용을 벌써 시작할 수 있습니다 이 개념들을 이용해서 팬케이크 장면이 어떻게 만들어질 수 있는지 보시죠 우리 레이어에서 '팬케이크'라고 불리는 변형 프림을 만듭니다 또 변환 프림을 추가해서 '블루베리_01'이라고 하죠 팬케이크 프림의 하위 항목입니다 블루베리_01 프림 안에 메시 프림이 포함돼 있습니다 메시 프림은 블루베리의 형상을 유지하고 재료에 결합합니다 나머지 자산은 다른 프림을 추가하여 완료하죠 이런 기본적인 콘셉트만 살려 완성된 펜케이크 장면입니다
이런 개념들도 설명할 게 많지만 프로덕션 중심 프로젝트에선 다양한 팀원 및 조직과 협업해야 합니다 USD는 이런 요구를 해결할 많은 기능이 있는데요 전부 '구성' 안에 들어 있다고 할 수 있죠 구성은 장면 설명의 개별 단위로 스테이지를 만들어 낼 수 있습니다 덕분에 장면에서 3D 요소를 효율적으로 재사용할 수 있고 협업과 빠른 반복이 가능해졌죠 우리는 가장 일반적 유형의 구성에 대해 논의할 겁니다 레이어링, 참조 페이로드, 변형 세트죠 그런데 재밌게 해 볼까요? 체스 게임 좋아하세요? 체스 세트 장면을 만들어 봅시다 이 장면에서는 카탈로그 레이어에 있는 자산의 카탈로그를 사용할 겁니다 우리 체스 말들을 가리키는 거죠 우린 레이아웃 레이어 안에서 체스 판에 말들을 늘어 놓고 최종 결과를 얻을 겁니다 그 결과는 ChessSet 레이어에서 볼 수 있겠죠 먼저 체스 말을 가져와야죠 체스에는 6개의 주요 말이 있습니다 폰, 룩, 비숍 나이트, 퀸, 킹이죠 Object Capture로 생성된 이 자산을 사용해서 완전한 체스 세트를 만들 겁니다 먼저 USD의 개념인 참조를 사용해 우리 말들을 스테이지에 올리는 것으로 시작하죠 참조는 스테이지에 있는 프림이 다른 프림을 참조하는 경우입니다 데이터를 복사하지 않고 동일한 스테이지나 다른 레이어로 이동할 수 있죠 이렇게 데이터의 중복을 최소화하고 다른 사용자와 앱에 의해 데이터를 개별적으로 업데이트할 수 있습니다 우리 장면의 폰 자산을 참조해 봅시다 카탈로그 레이어에서 우린 폰이란 프림을 정의했죠 아직까지는 데이터가 없어 우리 스테이지는 비어 있습니다 다음으로 Pawn.usda 레이어에 참조를 추가합니다 이러면 폰 자산이 생겨나고 카탈로그 레이어에서 볼 수 있죠 그런데 USD는 참조하는 파일에서 어떤 프림을 가져와야 하는지 어떻게 알까요? defaultPrim 메타데이터를 사용해 이 프림을 지정할 수 있습니다 defaultPrim 메타데이터는 스테이지에서 정의되고 다른 스테이지에서 이 장면을 사용할 때 참조해야 하는 프림을 지정합니다 USD 자산에 대해서는 항상 defaultPrim을 작성하는 게 좋죠 우리 폰 자산을 확인해서 defaultPrim이 작성됐는지 확인해 보죠 defaultPrim 메타데이터는 자산의 스테이지 단계에서 볼 수 있습니다 됐네요 아니면 defaultPrim이 작성되지 않았거나 defaultPrim과는 다른 프림을 참조하려는 경우 프림에 대한 경로를 참조 레이어에서 계층 구조의 어디에서나 명시적으로 지정할 수 있습니다 USD 경로는 스테이지에서 요소를 식별하는 데 사용됩니다 프림 경로는 프림의 고유 식별자입니다 예를 들어 이 스테이지에는 세 개의 프림이 있습니다 월드 프림은 프림 경로가 /World입니다 폰과 나이트 프림은 월드 프림의 자식으로 여겨집니다 그래서 폰 프림까지의 경로는 /World/Pawn이고 나이트 프림까지 경로는 /World/Knight가 되죠 이걸 염두에 두고 여기서 참조를 할 때 폰 프림의 프림 경로를 명시적으로 설정할 수 있습니다 더 커다란 장면의 경우 장면의 모든 정보를 한번에 로드하는 데 비용이 많이 들 수 있습니다 이런 상황을 위해 USD는 '페이로드'라는 참조 유형을 가진 스테이지에 장면 설명을 지연 로딩하는 걸 허용하죠 복잡한 기하학이나 소품, 캐릭터를 나타내는 커다란 장면 그래프처럼 큰 데이터 세트를 참조할 때는 페이로드를 사용하는 게 좋습니다
우리는 이 자산 참조를 페이로드로 변환하여 체스 말들의 로딩을 연기할 수 있습니다 페이로드를 로드하지 않게 선택하면 우리 장면은 처음 열 때 텅 비게 됩니다 페이로드의 로드가 가능하다면 다른 말들도 같이 한꺼번에 볼 수 있죠 이제 장면에 말들이 생겼으니 체스판 위에 배치를 시작할 수 있어요 레이어링이라는 USD의 개념을 쓰는 다른 레이어를 이용해 배치를 할 수 있죠 레이어링으로 레이어는 겹겹이 쌓일 수 있습니다 유명한 이미지 편집 소프트웨어 Photoshop이나 Affinity Photo처럼 레이어링을 사용하면 비슷하게 레이어를 쌓을 수 있습니다 다른 레이어 위에 있는 레이어의 프림은 더 강력한 것으로 간주되고 하위 레이어의 데이터를 추가하거나 재정의할 수 있습니다 보시다시피 말들이 현재 잘못된 위치에 있습니다 하지만 걱정 마세요 우리는 레이어링을 이용해 다른 레이어를 파괴하지 않고 수정할 수 있습니다 카탈로그 레이어를 편집하지 않고도 체스 말을 맞게 옮길 수 있는 완벽한 방법이죠 어떻게 할 수 있는지 봅시다 ChessSet라는 새 스테이지를 만드는 걸로 시작합니다 우리의 마지막 장면이 될 겁니다 '하위 레이어'라고 불리는 맨 위 레이어가 메타데이터를 포함하죠 여기서는 카탈로그 레이어에 말들을 가져왔습니다 이제 Layout.usda라는 새 레이어를 만듭니다 말들을 옮기는 데 쓸 겁니다 이 레이아웃 레이어에는 체스 말의 위치가 포함됩니다 장면에서 체스 말의 위치를 재정의해 보겠습니다 Pawn_01부터 시작합니다 폰 자산의 변환 속성을 변경하며 자산의 위치를 수정합니다 이게 어떻게 우리 장면을 업데이트하는지 확인해 보죠 레이아웃 레이어가 없는 우리의 체스 세트입니다 원래 있던 자리에 폰이 아직도 있네요 레이아웃 레이어를 추가하면 폰이 원래 있어야 할 위치로 체스 판에서 이동합니다 다른 말들도 똑같이 맞는 자리로 옮겨 봅시다
폰을 위치한 것과 같은 방식으로 다른 체스 말들을 옮깁니다 Pawn_02는 이렇게 옮겼습니다 Pawn_03도 마찬가지고 이렇게 계속되죠 레이아웃 레이어의 변경이 끝났고 체스 말들이 전부 올바른 위치로 이동했습니다
체스 세트의 반을 만들었습니다 카탈로그 레이어와 자산을 레이어를 사용해 가져오고 재정의를 사용하여 레이아웃 레이어의 체스 판에 자산을 배치합니다
이제 상대편 말을 세우는 것만 남았습니다 한 가지 주목할 점은 상대편 말의 색깔이 다르다는 건데요 자산 세트를 새로 만드는 대신 USD의 또 다른 개념인 변형 세트로 체스 말 자산을 업데이트할 수 있습니다 VariantSets를 사용하면 스테이지에서 개별 대체제를 동적으로 교환할 수 있습니다 variantSet에 포함된 변형은 다른 재료, 도형 등 USD로 나타낼 수 있는 모든 것이 될 수 있죠 스테이지에서 다른 변형으로 전환하는 건 비파괴적입니다 우리는 체스 말을 다른 재료로 전환하기 위해 변형 세트를 설정할 겁니다 폰 자산에서 'color'라는 variantSet를 추가하면 폰을 다른 색깔로 전환할 수 있습니다 이제 variantSet에 두 가지 변형을 추가합니다 Dark는 어두운 소재를 쓰는 거고 Light는 밝은 소재죠 마지막으로 폰을 스테이지에 로드할 때 사용할 것을 지정하기 위해 기본 변형을 설정합니다 이제 카탈로그 레이어로 돌아가 보겠습니다 체스 판에 말을 전부 배치했지만 전부 밝은 소재를 사용하고 있습니다 기본 변형이 밝은 소재로 설정되어 있기 때문이죠 폰들 중 하나의 변형을 어두운 소재로 바꿔 보죠 변형을 Dark로 설정했습니다 상대편의 폰 중 하나가 이제 어두워진 게 보이죠 이 변화를 다른 말에도 적용해 볼게요 드디어 체스 세트를 완성했습니다
장면을 최적화하기 위한 USD 개념이 하나 더 있습니다 장면 그래프 인스턴스화입니다 장면 그래프 인스턴스화는 스테이지 위의 장면 그래프 중 일부를 여러 번 재사용해서 예를 들면 나뭇잎, 가구 등이 장면에서 둘 이상으로 보이게 합니다 우리 경우는 체스 말이겠죠 장면 그래프 인스턴스화를 사용하면 앱의 메모리와 성능이 모두 향상됩니다 장면 그래프 인스턴스화를 사용하려면 장면 그래프의 일부나 프림에서 인스턴스 메타데이터를 지정할 수 있습니다 인스턴스화된 모든 프림은 똑같은 장면 그래프를 공유할 수 있죠 프림 인스턴스화에 대한 지원을 우리 장면에서 추가해 봅시다 카탈로그 파일에서 instanceable 메타데이터를 체스 말 프림에 추가하고 값을 true로 설정합니다 이 메타데이터를 더하면서 USD는 이제 이런 자산에 대해 각 프림 데이터를 복제하는 대신 동일 데이터를 공유하며 잠재적으로 인스턴스화가 가능한 프림으로 취급합니다 우리 체스 세트는 여전히 똑같아 보이지만 이제는 성능과 메모리가 더 효율적으로 변했죠 이제 체스 세트는 끝났습니다 결과물도 훌륭하고 USD 기능도 많이 연습했죠
레이어링과 참조 페이로드, 변형 집합은 USD가 정의하는 구성의 유형 중 일부에 불과합니다 일관된 장면 표현을 보장하기 위해 USD가 장면 그래프를 구성하는 특정 강도 순서가 있습니다 구성에 대한 더 자세한 내용과 순서 약어 LIVRPS를 알아보려면 픽사의 USD 설명서를 참조하세요 이번 세션에서는 USD 파일 안에 뭐가 들었는지 설명했습니다 이제 파일 자체와 파일이 디스크에 표시되는 방법을 알아보겠습니다 USD 파일에는 몇 가지 유형이 있습니다 읽을 수 있는 ASCII 텍스트를 포함하는 USD 파일엔 .usda 확장자가 있었죠 우리는 세션에서 내내 이 파일들을 썼습니다 더 간결하고 효율적인 바이너리 표현은 크레이트 형식입니다 .usdc 확장자가 있죠 또 .usd 확장자가 붙은 파일들도 있을지 모릅니다 ASCII 텍스트일 수도 있고 바이너리 크레이트 파일일 수도 있죠 마지막으로 USD는 패키징 형식이라 여러 개의 USD 파일과 텍스처 같은 관련 보조 파일을 포함할 수 있고 이 형식은 .usdz 확장자가 있는 압축되지 않은 아카이브에 있죠 오늘은 USD의 기본 개념 몇 가지를 알아봤습니다 스테이지, 레이어, 프림, 스키마 속성, 메타데이터요 이 개념을 이용해서 체스 세트를 만들었고 참조, 페이로드, defaultPrim 프림 경로, 인스턴스화를 사용했습니다 끝으로 다른 USD 파일 형식을 이야기했죠 .usda, .usdc .usd, .usdz.입니다 픽사의 USD 문서를 보고 이 개념에 대해 더 자세히 알아보고 앱에서 USD 기능을 최대한 활용하시기 바랍니다 감사합니다 ♪
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.