当前您所在的位置:首页>新闻中心>行业动态>

Phoenix FD教学 – 燃烧的椅子!

发布时间:2018/11/02 浏览量:1743

本教学将介绍如何利用 Vexrtex color 结合 Vertex Paint 让你可以自由地决定物体上何处要燃烧起来。想要製作写实的火焰,必须能同时渲染烟与火,加上以 Particle shader 渲染粒子表现出燃烧时产生的细小灰烬。我们也将介绍如何以 resimulation 的流程进行变速,以产生慢动作的火焰。

 

1. System Unit 场景单位

 

选择适当的尺度,本例製作燃烧的椅子,因此我们採用公分作为系统单位。

 

本例中的椅子长宽高约为53x62x113 cm

 

2. 动画长度设置

 

至 Time Configuration 将动画长度设定为60

 

3. Overall layout 整体配置

 

 

场景中有一张椅子的模型。一个 Phoenix FD Simulatior (PhoenixFDFire),一个 PHXSource (拾取椅子模型作为来源),一个 PlainForce 作为风力,一个 Particle Shader (PHXFoam)用来渲染灰烬的粒子,一个 VRayPlane 作为地面。场景中没有其他人工照明,只有当火焰燃起时会自然照亮椅子与地板。

 

4. 使用Preset快速预设

 

 

为了节省设定的时间,我们先选中椅子几何体,接著按下 Phoenix FD 工具列上的 Burning Fuel with Smoke sim 快速设置按钮。如此会在场景自动产生一个 Simulator,一个 PHXSource,并设定好烟雾火焰的 shader,设定好一个 Particle Shader。我们根据这个设定再进行修改,以稳合当前专案的需求。

 

5. Output 输出通道

 

 

Backup Interval

 

– 设定多少 frame 间隔备份完整的模拟状态 这样你可以在模拟中断时,使用Restore接著模拟。当你把 Backup Interval 设为1时,代表你可以在每一个 frame 回复模拟,当设定为0时就不会输出任何备份的 frame。预设为15,这表示模拟时产生的 cache 序列,因此每15间隔的 frame 其cache 档会比其他的 cache 要大很多; 由于备份会增加硬碟空间 这裡我们把 Backup Interval 设定为0。

 

Output Grid Channels

 

– 本例要渲染火焰与烟,因此要输出 Temperature 与 Smoke。我们也将使用 Resimulation 来使火焰变慢,所以勾选输出 Velocity 通道。

 

6. Source发射器

 

 

如上图设定,拾取场景中的 chair 做为发射源。Emit Mode 设定为 Surface Force,表示火焰会自椅子模型表面喷发出来。Outgoing Velocity 设定为400cm,你可根据需求调整。Smoke 数值为1.0。Particles 设定为2.5。记得勾选 Export Drag Particle IDs,否则当你改变 Playback Speed 时,可能会出现以下错误资讯:

 

 

在 Outgoing Velocity 的 Mask 中放置纹理贴图,以侷限椅子的火焰发射范围,以下详述做法:

 

 

如果 Outgoing Velocity 没有设定 mask,就会得到上图的样子,整个椅子烧成一大团火焰,没有足够的细节表现。

 

 

首先,我们选中椅子模型,然后套用一个 VertexPaint modifier。会出现上图左边的 VertexPaint 介面,我们把颜色改成全黑色,然后用油漆桶让整个椅子都显视为黑色。

 

 

然后把颜色改成白色,以笔刷工具在椅子上刷出你想要燃烧的部位。Size 可以控制笔刷的大小。

 

 

在材质编辑器中,产生一个 VRayCompTex,在其Source A中放置 Vertex Color,Source B放至 Celluar 程序性纹理,这两者以 Multiply(A*B)混合。

 

 

Vextex Color 的 Sub Channel 选择 Red 或 Green

 

 

Cellular 的 Size 设定为2.0; Spread 设定为0.25。我们对 Celluar texture 的 X offset 设定关键影格: 0 ~60 frame,数值设定为 X offset 0 ~5,如此发射源的遮罩才会不断移动,可让火焰的动态更自然。

 

 

可至 Curve Editor 中检视,x offset 由0~60 frame 数值由0线性增加到5

 

 

为了检视 VRayCompTex 产生的 mask 看起来像如何,我们暂时使用一个 3dsMax Standard 材质球,并在 Diffuse 中与 Self-Illumination 中都加上已经製作好的 VRayCompTex。勾选 Color。套用这个材质到椅子上。

 

 

