Isaac Sim 한글 가이드

NVIDIA Isaac Sim 5.1/6.0 핵심 장점과 헤드리스로 직접 검증한 데모

03. OpenUSD 기반 씬

Scene · 검증 환경: Isaac Sim 6.0.0-dev2 / RTX PRO 6000 Blackwell

Isaac Sim 씬은 처음부터 끝까지 OpenUSD다. 메시·머티리얼·라이트뿐 아니라 UsdPhysics(질량·관절), SemanticLabel(클래스 라벨), UsdLux(라이트), UsdShade(MDL/PBR)까지 모두 USD 스키마로 정의된다. 그래서 한 .usd 파일이 "학습 데이터 + 시뮬레이션 설정 + 머티리얼"을 다 담는다.

이 기능의 강점

구현 방법

인스턴싱: UsdGeom.PointInstancerCreatePrototypesRel로 프로토타입 등록, positions/protoIndices 배열 채움. 변환은 인스턴서 prim 레벨 Xformable.AddRotateZOp 등으로 그룹 단위 적용.

최소 데모

Xform / Mesh / PointInstancer 계층으로 5×5 격자 인스턴싱.
Xform / Mesh / PointInstancer 계층으로 5×5 격자 인스턴싱.

검증 결과

5×5 격자에 동일 큐브 인스턴싱, 인스턴서 회전 20도 일괄 적용이 결과 PNG에 보임.

핵심 코드 발췌

from pxr import UsdGeom, Vt, Gf

proto = UsdGeom.Cube.Define(stage, "/World/Prototypes/Cube")
inst = UsdGeom.PointInstancer.Define(stage, "/World/Instancer")
inst.CreatePrototypesRel().SetTargets([proto.GetPath()])
pos, idx = [], []
for i in range(5):
    for j in range(5):
        pos.append(Gf.Vec3f((i-2)*1.2, (j-2)*1.2, 0.3))
        idx.append(0)
inst.CreatePositionsAttr().Set(Vt.Vec3fArray(pos))
inst.CreateProtoIndicesAttr().Set(Vt.IntArray(idx))
UsdGeom.Xformable(inst).AddRotateZOp().Set(20.0)
코드 다운로드 (zip)

실무 예제 — Franka USD의 VariantSet (Gripper × Mesh) 시연

NVIDIA Franka USD는 Gripper (Default / AlternateFinger), Mesh (Basic / Quality) 등의 VariantSet을 가지고 있다. Python API prim.GetVariantSet(name).SetVariantSelection(value) 한 줄로 동일 USD를 다른 형상으로 렌더할 수 있다.

VariantSet
VariantSet "Mesh=Quality" + "Gripper=AlternateFinger"로 렌더한 Franka — 그리퍼 핑거와 메시 디테일이 변경된 상태.

스크립트가 동일한 franka.usd를 3개 다른 variant 조합으로 reference한 결과 — 같은 base mesh + variant override 만으로 형상 변형이 가능. 실무에선 sim-to-real 격차를 줄이는 도구 풀의 일부.

실무 데모 코드

from isaacsim.core.utils.stage import add_reference_to_stage
from isaacsim.storage.native import get_assets_root_path

franka_url = get_assets_root_path() + \
    "/Isaac/Robots/FrankaRobotics/FrankaPanda/franka.usd"

robot = add_reference_to_stage(usd_path=franka_url, prim_path="/World/Franka")
robot.GetVariantSet("Gripper").SetVariantSelection("AlternateFinger")
robot.GetVariantSet("Mesh").SetVariantSelection("Quality")
실무 데모 코드 zip