概述

在pyro模拟中,速度和外形会受到很多参数的共同影响。这篇文章讲述了高效使用pyro的一些技巧和注意点,以此可以实现不同的模拟外观。

可视化

在整个制作阶段,检查模拟场的状态是很有用的。Smoke Object有很多可视化参数可以查看这些场。Scalar Field Visualization和Vector Field Visualization节点提供了更多的选项,可以查看更多的细节。

最有用的可视化类型是Multi Field,它展示了所有volume在渲染中的样子。最影响外观的参数有如下几个。

Density Field
显示烟雾的薄厚,它应该用来显示density场。如果想让烟雾外观更厚一些,可以提高Density Scale。

Diffuse Field
用来给烟雾着色。比如Sparse Fireball工具架中设置了Diffuse Field为density场,并且Diffuse Ramp给了一个纯色。结果就是烟雾看上去是黑灰色的。

Emission Field
用来发光。应该设置为flame,以此确保模拟的火焰部分能够发光。Emission Scale控制发光的强度。如果想让火焰的边缘更加锐利,开启Emit Range,并且设置更尖一些,比如0.1-0.2。

Emission Color Field
控制发光的颜色,这个参数应该设置为temperature。在Physical Blackbody模式中,温度数值会映射到发光颜色,强度使用黑体辐射模式。

通用流程

许多参数都可能会产生同一个效果,slover的帮助手册中包含了许多信息可以查看。然而,大量的设置很容易让人无从下手。(sidefx官方竟然在手册中自己吐槽自己?)最好的方式是打碎制作阶段,分成一系列的目标,每一个都专注于不太影响先前设置的其他细节。

  1. 创建source geometry
  2. 设置基础的模拟参数
  3. 设置温度temperature和浮力buoyanc参数
  4. 设置flame场的参数
  5. 调整shape参数

上面的每一步都只专注一个单一的目标,后续步骤对先前的结果影响也最小。因此,在每一步中迭代进程限制于很少的几个参数,并将整个迭代过程维持在最小步骤中。

步骤2-5期间可以打开Minimal OpenCL Solve。这个参数可以在solver的Advanced标签下找到,它可以加快交互查看的速度。更多信息在下面会细说。

source geometry

source geometry对造型和新加入的烟的行为有很大的影响。在这一步中,你需要关注的是创建发射源,尝试多种有趣的变化,而不用担心最终的细节。

对于静态的烟雾和火焰模拟,给发射源的值添加noise。可以使用Attribute Noise SOP节点来添加发射源的点属性。对于烟雾来说,noise可以让烟雾的发射不会那么死板无趣。火焰的noise会对外观有很大影响,为了得到更细碎的细节,可以使用Worley(cellular)F2-F1的noise类型。

对于会扩散的火焰燃烧,你应该模拟前确认扩散的行为是自己想要的。Pyro Source Spread SOP是专用来模拟火焰扩散的节点。

对于爆炸,你可以使用Pyro Brust Source SOP节点来创建爆炸的核心sourcing,并且造型爆炸的外观。你可以使用Pyro Trail Path和Pyro Trail Source节点来添加拖尾。

在这一步你还需要确定好source值的范围,尤其是temperature和flame。在这一步结束后,你可以使用Attribute Promote SOP节点来计算相关点属性的最大值。这个信息在之后调节参数很有用。

基础模拟参数

当上一步结束后,下一步就是设置基础的属性,确保模拟工作正常。这些设置在设置一次后就不要改动了,当前前提是设置了一个合理的值。

Smoke Object

Voxel Size:
控制模拟的精度,越低的值可以得到更高的精度。这个值跟模拟的尺寸有关系。比如,默认值是0.1,单位小大小对于爆炸来说是合理的。另一方面,如果爆炸是基于100单元大小的,Voxel Size应该相应的增大,来减少精度。你也可以低精度下快速测试不同模拟设置。

Boudary Conditions:
如果你需要添加地面或者墙面,可以使用这个参数。可视化中的Domain可以查看当前模拟的范围框。

Pyro Solver

Max Timesteps:
解算器每帧的解算次数。默认是1,对于做烟来说足够了,但是如果流体太快的话,还是需要提高一下。

Padding:
指定解算器在模拟烟雾周围保持的可用空间量。 重要的是该缓冲区足够大以适应时间步长内的运动范围。 但是,将参数设置得太大也会减慢模拟速度。

