What & How & Why

Legacy Pyro

Houdini 18 之前用于创建 Pyro 的方法。

Pyro 的基本结构

在 Pyro 网络中,我们需要以下的部分来组建整个模拟过程:

  • Source):这个部分一般在 SOP 中创建,再导入到 DOP 中。根据不同的需要,Pyro 会要求带有不同属性 的源(也称为 field),比如 densitytemperaturevelocity 等等。源创建完毕后,会通过 source volume 节点导入到 DOP 中。
  • 容器Container):这个部分处于 DOP 中的左上角,也就是初始化的部分。为了进行 Pyro 的模拟,我们需要首先创建一个容器来存储模拟的结果。该部分对应的节点称为 smoke object。容器的大小可以通过 pre-slove 的步骤来控制,比如 gas resize fluid dynamic 节点。
  • 解算器Solver):当所有数据准备好之后,我们通过解算器来进行数据处理。在 pyro 模拟中起作用的是 pyro solver
  • Extra:Houdini 中,Pyro 的解算与其他动力学部分深度集合。我们可以使用其他动力学的部分与 pyro 进行交互,比如重力等等。

Sourcing

在 Houdini 17 之前,Pyro 模拟采用 volume rep(体积表现形式)来生成源。Houdini 17 将源的生成方式从 volume rep 改成了 point based rep(点表现方式)。该种方式有两个优点:

  • 在绝大多数情况下,我们会使用 particle 来驱动 pyro 的源。因此使用点来表示源会更加的方便。
  • 相比使用体积,使用点属性来控制源会更加的容易。



<html>

<img src=“/_media/vfx/houdini/dop/simulations/pyro/pyro_sourcing_flow.svg” width=“600”/>

</html>

该流程中,源最终还是会被转化成体积再导入到 DOP 中(volume rasterize)。

通常,SOP 中的 attribute 与 DOP 中的 field 是等价概念。(注:在 Houdini 17以前使用的 fluid source 产生的速度场是基于 volume 生成的,与之后版本的 point 速度场有区别。但从概念上来说 SOP的属性就是 DOP的场)

Inside Pyro Solver

重要的属性 / 场

Pyro solver 要依赖自身的 Combustion Model 来进行模拟燃烧。在此期间,有几个属性(场)扮演了很重要的作用:

  • Fuel:整个燃烧过程的起始点,决定整个燃烧的程度。
  • Burn:fuel 会通过燃烧释放 heat、产生 divergence、并间接的增加 temperature。burn 扮演了一个 fuel 转换到 heat 的中间过程的角色。burn field 与 heat field 的大小分布是基本上相同的,但不像 heat field,burn field 是根据 fuel 按 step 更新。当 fuel 耗尽以后,burn 将在下一个 step 立即消失,而不像 heat 一样可以坚持一段时间。
  • Heat:heat field 代表燃烧中火焰(flame)的区域。
  • Density:代表了 smoke 的多少
  • Divergence:决定 flame 与 smoke 扩张的程度。
  • Temperature:决定 fuel 是否会被点燃,同时决定 flame 与 smoke 上升的速度。
Combustion 的过程

整个个模拟过程大致如下:

  1. 通过指定的几何体在 SOP 中生成 temperature 属性与 fuel 属性。
  2. temperature 属性决定 fuel 所在 field 的燃点。当温度达到指定的值, fuel 会开始燃烧,并生成 burn 的 field。
  3. burn 会持续的生成 heat field,即可见的火焰visible flame)。通过控制 burn inefficiency 的选项可以决定每次燃烧后会剩下多少 fuel
  4. divergence(散度),该属性决定了体积的延伸会在多大程度上受 heat 的影响。
  5. 燃烧过程中会产生 smoke,smoke 的强度以 density 为基准作为判断。Dissipation / cooling rate 决定了燃烧产生的烟的密度变化的程度。
  6. velocity,默认情况下整个模拟中 velocity = 初始的 velocity 加上 temperature * Buoyancy(浮力).
  7. 如果 advect fuel 选项开启,那么 advect 将影响 temperature, heat, densityfuel

<html>

<img src=“/_media/vfx/houdini/dop/simulations/pyro/combustion_model_step.svg” width=“700”/>

</html>

Dependent
Smoke(density) Fuel / Burn rate / Smoke Amount
Flames(Heat) Fuel / Burn rate
Temperature Fuel / Burn rate / Flame & Burn Contribution(可以使用 heat 或者 burn 来产生 temperature)
Expansion(divergence) Fuel / Burn rate / Gas released