2.3 강체 역학과 시뮬레이션 시간
2.3.1 rigid, static, kinematic
강체는 변형을 무시하고 질량 중심의 병진 운동과 회전 운동만 계산하는 모델이다. 일반적인 actor 유형은 다음과 같다.
- Static collider: 작업대, 벽처럼 움직이지 않는 환경이다. 질량 상태를 적분하지 않는다.
- Dynamic rigid body: 중력, 힘, 토크, 접촉 충격량의 영향을 받아 움직인다.
- Kinematic body: 사용자가 pose를 지정해 움직이며, 다른 물체에 영향을 줄 수 있지만 일반적인 힘 적분으로 움직이지 않는다.
동적 물체를 매 frame 강제로 teleport하면 접촉 solver가 현실적인 힘을 계산하기 어렵다. 목표 pose를 따라가야 하는 장치는 joint drive, force/torque 또는 kinematic target 중 목적에 맞는 방법을 선택한다.
2.3.2 이산 시간 적분
시뮬레이터는 연속 시간 방정식을 step 크기 로 나눠 계산한다. 가장 단순화한 병진 운동은 다음과 같다.
step이 작을수록 빠른 접촉을 포착하기 쉽지만 계산량이 증가한다. render rate와 physics rate는 같을 필요가 없다. 예를 들어 physics를 120 Hz, render를 30 Hz로 두면 render frame 하나 동안 네 번 물리를 계산한다. 학습 데이터에는 physics timestamp와 sensor timestamp를 따로 기록해야 한다.
2.3.3 solver iteration과 안정성
접촉과 joint는 이상적으로 정확한 힘을 직접 구하기보다 제한된 반복 횟수 안에서 constraint를 만족하도록 푼다. 관절이 많은 로봇, 질량비가 큰 물체, 작은 timestep에서 지나치게 큰 stiffness는 solver를 어렵게 만든다. 무조건 iteration을 높이기 전에 다음을 확인한다.
- 충돌 geometry가 지나치게 복잡하지 않은가?
- mass ratio가 비현실적으로 크지 않은가?
- contact offset이 장면 scale과 맞는가?
- 매 frame pose를 순간 이동시키고 있지 않은가?
- controller gain이 timestep에 비해 너무 큰가?
PhysX의 Rigid Body Dynamics는 mass property, force/torque, friction, solver 설정을 설명한다.
잠깐 점검 — 더 정밀하게 계산하면 항상 해결될까?
- 빠른 물체가 얇은 벽을 통과할 때 먼저 줄여 볼 값은 physics step 인가, render frame 간격인가?
- 물체가 접촉 순간 폭발하듯 튈 때 solver iteration만 높이기 전에 확인할 항목 하나를 고르라.
확인 포인트: 충돌 판정은 physics step마다 일어나므로 먼저 와 CCD를 검토한다. 불안정 접촉은 비현실적인 질량비, 과도한 stiffness/controller gain, 복잡한 collision geometry, 순간이동 중 하나가 원인일 수 있다.