
- smokeobject: 이전 프레임의 결과(볼륨 상태(density, temperature, vel 등)를 저장)이자 다음 프레임의 입력값
- volumesource: 볼륨 주입
- smokesolver: 주입된 볼륨의 속성 변화를 계산하여 시뮬레이션 진행(pyrosolver를 사용하면 속성값을 더 쉽게 조정할 수 있다. 실제로 작업할 때는 pyrosolver를 사용하게 된다.)
※ Volume의 detail을 잡을 때는 큰 모양을 먼저 잡고, 작은 디테일을 조정하는 것이 좋다.(ex: shred > confinement > disturb...)
// smokeobject
1.Properties

Properties에서는 볼륨을 주입할 공간(그릇) > 도메인을 정의할 수 있다.
- Division Size: voxel size
- Size: 도메인의 전체 크기
- Center: 도메인의 중심 위치(pivot)
2. Creation

smokeobject의 이름은 기본값$OS(노드명)으로 되어 있다.
popobject와 동일하게 이를 통해 dopnet 바깥에서 해당 object를 불러올 수 있다.

DOP Import Fields 노드를 통해 시뮬레이션 정보를 받아올 때는,
Dop Network에는 특정 dopnet 경로를 입력하고, Objects에는 위에서 지정한 smokeobject의 object name을 입력해준다.

그 후 보고 싶은 Volume의 field 들을 추가해주어야 시뮬레이션 output을 확인할 수 있다.
// volumesource
density/temperature/vel 등의 볼륨 필드를 처음 또는 매 프레임마다 주입한다.
<Field>
볼륨에서 이미 계산 방식이 준비되어 있는 특수한 그릇
- Density Field > density
- Temperature Field > temperature
- Velocity Field > vel


먼저 volume을 source로 사용할 것인지를 지정해주어야 한다.
기본값은 SOP 인데, 이 경우에는 아래의 SOP에 절대경로나 상대경로로 source로 사용할 volume 경로를 직접 입력해주어야 한다.


만약 First Context Geometry(Second/Third/Fourth...) 를 사용한다면 바깥에서 dopnet에 직접 해당 input에 연결해주어야 한다.
복잡한 시뮬레이션일 수록 노드를 직접 연결하는 방법보다는 SOP을 사용하는 것이 좋을 것 같다.
1. Volumes

Operations를 수동으로 추가하여 사용할 field를 지정해준다.
- Field Rank: volume 종류(Scalar = float 볼륨, Vector = vel 같은 벡터 필드)
- Source Volume: source로 사용하는 volume의 name
- Target Field: smoke object/도메인에 쓰여질 최종 필드 name(density/temperature/vel)
// smokesolver

Temperature에 관한 설정을 변경할 수 있다.
- Temperature Diffusion: 온도가 주변으로 퍼지는 정도(블러)
- Cooling Rate: 온도가 프레임마다 떨어지는(식는) 정도
- Buoyancy Lift: 온도가 density에 미치는 힘(부력)의 세기
- Buoyancy Dir: 부력의 방향(주로 상승 힘이지만 아닐 수도 있음.)
// Gas Field Vop
Volume의 Fields에 대한 조절이 가능한 VOP
Volume solver에 연결하여 사용한다.(의도에 따라 input의 위치가 달라진다.)
※ DOP Network 안에서는 Volume 관련 노드들에 Gas가 붙는다.
// Gas Wind
volume에 바람에 날리는 효과를 줄 수 있는 노드
volumesolver의 velocity update(세 번째 input)에 연결한다.

- Wind Direction: 바람의 방향
- Wind Scale: 바람의 세기
- Turn speed: 바람 방향이 시간에 따라 변화하는 속도(누적 변화-가속)
// Gas Resize Fluid Dynamic
volume 필드를 따라서 smokeobject의 사이즈가 동적으로 변하도록 설정해줄 수 있는 노드
따라갈 volume 필드가 존재하지 않거나 값이 0이면 도메인은 초기 설정(smokeobject)의 사이즈로 되돌아간다.
volumesolver의 advection (네 번째 input)에 연결한다.


