후디니 Pyro 연기가 안 올라갈 때: Temperature·Buoyancy
Pyro Temperature 값이 들어 있는데 연기가 거의 오르지 않는다면, 먼저 솔버의 부력 수치를 올리지 말고 temperature 필드가 실제로 0보다 큰지 확인하세요. SideFX 문서에서 field 값 0은 주변 공기의 Ambient Temp와 같은 상태입니다. 온도 차이가 없으면 temperature에서 나오는 부력도 생기지 않습니다. 소스 속성부터 볼륨 이름, 솔버의 target field까지 순서대로 확인하면 원인을 좁힐 수 있습니다.
Pyro 연기 상승량 어림 계산기
소스의 temperature field 값과 solver 설정을 넣으면, 이 테스트 장면의 상승 높이를 근사합니다. Houdini 19.5.435 SOP 실측값을 바탕으로 하며 Reference Temp는 3000 K, FPS는 24로 고정했습니다.
높이는 frame 1의 연기 최고점 대비 Houdini units입니다. 속도는 상승 높이를 경과 시간으로 나눈 평균값이고, 등가 가속도는 시작 정지·일정 가속을 가정해 높이에서 환산합니다. 모두 solver가 직접 출력하는 수치가 아닙니다.
이 추정은 3×3 source point, Voxel Size 0.2, density threshold 0.01, density Dissipation off 조건의 저해상도 테스트입니다. 부력 입력은 Pyro Solver SOP의 Buoyancy Scale 기준이며, legacy DOP의 Buoyancy Lift를 같은 숫자로 환산하지 않습니다. 측정 변수는 한 번에 하나씩 바꾸었으며, 여러 입력을 함께 바꾼 조합은 실측값이 아닙니다. Reference Temp, FPS, source 모양, 씬 scale이 다르면 결과를 다시 확인하세요.
아래 계산기는 Houdini 19.5.435의 작은 Pyro 장면에서 실제로 비교한 상승 높이를 기준으로, 설정 조합의 결과를 어림합니다. 시뮬레이션의 정확한 가속도 방정식을 재현하는 도구는 아니므로 샷의 최종 결과를 대신하지 않습니다.
Pyro Temperature가 0이면 주변 공기와 같아집니다
Pyro의 temperature는 화면에 보이는 연기 색을 정하는 값만이 아니라, 뜨거운 기체가 상승하는 부력 계산에 쓰이는 열 분포입니다. SideFX 문서는 이 필드의 값 0을 주변 공기의 온도인 Ambient Temp (K)로 매핑한다고 설명합니다. 따라서 field가 0이면 주변보다 뜨겁거나 차가운 영역이 아니며, 온도 차이에서 비롯되는 상승·하강 힘이 없습니다. 다른 velocity나 별도 force가 있다면 연기가 계속 움직일 수 있지만, 온도 기반 부력은 기대하기 어렵습니다.
필드 값은 섭씨나 켈빈을 그대로 적는 칸이 아닙니다. Houdini 19.5의 Pyro Solver SOP에서는 Ambient Temp (K)와 Reference Temp (K)로 정규화된 field 값의 물리적 의미를 정합니다. 공식 mapping은 다음과 같습니다.
실제 온도(K) = Ambient Temp + temperature field 값 × (Reference Temp − Ambient Temp)
예를 들어 Ambient Temp가 300 K, Reference Temp가 3000 K이고 소스의 temperature가 0.5라면 매핑된 값은 1650 K입니다. 주변 공기보다 1350 K 높은 영역입니다. 반대로 field가 0이면 300 K, 즉 이 설정의 주변 공기로 해석됩니다. 이 식은 온도 필드의 의미를 정하는 식이지, 연기 상승 가속도를 바로 계산하는 공식은 아닙니다.
SOP과 DOP에서 Buoyancy 이름이 다릅니다
파라미터 검색 결과가 튜토리얼과 다르더라도 노드가 틀린 것은 아닐 수 있습니다. 제가 확인한 Houdini 19.5.435 Pyro Solver SOP에는 Buoyancy Scale, Ambient Temp (K), Reference Temp (K), Cooling Rate가 있습니다. SOP에서는 Gravity Direction이 중력 방향을 정하고, 중력 설정이 부력 크기에도 영향을 줍니다. 반면 legacy DOP Pyro Solver의 도움말에는 Buoyancy Lift와 Buoyancy Dir가 표시됩니다. SOP에서 Buoyancy Lift라는 이름을 찾기보다 현재 노드에 표시된 부력 배율과 방향을 확인하세요.
Temperature Scale도 혼동하기 쉽습니다. Pyro lookdev 문서에서 이 값은 temperature를 발광 색으로 바꾸는 쪽의 multiplier입니다. 시뮬레이션이 뜨지 않을 때는 이 값보다 실제 temperature 필드와 solver의 부력 설정을 먼저 봐야 합니다.
소스에서 솔버까지 temperature 필드를 따라가세요

