고급컴퓨터그래픽스 9. Physically Based Animation
고급컴퓨터그래픽스 9. Physically Based Animation
건국대학교 고급컴퓨터그래픽스 김형석 교수님의 수업을 정리한 내용입니다.
왜 필요한가?
단순히 관절 구조, 위치를 사전 정의하는 것 많으론 다양한 상호작용 애니메이션을 만들어내는데 한계가 존재한다. 따라서 물리적으로 고려해서 더 다양한 상황에 적합한 애니메이션을 만들어 내는 것을 목표라 한다.
Physic Simulator
뉴턴 역학을 사용한다. object는 힘을 받으며, 힘을 받는 위치, 세기, 방향 등을 고려하여 object를 상호작용한다. \(F=ma\)에 기초한다. 고려해야 할 힘들은 다음과 같다.
- 중력 : \(\displaystyle F=G \frac{m_{1}m_{2}}{r^2}\)
- 마찰력 : \(f_{s} = \mu_{s}N\), \(f_{k}=\mu_{k}N\)
- 복원력 : \(F=-kd\)
- 충돌 : 탄성 충돌 vs 비탄성 충돌
계산에 사용되는 주요 요소는 다음과 같다.
- 질량 중심 : \(\displaystyle C= \frac{{\sum_{i} m_{i}r_{i}}}{\sum m_{i}}\)
- 관성 모멘트
- 병진 운동 속성 : 위치, 속도, 가속도, 힘
- 회전 운동 속성 : 각, 각속도, 각가속도, 토크
애니메이션의 Use Case는 다음과 같다.
- Sping-Mass System
- 옷, Soft Body와 같은 변형 가능한 모델에 적용한다.
- 외부 힘(중력, 바람 등)과 내부 힘(복원력)을 고려하여 위치를 정한다.
- Particle System
- 연기, 불꽃 등을 시뮬레이션한다.
- 충돌 처리
- 탄성 vs 비탄성 충돌을 계산하여 상호 작용을 구현한다.
Fluid Animation
유체는 Volume 단위로 모델링된다. 유체의 주요 성질은 다음과 같다.
- Viscous vs Non-viscous (점성 vs 비점성)
- Compressible vs Incompressible (압축성 vs 비압축성)
고려해야 하는 유체의 Property는 Density(밀도), Mass(질량), Pressure(압력), Velocity(속도), Heat(열) 등이 존재한다.
유체의 종류는 크게 세가지로 분류한다.
- Water :: 비점성, 비압축성
- Smoke : 비점성, 압축성
- Fire : 열에 의해 움직임이 결정됨.
Navier-Stokes Equation
- \(\displaystyle \rho\frac{ {\partial \vec{u}}}{\partial t} + \rho(\vec{u} \cdot \nabla)\vec{u} = - \nabla p + \mu \nabla^2 \vec{u} + \vec{f}\)
- \(\rho\) : 유체의 밀도
- \(\vec{u}\) : 유체의 속도
- \(t\) : 시간
- \(p\) : 압력
- \(\mu\) : 점성 계수
- \(\vec{f}\) : 단위 질량당 알짜힘 (중력 저항력 등..)
유체에서 사용하는 기본 운동 방정식이다. 해석적으로 풀기는 불가능에 가깝기 때문에, 상황을 최대한 단순화하여 수치적으로 계산한다.
- 비압축성으로 가정한다. 밀도가 일정하며, 질량 보존 방정식 \(\displaystyle \frac{{\partial \rho}}{\partial t} + \nabla \cdot (\rho \vec{u}) = 0\)이 다음과 같이 단순화된다. \(\nabla \cdot \vec{u} = 0\)
- Steady flow로 가정한다. 따라서 \(\displaystyle \frac{{\partial \vec{u}}}{\partial t} = 0\)이다.
\(\displaystyle (\vec{u} \cdot \nabla) \vec{u} = - \frac{1}{\rho} \nabla p + \mu \nabla^2 \vec{u} + \vec{f}\)로 단순화한다. 이후 유체가 점성이냐, 비점성이냐에 따라서 다른 방정식을 적용한다.
- 비점성 유체일 경우 점성 계수 \(\mu \nabla^2 \vec{u}\)를 무시한다. \(\displaystyle \implies (\vec{u} \cdot \nabla)\vec{u} = - \frac{1}{\rho} \nabla p + \vec{f}\)
- 점성 유체일 경우, 관성력이 점성력보다 아주 작다고 가정하여 관성력 항 \(\rho(\vec{u} \cdot \nabla)\vec{u} \simeq 0\)을 무시하고 \(\mu \nabla^2 \vec{u} = \nabla p\)로 근사한다. \(\implies \mu \nabla^2 \vec{u} = \nabla p - \vec{f}\)