Houdini Micro Solvers
시뮬레이션 한 걸음은 이렇게 굴러갑니다
연기든 물이든, 컴퓨터는 한 프레임에서 다음 프레임으로 가는 계산을 반복할 뿐입니다.
그 한 걸음이 아래 순서로 나뉘고, 각 칸을 담당하는 노드가 따로 있습니다.
01
힘을 더한다
뜨거우면 위로, 바람이 불면 옆으로. 속도를 바꿉니다.
02
실어 나른다
그 속도를 따라 연기와 물을 실제로 옮깁니다.
03
압력을 푼다
한곳에 뭉치거나 구멍이 나지 않도록 속도를 손봅니다.
04
부딪힘을 처리한다
벽을 뚫고 지나가지 못하게 막습니다.
05
정리한다
연기는 옅어지고, 값은 범위 안으로 다듬어집니다.
이 다섯 걸음이 1초에 24번, 서브스텝까지 치면 그보다 몇 배 더 반복됩니다.
마이크로 솔버를 하나 끼워 넣는다는 건, 이 반복되는 순서 어딘가에 내 계산을 한 줄 끼워 넣는 일입니다.
어느 입력에 꽂느냐가 절반입니다
Smoke Solver 와 Pyro Solver 에는 마이크로 솔버를 꽂는 입력이 네 개 있습니다.
같은 노드라도 어디에 꽂느냐에 따라 결과가 완전히 달라집니다.
한 입력에 여러 개를 꽂으면 왼쪽에서 오른쪽 순서로 실행됩니다.
입력 1
Pre-solve
매 걸음이 시작되기 전에 실행됩니다. 필드를 미리 만들어두거나 초기화할 때 씁니다.
입력 2
Velocity update
압력 계산 전에 속도를 건드립니다. 힘을 더하는 노드는 거의 다 여기 꽂습니다. Turbulence, Disturb, Buoyancy, Wind 자리입니다.
입력 3
Advection
이동 단계입니다. Gas Advect 를 꽂아 지오메트리 포인트까지 함께 흘려보낼 때 씁니다.
입력 4
Sourcing (post-solve)
압력 계산 후에 실행됩니다. 소스를 불어넣거나, 계산이 끝난 값을 다듬는 자리입니다.
FLIP Solver 는 입력 이름이 다릅니다. Fluid to Solve · Particle Velocity ·
Volume Velocity · Sourcing (post-solve) 네 개입니다.
입자 상태를 손볼 것은 Particle Velocity, 그리드 속도를 손볼 것은 Volume Velocity 에 꽂습니다.
헷갈릴 때 기준은 하나입니다. 압력 계산 전에 손볼 것이냐, 후에 손볼 것이냐.
힘을 주는 것은 전(Velocity update), 결과를 다듬는 것은 후(Sourcing)입니다.
힘을 압력 계산 후에 주면 그 힘이 압력 보정을 거치지 않아 물이 뭉치거나 구멍이 뚫립니다.
거의 모든 노드에 똑같이 있는 파라미터
Gas 노드를 열면 늘 보이는 항목들입니다. 아래 노드 목록에서는 이것들을 빼고
그 노드만의 파라미터에 집중했습니다.
Stencil Field
스칼라 필드 이름을 적습니다. 그 필드 값이 0.5보다 큰 복셀에서만 이 노드가 작동합니다.
"여기서만 적용"을 만드는 표준 방법입니다. 비워두면 전체에 적용됩니다.
Use Timestep
켜면 효과가 시간에 비례합니다. 보통 켜둔 채로 둡니다. 끄면 프레임레이트가 달라질 때 결과도 달라집니다.
Time Scale
이 노드에만 적용되는 시간 배율입니다. 1 이 보통, 크면 효과가 빨라지고 작으면 느려집니다.
Parameter Operations
Default Operation
값을 언제 적용할지 정합니다. Set Always 는 매 걸음(키프레임·표현식이 먹힘),
Set Initial 은 처음 한 번만. 대부분 기본값 그대로 둡니다.
Data Name
Unique Data Name
시뮬레이션 데이터에 붙일 이름입니다. 거의 건드릴 일이 없습니다.
같은 노드를 여러 개 쓸 때 이름이 겹쳐 덮어써지면 그때 손봅니다.
Group
Solver Per Object
여러 오브젝트를 한 시뮬에서 다룰 때 어디에 적용할지 고릅니다.
오브젝트가 하나면 신경 쓰지 않아도 됩니다.
Use OpenCL
있는 노드에 한해, 켜면 그래픽카드로 계산합니다. 보통 빠릅니다.
결과가 이상하거나 오류가 뜨면 꺼서 확인해 봅니다.
노드 그래프는 이렇게 생겼습니다
Pyro Solver 안이 아니라 바깥에서 연결하는 그림입니다. 솔버 노드에는 입력이 다섯 개 있고,
그중 2~5번이 마이크로 솔버 자리입니다. 1번은 시뮬레이션할 오브젝트를 받습니다.
입력 이름은 노드 위에 마우스를 올리면 뜹니다. 순서가 헷갈리면 그렇게 확인하십시오.
참고로 Pre-solve 입력이 목록에 하나 더 있는데, 위 그림에서는 자리를 아껴 생략했습니다.
그림은 전부 실제로 돌려본 것입니다
노드를 펼치면 나오는 비교 그림은 후디니에서 직접 시뮬레이션하고 렌더한 결과입니다.
반지름 0.22 구 소스, 복셀 0.028, 45프레임 — 이 조건을 고정해 두고 파라미터 하나만 바꿔 찍었습니다.
그래서 두 그림의 차이는 온전히 그 파라미터의 차이입니다.
마이크로 솔버는 파이로 솔버 안에 들어 있으므로, 솔버 표면의 해당 스위치를 켜고 껐습니다.
파라미터 창은 이렇게 채웁니다
Gas Buoyancy 를 예로 들었습니다. 노드를 처음 놓으면 아래 값이 그대로 들어가 있습니다.
즉 손대지 않아도 연기는 위로 뜹니다.
gasbuoyancy1
힘을 더할 속도장. 파이로는 vel 이 표준입니다
뜨는 방향. 가운데가 Y축이라 위쪽입니다. 옆으로 눕히면 옆으로 흐릅니다
거의 모든 Gas 노드에 있는 항목. 이 필드가 0.5 보다 큰 곳에서만 작동합니다
힘은 Buoyancy Lift × (Temperature − Ambient Temperature) 로 계산됩니다.
연기가 안 뜬다면 온도 필드에 값이 실제로 들어 있는지부터 확인하십시오.
Lift 를 아무리 올려도 온도가 0 이면 힘은 0 입니다.