각 time step마다 body collision은 두 번 처리한다 (충돌은 모두 비탄성 충돌)
둘 다 같은 process로 처리, 즉 같은 함수 사용.
1) Grid-based body collisions
- 4단계에서 grid의 속도에 force를 적용하여 v∗를 구한 직후 적용.
- semi-implicit integration의 case에서, 이 처리는 linear system의 right hand side에 기여.
- 충돌하는 grid node에 해당하는 자유도는 solve 중에 투영된다.
2) Particle-based body collisions
- 10단계에서 paticle의 위치 xpn+1를 vpn+1로 구하기 전에 vpn+1에 충돌을 적용.
- 보간으로 인한 입자 속도와 grid 속도 간의 사소한 불일치를 해결하기 위함
충돌 처리 Algorithm
-
충돌 탐지: (φ≤0)
-
각 충돌마다 local 법선 벡터 n(n=∇φ), 물체 속도 vco 계산
-
particle/grid 속도 v는 충돌 물체의 reference frame으로 전환
vrel=v−vco , (vrel : 상대속도, vco = 물체 속도)
-
vn=vrel⋅n 계산.
4.1. vn >= 0 이면 body가 분리되므로 충돌을 적용하지 않는다.
-
vt=vrel−n⋅vn 계산 (vt: 상대속도의 접선 부분)
5.1. ∣vt∣<=−µvn이면 sticking impulse를 적용해야 함.
vrel′=0
5.2. otherwise, dynamic friction을 적용.
vrel′=vt+µvnvt/∣vt∣
-
상대속도를 다시 world 좌표계로 전환.
v′=vrel′+vco
sticking impulse
- 눈이 수직 또는 아래로 매달려 있는 표면에 달라붙는 현상을 위해 사용.
- 이 경우 정상 상대 속도가 0(수직) 또는 양수(중력으로 인한 under-hanging,분리)이기 때문에 Coulomb 마찰은 적절하지 않음.
- 이 충돌은 vrel=0으로 하여 매달려 표면에 달라붙는 효과를 보인다.
Collision Objects
이 논문에서는 두 가지의 Collision Objects를 사용.
-
rigid objects
시간에 따라 변하는 강체 변환을 통해, φ,n,vco를 계산.
-
deforming objects
보간 함수를 통해 φ,n,vco 계산.