2.1 Isaac Sim 작업 환경 이해하기
2.1.1 Stage, simulation, rendering은 같은 것이 아니다
Isaac Sim 장면을 구성할 때 세 층을 구분하면 문제를 빠르게 진단할 수 있다.
- USD Stage: Prim과 Attribute로 저장되는 장면 명세다. 파일로 저장할 수 있는 선언적 상태이다.
- Physics simulation: Stage의 물리 schema를 읽어 PhysX가 시간에 따른 상태를 계산한다.
- Rendering: Stage의 geometry, material, light, camera를 읽어 픽셀을 생성한다.
Stage에 큐브가 보인다고 해서 그 큐브가 중력의 영향을 받는 것은 아니다. USD Prim에는 물리 기능이 기본으로 활성화되지 않으며, rigid body와 collision API를 별도로 적용해야 한다. 반대로 viewport에서 숨긴 충돌 형상도 collision API가 유지되면 물리 계산에 참여할 수 있다. 이 분리는 Isaac Sim Physics Simulation Fundamentals의 기본 원칙이다.
2.1.2 GUI, Script Editor, Standalone Python
Isaac Sim은 여러 개발 방식을 제공한다. 공식 Development Methods는 GUI/Extension과 Standalone Python의 차이를 설명한다.
| 방식 | 적합한 작업 | 시간 제어 | 주요 위험 |
|---|---|---|---|
| GUI | 첫 장면 구성, 속성 탐색, 육안 디버깅 | Play 버튼 중심 | 수작업 변경이 기록되지 않으면 재현하기 어렵다 |
| Script Editor | 실행 중 Stage 수정, 짧은 실험 | 비동기 실행 고려 | physics/render step과 callback 순서를 놓치기 쉽다 |
| Standalone Python | 반복 실험, 데이터 생성, headless 실행 | 코드가 step을 직접 제어 | 앱 초기화 전에 Omniverse 모듈을 import하면 실패한다 |
Standalone 스크립트에서는 SimulationApp을 가장 먼저 생성한 뒤 pxr, omni 모듈을 import한다. code/create_physx_scene.py가 이 패턴을 사용한다. API는 릴리스에 따라 모듈 경로가 바뀔 수 있으므로, 책의 예제를 그대로 복사하기 전에 설치된 릴리스의 SimulationApp API와 release notes를 확인한다.
2.1.3 재현 가능한 Stage 규칙
팀 프로젝트에서는 다음 규칙을 권장한다.
/World/PhysicsScene,/World/Robot,/World/Environment,/World/Objects,/World/Sensors,/World/Lights,/World/Materials처럼 역할별 namespace를 정한다.- Stage의 up axis와 meters-per-unit을 명시한다. 이 책은 Z-up, 1 unit = 1 m를 사용한다.
- asset 파일은 reference로 연결하고 실험별 변경은 별도 layer에 override한다.
- 랜덤화 seed, physics step, render step, solver 설정을 실험 메타데이터에 기록한다.
- 시각 재질과 물리 재질의 Prim 경로를 분리한다.