Search Unity

Pixar가 선보인 유니버설 씬 디스크립션(USD)은 대규모 에셋 파이프라인에서 사용할 수 있는 파일 포맷으로, 특히 병렬 워크플로에 중점을 두고 있는 기술입니다. Apple도 최근에 증강 현실 애플리케이션에 이 USD 포맷을 도입하여 USDZ라는 새로운 양식을 선보였습니다. 그리고 드디어 USD Unity SDK가 Unity 프리뷰 패키지 형식으로 여러분을 찾아갑니다! 이 패키지는 Unity와 USD의 기존 통합 기능을 크게 확장시킵니다. 이번 게시물에서는 패키지가 지원하는 여러가지 기능과 함께 패키지를 처음 시작하는 방법에 대해 소개하겠습니다.

시작하기

먼저 Window > Package Manager를 선택하여 패키지 관리자를 열고 Advanced 옵션에서 프리뷰 패키지를 활성화합니다. 그 다음 USD를 검색하고 Install 버튼을 클릭합니다.

USD 임포터는 선형 색 공간을 사용하므로, 사용자의 씬 색 공간도 반드시 Linear로 설정해야 합니다.

스탠드얼론 플레이어 빌드에서 이 패키지를 사용하려면 .NET 4.x API와 호환되어야 합니다(현재는 OSX 및 Windows만 지원). 호환성 역시 Project Settings 창에서 설정합니다.

마지막으로, 가장 높은 정확도의 버텍스 스키닝을 구현하기 위해서는 프로젝트의 Quality 설정에서 Skin Weights를 Unlimited로 설정해야 합니다(Unity 2019 이상).

샘플 작업하기

USD 패키지와 런타임 컴포넌트의 활용 방법을 살펴볼 수 있도록 몇 가지 샘플 씬이 제공됩니다. 이 패키지 샘플은 Unity 2019.1 이상의 버전으로 작업하는 경우 패키지 관리자에서 제공되며 프로젝트로 직접 임포트할 수 있습니다. 이전 버전의 Unity를 사용할 경우 Film & TV 툴박스 저장소에서 에셋 패키지 형태로 제공됩니다.

요구 사양

USD 패키지는 Windows/OSX(에디터 및 플레이어)에서 지원되며, Unity 2018.3(2018.3.4f1 이상) 및 2019.1(2019.1.0b2 이상)과 호환됩니다.

에셋 임포트/익스포트하기

USD 패키지 설치를 마치면 상단의 신규 USD 메뉴에서 USD 에셋 임포트 및 익스포트 기능을 사용할 수 있습니다. 여기서는 .usd, .usda(ASCII/텍스트), .usdc(바이너리), Alembic .abc 파일 등 USD에서 지원하는 모든 파일 타입을 임포트할 수 있습니다.

에셋은 프리팹으로 임포트하여 재사용을 최대한 많이 가능하게 하거나, 게임 오브젝트로 임포트하여 빠르게 실험할 수 있으며, 만약 에셋이 타임라인(Timeline)과 함께 사용되는 애니메이션 클립일 경우 타임라인 클립으로 임포트할 수 있습니다.

임포트된 에셋에는 항상 UsdAsset 컴포넌트가 포함된 루트 오브젝트가 있습니다. UsdAsset 컴포넌트는 소스 USD 파일에 대한 경로 정보를 포함하고 있는데, 이것은 상대 프로젝트 경로일 수도, 또는 유효한 파일 위치를 나타내는 절대 경로일 수도 있습니다. 이를 통해 일반적인 Unity 프로젝트 중심 워크플로와 대규모 에셋 파이프라인 워크플로를 지원합니다.

UsdAsset 컴포넌트는 임포트 정책뿐만 아니라 에셋에서 임포트되는 요소도 제어합니다. 또한 USD 값 새로고침 버튼, USD로부터의 완전한 재임포트 버튼, 전체 USD 컴포넌트 삭제 버튼도 제공합니다. Advanced 탭은 고급 사용자용으로, 임포트 프로세스를 좀 더 자세히 제어하고자 할 때에 사용합니다.

