Houdini

Dop Network

Tedd_Kim 2022. 6. 17. 10:23

Dop 네트워크의 내부와 플로우는 Sop 네트워크처럼 직관적이진 않지만, 정해진 순서가 있다.

 

회색 라인 : solve의 대상이 되는 Object

녹색 라인 : object에 적용할 수 있는 data

청색 라인 : solver라인 

 

예를 들어,

1. empty object를 생성하고, sop geomety로 포인트를 생성한다.

2. sop vector field를 생성한 후 볼륨 vector field를 임포트 한다(vdb볼륨은 안됨), sop vector field visual로 확인도 가능

3. apply data노드의 첫 번째 인풋에 empty object를 넣고, 두번째 인풋에 sop 노드 2개를 넣는다

4. multi solver의 첫번째 인풋에 apply data를 넣고, 두 번째 인풋에 gas advect를 노드를 사용한다

5. 데이터 이름을 넣고 필드를 지정하면 파티클이 vel field에 의해서 이동한다

이러면 가장 기초적인 커스텀 솔버가 완성되는 것.

 

empty오브젝트는 간단히 말해서 그냥 geometry노드, 즉 도화지라 생각하면 된다.

apply data는 그냥 가독성을 위해 두번째 인풋에 여러개를 껴넣을 수 있게 해주는 용도이다. 실제로는 empty object의 아웃풋에 sop vector field, sop geometry등을 직접 넣어도 됨

 

solver의 순서는 merge노드를 분기점으로

1. left to right

2. top down

 

의 구조로 이루어져있다.

자료구조 관점으로 생각하면 깊이 우선 탐색(DFS) 알고리즘

 

좌측의 최상단까지 도달한 후에, 최상위 노드부터 내려가며 진행을 시작한다

내려가는 도중 merge를 만나면 오른쪽으로 분기하여 또 최상단으로 이동하여 쭉 내려온다.

 

따라서, 순서에 의해 결과가 바뀌니까 micro solver는 순서에 유의하며 작업해야함

 

 

gas linear combination

gas project non divergent

gas particle to sdf

gas particle to field

 

등등, 어려운 모션을 위해 사용 가능한 노드가 많다.

building flip solver from scratch : https://vimeo.com/42988999 

 

[Pyro Solver]

기본 적인 순서 

1. temperature를 diffusion, cooling시킴

 

-2번째 인풋(advection) 진행-

2. vel field에 의해 temperature, density 등등의 필드들이 advection됨

3. 이 후에 vel field를 self-advection시킴

4. advection reflection진행 (켜져있다면)

5. flame과 density가 낮아짐

 

-3번째 인풋(source) 진행-

6. resize진행

7. buoyancy와 viscosity가 적용됨

8. shape operator(disturbance, turbulence, shred)가 적용됨

 

-4번째 인풋(force) 진행-

9. boundaray enforce와 pressure projection이 진행됨 

 

- Pyro는 결국 모든 것이 vel field를 어떻게 바꾸느냐가 핵심이다.

부력, 점성, force등등은 모두 vel field를 업데이트 하는 것이다. 최종적으로는 pressure projection을 맨 마지막에 진행하여 vel field를 적절히 수정하고 매 프레임마다 필드들을 advection시키는게 사실 전부임

 

- advection할 때 advection scheme은 굉장히 중요하다.

기본 디폴트인 modified MacCormack revert모드는 advection이 vel field와 별로 맞지 않는다. 따라서 BFECC나 Semi-Lagrangian을 사용해야함. 라그랑지안은 모션이 예쁘지만 density가 조금 뭉개질 수 있으니 주의. Trace Method는 오일러가 제일 정확하지만 넷 중에서는 가장 느림

 

- staircase 현상은 기본적으로 padding값을 많이 줘야하고, sub-step과 CFL 컨디션을 조절하여 해결해야함