Render 出来的效果如上图,Vertex Color 表现 VertexPaint 绘製的白色区域,然后 Celluar则是让遮罩有更多细节。

 

 

待 VRayCompTex 设定好后,将其拖曳并 Instance 至 PHXSource 的 Outgoing Velocity 下方的 Mask – Texmap 旁边,这样一来,发射源的 Outgoing Velocity 就受到 VRayCompTex 所调节。

 

7. Particle Shader 粒子著色器

 

在先前的步骤中,Burning Fuel with Smoke sim 快速设置已经替我们在场景中设定好了一个 Particle Shader。你也可以手动产生 Particle Shader。

 

 

在 Phoenix FD 工具列中,点击 Particle Shader 图示,并在场景中拖拉出一个 Particle Shader。

 

 

在 Particle Systems 中拾取场景中的 PhoenixFDFire001,Mode 使用 Points。Color 设定为亮橘色 (255,120,0)。Diffuse Multiplier 设定为4.0

 

8. Force 外力

 

为了产生写实的燃烧效果,我们添加一个外力,模拟风吹火焰的动态。

 

 

到 Create Panel 中,Helper。按下 PlainForce 并在场景中拖曳出一个。

 

 

利用 3dsMax 旋转工具,旋转 PlainForce 使其指向右方,如此一来让火焰模拟时,有个由左朝右吹的风力。Strength 设定为400.0 cm。

 

9. Simulator 流体模拟

-Grid 大小范围

 

 

前面我们已经透过 Phoenix FD 的 quick preset 产生 Simulator Grid (PhoenixFDFire)了,但是我们还要根据专案需求来调整。如上图箭头所示,初始的 Grid size 设定在紫色的范围,正好包住椅子 vertex paint 的白色范围。如上图,本范例使用的 Cell Size =0.669 cm,开启 Adpative Grid,设定为 Smoke,让范围扩张到红色的框框。这样的设定可以节省模拟运算资源。

 

-调整 Scene Scale 场景尺度

 

 

由左至右 Scene Scale = 0.2, 1.0, 1.5 , 5.0。儘管椅子的模型是根据真实的尺度建模的,本例我们使用 Scene Scale = 1.5 模拟。读者可以根据美感需求来决定使用多大的 Scene Scale 数值。

 

-Dynamics 动态

 

 

Time Scale 时间尺度。一般来说,比实际速度稍慢的火焰会比较好看,本例中我们採用 Time Scale = 0.6

 

Smoke Dissipation烟的消散度。我们採用0.3 希望烟产生后早一点消散开。

 

 

左图: 使用 Burning Fuel with Smoke sim 快速设置的 Vorticity 与 Randomize 参数; 右图: 为了避免火焰产生过多的细节,我们将 Massive Vorticity 与 Randomize 中的所有参数都设为0

 

Conservation 守恒。Phoenix FD 提供四种守恒的方法,各有其优缺点

 

 

由左至右: 使用 Direct Symmetric,Direct Smooth,Buffered,PCG Symmetric。本教学选择使用 Buffered 作为守恒的方法。

 

平流过程(advection process)使流体沿著其在网格内的速度移动。所有基于网格的模拟器(grid-based simulators)的问题是,将一个单元格的内容移动到网格中的新位置,而这个位置在单元格与单元格之间会得到模糊的结果,从而失去每个新帧的细节。Phoenix FD 提供四种不同的对流方式来对抗这个问题,每种方式都有其利弊,取决于场景不同情况。

 

Phoenix 可以每帧执行一次以上的平流(advection)。数值越低可获得大量细节。 另一方面,较高的SPF可以得到更稳定和平滑的结果。

Material Transfer。由左至右 Backtrace, Forward transfer, Multi-Pass。

Material Transfer / Steps per Frame (SPF)

 

 

使用 Multi-pass 方法。由左至右SPF =1, 2, 3。SPF越高,模拟时间越久,火焰越平滑。本例中使用SPF =3。可依照您的喜好决定。

 

 

Quality 由左至右 = 0, 10, 40, 100。这个参数可增加守恒程度。当液体或烟雾量减少时,或者需要增加烟雾的涡流时,这个参数会有帮助。注意 Quality 数值会减慢模拟速度。您可以将此参数视为守恒传播速度影响的距离范围。本教学中椅背高度约为100个 voxel,我们使用 Quality = 40以获得适当的品质。

 

 