温度Temperature和浮力buoyancy参数

借助浮力,temperature场可以对烟雾的整体运动产生影响。为了正确的控制这个力场,你需要设定这个数值背后的物理意义,可以通过Ambient Temp和Reference Temp来控制。之后浮力可以通过Buoyancy Scale来调整,而不需要调整温度范围。

Pyro Solver

Ambient Temp(K):
指定周围环境的温度,temperature数值为0意味着温度和周围环境温度相同。

Reference Temp(K):
temperature场中数值为1时,对应的物理温度。最高的source温度等于
Ambient Temp + T * (Reference Temp – Ambient Temp)
T代表最大的输入温度值。所以,Reference Temp应该设定为物理上合理的,并且发光颜色看上去也是正确的。

Gravity:
重力的大小和方向,影响浮力的强度。这个数值应该设置为符合场景预设,然后就不要再调节了。Buoyancy Scale可以用来重新调整浮力的强度。

Buoyancy Scale:
浮力的系数。使用这个数值确保浮力的速度跟期望的相同。

Cooling Rate:
temperature冷却到和周围环境温度相同的速率。想要找到合适的数值,可以观察烟雾上升的速度开始变缓的位置。

Flames参数

解算器Flames标签下的参数对于模拟flame场很有影响。你应该首先调整Flame Lifespan参数来确保flame数值维持到期望的时间。之后你可以开启output来根据flame场生成想要的数据,再调整它们的激活范围。

在设定Flame范围时,了解来自来source的flame值非常有用。在处理source时,你应该计算下最大传入值。

调整Shape

之前的步骤是调整烟雾的整体外形和运动。一旦你对之前的结果满意了,就可以使用Shape参数添加额外的细节。pyro解算器有四种内置的shape参数:dissipation、disturbance、shredding和turbulence。

Dissipation
随着时间减少density数值,所以烟雾会逐渐变淡并最终消失。在使用sparse稀疏流体模拟时,设置一个正确的Clamp Below参数很重要。否则,特别小的density值会一直存在,这会造成不必要的资源浪费。

Disturbance和shredding
应用一个随机的力场打断模拟,disturbance施加一个线性的加速,对于消除烟雾的“蘑菇头”很有帮助。shredding会旋转速度场来重新定义流动方向。shrdding可以在不加快或者减速流动的情况下添加随机运动,对于火焰模拟尤其好用,如果不添加shredding的话,火焰就会直直的向上运动。

turbulence
给速度场添加一个大尺寸的noise。

每个shape参数都有一个可以调整影响范围的复选框。开启后还有一个选项,其中包含每个内置shape参数的更多控制。这里的一个共同参数是控制场,它可以用场的数值重新映射shape的强度。

技巧和常见问题

Advection-Reflection能够极大的帮助流体保持涡旋。Disable可以关Advection-Reflection,对于涉及divergence场(例如爆炸)的模拟,这是最安全的选择。Single-Project是一种简单的算法,不会给模拟增加太多的工作。Double-Project最大程度保持住涡旋。但是会慢一些。

Time Scale参数可以添加关键帧动画。这对于爆炸很有帮助,开始时的高time scale可以捕捉到猛烈的初始爆炸。

disturbance的模式改为continuous时,每个体素都会独立添加一个noise。对于制作雪崩类型的效果时很有帮助。然而,如果体素精度很高,disturbance会产生特别细碎而且不是想要的效果。

你可以通过将微解算器连入pyro解算器的Forces输入端中,来自定义烟雾的力场。

如果在模拟中出现阶梯状的外观,这是由于不充足的padding导致的。修复这个问题可以通过增加Max Substeps并且/或者增加Advanced标签中的Padding。

如果发射源或者模拟速度很快,过少的substepping将表现为明显的条纹。增加 Max Substeps 来解决这个问题。

如果烟雾看上去没有和碰撞体发生交互,增加IOP Iteration。这个参数在Advanced->Collisions下。

如果发现沿着坐标轴的条纹,开启hourglass filtering,可以在解算器的Advanced->Hourglass Filtering中找到。

稀疏解算器分批执行平流以加快模拟时间,从而导致更高的峰值内存利用率。如果内存使用出现问题,可以限制分批的尺寸,在Advanced->Advection->Max Batch Size。

(完)

Leave a Reply