물리 엔진에서 물리 객체는 시뮬레이션의 기본 단위로, 일반적으로 Rigid Body(강체)와 Soft Body(연체)로 구분된다. 이 두 가지 유형의 객체는 물리 엔진 내에서 다르게 처리되며, 각각의 특성과 동작 방식에 차이가 있다.

Rigid Body (강체)

강체는 변형되지 않는 고체 객체로, 외부 힘이 작용해도 형태가 변하지 않는다. 강체 물리 시뮬레이션에서는 주로 다음과 같은 요소들을 다룬다.

I = \int_V \rho(\mathbf{r}) (\mathbf{r} \cdot \mathbf{r}) \, dV

여기서 \rho(\mathbf{r})는 질량 밀도 분포, \mathbf{r}은 회전 중심으로부터의 거리이다.

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

여기서 \mathbf{F}는 외력, m은 질량, \mathbf{a}는 가속도이다.

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

여기서 \mathbf{\tau}는 토크, I는 관성 모멘트, \mathbf{\alpha}는 각가속도이다.

e = \frac{v_{\text{후}} - u_{\text{후}}}{v_{\text{전}} - u_{\text{전}}}

여기서 vu는 각각 충돌 객체들의 속도를 나타낸다.

Soft Body (연체)

연체는 외부 힘에 의해 변형될 수 있는 객체로, 고무, 천, 젤리와 같은 유연한 물질들을 시뮬레이션하는 데 사용된다. 주로 다음과 같은 구성 요소들을 사용한다.

\mathbf{F} = -k (\mathbf{x} - \mathbf{l})

여기서 k는 스프링 상수, \mathbf{x}는 현재 길이, \mathbf{l}는 자연 길이이다.

\sigma = C \cdot \epsilon

여기서 \sigma는 스트레스, \epsilon은 스트레인, C는 물질의 성질을 나타내는 탄성 행렬이다.

물리 엔진에서의 충돌 감지 (Collision Detection)

Broad Phase와 Narrow Phase

물리 엔진에서의 충돌 감지는 두 가지 주요 단계로 나뉜다: Broad Phase와 Narrow Phase.

  1. Broad Phase:
  2. 충돌 감지의 첫 번째 단계로, 가능한 충돌쌍을 신속하게 식별한다. 여기서 실제 충돌 여부를 판별하기보다는 잠재적인 충돌 객체를 좁히는 것이 목표이다.
  3. 격자 기법 (Grid-based Methods):
    • 공간을 격자 단위로 나누어 각 객체를 해당하는 셀에 배치한다. 객체가 같은 셀 안에 있을 때만 충돌 여부를 확인한다.
  4. 분할 공간 (Spatial Partitioning):
    • 공간을 계층적으로 분할하여 상위 노드에서 충돌 가능성을 필터링한 후 하위 노드로 내려가며 자세한 충돌 검사를 수행한다. 예시로는 쿼드트리(2D), 옥트리(3D) 등이 있다.
  5. 스위핑과 프루닝 (Sweep and Prune):

    • 객체들을 특정 축을 기준으로 정렬하고, 중첩된 구간만을 추려내어 충돌 여부를 판단한다.
  6. Narrow Phase:

  7. Broad Phase에서 추려낸 객체들에 대해 실제로 충돌 감사를 수행한다.
  8. 축 정렬 경계 상자 (AABB):
    • 객체를 둘러싸는 경계 상자를 사용하여 충돌을 감지한다. 상자의 좌표 축과 맞추어 정렬되기 때문에 계산이 간단하지만, 비효율적인 경우도 있다.
  9. OBB (Oriented Bounding Box):
    • 객체의 회전을 고려한 경계 상자이다. AABB에 비해 더 정확하지만 계산이 다소 복잡할 수 있다.
  10. Bounding Sphere:
    • 객체를 둘러싸는 최소 크기의 구를 사용해 충돌 여부를 판단한다. 구는 방향에 관계없이 동일한 반지름을 가지므로 계산이 쉬운 편이다.

충돌 해결 (Collision Resolution)

충돌을 감지한 후에는 이를 적절히 해결해야 한다. 다음은 일반적인 충돌 해결 방법들이다.

\mathbf{v}_{\text{후}} = \mathbf{v}_{\text{전}} - (1 + e)(\mathbf{v}_{\text{전}} \cdot \hat{\mathbf{n}}) \hat{\mathbf{n}}

여기서 e는 반사계수, \hat{\mathbf{n}}은 충돌면의 법선 벡터이다.

\Delta \mathbf{v} = \frac{J}{m}

여기서 m은 질량이다.

이와 같은 다양한 방법들이 물리 엔진에서의 충돌 감지 및 해결에 활용된다. 각각의 방법들은 상황에 따라 사용되며, 실제 응용에서는 여러 방법들을 결합해서 사용한다.