카메라

카메라도 임포트 및 익스포트가 가능하며, 타임라인에서 애니메이션화할 수도 있습니다. 카메라의 포지션 및 방향뿐 아니라 클리핑 평면 및 카메라 투사 설정도 그대로 유지됩니다.

머티리얼과 셰이딩

USD 에셋에는 지오메트리와 연관된 머티리얼이 포함되어 있을 수도 있습니다. Unity 임포터는 두 가지 머티리얼 시스템, 즉 Pixar의 “디스플레이 컬러(Display Color)”와 “프리뷰 서피스(Preview Surface)”를 지원합니다. 디스플레이 컬러 시스템은 알베도 및 알파 버텍스 색상으로 제한되며, 프리뷰 서페이스는 고해상도 렌더 파이프라인(HDRP)의 릿 표면 셰이더와 유사합니다.

머티리얼은 빌트인 렌더 파이프라인, 고해상도 렌더 파이프라인(HDRP) 또는 경량 렌더 파이프라인(LWRP)에서 임포트 및 익스포트가 가능합니다. 커스텀 익스포터는 간단한 인터페이스를 통해 자체적으로 작성할 수 있으며, 익스포트 및 임포트 시 커스텀 Unity 셰이더 파라미터가 자동으로 저장됩니다.

버텍스 스키닝

USD 배포판에는 UsdSkel을 통해 버텍스 스키닝 형태의 골격 변형이 지원됩니다. 에셋이 UsdSkel 골격 릭을 보유한 경우에는 SkinnedMeshRenderer 형태로 Unity에 자동 임포트됩니다. 마찬가지로, SkinnedMeshRenderer가 포함된 모델을 익스포트할 경우에는 UsdSkel 골격의 형태로 익스포트됩니다. 다음 예시는 더 블랙스미스(The Blacksmith)에 등장하는 볼룬드(Volund)로, 버텍스 스키닝을 포함하여 USD로 익스포트한 다음 USD 파일의 검사를 위해 사용하는 외부 뷰어인 usdview에서 렌더링한 것입니다.

USD 배리언트

USD의 강력한 기능 중의 하나는 바로 오브젝트에 대한 배리언트 작성 기능입니다.  Pixar가 제공하는USD 키친 세트 예시에서는 배리언트를 활용하여 지오메트리 및 셰이딩 배리언트를 생성하는 것을 보여줍니다. 아래 예시에서는 선택한 크레용을 새 크레용 또는 오래된 크레용으로 만들 수 있고(지오메트리 배리언트), 색상도 여러 셰이딩 배리언트 중에서 선택할 수 있습니다.

USD 페이로드

USD 페이로드(Payload)는 씬의 서브셋을 선택적으로 로드 및 언로드할 수 있는 기능을 제공함으로써 대규모 에셋의 구축을 가능하게 합니다. 페이로드를 언로드한 경우, 데이터는 메모리 상에서 Unity 씬이나 USD 씬에 더 이상 존재하지 않게 되며 언로드된 에셋의 효율성을 크게 향상시킵니다.

페이로드를 통해 작성한 USD 에셋은 처음에 비어 있는 상태로 나타나는데, 이는 필요에 따라 대규모 씬을 단계적으로 로드할 수 있도록 하기 위한 것입니다. 페이로드는 USD 메뉴 또는 UsdPayload 컴포넌트를 사용하거나, 루트 USD 게임 오브젝트의 기본 정책을 변경하는 방식을 통해 로드 및 언로드할 수 있습니다.

플레이백 스트리밍