Rendering / Steps。指定相机射线的射线前进步骤(ray marching step),单元大小的百分比。 由于渲染器通过模拟器追踪射线,此值控制从网格获取信息的频率。 如果这个值超过100,将开始跳过一些单元格,并可能导致错误。 如果使用特定的透明度曲线来渲染体积,则可能需要较低的百分比,以免遗失细节。 另一方面,增加这个值会提高渲染速度。

 

Steps数值超过100时开始跳过一些单元格,这个现象可以透过GPU预览直接在 Viewport 观察到,例如箭头所指火焰中的空洞。数值越大,空洞越明显。

 

GPU Preview 预览

 

 

勾选 Enable in Viewport 则可以在viewport直接预览火焰

 

 

请注意,如果要预览烟雾的话,则必须再勾选Lighting

 

 

Volumetric Render Settings 控制体积渲染。勾选 Emit Light,当产生火焰时会照亮场景,Light Resolution 控制灯光的解析度

 

 

light resolutions 由左至右为1, 5, 50, 100。这个参数指定光栅网格(light grid)的分辨率,以 fire grid 的百分比作为单位。通过在每个火焰单元(fire cell)中放置一个 Omni 灯可以实现完美的火焰照明效果,但这可能需要大量的时间来渲染,通常不需要精确地估算火焰的照明就能产生令人信服的效果。基于这个原因,Phoenix FD 在内部创建了一个单独的 light grid,其分辨率可以低于 fire grid,并且这个 light grid 在每个单元中都有一个 Omni light。较低的分辨率(因此较少的 Omni lights)虽然会损失某些照明细节,但可加快渲染速度,而这些细节不见得看得到。当数值为100时,light grid与fire grid 具有相同的分辨率。这个值越小,光照越平滑,渲染速度越快。然而,当数值非常低时,火焰可能不会与在烟雾上投射的光线融合的太好。本教学採用 light resolutions = 5%

 

Fire Opacity Mode的比较

 

 

由左至右: Fully visible, Use Own, Use smoke opacity。本教学我们使用 Fully visible 做为火焰的不透明度模式。

 

Color and Intensity 颜色与强度。我们可以手动调整出颜色渐层与曲线,或者可以load载入事先储存好的设定档。

 

 

到 Rendering 下方的 Render Presets 按钮按下 Load from file

 

载入之前储存 tpr 档案

 

10. Retime 变速

 

模拟完毕后 假设我们希望火焰的速度更慢 可以透过 Phoenix FD Resimulation 配合 Output 的 Play speed,让火焰降速。

 

-首先我们先变更动画长度,假设原本动画长度为60,若 Resimulation 后 Play speed 设定为0.5,代表总长度会变成两倍,60×2 = 120。因此我们先把动画长度改成120

 

 

到Time Configuration / Re-scale Time,将 Length 由60改为120

 

 

– 接著,为了避免在 resimulation 的过程中遗失细节,我们要把 Step Per Frame 由3改为1。

 

 

-勾选 Grid Resimulation 下方的 Enable,Particle Resimulation 也勾选 Enable 。勾选 Use Time Bend Controls,Time Bend Method 设定为 Slow Down。按下 Start 再次模拟。因为我们的目的不是要增加解析度,只是要减慢火焰而已,所以 Amp. Resolution 设定为0.0,Wavelet Strengh 也设定为最小值0.01。

 

注意当你当勾选 Grid Resimulation Enable 时,Phoenix FD 就会切换到 Resimulation 的 cache,不需要手动切换拨放的 cache。

 

 

到 Output 中,将 Play Speed 由原本的1.0改为0.5。Frm. Blend 设定为 Velocity

 

 

按下 Start 开始进行 Resimulation,得到的结果便是慢速火焰的效果了。

 

11. 灯光与摄影机

 

由于本范例利用火焰本身做为照明,因此场景不打任何灯光。

 

 

以上是本教学所使用的摄影机参数

 

12. VRay Frame buffer

 

我们在 V-Ray frame buffer 中对火焰的颜色,对比做细调。开启 Lens Effect 并勾选 Bloom effect, Glare effect 可得到更写实的火焰效果。

 

 

 

北京哲想软件有限公司