======Legacy Pyro======
**Houdini 18 之前用于创建 Pyro 的方法。**
===== =====
====Pyro 的基本结构====
在 Pyro 网络中,我们需要以下的部分来组建整个模拟过程:
* **源**(//Source//):这个部分一般在 SOP 中创建,再导入到 DOP 中。根据不同的需要,Pyro 会要求带有不同//属性// 的源(也称为 //field//),比如 ''density''、''temperature''、''velocity'' 等等。源创建完毕后,会通过 ''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 的源。因此使用点来表示源会更加的方便。
* 相比使用体积,使用点属性来控制源会更加的容易。
\\ \\
\\ \\
该流程中,源最终还是会被转化成体积再导入到 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 的过程==
整个个模拟过程大致如下:
- 通过指定的几何体在 SOP 中生成 ''temperature'' 属性与 ''fuel'' 属性。
- ''temperature'' 属性决定 ''fuel'' 所在 field 的**燃点**。当温度达到指定的值, ''fuel'' 会开始燃烧,并生成 ''burn'' 的 field。
- ''burn'' 会持续的生成 ''heat'' field,即**可见的火焰**(//visible flame//)。通过控制 //burn inefficiency// 的选项可以决定每次燃烧后会剩下多少 ''fuel''。
- ''divergence''(散度),该属性决定了体积的延伸会在多大程度上受 ''heat'' 的影响。
- 燃烧过程中会产生 smoke,smoke 的强度以 ''density'' 为基准作为判断。''Dissipation'' / ''cooling rate'' 决定了燃烧产生的烟的密度变化的程度。
- ''velocity'',默认情况下整个模拟中 velocity = 初始的 velocity 加上 temperature * Buoyancy(浮力).
- 如果 //advect fuel// 选项开启,那么 advect 将影响 ''temperature'', ''heat'', ''density'' 和 ''fuel''。
\\ \\
==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|