USDKit: Apple 플랫폼을 위한 Swift 네이티브 OpenUSD
WWDC 2026에서 한 Apple 엔지니어가 Swift로 3D 장면을 열더니, 작업대에 오실로스코프가 빠져 있는 것을 발견하고는 그 에셋을 가벼운 참조로 끌어와 제자리로 옮긴 뒤 보조 기술용으로 레이블을 붙이고, 장면 전체를 7배 더 작은 크기로 내보냈습니다. 이 모든 것을 단 몇 줄의 코드로 해낸 것입니다.1 이 데모가 바로 USDKit의 핵심 주장입니다. 이제 Apple은 OpenUSD를 일급 Swift API로 만들어 주는 시스템 프레임워크를 제공합니다. 더 이상 직접 손으로 바인딩하는 C++ 라이브러리가 아닙니다. 스테이지를 불러오고, 에셋을 함께 합성하고, prim에 데이터를 작성하고, 압축된 패키지로 내보내는 이 모든 과정을 Swift 개발자가 이미 알고 있는 패턴으로 처리할 수 있습니다.
이 글은 WWDC 2026 세션 285 “Discover USDKit and what’s new in OpenUSD”를 바탕으로 USDKit의 이야기를 짚어 봅니다. 아래 내용은 모두 이 세션에서 직접 가져온 것입니다.
TL;DR
USDKit는 Swift 앱에 일급 USD 지원을 제공하며, “RealityKit 및 Spatial Preview와의 깊은 통합이 기본으로 내장”되어 있어 기존 USD 개발자와 Swift 초심자 모두를 각자의 자리에서 맞이합니다.1- 핵심 루프는 열기, 수정하기, 내보내기입니다.
USDStage이니셜라이저로 스테이지를 만들거나USDStage.open으로 기존 스테이지를 열고(throw하므로try를 사용합니다), 컴포지션을 통해 에셋을 참조하며,addTransformOperation으로 배치한 뒤, 압축된exportPackage를 작성합니다.1 - 솔직히 밝히는 한 가지 한계가 있습니다.
USDKit는 “모든 스키마별 API를 제공하지는 않기” 때문에, 접근성을 작성하려면AccessibilityAPI스키마를 적용한 다음, 명세에 정의된 이름을 사용해 레이블과 설명 속성을 이름으로 직접 만들어야 합니다.1 - 새로운 USD 프리미티브 타입인
Particle Fields는 “Gaussian Splats뿐 아니라 다른 표현 방식도 기술할 수 있어”, 스플랫을 메시 및 머티리얼과 같은 장면 안으로 처음으로 끌어들입니다.1 - 메시 압축에 AVIF 텍스처 압축을 더하면 평균 에셋의 크기가 7배 작아집니다.
exportPackageAPI, Preview, 또는usdcrush커맨드라인 도구를 통해 이용할 수 있습니다.1
올해 OpenUSD에서 무엇이 바뀌었나
Apple의 Spatial Standards 팀 소속 Lee가 OpenUSD 기반에 관한 업데이트 이후 7:00부터 USDKit를 소개합니다.
USD는 Apple이 구축하는 공간 경험의 근간이며, 그 뒤를 받치는 오픈 소스 프로젝트인 OpenUSD는 본래 Pixar가 개척한 것입니다.1 USD는 홀로 작동하지 않습니다. 머티리얼 기술을 위해 Lucasfilm에서 비롯된 MaterialX와 통합되며, 올해 새롭게는 DreamWorks에서 비롯되어 볼류메트릭 데이터를 끌어들이는 OpenVDB와도 통합됩니다.1 Apple은 올해 자사 플랫폼 전반에서 이 셋을 모두 업데이트했으며, Academy Software Foundation의 일원으로서 MaterialX와 OpenVDB 같은 프로젝트에 직접 기여하고 있습니다.1
표준화 작업은 코드보다 더 깊은 곳까지 미칩니다. Alliance for OpenUSD의 창립 멤버로서 Apple은 “USD 코어에 대한 최초의 공식 명세를 발표하는 데 기여했으며, 지오메트리, 머티리얼, 피직스에 대한 도메인 명세도 이미 진행 중”입니다.1 이 워킹 그룹들은 공개되어 있으며, 세션이 개발자들에게 던지는 메시지는 업계가 3D 콘텐츠를 주고받는 방식에 목소리를 내고 싶다면 직접 참여하라는 것입니다.
프리미티브 수준에서 가장 눈에 띄는 소식은 Particle Fields입니다. Gaussian Splats는 장면을 “수백만 개의, 흐릿하게 겹쳐진 입자로 포착하며, 각 입자는 위치, 색상, 불투명도를 인코딩해 복잡한 실세계 환경을 충실히 재구성”합니다.1 Apple은 NVIDIA, Adobe, Pixar를 비롯한 Alliance for OpenUSD 파트너들과 협력해, “Gaussian Splats뿐 아니라 빠르게 진화하는 이 연구 분야의 다른 표현 방식도 기술할 수 있는” 새로운 USD 프리미티브 타입으로 Particle Fields를 선보였습니다.1 실질적인 성과는 이렇습니다. 이제 스플랫은 “메시, 머티리얼, 그 밖의 전통적인 3D 데이터와 같은 장면 안에 처음으로” 자리합니다.1 이 표현은 의도적으로 겸손합니다. Particle Fields는 스플랫과 유사한 표현 방식을 기술하며, 진화하는 연구 분야를 담는 컨테이너이지 완성된 스플랫 렌더러 명세가 아닙니다.
USDKit의 멘탈 모델
USDKit는 Swift 앱에 일급 USD 지원을 제공하며 RealityKit 및 Spatial Preview와의 깊은 통합이 기본으로 내장되어 있습니다. 설계 목표는 양방향으로 작동합니다. 이미 USD를 아는 개발자는 개념이 익숙하게 느껴지고, USD가 처음인 Swift 개발자는 이미 알아볼 수 있는 패턴과 패러다임을 얻습니다.1
이 API를 떠받치는 USD 개념이 몇 가지 있습니다. Layer는 하나의 데이터 파일입니다. 레이어는 컴포지션이라는 기능을 통해 결합되며, Stage는 “하나 이상의 레이어가 합성된 결과”로서 전체 장면을 들여다보는 창입니다.1 장면 안의 모든 것은 USD Prim입니다. 각 prim에는 그 타입을 정의하는 Schema가 있고, “실제 데이터를 담는” Attributes와 “prim 자체에 관한 정보를 기술하는” Metadata가 있습니다.1 이 네 단어, 즉 layer, stage, prim, schema가 나머지 워크플로 전체를 이끕니다.
열기, 수정하기, 내보내기
세션은 하나의 구체적인 루프를 짚어 갑니다. 스테이지를 불러오고, 수정을 가하고, 결과를 내보내는 흐름입니다.1
“간단한 USDStage 이니셜라이저”를 사용하면 메모리에 새 스테이지를 만들 수 있습니다.1 기존 장면을 다루려면 파일 URL을 USDStage.open에 전달해 엽니다. 파일 접근이 따르기 때문에 “throw할 수 있어서 try를 사용합니다”라고 합니다.1 장면을 불러온 엔지니어는 빠져 있는 오실로스코프를 찾으려고 스테이지 계층 구조를 훑지만 아무것도 찾지 못합니다. 그래서 “그것을 두고 싶은 경로에 새 transform prim을 정의”합니다.1
설계가 진가를 발휘하는 지점이 바로 컴포지션입니다. 에셋의 데이터를 스테이지에 복사하는 대신 “그것에 대한 가벼운 참조를 추가”합니다.1 에셋은 다른 누군가가 작성한 자체 파일, 즉 레이어 안에 존재하고, 그것을 끌어옵니다. “모두가 장면에서 자기 몫을 작업하고, USD가 그것들을 모두 하나로 모아 줍니다.” 그리고 원작자가 가한 어떤 업데이트도 “저는 그저 그 사람의 파일을 참조하는 것뿐이므로 제 스테이지에도 자동으로 나타납니다.”1
참조된 에셋의 배치에는 addTransformOperation을 사용합니다. 이는 “prim에 올바른 속성을 만들고 transform 순서를 자동으로 업데이트하는 일을 처리”해 줍니다.1 그 뒤 엔지니어가 translation 값을 설정하면 에셋이 작업대 위로 옮겨집니다. 이 패턴이 중요한 이유는, 의도(이 prim을 옮긴다)를 어떤 transform 속성이 어떤 순서로 존재하는지에 대한 관리 작업으로부터 분리해 주기 때문입니다.
접근성 작성, 그리고 솔직한 한계
Apple은 “USD 안에서 직접 접근성 메타데이터의 표준화를 추진”해 왔습니다. 3D 객체에 대한 보조 레이블과 설명을 업계 전반에서 어떻게 정의할지 확립하고, 발전할 수 있도록 유연하게 구축한 것입니다.1 이 메타데이터는 USD에 네이티브이기 때문에 “어떤 USD API로도 작성할 수 있으며”, Apple은 도입을 돕기 위해 Blender와 Maya에 직접 지원을 추가했습니다.1
여기 분명히 짚고 넘어가야 할 주의 사항이 있습니다. 접근성 데이터를 추가하려면 먼저 prim에 AccessibilityAPI 스키마를 적용합니다. 이렇게 하면 해당 스키마가 존재함을 알리는 메타데이터가 추가됩니다. 그런 다음, 세션의 표현을 빌리면 “USDKit는 모든 스키마별 API를 제공하지는 않으므로, 저는 명세에 정의된 올바른 속성 이름을 반드시 사용하면서 레이블과 설명 속성을 직접 만듭니다.”1 즉 USDKit는 USD에 손을 뻗을 수 있는 Swift 네이티브한 방법을 제공하지만, 모든 스키마를 타입이 지정된 API로 감싸 주지는 않습니다. 다루지 않는 스키마에 대해서는 속성을 이름으로 작성해야 하며, 그 이름을 명세에 맞게 정확히 맞추는 책임은 여러분에게 있습니다. USDKit는 USD로 통하는 일급 문이라고 여기되, 모든 스키마에 대한 완전한 타입 커버리지를 보장하는 것으로 여기지는 마세요.
내보내기 호출에 함께 실리는 압축
고품질 프로덕션 USD 장면은 “크기가 수 기가바이트까지 커질 수 있으며”, 데모의 ALab 장면이 그 실제 사례입니다.1 Apple은 Alliance for Open Media와 협력해 “메시 크기를 최대 90%까지 줄일 수 있는 최첨단 메시 압축 코덱”을 추가했습니다.1 기존 AVIF 텍스처 압축과 결합하면 “평균 에셋이 이제 시각적 품질을 해치지 않으면서 7배 작아집니다.”1
이 코덱은 워크플로 옆이 아니라 그 안에 자리합니다. 압축 지원은 “exportPackage API에 곧바로 내장”되어 있습니다. 출력 URL을 스테이지의 exportPackage 메서드에 전달한 다음, 내보내기 옵션을 통해 텍스처와 메시 압축을 활성화하면 됩니다.1 코드를 작성하지 않는다면 “Preview에서 직접, 또는 usdcrush 커맨드라인 도구를 통해 동일한 결과를 얻을 수 있습니다.”1 Apple은 이 압축을 OpenUSD 프로젝트로 가져오기 위해 Pixar와 협력하고 있으며, 그렇게 해서 생태계 전체가 혜택을 누리도록 하고 있습니다.1
USDKit가 플랫폼의 나머지와 만나는 곳
이 프레임워크는 단일 앱의 범위를 훌쩍 넘어서는 경험을 뒷받침합니다. 이제 Mac의 Preview는 핵심적인 3D 편집을 수행하며, Preview와 Quick Look은 “렌더러를 선택할 수 있게” 해 줍니다. RealityKit는 “Mac, iPhone, iPad, Vision Pro 전반에 걸친 일관성”을 제공하고, Storm은 “기존 프로덕션 파이프라인이 필요한 이들을 위해 계속 사용 가능”하며, 완전히 새로운 Raytracer는 정확한 반사, 정밀한 그림자, 물리적으로 올바른 조명으로 가장 복잡한 장면을 겨냥합니다.1 이 세 렌더러는 모두 OpenPBR을 지원하며, 이는 “USDPreviewSurface에 비해 크게 향상된 것으로, 더 풍부하고 더 물리적으로 정확한 머티리얼을 워크플로에 가져다줍니다.”1
Preview는 macOS 27의 새로운 Spatial Preview 프레임워크와 통합되어, 여러분의 Mac과 Vision Pro의 Quick Look 사이를 직접 연결합니다. 편집 내용이 여러분의 공간에 실시간으로 나타나고, SharePlay를 통해 팀 전체를 같은 장면으로 불러들일 수 있습니다.1 웹에서는 Safari가 Model 태그를 도입했습니다. 이는 USD 모델을 임베드해 macOS와 iOS에서는 인터랙티브하게 렌더링하고, visionOS에서는 “페이지를 박차고 나와 사용자의 공간 안에, 공간적으로 제시”됩니다.1
USDKit는 시스템이 제공하고 깊이 통합되어 있다는 점에서 Apple 플랫폼의 앱 개발자에게 권장되는 경로이며, 세션의 나머지 경험들도 그 위에 구축되어 있습니다.1 USDKit가 다루는 범위를 넘어서는 고급 또는 크로스플랫폼 요구에 대해서는, SwiftUSD가 Swift Package Manager를 통해 오픈 소스 Swift 바인딩을 제공하고, C++ 코드베이스는 OpenUSD를 프레임워크로 직접 임베드할 수 있습니다. 이 셋은 모두 같은 기반 위에 있으므로 “여러분의 USD 파일은 이들 사이를 자유롭게 오갑니다.”1
기억해 둘 만한 구분이 있습니다. 이것은 프로그래밍 방식의 경로입니다. 비주얼 도구로 장면을 손수 작성하는 일은 Reality Composer Pro의 몫이며(RealityKit 및 Reality Composer Pro 멘탈 모델 참고), USDKit는 캔버스가 아니라 코드가 일을 할 때 손을 뻗는 API입니다.
시작하는 법
세션은 오늘 당장 따라 할 수 있는 짧은 경로로 정리됩니다.
- 스테이지를 엽니다.
USDStage이니셜라이저로 메모리에 스테이지를 만들거나, 파일 접근이 throw할 수 있으므로try안에서 파일 URL을USDStage.open에 전달해 기존 장면을 엽니다.1 - 복사하지 말고 합성합니다. 원하는 경로에 transform prim을 정의한 뒤, 외부 레이어에 대한 가벼운 참조를 추가합니다. 그러면 원작자의 업데이트가 여러분의 스테이지로 자동으로 흘러들어 옵니다.1
- 의도를 담아 배치합니다.
addTransformOperation을 호출해 올바른 속성과 transform 순서를 만든 다음 translation 값을 설정합니다.1 - 접근성을 솔직하게 작성합니다.
AccessibilityAPI스키마를 적용한 뒤, USDKit가 모든 스키마별 API를 제공하지는 않으므로 명세가 정의하는 이름으로 레이블과 설명 속성을 만듭니다.1 - 작게 내보냅니다. 텍스처와 메시 압축을 활성화해 스테이지의
exportPackage를 호출하거나, 코드를 작성하지 않는다면usdcrush를 실행합니다.1
FAQ
USDKit란 무엇인가요?
USDKit는 Swift 앱에 일급 OpenUSD 지원을 제공하는 Apple의 새 시스템 프레임워크로, RealityKit 및 Spatial Preview와의 깊은 통합이 기본으로 내장되어 있습니다. USD 개념(레이어, 스테이지, prim, 스키마)을 Swift 패턴을 통해 노출하므로, 손으로 C++ 라이브러리에 바인딩하지 않고도 스테이지를 열고, 에셋을 합성하고, 데이터를 작성하고, 내보낼 수 있습니다. Apple은 자사 플랫폼의 앱 개발자에게 출발점으로 이를 권장합니다.1
USDKit로 USD 장면을 불러오고 수정하려면 어떻게 하나요?
파일 URL을 USDStage.open에 전달해 try 안에서 장면을 열거나(파일 접근은 throw할 수 있습니다), USDStage 이니셜라이저로 새 스테이지를 만듭니다. 외부 에셋을 추가하려면 데이터를 복사하는 대신 transform prim을 정의하고 그 레이어에 대한 가벼운 참조를 추가합니다. 배치하려면 addTransformOperation을 호출하는데, 이는 올바른 속성과 transform 순서를 설정해 주며, 그다음 translation 값을 설정하면 됩니다.1
USDKit는 모든 USD 스키마를 다루나요?
아니요. 세션은 USDKit가 “모든 스키마별 API를 제공하지는 않는다”고 분명히 밝힙니다. 예를 들어 접근성의 경우, AccessibilityAPI 스키마를 적용한 다음 명세에 정의된 정확한 속성 이름을 사용해 레이블과 설명 속성을 직접 작성합니다. USDKit는 USD로 통하는 일급 Swift 문이지, 모든 스키마를 감싸는 타입 지정 래퍼가 아닙니다.1
OpenUSD의 Particle Fields와 Gaussian Splats란 무엇인가요?
Particle Fields는 Apple이 NVIDIA, Adobe, Pixar를 비롯한 Alliance for OpenUSD 파트너들과 함께 선보인 새로운 USD 프리미티브 타입입니다. 이는 이 연구 분야의 “Gaussian Splats뿐 아니라 다른 표현 방식도 기술할 수 있습니다.” Gaussian Splats는 위치, 색상, 불투명도를 인코딩한 수백만 개의 겹쳐진 입자로 장면을 포착합니다. Particle Fields 덕분에 스플랫은 메시 및 머티리얼과 같은 장면 안에 처음으로 자리할 수 있습니다.1
USDKit로 USD 에셋을 얼마나 작게 만들 수 있나요?
Alliance for Open Media와 함께 구축한 메시 압축 코덱은 메시 크기를 최대 90퍼센트까지 줄일 수 있으며, AVIF 텍스처 압축과 결합하면 평균 에셋이 시각적 품질을 해치지 않으면서 약 7배 작아집니다. 텍스처와 메시 압축은 exportPackage API, Preview, 또는 usdcrush 커맨드라인 도구를 통해 활성화하세요.1
USDKit는 RealityKit 및 Reality Composer Pro 멘탈 모델에 담긴 비주얼 작성 이야기에 대응하는 프로그래밍 방식의 짝이며, visionOS 27의 새로운 기능과 더 넓은 RealityKit 공간 멘탈 모델을 움직이는 바로 그 장면들에 소재를 공급합니다. 웹 쪽에서는 동일한 USD 에셋이 Safari가 올해 도입한 네이티브 HTML <model> 요소를 통해 렌더링됩니다. 시리즈 전체 허브는 Apple Ecosystem Series입니다.
References
-
Apple, WWDC 2026 session 285, Discover USDKit and what’s new in OpenUSD. Source for the OpenUSD foundation updates (
MaterialX,OpenVDB, the first formal core USD specification and Alliance for OpenUSD membership), theParticle Fieldsprimitive type describing Gaussian Splats and similar representations, theUSDKitframework and its RealityKit and Spatial Preview integration, the layer/stage/prim/schema concepts, the open-modify-export loop (USDStageinitializer,USDStage.openwithtry, Composition references,addTransformOperation,exportPackage), the accessibility workflow (AccessibilityAPIschema, authoring label and description attributes by name, and the statement that USDKit “does not provide all the schema-specific APIs”), mesh and AVIF texture compression (up to 90 percent mesh reduction, average asset seven times smaller, viaexportPackage, Preview, orusdcrush), the Preview renderer choices (RealityKit, Storm, Raytracer) andOpenPBRoverUSDPreviewSurface, theSpatial Previewframework on macOS 27, the Safari Model tag, and theSwiftUSDand C++ framework alternatives. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