이 글은 OpenUSD의 그래프 구조, 객체지향 특성, 실행 가능 스크립트 및 실제 포맷 형식에 대한 조사 내용을 요약 정리한다.
OpenUSD는 단순한 static 3D 데이터 포맷이 아니다. 계층적 씬 그래프 구조 위에 객체지향 데이터 모델과 동작 메커니즘까지 포함 가능한 확장형 포맷이다.
USD Scene Graph 계층구조 및 References 인스턴싱 개념도
USD의 계층적 씬 그래프 구조
USD의 기본 데이터 모델은 씬 그래프 구조를 바탕으로 작동한다.
1) Stage와 Prim 그래프 계층
- Stage: 씬 전체 데이터를 관리하는 그래프의 루트 컨테이너이다.
- Prim: 그래프를 구성하는 개별 노드이다. 자식 Prim을 가질 수 있는 트리 구조 형태를 띤다.
- Relationship 및 Attribute: 노드 간의 논리적 연결선 역할을 수행한다. 하나의 Prim이 다른 Prim의 재질, 물리 속성, 센서 데이터를 참조할 때 DAG 그래프 형태로 확장된다.
2) 객체지향(OOP) 스키마 구조 지원
USD는 객체지향 프로그래밍의 클래스, 상속, 캡슐화 개념을 데이터 모델 수준에서 지원한다.
- Typed Schema: C++ 및 Python 클래스에 1:1로 매핑되는 스키마이다. 상속 구조를 가지며 예로 UsdGeomGprim 클래스를 상속받아 UsdGeomMesh가 정의된다.
- API Schema: 기존 Prim에 특정 기능만 추가하는 다중 상속 형태의 스키마이다. 예로 일반 Mesh Prim에 UsdPhysicsRigidBodyAPI를 적용하여 물리 속성을 가미한다.
- Class Prim과 Inherits: USD 파일 내부에서 class 키워드로 추상 클래스를 정의하고 inherits 속성으로 이를 상속받아 유산 속성을 재사용한다.
파이썬 스크립트 및 동작 메커니즘 포함 기능
USD 포맷은 형상, 재질, 물리, 센서 데이터 같은 정적 속성 외에 가동형 로직 및 스크립트 실행 메커니즘도 포함한다.
1) OmniActionGraph 및 Scripting Node
Omniverse 환경과 결합된 USD 포맷은 ActionGraph 노드 내부에 파이썬 스크립트를 직접 저장할 수 있다. 시뮬레이션 프레임마다 파이썬 메서드가 호출되어 로봇 제어 및 이벤트 처리가 구동된다.
2) AssetInfo 및 Custom Data 기반 바인딩
Prim 내부에 customData나 파이썬 실행 모듈 경로를 메타데이터로 매핑할 수 있다. 로드 시점에 파이썬 로직을 바인딩하여 실행하는 동적 객체 구조 구현이 가능하다.
USD 그래프 구조 실제 형식 예시
텍스트 포맷인 USDA 형식의 실제 예시이다. 객체 상속, 물리 속성 적용, 센서 설정 및 로직 매핑 구조를 확인할 수 있다.
#usda 1.0
# 1. 추상 클래스 정의 (Class Prim)
class "_BaseRobot"
{
color3f[] primvars:displayColor = [(0.2, 0.2, 0.2)]
float physics:mass = 10.0
}
# 2. 상속 및 객체 생성 (Inherits & Typed Schema)
def Xform "SpotRobot" (
inherits = </_BaseRobot>
)
{
# API Schema를 통한 물리 속성 다중 상속
prepend apiSchemas = ["PhysicsRigidBodyAPI"]
# 3. 자식 Prim 구성 (Mesh 형상)
def Mesh "Body"
{
float3[] points = [(-1, -1, 0), (1, -1, 0), (1, 1, 0), (-1, 1, 0)]
int[] faceVertexCounts = [4]
int[] faceVertexIndices = [0, 1, 2, 3]
}
# 4. 센서 데이터 포함 (Camera Sensor)
def Camera "FrontCamera"
{
float focalLength = 24.0
float2 clippingRange = (0.1, 100.0)
}
# 5. 파이썬 노드 및 동작 로직 포함 예시 (OmniActionGraph)
def Omnigraph "RobotControlGraph"
{
def OmnigraphNode "PythonController"
{
token nodeType = "omni.graph.action.PythonScript"
string inputs:script = "def compute(db):\n # 로봇 제어 파이썬 메서드\n pass"
}
}
}
마무리
USD는 단순 데이터 저장 포맷이 아닌 객체지향적 스키마와 계층적 DAG 그래프를 결합한 포맷이다.형상과 재질 외에도 물리, 센서, 파이썬 기반 제어 로직까지 단일 씬 그래프 안에 포함할 수 있다.
클래스 상속 및 지연 로딩 메커니즘을 바탕으로 복잡한 피지컬 AI 및 시뮬레이션 환경의 표준 데이터 모델 역할을 수행한다.