跳到主要内容

ParameterMap

401 Parameter Map 参数详解(更新中)


haowei.han@mthreads.com

drawing

湍流 Turbulence

drawing

湍流是流体模拟中最重要的效果控制手段,好的湍流控制,可以轻松的控制流体的形态和层次,这里介绍Catalyst提供的湍流控制模块,目前Catalyst提供的湍流类型有以下5种

湍流名称说明
Dissipation消失,该参数控制密度场随时间推进不断变小,直至数值降为0的过程
DisTurbanceDisTurbance 方法首先对空间进行分块(Block),每个分块内的受力方向是一致的,然后通过叠加不同频率和大小的 Block,来对速度场产生极端的破坏性影响(不提供体积守恒),形成高频细节。由于该方法容易对流体的形态产生破坏性影响,所以常用于提供比较高频和琐碎的细节。
Shredding简单的来说,是对 DisTurbance 用于火焰燃烧形态控制的一种改进。
CurlNoise给速度场添加一种无散的 Vector4D Noise ,在这里默认会给有温度的区域添加。
Confinement全称是Vorticity Confinement,通过修改速度场来实现将速度场的涡度放大,从而在画面中产生更多的“漩涡”效果。(受力方向为:速度的旋度的模的梯度,和速度的旋度做叉乘处理,并乘以dt和CFL Condition)

Dissipation 消失

不同的基础数值

drawing


Vortex Confinement

全称为:VorticityConfinement 原始论文出自1994年
Modification of the Euler equations for "vorticity confinement"

Vorticity confinement 将由于数值耗散而损失的能量利用体积力重新注入到流体中,该体积力可以增加流动的涡量。具体来说,该算法通过控制涡量的传输来模拟流体中的涡旋行为,其中涡量是一个描述流体涡旋强度和方向的向量,在流体中,涡量的传输是由速度场引起的,如果速度场的涡量分布不均匀,就会出现涡旋,为了还原数值耗散导致的涡量丢失,我们可以首先找到这些具有涡量的地方,然后归一化涡量位置向量,让它从低涡量的地方指向高涡量的地方,最后让涡量方向乘上涡量本身就得到了为了形成漩涡需要额外添加的体积力


Curl Noise

drawing

相比其它的 Noise 类型,CurlNoise 是一种考虑流体运动过程保持体积守恒的 Noise,换句话说 CurlNoise 是无散的(Divergence Free) ,使用这种Noise可以最大程度丰富流体动态细节的前提下,仍然不对流体的原始体积有较大的破坏。

Catalyst FX 提供3D,4D 2种版本的CurlNoise ,其中4D Noise 提供对时间上的变化频率单独控制,例如:Noise 在时间上有交大程度的变化,但是空间上却是较低频率的形态,以下是CurlNoise湍流的参数列表

参数名说明
CoreCurlNoise 的计算内核,分Procedural Noise 和 Bake的3D Texture2种
Swirl SizeCurlNoise的空间尺寸大小,本质上是CurlNoise的频率控制
GainCurlNoise 湍流的强度控制信息
Pulse Length时间频率
SeedNoise的种子数
Clamp BelowMask 场数值低于该数值则忽略控制 ,默认情况下使用 Temperature 温度场作为 threshold

Curl Noise 比较适合用于流体的大形态控制,通常 Curl Noise 的 Swirl Size 设置到 Voxel Size 的 10 倍左右,会比较容易将 Curl Noise 计算所生成的全部无散漩涡信息注入到流体速度场中,产生较好的动态控制效果,而当CurlNoise的 Swirl Size 小于这个数值比例的时候,无散的漩涡信息会被减弱(这是由于对CurlNoise信息离散化程度不够导致)

Mask Setting

CurlNoise 默认的 Mask Field 为 Density Field (密度场),在浓度越大的地方 CurlNoise 的作用效果越明显,换句话说,在默认参数下 CurlNoise 会尽量尝试从内部往外破坏流体的运动形态,并产生出漩涡和翻滚效果


