Houdini/Filp Sim

Flip Simulation 기초 이론 정리

징니쓰 2022. 4. 13. 11:54

1. Flip 시뮬레이션은, 수천개의 파티클의 움직임으로 이루어진다.

그러나, 파티클을 직접 시뮬레이션 돌리는 시스템이 아니다.

파티클 수천개를 직접 시뮬레이션 하게되면, 너무 무겁기 때문에 작업이 불가능하다.

파티클을 volume화 하여, 가벼운 시뮬레이션을 돌리고 데이터를 얻어오는 방식을 사용한다.   

 

1. 파티클을 볼륨으로 convert 한다.

2. 기체시뮬레이션을 진행한다.

3. volume 시뮬레이션을 통해, 공간과 속도에 대한 데이터를 얻어낸다.

4. volume 시뮬레이션의 데이터를 파티클에 전달한다.

 

=  파티클영역을 볼륨화 시킨것이기 때문에, 파티클이 시뮬레이션 됐다면 이정도 수치값을 얻을 것 이라는 데이터를 넘겨주는 방식이다. 이 방식을 사용하면, 파티클을 실제로 시뮬레이션 하는것이 아니라, 기체시뮬레이션을 한 정보값을 넘겨주는것 이기때문에 수천, 수만개의 파티클도 시뮬레이션이 가능하게 된다.

 

 

2. Flip simulation 은 해상도를 올리면, 시뮬레이션 영역이 커지고 과장된다. Test 를 할때는 훨씬 더 해상도를 작게 해서 셋팅해야 한다.

 

 


< Shelf Tool에 있는 대표적인 flip & ocean >

  • Small Ocean :  기본 Ocean
  • Large Ocean : small ocean 을 instancing 한것.

 

  • Water Tank , Beach Tank , Ocean Flat Tank , Flat Tank

: Tank 가 들어간건 양동이에 물이 들어있는 구조라고 이해하면 된다. Flat Tank 가 가장 기본적인 Tank 이다.

 

  • Flip Fluid From Object : objcet 자체가 flip 이 된다. ( objcet 모양 그대로, 한번만 생성된다.)
  • Emit Particle Fluid : object 를 emitter 로 사용하여, flip이 무한으로 생성된다.

 

< Shelf Tool 로 생성되는 노드 구성  >

1. flattank_fluidinterior : 랜더할때 volume 으로 안에서 투영되는것처럼 만들어 주는 역할

2. flattank_fluid : 시뮬레이션 된 파티클들을 압축하고, convert 해주는 역할

3. flattank_initial : 시뮬레이션 하기전에 필요한 셋팅작업을 해주는 역할

4. AutoDopNetwork : initial 데이터를 기반으로 시뮬레이션 하는 역할

 

 

< 노드 진행 과정 순서 >

순서 ) flattank_initial -> AutoDopNetwork -> flattank_fluid

 

flattank_fluidinterior 는 랜더 할때만 필요하다.

 


< flattank_initial >

Ocean Source (wavetank)

  • Fill Volume : patricle 이 꽉 차 있거나, 위에만 보이게 하거나 하는 옵션이다.
  • Jitter Scale : 일정한 파티클들을 흐뜨려뜨린다.
  •  

 

< AutoDopNetwork > 

FLIP Object (flattank)

  • Particle Separation : 수치를 낮출 수록, 파티클 수가 늘어나고 디테일 한 시뮬레이션이 진행 된다.
                       Flip은 해상도가 높을때와 낮을때, 시뮬레이션이 완전 바뀌어 버리기 때문에 처음부터 적당한 해상도로 진행하 는게 좋음.
                       해상도가 높아질수록 (수치가 낮아질수록) 시뮬레이션 영역이 커지고, 과장된다.
  • Particle radius : 수치가 높을수록 파티클끼리 뭉치는게 많아진다. (물방울 흘러내리는 경우 좋음.)
                               반대로 스플레쉬한 작업을 할때는 수치가 낮을 수록 파티클이 뭉치치 않기때문에 좋다.

  • Gtid Scale : 사이즈를 낮출수록 디테일 해짐.

  • Colision Seperation : Colision 해상도를 개별적으로 컨트롤 할 수 있다.

FLIP Solver

  • Particle Motion > behavior > Add ID Attribute : 파티클의 ID를 생성 해 준다.
  • Particle Motion > Droplets :  물방울들이 떨어질때 인지를 할건지 말건지에 관여하는 역할.
                                                     surface field 기준으로, 거리가 너무 많이 떨어지면 물이 아닌 것으로 간주한다.
                                                     Drop plets 를 켜면, Drop plets attribute 를 사용해서 pscale이나 서브적인 작업을 할 수 있다.
  • Particle Motion > Voritcity : velocity 가 갑자기 확 커졌을때를 계산하는곳.
                                                   굳이 시뮬레이션에서 데이터를 얻지 않고, sop에서 velocity 계산으로도 데이터를 얻을 수 있긴 하다. 

  • Particle Motion > Rest > Rest : 내가 만든 처음의 데이터 
                                              Dual Rest : 내가 지정한 프레임마다 다시 rest를 해서 rest와 Dual rest 를 섞어서 사용한다.
                                             (잘 사용안함.)

  • Particle Motion > Reseeding : Flip 시뮬레이션은 volume 시뮬이다. volum은 서로 뭉칠수록 밀도가 높아지고, 멀어질수록 밀도가 낮아진다. 물속에서 컬리젼 충돌로 인해 물이 멀리 튀어버려서 물끼리 간격이 멀여져 버리는 경우, voxel 계산으로 하게되면 서로 간격이 멀어지기 때문에 해상도가 떨어지게 된다. 그럴때, 파티클 수 를 늘려서 해상도가 떨어지지 않게 한다.

 

 

< flattank_fluid >

 

AutoDopNetwork 의 시뮬레이션 데이터를 불러와서, 압축 및 surface 변환 작업을 한다. 

  • fluid compress : 시뮬레이션 데이터를 가볍게 압축하는곳
  • particle surface : polygone , particle 등 랜더를 하기위한 surface 로 convert 하는 곳.