OpenUSD란 무엇인가?
NVIDIA Omniverse 면접 준비 첫날에 이해해야 할 5가지
최근 NVIDIA Korea의 Senior Omniverse Engineer - Physical Simulation, Digital Twins and Robotics 직무에 지원했다. 도시 디지털 트윈과 XR은 오래 연구했지만, 공고에서 중요하게 다루는 OpenUSD와 Omniverse는 아직 production 수준의 경험이 부족하다.
그래서 오늘부터 면접 준비를 겸해 직접 공부하고 실습한 내용을 기록한다. 목표는 짧은 시간에 전문가를 자칭하는 것이 아니다. 기존의 XR·IoT·3D 시각화·실시간 시스템 경험을 OpenUSD와 Omniverse 생태계로 얼마나 빠르게 전환할 수 있는지 확인하는 것이다.
OpenUSD는 단순한 3D 파일 형식이 아니라, 여러 도구와 작업자가 복잡한 3D 세계를 비파괴적으로 조립하고 수정하기 위한 장면 기술 및 합성 프레임워크다.
1. OpenUSD는 무엇인가?
USD는 Universal Scene Description의 약자다. 이름에서 중요한 단어는 File이 아니라 Scene Description이다.
OpenUSD는 Pixar에서 시작된 오픈소스 기술로, geometry, material, light, animation, physics 등의 정보를 하나의 계층적인 장면으로 조립한다. C++ 라이브러리와 Python binding도 제공하기 때문에 단순 저장 형식이 아니라 실제 3D 파이프라인을 구축하는 개발 플랫폼에 가깝다.
OpenUSD 공식 소개 문서에서도 대규모 장면의 교환과 조립, 원본을 훼손하지 않는 수정 방식을 핵심으로 설명한다.
2. FBX·OBJ와 무엇이 다른가?
FBX나 OBJ도 중요한 3D 교환 형식이다. 다만 OpenUSD의 강점은 모델 전달을 넘어 여러 자산과 작업자의 수정 내용을 합성(composition)하는 데 있다.
| 구분 | FBX·OBJ | OpenUSD |
|---|---|---|
| 중심 목적 | 모델·장면 전달 | 장면 조립과 협업 |
| 수정 방식 | 복사·재저장 중심 | 비파괴적 의견 추가 |
| 자산 재사용 | 제한적 | Reference 지원 |
| 대규모 장면 | 관리 부담 증가 | Layer·Payload 제공 |
3. 첫날 이해할 세 개념: Stage·Layer·Prim
Stage
여러 Layer의 내용이 합성되어 사용자가 최종적으로 바라보는 전체 장면이다.
Layer
장면의 일부 데이터 또는 수정 의견을 저장하는 단위다. 도시 기본 구조, 건물 geometry, 물리 속성, 센서 운영 데이터를 서로 다른 Layer로 분리할 수 있다.
Prim
Stage를 구성하는 기본 객체다. 건물과 센서뿐 아니라 여러 객체를 묶는 Xform과 Scope도 Prim이 될 수 있다.
/World
/World/City
/World/City/Building_A
/World/City/Sensor_01
4. Attribute와 Relationship
Attribute는 Prim이 가진 값이다. 센서라면 온도, 상태, 측정 단위, 갱신 시각 등이 해당한다. Relationship은 한 Prim이 다른 Prim이나 속성을 가리키는 연결이다.
“이 센서의 온도는 24.5도다.”
“이 센서는 Building_A를 감시한다.”
5. OpenUSD와 Omniverse의 관계
장면과 자산을 표현·조립하는 기반 기술
↓
Omniverse Kit
OpenUSD 기반 애플리케이션을 만드는 SDK
↓
Omniverse 앱·Isaac Sim
디지털 트윈·로보틱스·시뮬레이션 실행
OpenUSD가 공통 설계 언어라면 Omniverse Kit는 그 언어로 애플리케이션을 만드는 개발 도구다. PhysX는 물리 동작을 계산하고, Isaac Sim은 로봇과 센서가 포함된 시뮬레이션 환경을 제공한다.
내 디지털 트윈 경험을 OpenUSD로 다시 보기
| 기존 경험 | OpenUSD 관점 |
|---|---|
| 도시 IoT 데이터 | Operational Data Layer |
| 도시 3D 모델 | Geometry Asset |
| 실시간 센서 상태 | Prim Attribute |
| 반복 도시 객체 | Reference·Instancing |
오늘의 최소 실습: USDA 읽기
#usda 1.0
(
defaultPrim = "World"
metersPerUnit = 1
upAxis = "Z"
)
def Xform "World" {
def Xform "City" {
def Xform "Sensor_01" {
custom string sensorId = "TEMP-001"
custom double temperature = 24.5
custom string status = "Normal"
}
}
}
첫날에는 API를 외우는 것보다 OpenUSD가 해결하는 문제가 무엇인지 이해하는 편이 중요하다. 핵심은 파일 변환이 아니라 복잡한 장면의 조립, 재사용, 비파괴 수정과 협업이다.
면접 대비 복습 질문
- OpenUSD가 단순한 파일 형식이 아닌 이유는 무엇인가?
- Stage와 Layer는 어떻게 다른가?
- Prim Path는 무엇을 의미하는가?
- 센서 온도는 Attribute와 Relationship 중 어디에 해당하는가?
- Omniverse는 OpenUSD와 어떤 관계인가?
복습 질문 모범 답변
짧은 답변: OpenUSD는 3D 데이터를 저장하는 형식뿐 아니라 여러 자산과 수정 의견을 비파괴적으로 합성하고, 대규모 장면을 관리하는 장면 기술 프레임워크이기 때문이다.
Stage, Layer, Prim, Schema, Reference, Payload, Variant 같은 개념과 C++·Python API를 제공한다. 따라서 파일 교환을 넘어 협업 파이프라인과 3D 애플리케이션을 구축할 수 있다.
짧은 답변: Layer는 장면 데이터나 수정 의견을 담는 개별 단위이고, Stage는 여러 Layer가 합성되어 사용자에게 보이는 최종 장면이다.
투명 필름 한 장 한 장이 Layer라면, 필름을 순서대로 겹쳐 완성된 그림이 Stage다. 사용자는 Stage를 탐색하지만 실제 편집 내용은 특정 Edit Target Layer에 기록된다.
짧은 답변: Prim Path는 Stage의 계층 구조 안에서 특정 Prim을 유일하게 식별하는 주소다.
/World/City/Sensor_01은 World 아래 City, 그 아래
Sensor_01이라는 Prim이 있다는 뜻이다. 파일 시스템 경로와 비슷하지만
디스크의 파일 위치가 아니라 USD namespace 안의 객체 위치를 나타낸다.
짧은 답변: 온도는 센서 Prim이 가진 값이므로 Attribute에 해당한다.
예를 들어 custom double temperature = 24.5처럼 표현한다.
반면 센서가 어느 건물을 감시하는지는 다른 Prim을 가리키는 연결이므로
Relationship으로 표현할 수 있다.
짧은 답변: OpenUSD가 장면을 표현하고 합성하는 기반 기술이라면, Omniverse는 그 기반 위에서 협업·시뮬레이션·디지털 트윈 애플리케이션을 구축하고 실행하는 플랫폼이다.
Omniverse Kit는 OpenUSD Stage와 Prim을 중심으로 애플리케이션을 만들며, PhysX 물리와 RTX 렌더링 등의 NVIDIA 기술을 결합한다. Isaac Sim은 이 생태계에서 로보틱스 시뮬레이션을 제공하는 대표 애플리케이션이다.
OpenUSD 파일은 어떻게 열고 편집할까?
OpenUSD는 하나의 확장자만 사용하는 기술이 아니다. 학습·제작·배포 목적에 따라 다음 형식을 선택한다.
| 형식 | 특징 | 추천 용도 |
|---|---|---|
| .usda | 사람이 읽는 UTF-8 텍스트 | 학습·디버깅·Git 비교 |
| .usdc | 빠른 Crate 바이너리 | 대규모 장면·실제 제작 |
| .usd | 내부가 USDA 또는 USDC | 확장자 통일 파이프라인 |
| .usdz | USD·텍스처 등을 묶은 패키지 | 배포·Quick Look·AR |
OpenUSD 공식 FAQ에 따르면 .usd는 텍스트 또는 바이너리일 수 있다. 초보자는
내용을 직접 읽고 고칠 수 있는 .usda부터 시작하는 것이 좋다.
브라우징·편집 도구
- VS Code — USDA 텍스트와 Attribute를 직접 수정한다.
- usdview — OpenUSD 공식 장면 검사 도구다. Stage 트리, Prim, 속성, Layer 합성 결과를 3D 화면과 함께 살핀다.
- NVIDIA Omniverse USD Composer — Stage·Prim·재질·조명·물리·Layer를 시각적으로 편집한다. 공식 지원 환경은 RTX GPU가 있는 Windows/Linux이므로 iMac 직접 실행용으로는 적합하지 않다.
- macOS Preview·Quick Look — USDZ 파일을 빠르게 3D로 확인한다.
- Reality Composer Pro — Apple Silicon Mac에서 USD/USDZ 장면, 재질과 애니메이션을 편집한다. Apple RealityKit 제작에 특히 적합하다.
관련 문서: OpenUSD Quickstart와 usdview · USD Composer 요구사항 · Reality Composer Pro
직접 편집해 볼 USDA 예제
#usda 1.0
(
defaultPrim = "World"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "World" {
def Xform "SmartCity" {
def Cube "Building_A" {
double size = 2
double3 xformOp:translate = (0, 4, 0)
uniform token[] xformOpOrder = ["xformOp:translate"]
}
def Sphere "Sensor_01" {
double radius = 0.35
custom string sensorId = "TEMP-001"
custom double temperature = 24.5
custom string status = "Normal"
custom rel monitors = </World/SmartCity/Building_A>
}
}
}
위 코드를 텍스트 파일에 붙여 넣고 smart_city.usda로 저장한다.
그런 다음 VS Code에서 temperature나 위치를 수정하고, OpenUSD를
설치했다면 다음 명령으로 연다.
usdview smart_city.usda
USDA를 VS Code로 읽고 수정하기 → usdview로 Stage와 Prim 확인하기 → Apple Silicon Mac이라면 Reality Composer Pro로 시각적 장면 편집하기 → Omniverse 실습은 RTX Windows/Linux 또는 클라우드 GPU에서 진행하기.
다음 학습
다음 글에서는 OpenUSD의 진짜 핵심인 Composition을 살펴본다. Sublayer, Reference, Payload, Variant가 각각 어떤 문제를 해결하는지 스마트시티 자산을 예로 정리할 예정이다.
3D 작업 환경에 도움이 되는 도구
OpenUSD와 Omniverse를 공부하며 CAD·3D 도구를 자주 다룬다면 정밀한 포인팅과 장시간 작업에 맞춘 마우스도 살펴볼 수 있다. 아래 제품은 3Dconnexion의 CAD 작업용 유선 마우스다. 구매 전 macOS 지원 여부와 사용하는 프로그램과의 호환성을 반드시 확인하자.
3Dconnexion CadMouse Compact 상품 보기
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
이 글은 NVIDIA Omniverse 관련 직무 면접을 준비하며 작성한 개인 학습 기록입니다. 기술 설명은 OpenUSD 및 NVIDIA 공식 문서를 기준으로 계속 보완할 예정입니다.
0 댓글