Soft Constraints

이 문서는 Erin Catto 의 GDC 2011 발표 자료인 GDC2011_Catto_Erin_Soft_Constraints.pdf 에 개인적인 설명을 곁들인 것입니다. 이해가 안가시는 부분이 있으면 위의 발표자료를 먼저 읽어주세요.

Damped Harmonic Oscillator

Soft constraint 를 설명하기에 앞서 우선 감쇄 조화 진동자 (Damped Harmonic Oscillator) 를 설명하겠습니다. 질량 m 을 갖고, 감쇄 진동 운동을 하는 입자의 전형적인 미분방정식은 아래와 같습니다.

    \[m \frac{d^2x}{dt^2} + c \frac{dx}{dt} + k x = 0\]

위 미분방정식을 풀어보면 두번째 항은 감쇄(damping) 를 나타내고, 세번째 항은 진동(oscillation) 을 나타낸다는 것을 알 수 있습니다.
여기서 파라미터(c, k) 에 좀 더 의미를 부여하기 위해 식 전체를 m 으로 나눈 뒤 약간 고쳐보겠습니다.

    \[\frac{d^2x}{dt^2} + 2 \zeta \omega \frac{dx}{dt} + \omega^2 x = 0\]

    \[\frac{c}{m} = 2 \zeta \omega \quad \frac{k}{m} = \omega^2\]

이제 좀 더 실용적으로 \omega2\pi 단위의 진동수(frequency) 를 의미하고, \zeta0~1 사이의 감쇄율(damping ratio) 을 의미하게 됩니다. 그래프를 그리면 아래와 같습니다.

The-damping-ratio-and-frequency-describe-the-behavior

이 스프링 운동을 Explicit Euler method 로 integration 을 하게 되면 수치적으로 불안정하여 그래프가 발산하게 됩니다. 그래서 다른 수치적분 방법을 사용해야 합니다. (데모: http://juhl.github.com/numerical-integration-test/)

보통 Semi-implicit Euler method 가 빠르고 안정적이기 때문에 많은 물리 엔진들이 주로 사용합니다. 하지만 여기서는 일단 Implicit Euler method 로 integration 을 해보겠습니다.

    \[x_2 = x_1 + h v_2\]

    \[v_2 = v_1 - h ( \frac{k}{m} x_2 + \frac{c}{m} v_2 )\]

(1)   \[= \frac{v_1 - \frac{h k}{m} x_1}{1 + \frac{h c + h^2 k}{m}}\]

이 식은 나중에 다시 보게 될 것입니다.

Simple Soft Constraints

지면에 붙어 있는 질량 m 인 입자를 생각해 봅시다. 이 입자의 soft 속도 constraint 와 constraint 를 0 으로 만드는 soft constraint force 를 살펴 보겠습니다.

    \[\frac{dC}{dt} = v + \frac{\beta}{h} x + \gamma f\]

    \[f = -m \frac{d^2C}{dt^2}\]

soft 속도 constraint 식의 세번째 항을 보면 constraint force 는 \gamma 를 곱해서 속도 constraint 에 더해주고 이것은 다시 constraint force 계산에 들어갑니다. 나중에 나오겠지만 \gamma 는 보통 1 보다 작습니다. 따라서 \gamma 는 constraint force 를 점점 진동하며 작아지게 만듭니다. 두번째 항은 일반적인 물리엔진의 위치 constraint 에러 보정 안정화 방법 (만든 사람의 이름을 따서 Baumgarte stabilization 라고 부릅니다) 과 식이 같습니다.

\gamma\beta 에 대한 보다 자세한 설명은 Catto 의 발표자료를 참고하기 바랍니다. 그것보다 더 쉽게 설명할 수 가 없을 거 같아서 여기서 넘기겠습니다;; 어쨋든 중요한 것은 두개의 항이 스프링을 흉내낸다는 것입니다.

이제 \dot{c} = 0 을 만족하는 입자의 운동을 Semi-implicit Euler method 로 integration 하면..

    \[v_2 + \frac{\beta}{h} x_1 + \gamma f = 0\]

    \[v_2 = v_1 + \frac{h}{m} f\]

    \[x_2 = x_1 + h v_2\]

    \[v_2 = \frac{v_1 - \frac{\beta}{m} x_1}{1 + \frac{h}{m \gamma}}\]

이 식은 식 (1) 과 유사합니다. 즉, \beta, \gamma 는 Implicit Euler method 로 integration 한 스프링 운동의 c, k, h 와 연관 시킬 수 있게 됩니다.

    \[\gamma = \frac{1}{c + h k}\]

    \[\beta = \frac{h k}{c + h k}\]

이로써 soft constraint 는 Implicit Euler method 와 똑같이 수렴하게 만들 수 있으므로 수치적으로 안정적이게 됩니다. (참고로 이것은 ODE 엔진의 CFM, ERP 파라미터의 공식과 동일합니다)

General Soft Constraints

지금까지는 soft constraint 를 지면에 붙어있는 단순한 constraint 에 적용해봤지만 일반적인 속도 constraint 에도 적용시킬 수 있습니다.

    \[\frac{dC}{dt} = J V + \frac{\beta}{h} C + \gamma \lambda\]

    \[\lambda = -M_{eff} \frac{d^2C}{dt^2}\]

여기서 \gamma 는 constraint 공간에서의 힘을 나타냅니다.

결론 & Demo

정리하자면 soft constraint 는 일반적인 constraint 가 안정적으로 스프링처럼 부드럽게 작동하도록 도와줍니다. 속도 constraint 에 soft constraint 식을 적용하면 그것이 위치든 각도든 상관없이 제약된 DOF 별로 soft 하게 만들 수 있습니다.

아래 동영상은 2D 에서 위치(x, y) 에 대한 자유도를 없애고 회전에 대해서만 soft constraint 를 적용한 것입니다.

Leave a Reply

Your email address will not be published. Required fields are marked *