물리 엔진(physics engine)은 다양한 물리 법칙을 컴퓨터 시뮬레이션을 통해 구현하는 소프트웨어의 한 종류이다. 물리 엔진은 주로 게임, 영화, 가상 현실 등의 분야에서 현실감 있는 환경을 구현하기 위해 사용된다. 이 장에서는 물리 엔진의 기본 구조에 대해 설명한다.

시스템 구성 요소

물리 엔진은 주로 다음과 같은 구성 요소로 이루어져 있다:

  1. 리지드 바디 시뮬레이션: 비탄성 충돌, 회전 운동, 병진 운동 등 강체(리지드 바디)의 운동을 시뮬레이션한다.
  2. 충돌 감지와 반응: 물체 간의 충돌을 감지하고 이에 따른 반응을 계산한다.
  3. 연속 충돌 감지: 하위 프레임 간의 충돌을 감지하여 고속 운동에서의 충돌 누락을 방지한다.
  4. 제약 조건: 조인트, 힌지 등 물리적 제약 조건을 계산하여 물체의 운동을 제한한다.
  5. 소프트바디 시뮬레이션: 유체, 천, 젤리 같은 비강체(소프트바디)의 운동을 시뮬레이션한다.
  6. 외력 계산: 중력, 마찰력 등 외력을 계산하여 물체의 운동에 반영한다.

리지드 바디 시뮬레이션

리지드 바디 시뮬레이션에서는 물체를 변형되지 않는 강체로 간주하여 운동을 계산한다. 강체의 운동은 뉴턴의 운동 법칙과 회전 운동 방정식에 따라 계산된다.

병진 운동

뉴턴의 제2법칙에 따라, 물체의 병진 운동은 다음과 같이 계산된다:

\mathbf{F} = m \mathbf{a}

여기서, - \mathbf{F}는 물체에 작용하는 총 외력이다. - m은 물체의 질량이다. - \mathbf{a}는 물체의 가속도이다.

가속도 \mathbf{a}를 시간에 대해 적분하면 속도 \mathbf{v}를 얻고, 다시 시간에 대해 적분하면 위치 \mathbf{x}를 얻는다.

회전 운동

회전 운동은 다음과 같은 회전 운동 방정식에 의해 설명된다:

\mathbf{\tau} = \mathbf{I} \mathbf{\alpha}

여기서, - \mathbf{\tau}는 물체에 작용하는 총 토크이다. - \mathbf{I}는 물체의 관성 텐서이다. - \mathbf{\alpha}는 물체의 각가속도이다.

각가속도 \mathbf{\alpha}를 시간에 대해 적분하면 각속도 \mathbf{\omega}를 얻고, 다시 시간에 대해 적분하면 각도 \mathbf{\theta}를 얻는다.

충돌 감지와 반응

충돌 감지는 물리 엔진의 핵심 기능 중 하나이다. 충돌 감지는 크게 넓은 단계(broad phase)와 좁은 단계(narrow phase)로 나눌 수 있다.

넓은 단계

넓은 단계에서는 충돌 가능성이 있는 물체 쌍을 찾아내는 작업을 수행한다. 이 단계에서는 주로 AABB(Axis-Aligned Bounding Box)를 사용하여 간단히 충돌 여부를 판정한다.

좁은 단계

좁은 단계에서는 실제 충돌 감지 알고리즘을 사용하여 정확히 충돌을 계산한다. 대표적인 충돌 감지 알고리즘으로는 GJK(Gilbert-Johnson-Keerthi) 알고리즘과 SAT(Separating Axis Theorem)가 있다.

충돌 반응에서는 두 물체의 속도와 충돌 후의 변위를 계산하고, 필요한 경우 반발력과 마찰력을 적용한다.

연속 충돌 감지

연속 충돌 감지(CCD)는 물체가 하위 프레임 사이에서 고속으로 이동할 때 충돌을 놓치지 않도록 한다. 이를 위해 물체의 궤적을 추적하고, 각 프레임 간의 이동 경로 상에서 충돌 감지를 수행한다. 대표적인 방법으로는 스위핑 볼륨(swept volume)과 타임 오브 임팩트(Time of Impact, TOI) 계산 방법이 있다.

제약 조건

제약 조건은 물체의 자유 운동을 제한하는 규칙을 정의한다. 제약 조건을 통해 물리적으로 믿을 만한 행동을 실현할 수 있으며, 대표적인 제약 조건으로는 조인트(joint)와 힌지(hinge) 등이 있다.

조인트

조인트는 두 개 이상의 물체를 연결하고, 상대적인 움직임을 제어한다. 여러 종류의 조인트가 있으며, 각 조인트는 고유한 제약 조건을 갖는다. 예를 들면, - 힌지 조인트: 한 축을 중심으로 회전만을 허용한다. - 볼 조인트: 세 축을 따라 자유롭게 회전할 수 있다.

제약 해결

제약 조건을 해결하기 위해서는 라그랑주 승수법이나 반복적인 방법이 사용된다. 이 과정에서 물체의 속도와 위치를 업데이트하여 제약 조건이 만족되도록 만든다.

소프트바디 시뮬레이션

소프트바디 시뮬레이션에서는 물체가 변형될 수 있도록 한다. 소프트바디 시뮬레이션은 주로 천, 유체, 젤리 등 변형 가능한 물체를 모델링하는 데 사용된다. 대표적인 방법으로는 파티클 시스템(particle system), 스프링-댐퍼 네트워크(spring-damper network), 유한 요소법(finite element method, FEM)이 있다.

파티클 시스템

파티클 시스템에서는 물체를 다수의 파티클로 분할하고, 각 파티클 간의 상호작용을 시뮬레이션한다. 파티클은 물리 법칙에 따라 움직이며, 스프링-댐퍼 네트워크를 통해 연결된다.

FEM

유한 요소법(FEM)은 물체를 작은 요소로 분할하고, 각 요소의 변형을 계산하여 전체 물체의 변형을 예측한다. FEM은 정확한 시뮬레이션이 가능하지만 계산 량이 많아 고성능 컴퓨팅이 필요하다.

외력 계산

외력은 물체의 운동에 다양한 영향을 미칠 수 있다. 외력 계산에서는 주로 다음과 같은 외력을 고려한다:

이 외력들은 물체의 운동 방정식에 포함되어 실제 운동을 계산하는 데 영향을 미친다.


물리 엔진의 기본 구조와 주요 구성 요소에 대해 설명되었다. 다음 장에서는 다양한 물리 엔진 구현 예제를 통해 실제로 이러한 개념들이 어떻게 적용되는지를 다루도록 하겠다.