NVIDIA Omniverse 물리 시뮬레이션 및 PhysX 설정 가이드1 - SmartX-Team/Omniverse GitHub Wiki
NVIDIA Omniverse Simulation Info
NVIDIA Omniverse는 실제와 같은 물리 현상을 추가할 수 있는 고급 시뮬레이션 기능들을. 시뮬레이션과 관련된 도구는 Extenson을 통해 제공되며, 기본적인 강체 시뮬레이션부터 파괴, 유체 동력학 기반의 화재 시뮬레이션, 물리 기반 장면 작성에 이르기까지 광범위한 기능이 포함된다.
Omniverse 에서 제공해주는 시뮬레이션 종류 및 종류별 Description은 아래와 같다.
현재 연구실의 NetAI Digital Twin 구축에서 시뮬레이션 기능은 대부분 PhysX SDK 에 기반한 [Physics Core] 관련 기능 위주만 사용하므로 실제 사용 예제 및 코드는 해당 기능과 관련된 내용만 다루고 있다.
| Extension | Description |
|---|---|
| Powered by the NVIDIA PhysX SDK, you can add rigid-body dynamics to building blocks and topple them over; create ragdolls or simulate walking robots using articulations; build complex mechanisms using joints; or pour a jar of gummy bears into your scene using deformable-body simulation., NVIDIA PhysX SDK로 구동되는 물리 엔진을 사용하여 건축 블록에 강체 동역학을 추가하고 이를 넘어뜨릴 수 있다. ; 관절을 이용해 래그돌을 만들거나 로봇이 걷는 모습을 시뮬레이션할 수 있다. ; 사례: 관절을 사용해 복잡한 기구를 만들거나, 변형 가능한 몸체 시뮬레이션을 사용하여 장면에 젤리곰을 부을 수 있다; | |
| When placing many objects in a natural way in your scene, the Zero Gravity tool can ease this burden. Designed to use physics interactions while editing, you can nudge, slide, bump and push objects into position. Making a shelf full of doodads is as easy as click and drag. ; 장면에 많은 객체를 자연스럽게 배치할 때 부담을 줄여준다. ; 편집 중에 물리적 상호작용을 사용하여 객체를 밀거나, 슬라이드, 충돌시키고 원하는 위치에 배치할 수 있다,; 클릭하고 드래그하여 선반을 다양한 소품으로 채울 수 있다; | |
| With the Vehicle Dynamics extension, you can create vehicle simulations that include tire, engine, clutch, transmission and suspension models.; 타이어, 엔진, 클러치, 변속기 및 서스펜션 모델을 포함한 차량 시뮬레이션을 생성할 수 있다. | |
| With the Omniverse™ Blast extension, you can blow up objects in your scene. Blast allows authoring destructible content and implements the destruction simulation using the core physics extension. ; 장면에서 객체를 폭발시킬 수 있다. ; 파괴 가능한 콘텐츠를 작성할 수 있으며, 핵심 물리 확장을 사용하여 파괴 시뮬레이션을 구현한다. | |
| With the Omniverse™ Boom extension, you can add material based audio from simulation and custom script events. Boom allows authoring authoring of audio material data and manages sound playback during simulation. ; 시뮬레이션 및 사용자 정의 스크립트 이벤트에서 소재 기반 오디오를 추가할 수 있다. ; 오디오 소재 데이터를 작성하고 시뮬레이션 중에 사운드 재생을 관리할 수 있다. |
그 외 다른 시뮬레이션 정보는 공식 페이지에서 참고할 수 있다. https://docs.omniverse.nvidia.com/extensions/latest/ext_simulation.html
Physics Core
NVIDIA Omniverse™ Physics 시뮬레이션 확장은 NVIDIA PhysX SDK로 구동된다. 아래에서는 Omniverse에서 사용할 수 있는 PhysX의 주요 기능 목록을 확인할 수 있다.
- 강체 시뮬레이션 (Rigid-Body Simulation): 물리적 상호작용을 포함한 강체의 움직임을 시뮬레이션한다.
- 캐릭터 컨트롤러 (Character Controller): 캐릭터의 움직임과 상호작용을 제어헌다.
- 변형 가능한 몸체 시뮬레이션 (Deformable-Body Simulation): 유연한 물체의 변형과 움직임을 시뮬레이션한다.
- 입자 시뮬레이션 (Particle Simulation): 입자의 움직임과 상호작용을 시뮬레이션한다.
- 관절 (Articulations): 여러 물체 간의 복잡한 상호작용을 시뮬레이션할 수 있도록 관절을 설정한다.
물리 시뮬레이션 확장인 omni.physx.bundle은 Omniverse USD Composer에서 기본적으로 활성화되어 있습니다. 다른 Omniverse 앱을 사용하는 경우 Window > Extensions 창에서 물리 확장을 활성화할 수 있다.
Omniverse 물리 확장 개요 Omniverse Physics는 여러 확장으로 구성되어 있으며, 가장 유용한 확장들을 묶어 놓은 omni.physx.bundle 확장이 있다. 이 번들은 유용한 확장을 함께 묶어 제공하며 변경 로그를 포함한다. omni.physx.bundle 확장은 다음 확장들에 의존한다.
Green color: 물리 시뮬레이션에 필요한 코어 확장을 나타내며, 이 코어는 시뮬레이션을 실행하는 데 필요한 최소 확장 세트인 USD와 Carbonite에만 의존합니다. 직접 Kit 연결이 없는 모든 헤드리스 모드에서 작동합니다.
-헤드리스 모드: 사용자 인터페이스 없이 백그라운드에서 실행될 수 있는 모드이다. 시뮬레이션을 위해 UI가 필요 없으므로, 서버 환경에서 물리 시뮬레이션을 실행할 때 유용하다.
- Kit와 직접 연결 없음 (No direct Kit connection): Omniverse Kit(Omniverse의 모듈 및 애플리케이션 프레임워크)와 직접적인 연결 없이도 작동할 수 있다.(물리 엔진이 독립적으로 실행될 수 있음을 의미한다.)
Cyan color: omni.physx와 Kit StageUpdate를 연결하며, 이는 대부분의 Kit 기반 앱에서 열린 경우 스테이지 시뮬레이션을 받기 위한 최소 요구 사항 (omni.physx 확장이 Kit의 StageUpdate 기능과 상호작용할 수 있도록 연결하기 위해 활성화가 필요한 기능들)
Blue color: 물리 작업에 권장되는 확장 기능들이 포함되어 있으며, 이 확장 기능들은 모두 omni.physx.bundle에 속하며, 완전한 물리 경험을 위해 권장된다.
| 확장 이름 | 설명 |
|---|---|
| omni.kvdb | 로컬 캐시 (조리된 캐시, zero g 캐시)에 사용되는 키 값 데이터베이스 |
| omni.localcache | 로컬 캐시 (조리된 캐시, zero g 캐시)에 사용되는 디스크 캐시 |
| omni.convexdecomposition | 볼록 분해 라이브러리 |
| omni.physx.stageupdate | Kit StageUpdate를 omni.physx와 연결 |
| omni.physx.commands | omni.physx 유틸리티 함수에 명령어 추가 |
| omni.physx.camera | 카메라를 지원 (예: 차량에서 사용되는 추적 카메라) |
| omni.physx.demos | 생성된 물리 데모를 위한 브라우저 추가 |
| omni.physx.bundle | 모든 유용한 확장을 함께 번들링, 주요 확장 포함 |
| omni.usd.schema.physx | PhysX 사용자 정의 스키마 (UsdPhysics 확장) |
| omni.usd.schema.forcefields | 힘 필드용 사용자 정의 스키마 |
| omni.usdphysics | UsdPhysics 파싱 코드 |
| omni.physx.cct | 캐릭터 컨트롤러 지원 추가, UX 및 제어 부분 포함, 런타임은 omni.physx의 일부 |
| omni.physx.vehicle | 차량 UI 지원 추가, 런타임은 omni.physx의 일부 |
| omni.physx.supportui | 물리학 지원 기능 추가, 작성 툴바, 상태 창, 충돌 생성, 강체 기즈모 포함 |
| omni.physx.graph | 물리 Omni 그래프 노드를 위한 지원 추가 |
| omni.physx.foundation | GPU PhysX 디바이스 할당 처리 |
| omni.physx.cooking | PhysX SDK 조리 처리, 캐시 포함 |
| omni.physx | USD와 PhysX SDK를 연결하는 핵심 확장 |
| omni.physx.ui | UI 지원 추가, 기본 설정, 설정, 디버그 뷰, 디버그 창 포함 |
| omni.physics.ui | UsdPhysics UI 지원 추가, 특히 관절 조작 |
| omni.kit.property.physx | 물리 속성 표시 및 추가 버튼을 통한 핵심 작성 지원 |
omni.physx.core: 물리 엔진의 기본 기능을 제공한다. omni.physx.camera: 물리 엔진과 통합된 카메라 기능을 제공한다. omni.physx.collision: 충돌 감지와 관련된 기능을 제공한다. omni.physx.ui: 물리 엔진의 UI와 관련된 기능을 제공한다.
https://docs.omniverse.nvidia.com/extensions/latest/ext_physics.html#physics
물리 시뮬레이션을 위한 기본 개념 및 조작법
RigidBody : Omniverse와 Unity와 같은 3D 렌더링 툴에서 물리적 동작을 가능하게 해주는 Component 이다.
주요 속성 설정 예시는 다음과 같다. Mass: 객체의 질량을 설정한. Linear Damping: 선형 감쇠 계수를 설정하여 속도 감소를 시뮬레이션한다. Angular Damping: 각 감쇠 계수를 설정하여 회전 속도 감소를 시뮬레이션한다. Gravity Enabled: 중력의 영향을 받도록 설정한다. Kinematic : 활성화 상태면 오브젝트는 물리 엔진으로 영향을 받지 않고 오로지 Transform으로만 조작된다.
Collider(콜라이더): 물리적으로 일어난 충돌을 감지해주는 Component 이다.
콜라이더 는 단순할수록 프로세스에 부하를 적게주고, Mesh Collider 와 같은 충돌 영역을 지정하면 현실적인 시뮬레이션을 진행할 수 있지만 프로세스 부하가 커지게된다.
다음 장에서 RigidBody 와 Collider 설정 부분을 좀 더 자세히 다룬다.