[visionOS] USD가 뭐야? ft. Reality Composer

DAMIN KIM
daily-monster
Published in
8 min readMar 6, 2024

안녕하세요 수요괴물 damin 입니다!🙌

최근에 visionOS를 공부하면서 3D 에셋을 사용할때 USD 라는 파일 형식을 많이 보게 되었는데 이전에 본적이 없고 제대로 써본 적도 없는 개념이라 오늘은 간단히 USD 파일 형식에 대해서 좀 알아보려고 합니다~
( 틀린 내용이 있을 수 있으니 댓글로 피드백 부탁드립니다.🙇‍♂️)

What is USD?

Universial Scene Description 의 약자로 3D 에셋을 표현하기 위해 Pixar에서 만든 파일 형식으로 다양한 3D 에셋을 컴파일하고 사용할 수 있는 최초의 오픈소스 소프트웨어 입니다.

기존에 다양한 3D 툴들에 따라 각각의 파일 형식들이 존재했는데 일반적으로 3D 에셋에 사용되는 .obj, .fbx 형식부터 Maya — .mb, 3DS Max — .max, Unreal엔진 — .uasset 등 여러가지 형식으로 나뉘어져 있었습니다.

그러나 USD라는 파일 형식이 다른 3D 파일 형식들과는 다르게 중요한 이유는 USD 파일 형식을 통해서 다른형식으로 만들어지 3D 파일을 USD로 만들 수 있고, 여러가지 툴들에서 특정 파일 형식이 아닌 USD라는 하나의 통합적인 파일 형식을 지원함으로써 다양한 플랫폼의 유저간의 협업이 용이해졌고, 또한 현재 애플과 엔비디아 같은 거대 기업들 부터 에픽게임즈 같은 게임 개발사, 제조, 영화 등등 다양한 산업분야에서 차세대 3D 표준 플랫폼으로써 USD를 지원을 하고 있기 때문이죠.

USD 파일 형식 타입

USD가 지원하는 형식은 4가지로 나뉘어집니다.

  • .usd — 기본 형식으로 일반 텍스트 파일과 바이너리 파일로 이루어져있습니다.
  • .usdz — 이 포맷은 usd에서 z가 붙었는데 material, texture 등의 3D 에셋들을 압축해 놓은 zip 파일 입니다.
  • .usda — ascii 기반의 USD 파일로 일반 텍스트 파일 형식입니다.
  • .usdc — 바이너리로 된 파일이라 직접적으로 읽을 수 없습니다.

위 형식중에서 저희가 visionOS 프로젝트를 만들면서 사용하게 될 형식은 USDA 와 USDZ이므로 이 형식들에 대해서 좀 더 알아볼게요!

USDA, USDZ with Reality Composer

USDA

우선 Reality Composer Pro로 씬을 생성하면, USDA 형식으로 씬 파일이 생성됩니다.

씬의 파일 형식이 .usda

씬에다가 Cube 모양의 에셋만 추가를 하였는데 이 .usda 파일을 text 에디터로 열어볼게요

#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)

def Xform "Root"
{
def Cube "Cube" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = </Root/Cube/DefaultMaterial>
double size = 0.2

def Material "DefaultMaterial"
{
prepend token outputs:surface.connect = </Root/Cube/DefaultMaterial/DefaultSurfaceShader.outputs:surface>

def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
}
}
}

짠 요렇게 usda 파일이 읽을 수 있는 USD 스크립트 작성된 텍스트로 열립니다. USDA는 이러한 정보를 사람이 읽을 수 있는 텍스트 형식으로 표현한 것입니다.

스크립트를 보면 “Root”라는 Xform (변형 노드) 아래에 “Cube”라는 이름의 Cube 를 정의하고 있으며, 이 Cube는 “DefaultMaterial”이라는 재질을 바인딩하여 사용하고, “DefaultSurfaceShader”는 이 재질의 셰이더로, 기본적인 물리 기반 렌더링 속성을 정의합니다. 이 스크립트들이 Reality Composer Pro에서 UI로 Cube를 추가하니 생긴 스크립트에요(여러 에셋이나 애니메이션 등을 추가하면 스크립트가 그만큼 늘어나겠죠?). USDA에서는 이런 스크립트를 통해 특정 3D 씬을 구성하는 방법을 설명해줍니다.

