跳到主要内容

ParticleSource粒子发射器

ParticleSource


haowei.han@mthreads.com

使用粒子作为流体的发射源,在流体视觉特效里是非常常用的制作方法, Catalyst FX 提供了基于 GPU 的 Particle Source 功能,可以将海量粒子作为流体发射源,给流场提供 密度(density),温度(temperature),速度(vel),燃料(fuel) 等常用属性。在 Houdini 的制作流程中,省去了需要使用 SOP 节点进行 Particle 转 Volume 的操作。

drawing

如图():使用 Catalyst FX GPU Particle Source 制作的火焰枪喷射的效果,制作流程为先使用 POP 粒子调整火焰喷射大形,然后将粒子作为燃料信息提供给 Catalyst FX 解算器,进行更加精细的燃烧过程模拟,生成最终的火焰喷射效果。

Catalyst FX GPU Particle Source vs Houdini SOP VolumeRasterizeAttributes

相比传统 Houdini 自带的 SOP VolumeRasterizeAttributes 节点,Catalyst FX 使用GPU加速读取粒子数据进行采样发射,大大提高了计算效率。并且支持读取粒子半径属性,和Substep 中间帧插值等高级特性。

drawing

如图():分别是使用 Houdini 自带的 SOP VolumeRasterizeAttributes 节点,将粒子转为体积作为流体发射器输入(左),直接将粒子作为 Catalyst FX 的输入(中),和原始粒子数据(右)。可以发现二者的效果是接近的,并且 Catalyst FX GPU Particle Source 的采样结果相比输入的原始发射器模型具有更好的贴合度。

计算用时开销

当前的案例一共有超过 200 万粒子的作为流体发射器的输入,以下是解算用时对比开销,在使用了 Catalyst FX GPU 粒子发射器后,整体的解算速度在当前案例中有接近 3 倍的性能提升。(GPU : MTT S4000

方案解算用时开销 (120 帧)
Houdini SOP VolumeRasterizeAttributes88 s
Catalys FX GPU Particle Source32 s (x 2.75 倍

Particle Source Example

我们从一个最简单的案例开始,演示 GPU Particle Source 的使用流程。

drawing

如图():使用Houdini 的 POP 功能制作一个最简单的抛物线粒子喷射效果,粒子发射器朝着 45度夹角方向射出粒子以后,受重力影响下落至地面,并添加 Point Wrangle 节点给粒子添加 密度(density),温度(temperature),燃料(fuel),散度(divergence)等属性。这里为了方便观察,不需要发射太多数量的粒子。

drawing

如图():完成粒子输入设置后,在Catalyst Solver 流体解算器节点的 Sourcing 面板选则 InputGeoType 下拉菜单为 Particle 类型输入,让解算器切换到粒子发射器读取模式。再进行适当的参数调整,点击播放按钮,可以得到 Viewport 中呈现的粒子燃烧效果。

粒子半径设置

在设置解算器 Soucing 参数面板下的 InputGeoType 下拉菜单为粒子(Particle)之后,参数右侧会出现 ParticleRadiusType 下拉菜单,用来设置粒子的半径大小,该参数一共有3种设置

名称说明默认值
Constant固定粒子半径大小数值,单位是世界坐标系单位0.2
Attribute读取粒子半径属性,默认会读取 pscale 属性pscale
VoxelSize固定粒子半径大小数值,单位是当前解算容器的单个体素边长。1.0

粒子半径属性读取

drawing

选则 ParticleRadiusType 下拉菜单为 Attribute 选项。界面出现粒子半径属性读取的相关参数设置,这里基本上默认参数不做任何调整即可直接使用。其中 Default Radius 参数是在 Radius Property 属性获取失败的情况下起效。DefaultRadiusType 为该参数的单位。

drawing

如图():当前案例在给粒子设置了不同大小的 pscale 数值后的计算结果,可以发现 pscale (半径)数值更大的粒子,会产生更粗的燃烧拖尾。

drawing

如图():另一个案例,使用粒子年龄(age)属性作为粒子半径大小,粒子年龄越大半径则越大。

drawing

最后给一个章节图的动态,基本上只需要输入一个很简单的粒子喷射动态效果,流体解算器就可以计算出非常丰富的燃烧动态细节变化。