← BlogIsaac Sim 작동 원리· 3/10

Physics Scene과 솔버 — 물리가 씬에 붙는 법

중력·충돌·솔버 반복 같은 물리 설정이 씬 안의 PhysicsScene prim에 담기고, 그 설정이 모든 강체로 퍼지는 방식. 그리고 GPU dynamics가 켜지는 시점.

약 2분
Isaac-SimPhysXphysics-scenesolversimulation-basics

Physics Scene과 솔버

USD 씬이 prim 트리라는 걸 봤습니다. 그렇다면 "중력은 얼마인지, 충돌은 어떻게 푸는지" 같은 물리 설정은 어디에 들어있을까요? 답은 — 그것도 prim입니다. 바로 PhysicsScene prim입니다.

물리도 prim이다

씬 안에는 PhysicsScene 타입의 prim이 하나 있고, 여기에 시뮬레이션 전체의 물리 파라미터가 담깁니다.

도식 렌더링 중…

런이 시작되면, 씬을 훑어 PhysicsScene 타입 prim을 찾아 여기에 중력·솔버 반복 같은 값을 적용합니다. 이 한 prim의 설정이 씬 안의 모든 강체(rigid body) 에 일괄로 작용합니다 — 물리의 "전역 설정 패널"인 셈입니다.

  • gravity: 중력 벡터(보통 -9.81 m/s² Z)
  • solverIterations: 접촉·관절 제약을 푸는 반복 횟수. 많을수록 안정적이지만 느림
  • broadphase: 충돌 후보를 빠르게 추리는 단계
  • GPU dynamics: 물리를 GPU로 가속할지

PhysX가 기본이다 — kinematic은 보조

여기서 한 가지 원칙이 있습니다. 물리는 PhysX로 진짜로 푼다는 것. 로봇을 힘·토크로 움직이는 PhysX 시뮬이 기본이고, 위치를 직접 옮기는 kinematic은 빠른 테스트용 보조일 뿐입니다.

💡 왜 kinematic으로 우회하면 안 되나 — 전복·미끄러짐 같은 물리 버그를 kinematic(텔레포트)으로 덮으면 사라진 것처럼 보이지만, 그건 검증이 아니라 회피입니다. 현실과의 일치(Sim-to-Real)는 PhysX로 진짜 물리를 풀었을 때만 나옵니다.

GPU dynamics는 reset 이후에 켜진다

부팅 순서 글에서 본 world.reset() 경계가 여기서도 등장합니다. PhysX의 GPU dynamics와 충돌 필터는 reset 시점에 확정됩니다.

도식 렌더링 중…

⚠️ 충돌 필터나 고정 관절을 reset 이후에 바꾸려 하면 이미 잠긴 상태라 의도대로 안 먹습니다. 물리 구성은 reset 전에 끝내는 게 원칙입니다.

물리 엔진이 한 종류로 부족할 때(지상·수상·수중·음향이 각기 다른 방정식) 여러 엔진을 한 시간축에 동기화하는데, 그 멀티 피직스 오케스트레이션은 별도 글에서 다룹니다.

한 줄 정리

📌 물리 설정은 씬 안의 PhysicsScene prim 하나에 담겨 모든 강체에 적용된다(중력·솔버 반복·GPU dynamics). PhysX가 기본이고 kinematic은 보조이며, GPU dynamics·충돌 필터는 world.reset() 시점에 확정된다.