움직이는 물체에 대한 콜리전
움직이는 물체는 collision을 주고 아무리 substep을 높여도 파티클들이 흘러내린다. 이 문제를 해결하려면 collisionvel 필드를 추가해주어야 한다. collisionvel은 지금 유체와 충돌하고 있는 물체가 어떤 방향으로 움직이고 있는지에 대한 정보다. 이를 알아야지 파티클들이 충돌하는 물체를 더 잘 따라갈수 있다.
우선 움직이는 지오메트리에 trail을 달고 velocity를 계산한다. obj에서 움직인 지오메트리는 trail을 계산하기가 애매하므로, object merge노드를 이용해 이동 값을 sop쪽으로 넘겨주자.
이 때 지오메트리를 $F등을 사용해서 움직였거나, 파일을 이용해서 불러왔다면 timeblend를 써서 중간 프레임을 추가한다.
그 후 vdbfrompolygons노드를 달아 collision으로 이름 변경한후 collisionvel 필드를 추가하고 point.v와 연결시킨다.
DOP 필드 연결
DOP쪽에서는 source volume을 달고 collision타입으로 변경한다. 이때 volume scale을 -1로 주어야 한다. collision필드가 + 인 쪽을 안이라고 생각하는 것 같다.
혹시 멈춰있는 물체라도 collisionvel을 None으로 놓지는 말자, 그렇게 하면 충돌판정이 되지 않는다.
DOP 에서 확인
FLIP object나 smoke object에서 collision visualization을 켜고 collision 필드가 제대로 생겼는지 확인하자.
DOP 해상도 변경
계산은 정확한것 같은데 collision volume resolution이 낮아 여기저기 틈이 생겼다면 두가지 방법이 있다.
DOP 오브젝트의 particle seperation 옵션을 낮춘다. 이 옵션을 낮추면 시뮬레이션의 전체 해상도가 올라간다.
하지만 만약 속도를 너무 희생하고 싶지 않다면 collision seperation옵션을 켜고 이것만 따로 낮추는 방법도 있다. 이렇게 하면 파티클의 충돌판정만 더 정확해 진다.