불 / 연기의 묘사에 필요한 내용이 어떠한 것이 있을까?
1. 연기
density
2. 속도(어떠한 방식이던 vector field가 필요하다_그래야지 advect가 발생한다.)
V or vel
3. 온도
공기의 온도차로 인해 이동하게 되면서 속도가 발생한다. 그리고 연기는 위로 올라간다.
연기는 존재하지만, 온도가 없다면 어떨까? 바람의 영향만 받고 이류만 발생된다.
temperature
위의 세가지가 solver에 들어갈 source가 될 예정이다.
solver를 이용함에 있어서 source를 제작할 때 조건이 하나씩 빠질수도 있다.(이것은 제공해주기 나름)
ex) 연기 + 속도 / 연기 + 온도 / 연기 (필요에 맞게 골라서 만들게 된다)
pop / smoke / pyro solver 모두 비슷한 방식으로 세팅이 진행된다.

pop object
무엇을 만들 것이다.(파티클의 이름, 물리적 특징)
pop source
어떠한 재료를 가지고 점을 생성할 것인가(점의 수량, 점의 생성과 소멸시기)
pop solver
계산은 어떻게 할 것인가


smoke object
- 어떠한 smoke를 만들것인지 정해주는 노드
- Division size : 얻고싶은 볼륨의 결과가 어떤 해상도를 갖고 싶은지 정해주는 항목
- Size : 바운딩 박스의 사이즈
- Center : 바운딩 박스의 중심의 위치
- Object name : 볼륨의 결과에 대한 이름을 정해주는 항목
- 아래쪽에 visualize에 관련된 guide가 상당히 디테일하게 있다.




volume source
어떠한 자료를 불러서 source로 쓰고 싶은지 정해주는 노드
operations에 추가해서 density, temperature, v / vel 등을 source로 사용하도록 정해줄 수 있다.

smoke solver
어떻게 계산을 해주기 바라는가에 대한 세팅을 잡는 노드
- temperature diffusion
- 온도에 대한 볼륨이 얼마나 많이 블러가 될 것인가
- cooling rate
- 온도가 얼마나 빠르게 식을 것인가
- Buoyancy Lift
- 뜨거운 열기가 올라가는 속도, 기존 속도에 곱해지게 된다.
- Buoyancy Dir
- 뜨거운 열기가 올라가는 방향


Source Volume : 우리가 dop network 밖에서 만들어줬던 source volume 자체의 이름을 적어주면 된다.(어떠한 이름이던 우리가 만들어준 이름을 적어주면 된다)
Target Field : source volume으로 불러오는 volume을 어떤 것으로 사용해서 다루겠다는 것을 적어주면 된다.
volume source에서 불러들인 volume을 어떻게 계산하는지 뉘앙스를 알 필요가 있다.
geometry 단계에서 우리가 만들어주는 volume source 들을 dop network 안의 volumesource 노드에서 불러오게 된다.
이 때, 우리가 만들어주는 volume의 이름을 source volume 항목에 적어주고, 이 source를 어떤 field에 대입해서 사용할지 target field에 적어준다.
이렇게 target field에 올라간 내용을 토대로 smoke solver에서는 정해진 계산을 진행한다.
ex)



여기에 속도를 추가해주기 위해서 wind 와 noise를 vel field에 올려줬다.

소스만 잘 만들면 된다!!!
애매하게 알면, 언젠가 이것이 발목을 잡는다.

smoke solver에서 사용될 source가 dop network 밖에서 만들어졌다면, 어떠한 정보를, 어느 field에 적용해서 사용하겠다는 작업을 진행해야 한다. 그 작업을 해주는 곳이 volume source 노드의 Operations 부분이다.
Field Rank - 사용될 volume의 내용이 Scalar인지, Vector인지 정해줘야한다.
Source Volume - 밖에서 만들어준 Volume의 이름을 적어준다. 어떠한 이름이 되던 상관없이 우리가 만들어주고 사용하려 하는 볼륨의 이름이다.
Target Field - 우리가 만들어준 volume을 어느 field에 올릴지 적어준다. (ex - density, temperature, vel 등)
템플릿 처럼 준비된 내용이 존재한다.
Initialize - 템플릿 사용하듯이 operations를 배치해준다.





템플릿을 사용한다면, 밖에서 준비하는 소스 볼륨의 이름을 맞춰주는 것이 중요하다.
템플릿에 세팅된 source volume 이름을 만들어준 volume의 이름으로 바꿔서 의도한 source를 필요한 field에 넣어줄 수 있어야한다.
현재 dop network 밖에서는 결과가 출력되지 않고 있다.
dop network 밖에서 smoke solver의 결과를 확인하기 위해서는 새로운 노드가 필요하다.
dop import - 이 노드는 pop solver에서 포인트의 정보를 불러오는데 사용된다.
우리가 사용할 노드는 dop import field이다.


DOP Network - solver 작업을 진행한 dop network의 경로를 기입한다.
Field to Import - 어떠한 field를 import 해줄지 기입한다.

dop network 안에서의 결과로 우리가 얻게 되는 volume은 field에 대한 volume이다.(density, vel, pressure 등)

target field로 density를 적어준 volume들의 결과는 density로 출력된다. source의 이름이 중요한 것이 아니고, 어떠한 field로써 계산을 했는지가 중요한 것이다.

