USD로 씬을 조립한다
Isaac Sim에서 "씬(scene)"은 하나의 거대한 3D 파일이 아닙니다. USD(OpenUSD) stage 위에 올라간 prim(프림)들의 트리 입니다. 이 구조를 알면 "환경 하나에 로봇 여러 대를 어떻게 끼워 넣지?"가 자연스럽게 풀립니다.
Stage = 무대, Prim = 무대 위 모든 것
- Stage: 씬 전체를 담는 무대. 하나의 시뮬레이션 = 하나의 stage.
- Prim: 무대 위의 모든 노드. 메시·조명·카메라·로봇·물리 씬 — 전부 prim입니다.
- Prim path: 각 prim의 트리 주소. 파일 경로처럼 생겼습니다 (
/World/robot_0,/World/defaultGroundPlane).
도식 렌더링 중…
prim path가 트리 주소라는 점이 중요합니다. 나중에 "이 로봇의 바퀴 관절을 제어해" 라고 할 때, 그 관절을 prim path로 정확히 지목하기 때문입니다.
어떻게 조립하나 — Reference로 끼워 넣기
씬을 만드는 핵심 동작은 reference 입니다. 미리 만들어 둔 환경 USD, 로봇 USD를 stage의 특정 prim path 아래에 참조로 끼워 넣습니다. (Isaac의 add_reference_to_stage가 이 일을 합니다.)
도식 렌더링 중…
이 "참조" 방식의 장점은 큽니다.
- 재사용: 같은 로봇 USD를 여러 prim path에 reference 하면 → 같은 로봇 N대가 한 줄로 생성
- 비파괴: 원본 USD는 건드리지 않고, stage에서 override(위치·색·물성)만 얹음
- 합성: 환경 + 로봇 + 센서를 각각 다른 파일에서 가져와 한 무대에 합침
장애물처럼 런타임에 생기는 단순한 물체는 외부 파일 없이 stage에 기본 도형(Cube·Sphere·Cylinder) prim을 바로 정의해 추가합니다.
⚠️ 한 가지 원칙: 환경 로드에 실패했다고 빈 바닥(primitive)으로 슬쩍 대체하면 안 됩니다. 그건 "벽이 없는 세계"를 만들어 앞서 본 빈 지도 문제와 같은 거짓 성공을 낳습니다. 실패는 에러로 드러내는 게 맞습니다.
왜 USD인가
USD는 원래 픽사가 대규모 애니메이션 씬을 여러 아티스트가 충돌 없이 협업하려고 만든 포맷입니다. 그 "레이어·참조·override로 비파괴 합성" 철학이 로봇 시뮬레이션에 딱 맞았습니다 — 환경·로봇·센서·시나리오가 각각 독립적으로 진화하면서도 한 무대에서 합쳐지니까요. (USD의 레이어 합성 규칙은 별도 글에서 더 깊이 다룹니다.)
한 줄 정리
📌 Isaac Sim의 씬 = Stage(무대) 위의 Prim(프림) 트리. 환경·로봇은 미리 만든 USD를 reference로 끼워 넣고(같은 파일을 여러 번 참조하면 N대 복제), 단순 장애물은 기본 도형 prim으로 즉석 정의한다. prim path는 나중에 그 객체를 제어할 트리 주소다.
