Ver. 18.0
供烟雾与火焰效果使用的解算器。
Pyro Solver 是进阶版本的 Smoke Solver。相比 Somke Solver, Pyro Solver 更复杂一些,但更灵活一些。
在设置 Pyro 解算中,有几个重要的数据需要从几何体对象获得:
该输入端用于连接解算的容器。使用 smoke object
。
在 Pyro 中,该输入端主要用于加载 Gas Resize Fluid Dynamic
节点,使整个模拟容器的大小按照目标体积的大小进行变化,从而达到优化的效果。该输入端的计算按 step 为单位计算,每 step 更新一次。
该输入端主要用于加载自定义的速度场。这些速度场的计算会在 project gas non-divergent
之前应用完毕。
该输入端用于连接 Gas advect
节点。该节点允许使用指定的场来推动模拟中的其他场(该计算基于 point)。
该输入端主要用于加载指定的源(以及其包含的属性 / 场的信息)到 DOP 中。该输入端主要使用的节点是 Volume Source
。当然,我们也可以通过修改源中的信息,来达到更新、操作 DOP 中场的目的。
该 tab 下的参数控制解算的整体发展。
Time Scale | 该参数类型为 scalar,作为整个解算的缩放参数而存在。1 代表正常速度,大于该值表示该模拟已经被加速,反之则是减速。我们可以使用 doptime ,dopframe ,dopsttot / dopttost 等表达式来进行全局时间与解算时间之间的转换。
Time Scale 的值只影响 DOP 中的 Timestep。举个例子,如果我们的速度场是在 SOP 中计算完毕并导入的,那么如果我们想在 Time scale 改变的情况下获取对应正确的速度,我们需要使用 |
Temperature Diffusion | 该参数操作的对象是 temperature field (实际上进行的是 Gaussian Blur)。该值越高意味着 temperature field 的扩张程度越大。比如,2 意味着 solver 会每秒对 temperature field 进行以 2 为半径的高斯模糊,从而达到温度场扩散的效果。这个参数存在的意义是为了实现小于 container 分辨率的 turbulence。这些 turbulence 对温度场的延伸也同样有贡献。 |
Cooling Rate | 该参数指定 temperature field 冷却的速度。比如,0.9 意味着每秒钟当前的“热”气体温度会下降 90%。 |
Viscosity | 该参数定义了 velocity field 的流动性(也就是说速度场与液体是类似的,也是在流动的)。该值越高,越会使相邻的 voxel 具有相同的速度,从而导致流动的效果。该值为 0 会导致相邻的 voxel 会在不受任何阻力的情况下,向任意方向移动,这将会创建更混乱,更动荡的效果(布朗运动?doge)(在 pyro solver 中,当临近 voxel 速度不一致时,高 viscosity 会带来一种类似颜料在水中扩散的效果(无视速度场,布朗运动 again doge)。这种效果称为 diffusive term。) |
Buoyancy Lift | 该参数是浮力的系数。该参数使用环境温度与个体 voxel 温度的差异来决定系数的大小,因此越热的区域会得到更多的浮力,而越冷的区域会下降的更快。增加该值会导致体积的上升速度更快,能够达到的区域更高。 |
该 tab 是 pyro solver 与 smoke solver 最大的不同点。该模型通过使用导入的 fuel
field 进行燃烧,模拟了将 fuel
转化为 burn
/ temperature
/ density
场的过程。
Peter Quint 的教程非常有用!!
Ignition Temperature | 燃点温度。只有在该温度以上,整个 combustion model 才会进行运作。如果希望所有的 fuel 被立即点燃,使用负值作为参数值。 |
Burn Rate | 每秒参与燃烧的 fuel 。该参数值是比例值,0.9 意味着 90% 参与燃烧的的 fuel 将在一秒中以后被“消耗”掉。该值主要控制参与燃烧的 fuel 占 fuel 总量的比例。Fuel Inefficiency 会对 fuel 的实际剩余量有影响。 |
Fuel Inefficiency | 控制有多少参与燃烧的 fuel 实际上没有被消耗掉。0 代表所有参与燃烧的 fuel 都会被从 fuel field 中去掉,而 1 代表保留所有的参与燃烧的 fuel 。该值设置为 0 的时候有时会出现 bug。设置为一个非常靠近 0,比如 0.05 这样的值会更好一些。 |
Temperature Output | 燃烧每单元 fuel 产生的温度场(添加到当前温度场中)。该属性同时受 burn 和 heat 的影响。 |
Gas Released | 该参数作为向燃烧区域注入的 gas 量的系数。这个选项会导致燃烧区域极速往外扩张。该值同时受 heat 和 burn 场的缩放系数加成。 |
对 flame / heat field 的控制参数 tab。
Flame Height | flame 的缩放系数。该值越高,flame 的高度就越高。需要注意,该值并不是一个有测量量表的值,该值只是影响应用到 flame 上的冷却量。 本参数下,非常低的参数值并不能得到非常小的 flame,因为冷却的影响因素并不足以抵消温度场的影响。 该值可以被视作冷却的时间,在 cooling field 打开或关闭的前提下有不同的算法:
|
Cooling Field | 使用指定的 field 来控制 cooling field(也就是 mask) |
该 tab 控制 smoke 的发射量。
Create Dense Smoke | 向系统中添加 smoke。该过程不会考虑现有的烟雾量,因此对于需要 Heavy smoke 的场景非常适用。当选项关闭的时候,smoke 只会在 density 超过特定量的 voxel 上生成。 |
Source | 选择烟雾的产生源。最好的选项通常是 heat 场。适用该场会带来更真实的效果,并防止 smoke 对 flame 造成模糊。 |
Smoke Amount | 生成 smoke 的系数。(都是直接乘到场上的,burn 是作为 linear combination 的系数,heat 是直接乘。) |
Heat Cutoff | 该选项只能在 heat 作为 smoke 源的情况下使用。如果该值为 0.2 ,那么 smoke 只会在 heat field 中低于 0.2 的位置生成。 |
Blend Amount | 该选项只能在 heat 作为 smoke 源的情况下使用。增加该值将使 smoke 和 flame 之间的渐变变得更加平滑。 该值实际上控制的是在 Heat cutoff 点之上的的 smoke 生成。 0 意味着 在 Heat cutoff 点之上的 heat field 不会产生任何的 smoke;1 意味着在 Heat cutoff 点处会产生最大量的 smoke,之后随着 heat 场值的增长, smoke 的量会随之减少,直到达到 heat 场的最大值处(此处没有任何 smoke 生成)。 |
控制 fuel 的影响。 Advect Fuel|该选项关闭的时候,fuel 处于静止状态,并且不受速度场的影响。当开启的时候, Fuel field 会像 tempature、heat、density 一样被推进。该选项开启后导致更加不可预测的结果,并且会使用更多的时间计算。| Fuel Speed|Fuel field 的最大移动速度。|
该 Tab 下的属性控制 flame / smoke 的形状。除了 Dissipation 之外,所有的参数均会像内部力一样影响速度场。
指的注意的是,smoke object 的分辨率决定了火焰和烟雾的细节。不过,Pyro slover 在很大程度上是有独立参考的“分辨率的”,因此我们可以通常在低分辨率下工作,再提高分辨率来得到细节,同时又能获得与之前大致相似的整体形状。
Houdini 通过两种方式向火焰添加 turbulent noise:shredding & turbulence。
Velocity Field
来得到火苗?(lick)和流状的火焰(flow)。
|Dissipation|控制 smoke 的消散速度。该值越低,smoke 消失的程度越慢,反之越快。
该值为百分比,0.1
代表每 24
秒消失 10% 的烟雾。1
会导致所有的 smoke 立即消失。|
Disturbance | 在不改变 pyro 主要形状和动态的情况下,为其增加细节。 |
Shredding | 基于 Heat field 的梯度来推拉 velosity field,从而得到细长状的火苗形态。 需要注意的是,该值如果过高会导致随机的,碎片化的结果;相反,过低的该值会导致滴状的,特征不明显的火焰。 因为 shredding 基于 temperature field 的梯度实现效果,因此温度偏低会使 shredding 的中细碎效果更明显。温度较高会导致梯度的动态下降,因此会导致较大的条纹状的火焰。同时,越高的分辨率会得到越多的梯度细节。 |
Disturbance |