Pyro Source SOP의 출력은 점과 속성입니다. 점에 temperature 속성이 생겼더라도, 그 값이 볼륨으로 래스터화되지 않거나 솔버가 다른 이름의 필드를 읽으면 계산에 들어가지 않습니다. 아래 순서로 한 단계씩 확인하세요.
- 소스 점에서 값을 확인합니다. Pyro Source의 Attributes 설정 또는 뒤의 Attribute Wrangle에서 scalar 속성 이름을 정확히
temperature로 두세요. 점 속성 보기에서 해당 값이 0이 아닌지도 확인합니다. - Volume Rasterize Attributes의 Attributes 목록을 봅니다. 목록에
temperature가 포함되어야 그 속성에서 같은 이름의 VDB가 만들어집니다. 이 노드는 float 또는 vector point attribute를 래스터화합니다. - 출력 볼륨의 이름을 봅니다. Geometry Spreadsheet나 볼륨 시각화에서 소스에
temperature볼륨이 있는지 확인하세요. 입력 속성이 없거나 이름이 다르면 원하는 필드가 생성되지 않습니다. - Pyro Solver SOP의 소싱 연결을 봅니다. source volume과 target field의 매핑이 의도한 시뮬레이션 필드로 연결되는지 확인하세요. 두 항목의 이름이 반드시 같아야 하는 것은 아닙니다. 기본 설정은 소스 볼륨
temperature를 시뮬레이션 필드temperature로 보냅니다. 초기화 이후 설정을 바꿨다면 매핑도 다시 확인하세요. - 시뮬레이션 안의 온도 필드를 시각화합니다. 소스 VDB에는 값이 있지만 시뮬레이션의
temperature가 0이라면, 솔버 입력·source frame range·source activation 쪽을 먼저 살펴보세요.
이 다섯 단계가 통과한 뒤에야 Buoyancy Scale 또는 DOP의 Buoyancy Lift를 조절할 이유가 생깁니다. 상승 방향이 반대로 보이면 힘을 키우지 말고 먼저 SOP의 Gravity Direction 또는 DOP의 Buoyancy Dir를 확인하세요. 온도 필드가 0인 상태에서 부력 배율만 높이면, 온도 차이의 입력이 없다는 문제는 해결되지 않습니다.
저해상도 실측에서는 온도와 Buoyancy가 함께 움직였습니다
SideFX 문서는 buoyancy가 온도 차이에 비례해 뜨거운 영역을 올린다고 설명하지만, Pyro Solver의 상승 가속도를 한 줄로 계산하는 공식은 제공하지 않습니다. 그래서 Houdini 19.5.435 Commercial의 hython으로 작은 SOP Pyro 장면을 만들고, 소스 온도·Ambient Temp·Buoyancy Scale·Cooling Rate를 한 번에 하나씩 바꿔 24프레임까지 비교했습니다. 24fps, Voxel Size 0.2, Reference Temp 3000 K로 고정하고, frame 1의 연기 최고점을 기준으로 density > 0.01인 최고 높이를 쟀습니다. Density Dissipation과 disturbance·turbulence·shredding은 껐습니다.
| 소스 temperature | Ambient (K) | Buoyancy Scale | Cooling Rate | frame 24 상승량 |
|---|---|---|---|---|
| 0.0 | 300 | 5 | 0.5 | 0.0 units |
| 0.25 | 300 | 5 | 0.5 | 3.0 units |
| 0.5 | 300 | 1 | 0.5 | 2.2 units |
| 0.5 | 300 | 5 | 0.5 | 3.2 units |
| 0.5 | 300 | 10 | 0.5 | 3.8 units |
| 1.0 | 300 | 5 | 0.5 | 3.8 units |
| 0.5 | 900 | 5 | 0.5 | 2.2 units |
| 0.5 | 300 | 5 | 0.0 | 3.2 units |
| 0.5 | 300 | 5 | 0.9 | 3.0 units |
기준 설정인 temperature 0.5, Ambient 300 K, Buoyancy Scale 5, Cooling Rate 0.5에서는 frame 6에 0.8 units, frame 12에 1.8 units, frame 24에 3.2 units 상승했습니다. 반면 temperature 0에서는 24프레임 동안 연기 밀도는 남아 있었지만 최고 높이가 바뀌지 않았고, 위쪽 속도도 0이었습니다. 온도가 들어간 조건에서는 부력 배율을 1에서 10으로 올릴수록 상승량이 2.2에서 3.8 units로 커졌습니다. Ambient를 300 K에서 900 K로 바꾼 조건은 같은 source field와 lift에서 2.2 units로 낮아졌습니다.
이 표는 ‘Buoyancy를 몇 배로 하면 연기가 몇 미터 오른다’는 보편적인 환산표가 아닙니다. 테스트 scene의 단위는 Houdini units이며 1 unit을 미터로 가정하지 않았습니다. source 모양, pscale, FPS, 복셀 크기, reference temperature, solver 설정이 달라지면 높이도 달라집니다. 특히 여러 입력을 한꺼번에 바꾼 조합은 모두 실측한 것이 아니라 단일 변수 비교를 보간한 계산기 추정입니다. 최종 샷에서는 낮은 해상도로 방향을 잡은 뒤 실제 shot 설정으로 다시 확인하세요. 해상도와 계산 비용은 Pyro Voxel Size 실측 글에서 따로 다룹니다.
Cooling Rate는 연기를 없애는 Density Dissipation이 아닙니다
Pyro lookdev 문서는 SOP의 Cooling Rate를 temperature가 주변 온도를 향해 식는 속도로 설명합니다. Pyro Solver SOP와 legacy DOP 노드 도움말은 temperature field가 0으로 식는다고 표현합니다. 반면 Density Dissipation은 연기 밀도 자체를 줄여 보이는 연기가 사라지는 속도에 관여합니다. 연기가 빨리 흐려지는 문제와 상승이 느려지는 문제는 같은 손잡이로 해결하지 마세요. Dissipation 값을 시간·프레임과 연결하는 방법은 후디니 Pyro Dissipation 계산 글을 참고하세요.
온도와 속도는 정상인데 연기 꼭대기가 평평하게 잘려 멈춘다면 부력보다 컨테이너 경계가 원인일 수 있습니다. 이때는 Pyro 연기가 네모나게 잘릴 때 확인할 경계·패딩도 살펴보세요. 먼저 필드가 전달되는지 확인하고, 그다음 Ambient/Reference와 부력 방향, 끝으로 부력 배율과 냉각을 조절하는 순서가 안전합니다.
참고 자료
vfx 잡학지식

댓글 0
첫 댓글을 남겨보세요.