먼저 따라갈 volume의 경로를 Tracking Object 탭의 Sop Path에 입력해준 후 Max Bounds 탭의 Clamp to Maximum Size 체크를 해제해 주면 동적으로 변한다.
// Gas Dissipate
Volume의 양(주로 density)을 시간에 따라 줄여주는 노드
volumesolver의 advection(네 번째 input)에 연결한다.
※ pyrosolver를 사용하면 Shape > Dissipation에서 조절 가능
// Gas Turbulence
Volume의 velocity(vel) field에 노이즈를 추가해주는 노드
volumesolver의 velocity update(세 번째 input)에 연결한다.
※ pyrosolver를 사용하면 Shape > Turbulence 에서 조절 가능
// Gas Shred
Volume velocity field에 찢어진 듯한 미세 디테일(노이즈)을 추가해주는 노드
volumesolver의 velocity update(세 번째 input)에 연결한다.
※ pyrosolver를 사용하면 Shape > Shredding 에서 조절 가능

- Squash: 옆으로 퍼지듯이, 가로 방향으로 찢어지는 노이즈를 준다.
- Stretch: 위아래(또는 메인 방향)로 늘어지듯이, 세로 방향으로 찢어지는 노이즈를 준다.
// Gas Vortex Confinemente
Volume velocity field의 vorticity(소용돌이)를 강화하여 density가 말리고 꼬이는 듯한 효과를 주는 노드
volumesolver의 velocity update(세 번째 input)에 연결한다.
※ pyrosolver를 사용하면 Shape > Confinement 에서 조절 가능
// Gas Disturb
Volume의 랜덤 노이즈를 추가해주는 노드
volumesolver의 velocity update(세 번째 input)에 연결한다.
※ pyrosolver를 사용하면 Shape > Disturbance 에서 조절 가능
// Collision
volume의 충돌 조건을 만들어준다.
1. static object


staticobject의 SOP Path에 충돌 조건으로 사용할 source Geo의 경로를 입력한다.
그냥 geometry를 source으로 사용할 거라면 여기까지만 설정해줘도 되고. SDF를 source 으로 사용할 거라면 추가 설정이 필요하다.

Mode를 `Volume Sample` 로 변경하고 SDF 형태의 geo 경로를 Proxy Volume에 입력한다.
2. volumesource

volume source 노드를 추가하여 기존 소스와 merge해서 solver에 연결해준다.


이때 source의 Initialize에서 Collision을 선택하고, SOP 에는 collision source 경로를 입력한다.(volume source로 입력한다.)


Volumes의 coliision field의 Source Volume에는 volume source에서 sdf name 을 입력한다.


coliisionvel field의 Source Volume에는 volume source에서 vel name 을 입력한다.


- collision 을 위한 source로는 VDB from Polygons의 Distance VDB를 활용
- collision vel을 위한 source로는 VDB from Particles의 Velocity VDB를 활용
(source에 scatter 로 particles을 생성한 후 trail 노드의 Result Type을 Compute Velocity 로 하여 vel을 생성한 후 VDB from particles를 활용하면 간편하게 vel을 만들 수 있다.)
// pyrosolver


대부분 Smoke Solver와 동일하지만, Smoke Solver에는 없는 `연소(fuel → flame → temperature)` 과정을 제어하는 Combustion 탭이 있다.(이때 volume source에서 fuel 필드가 주입되고 있어야 한다.)
- Ignition Temperature: fuel이 점화되어 burning 상태로 전환되기 시작하는 최소 온도
- Burn Rate: fuel이 얼마나 타서 사라질 것인지(0~1)
- 1에 가까울수록 > 빠르게 연소
- 0에 가까울수록 > 천천히 연소, 연기 오래 남음 - Fuel Inefficiency: 연소 후 fuel이 얼마나 남아 있는지
- 값 ↑ > 더 많은 fuel 잔여물이 남음 → 연기 팽창이 커지고 부피가 커짐
- 값 ↓ > 더 깨끗하게 모두 타 없어짐 - Temperature Output: fuel이 연소될 때 생성되는 temperature의 강도
- 값 ↑ > 연기가 더 빠르게 상승하며 불길이 거세보인다. - *Gas Release: 연소로 인해 부피가 얼마나 증가할지 > 연소 시 발생하는 gas의 양
- 값 ↑ > 화염이 팽창하고 부풀어 오르며 연기 scale도 커진다.
'Technical Artists > Houdini' 카테고리의 다른 글
| [Houdini] DOP Network 밖에서 Constraint Visualization 불러오기 (0) | 2026.01.02 |
|---|---|
| [Houdini] DOP Network - Rigid Body (0) | 2025.11.28 |
| [Houdini] DOP Network - Particle (0) | 2025.11.07 |
| [Houdini] 기본 개념 정리 (0) | 2025.09.20 |
| [Houdini] Attribute noise 아닌 Mountain 노드 사용하기 (0) | 2025.09.19 |