Disturbance

drawing

Disturbance,是一种针对烟火爆炸等流体模拟效果添加的一种高频湍流,为了在流体中产生较为细碎的细节。如图(上): 分别展示了 Disturbance 关闭和开启状态下的效果对比,可以在保持流体大形不发生过大变化的情况下,仅在最外层边缘处增加频率可控的湍流细节

该湍流效果和 CurlNoise 或 Vorticity Confinement 这一类或多或少考虑体积守恒的湍流模型不一样,Disturbance 的工作流程是无视体积守恒,根据一个频率周期(BlockSize),通过强行“撕裂”一个速度场来对流体产生破坏性影响,若输入的是一个无散的速度场,在经过 Disturbance 的修改之后,速度场会不再无散。 Disturbance 对速度场的破坏,会随着之后的压力投影(pressure projection)进行修正,并最终产生出高频湍流细节

由于对速度场的修改,无视了体积守恒,所以 Disturbance 不适合用于液体流体的制作,接下来会介绍 Disturbance 里一些比较重要的概念

  • Threshold

由于 Disturbance 无视体积守恒,所以我们并不希望 Disturbance 对流体速度场的影响范围过大,我们希望只在最重要的区域添加 Disturbance,通常烟雾和燃烧模拟,我们只关心烟雾最表面的一层有足够的细节,而远离烟雾表面的区域,尤其是烟雾的内部,不太希望DisTurbance的作用对速度场做过多的修改,因此Threshold的作用在 Disturbance 会比其他湍流效果更重要

在默认参数下,我们使用 density 密度场的补值作为 Threshold ,并将 density 场的数值从 0.1 ~ 0.0 的范围映射到 threshold 强度 0 ~ 1 区间,拿一个简单的烟雾模拟来举例,即:密度大于 0.1 的区域(烟雾内部)均不进行 Disturbance 的计算,小于 0.1 的区域到没有烟雾的区域 Disturbance 的强度从 0 ~ 1.0 递增。这也意味着仅通过 Threshold 控制 Disturbance 的强度,流体效果不覆盖的区域(空白区域)的速度场,也会受到 Disturbance 的作用影响,这一点也是我们之前讨论的所不希望发生的

  • MaskField

为避免 Disturbance 对速度场的影响范围过大,我们需要在 Threshold 控制的基础上再加一个 MaskField 控制,以保证没有流体效果覆盖的区域没有 Disturbance 湍流效果的产生,这里使用Temperature温度场,或使用速度的模长作都可以满足需求,总结一下Threshold和MaskField的作用可以是:Threshold 用于剔除内部区域,MaskField 用于剔除外部区域,下面我们对2种方案进行一个可视化的对比

drawing

如图(上) Disturbance 的影响范围可视化。分别为 (左) 使用 density 作为 ThresholdField(剔除烟雾内部区域) ,和 temperature 强度作为 MaskField(剔除烟雾未抵达的空间)之后所留下的烟雾边缘区域,和 (右) 使用 density 作为 ThresholdField 以及 vel 的模长强度作为 MaskField 之后所留下的烟雾边缘区域,来作为UltraTurbulence的最终影响范围,不论哪一种方式的核心目标,都是尽可能的让UltraTurbulence只在烟雾区域的边界上产生作用

这里需要注意的是,如果使用 temperature 场作为 MaskFieldtemperature 在不开启Diffusion 的情况下 temperature 覆盖区域是和 density 场的范围是接近的,所以使用temperature作为threshold剔除外部区域后提取的边缘会非常窄,UltraTurbulence的作用效果会不如 使用速度的模长作为 MaskField 更加明显,所以这里默认Catalyst FX 使用速度的模长为UltraTurbulence MaskField的默认计算方式

ParameterMap

Samples/UltraTurbulence ParameterMap

  • BlockSize

drawing

  • Intensity

drawing

  • Speed UltraTurb v.s Temperature UltraTurb

Shredding 扭曲