dop import field로 불러온 정보는 일반 볼륨으로 불러오게 된다.
정보를 따로 확인할 수 있도록 blast로 찢어준다.

density field, velocity(vel) field, temperature field에 source를 넣어보자.

sphere로 fog VDB를 만들어주고 이름을 density로 지정했다.
name 노드를 활용해서 density라는 이름을 각각 temperature, vel.x / vel.y / vel.z 로 변경했다.
vel vdb는 따로 나뉘어있는 것이 신경쓰여서 VDB Vector Merge로 묶어줬다.
이렇게 만들어진 density, temperature, vel VDB는 merge로 묶어줬고, dop network에서 volume source로 불렀다.

dop network 안에서 volume source의 operations 세팅은 일단 템플릿 Source Smoke로 불러와주고, vel 관련 source name만 바꿔줬다.
- 템플릿은 v로 설정되어있으나, 우리가 만들어준 vel field에 들어갈 vdb의 이름은 v가 아니고 vel 이었기 때문이다.
temperature가 어떻게 영향을 주는지 파악하기 위해 volume vop을 활용해서 temperature값을 조절할 수 있도록 해줬다.
- temperature는 velocity에 영향을 주는것으로 파악되었다.
- temperature 때문에 발생된 속도가 있기 때문에 volume의 이류가 일어나고 있다.
현재 dop network 안에서 연기가 움직이는 것을 볼 수 있는 이유는 smoke object의 density가 켜져있기 때문이다.




Buoyancy
부력
온도에 따라 떠오르게 하는 힘 - 일단 이거로 이해하자.
Buoyancy Lift
얼마나 세게 올라갈 것인가 - multiple 개념
Buoyancy Dir(Direction)
부력이 작용하는 방향
온도가 존재함으로 인해서 부력이 발생하고 이류가 일어난다.
container의 size가 고정되어있어서 확인을 하는데 답답한 상황이다.
이것을 해결하기 위한 노드가 있다.
Gas Resize Fluid Dynamic Node
- smoke solver의 대부분의 상황에 달고 다니게 되는 노드
- smoke solver의 두번째 인풋에 연결한다.



- Max Bounds tap의 clamp to maximum을 체크해제해주고, Bounds tap 아래의 Tracking Object tap에 가서 Track By Object를 활성화해주면, 바운딩박스 사이즈가 smoke object에서 지정한 것을 무시하고, 우리가 지정한 source를 tracking해서 바운딩박스를 유동적으로 변화한다.


앞으로 temperature field가 어떻게 다뤄지는지 계속해서 관찰하고 알 필요가 있다.
temperature field는 velocity field에 직접적인 영향을 주는 몇 안되는 field 중 하나이다.
그래서 생각보다 결과물의 형태에 많은 영향을 주게 된다.
dop network 밖에서 만들어주는 velocity field만큼이나 온도가 solver 내에서 바뀌는 것에 대해서 신경써줘야한다.
velocity field만으로는 자연스러운 표현의 한계가 존재한다.
모든 field에 관여하겠다는 마인드가 필요하다.
temperature에 volume slice를 달아서 확인해보자.
(혹은 smoke object의 guide 항목에서 temperature를 체크해줘도 확인할 수 있다.)


Temperature Diffusion
매 프레임마다 temperature의 모양을 얼마나 블러하면서 진행을 시킬지를 뜻한다.
temperature diffusion 값이 작으면 매 프레임 블러가 줄어들면서 패턴이 많이 남아있게 된다.
temperature diffusion 값이 크면, 매 프레임마다 블러가 많이 된다.




Cooling Rate
온도가 얼마나 빠르게 식을지에 대한 항목
1일 경우, 온도가 바로 식어서 velocity에 영향을 주지 않는다.

온도가 바로 식어서 열원에서만 온도가 발생하고 옆으로 퍼지진 않는다.
temperature가 바로 식어서 velocity field에 영향을 주지 않을 뿐, 현재 vel은 작동을 하는 상태이다.

움직임이 없는 순간에 살짝 연기가 열원쪽에서 체류하면서 팽창하다가 vel에 의해서 옆으로 쭉 뻗어나간다.

cooling rate 1일때와 0.95일때는 많은 차이가 발생한다. 그 이유는 아예 온도가 바로 식어버리는 1과 조금이라도 온도의 이동이 있는 0.95는 차이가 나기 때문이다.


cooling rate가 줄어들면서 온도의 냉각속도가 줄어들었다. 이 말은 온도가 높은 상태로 많이 유지되어서 위 이미지처럼 많은 curl이 생기는 것을 볼 수 있다.

온도가 잘 식지 않기 때문에 buoyancy, 부력에 의해 더 많이 올라가고 있다.
'Houdini > Houdini1_Volumes' 카테고리의 다른 글
09_충돌 세팅 2가지, VDB FROM PARTICLES(숙제는 진행중) (0) | 2023.03.02 |
---|---|
08_연기 모양에 영향을 미치는 것들, POP ADVECT BY VOLUME 적용 (0) | 2023.03.01 |
06_SOLVER와 함께 VOLUME 다루기 (1) | 2023.02.25 |
05_볼륨의 확산? 이류? VOLUME ADVECT (0) | 2023.02.22 |
04_Vector Volume / VOL TRAIL, GRADIENT, CURVATURE 🔥완전중요🔥 (1) | 2023.02.21 |