USDZ

USDZ는 이름 그대로 USD Zip 파일로써 USD 파일 형식의 압축 버전입니다.

USDZ 형식은 Pixar와 Apple의 협력을 통해 개발되었으며 iOS 및 macOS 기기에서 증강 현실(AR) 콘텐츠를 쉽게 볼 수 있도록 만들어졌습니다. USDZ는 복잡한 3D 모델, 애니메이션, 텍스처, 셰이딩 정보 등을 포함한 전체 3D 씬을 단일 파일로 패키징하여, 공유 및 배포를 간소화합니다. 이 포맷은 특히 애플의 ARKit와 잘 통합되어 사용자들이 증강 현실 환경에서 3D 객체를 실시간으로 경험할 수 있게 합니다.

특징

  • 단일 파일 포맷: USDZ는 여러 리소스와 애셋을 하나의 파일로 압축하여 관리합니다. 이는 배포 및 공유를 용이하게 합니다.
  • 무손실 압축: 이 포맷은 무손실 압축을 사용하여, 원본 데이터의 품질을 유지하면서도 파일 크기를 최소화합니다.
  • 증강 현실 호환성: USDZ는 Apple의 ARKit과 통합되어, iPhone과 iPad에서 증강 현실 경험을 제공하는 데 최적화되어 있습니다.
  • 광범위한 지원: Adobe Creative Cloud와 같은 다양한 디자인 및 3D 모델링 소프트웨어에서 직접 USDZ 파일을 생성하고 편집할 수 있는 기능을 제공합니다.

USDZ 포맷은 증강 현실 콘텐츠의 생성, 공유 및 표시를 단순화함으로써, 디자이너와 개발자가 보다 쉽게 AR 애플리케이션을 개발하고 배포할 수 있게 돕습니다. 이러한 특성 덕분에, USDZ는 증강 현실 분야에서 중요한 파일 형식 각광 받고 있습니다.

자 그럼 실제로 위에서 Reality Composer Pro로 만든 USDA 파일을 USDZ 로 변환하는 방법을 알아보겠습니다.

위 링크를 통해 Reality Converter 를 다운 받을 수 있는데 이 프로그램을 통해서 다른 USD 파일 및 .obj, .gltf, USDZ 파일로 쉽게 변환하고 커스터마이징 할 수 있습니다.
다운로드한 Reality Converter를 실행해서 왼쪽 위 import 버튼을 통해 USD파일을 import 하면 아래처럼 3D 에셋이 나타납니다.

여기서 3D 에셋의 material 프로퍼티를 나만의 texture로 커스텀할 수 있고, 파일의 메타데이터를 수정할 수 있습니다.

그리고 오른쪽 위 export 버튼을 통해 USDZ 파일로 변환할 수 있는데 이때 2가지 옵션을 선택할 수 있습니다. (1. 높은 품질, 높은 용량 2. 낮은 품질, 낮은 용량)

USDA와 USDZ 의 차이점

USDA의 경우 텍스트 편집기로 열었을 때 봤듯이 3D 씬이 스크립트로 표현되어 있기 때문에 Reality Composer Pro 등의 툴로 구조를 설계하고 편집하기 좋습니다 때문에 개발 단계에서는 USDA 파일로 씬을 개발하고 수정하면서 사용할 수 있습니다.

그러나 USDA보다 USDZ 형식이 AR에 더 최적화 되어있기 때문에 실제 배포시에는 USDA 파일을 USDZ 파일로 변환하여 배포하는 것이 좋습니다.

visionOS 프로젝트를 만들어보면서 3D 에셋을 추가하기 위해 USD 라는 파일 형식을 처음 접했을때는 USDA, USDZ 등 여러가지 파일 형식이 있어서 어떻게 다른지 좀 헷갈렸는데 이렇게 간단하게라도 개념을 정리해보니 언제 어떤 파일을 사용해야 하는지 알게 된 것 같습니다.

그럼 오늘도 글 읽어주셔서 감사드리고 다음주에 뵐게요~! 💪

--

--