타임라인을 활용하여 USD 애니메이션 캐시와 골격 애니메이션을 Unity로 스트리밍할 수 있습니다. 애니메이션 내의 각 프레임은 디스크로부터 온디맨드 방식으로 스트리밍되며, 이를 통해 대용량의 애니메이션 캐시도 효율적으로 플레이백할 수 있습니다. USD 파일을 타임라인 애니메이션 클립으로 활용하여 씬 계층 내 단일 UsdAsset에 적용할 수 있습니다. 여기에 성능을 한 단계 더 끌어 올릴 수 있도록 C# 잡 시스템에 플레이백이 통합되어 디스크로부터 데이터를 읽어들인 다음 여러 스레드를 통해 Unity로 스트리밍합니다.

타임라인 레코더

플레이백 스트리밍과 유사하게 타임라인 USD 레코더 트랙을 추가하면 지정된 프레임 범위 내에서 애니메이션을 캡처할 수 있습니다. 레코더 트랙을 추가하려면 기존의 타임라인을 오른쪽 마우스로 클릭한 다음 “Formats.Unity.USD > Usd Recorder Track”을 선택하여 새로운 트랙을 추가합니다. 그 다음 레코더 트랙을 오른쪽 마우스로 클릭하고 “Add USD Recorder Clip”을 선택하여 레코더 클립을 추가합니다.

어트리뷰트 인스펙터

때에 따라서는 파일에서 존재하는 상태 그대로의 기본 USD 데이터를 검사해 보는 것이 도움이 되기도 합니다. 이 데이터 검사는 대부분의 경우 usdview와 같은 외부 뷰어를 사용하지만, Unity상에서 UsdPrimSource 컴포넌트를 확장하여 직접 검사해볼 수도 있습니다. 일단 UsdPrimSource를 확장해보면 기본 USD Prim(USD에서 게임 오브젝트에 해당)상에 작성한 모든 속성치를 검사할 수 있습니다.

임의의 속성에 대한 USD 선언도 확인할 수 있는데, 이는 디버깅에 유용하게 활용할 수 있으며 또한 데이터가 원래 작성된 방법을 살펴볼 수 있습니다. 또한 이 출력에는 공식적인 스키마의 일부일 경우 속성과 관련된 기술 문서가 포함되어 있습니다.

다음 단계

USD Unity SDK의 최신 버전에서는 과거 어느 때보다 Pixar의 USD를 설치 및 가동시키는 과정이 간편해졌습니다. 이와 같은 도구를 통해 Unity에서 장편 영화 규모의 파이프라인을 구축하는 것도 가능합니다. USD 레이어를 활용하면 여러 아티스트가 파일 잠금으로 서로 차단되지 않고 하나의 에셋에 대해 병행으로 작업하는 비차단 워크플로가 가능해 집니다.

유니티는 크리에이터가 많을 수록 더 나은 세상이 된다고 믿으며, 여러분이 어떤 작품을 제작하고 있는지 궁금합니다. 포럼에서 공유해보세요!

 

7 코멘트

코멘트 구독

코멘트를 달 수 없습니다.

  1. Thank you, Jeremy, for all your work bringing this to fruition.

  2. Thanks for this, I’m needing AR asset streaming for 8 different projects, and USD is the route I’m going to take. GLTF/Umbra is going to take a beating on this one.

  3. Is there a way to update the contents of the USD and see those changes updated in the unity scene? I don´t seem to be able to update it unless I reimport the USD.

    1. There is a refresh button in the upper right corner of the UsdAsset component, is that what you’re looking for? The API that this button calls is also publicly exposed on the UsdAsset MonBehaviour.

      If that is still too heavy, the SetTime( ) API is what Timeline uses and is optimized for playback, if what you want is a super light-weight update (just for deforming points, etc).

    2. There is a refresh button in the upper right corner of the UsdAsset component, is that what you’re looking for? The API that this button calls is also publicly exposed on the UsdAsset MonBehaviour.

      If that is still too heavy, the SetTime( ) API is what Timeline uses and is optimized for playback, if what you want is a super light-weight update (just for deforming points, etc).

  4. This is awesome news! Does this preview include USDZ support to allow for runtime importation of USDZ models for Unity-based AR applications?

    1. USDZ *export* is fully supported for creating AR models, but import support is currently limited (it does not yet support importing textures from USDZ).