如何快速用EmberGen构建红警2里的爆炸动画

ICE Lab Inc. Copyright 2022, All rights reserved.
本文共35694字
前排感谢本专栏主要贡献者颜落(B站ID: 颜落随风)在EmberGen上的探索工作,也感谢他授权我在本文中使用他教程中已总结的内容,同时也感谢他在我撰写本文时给予的大量帮助;同时感谢柯羽(B站ID: Takitoru_)给我的相关帮助。
*史上最长专栏警告!这是一篇超长且多图的专栏,如果为移动端读者,请注意你的网络环境与流量使用情况。
前排提示,这篇文章近似是一个新软件的说明书,如果你没有坚定的决心去认真学习这个软件的话,你可以绕道而行。如果你想要在未来的某个时间仔细学习这个软件的使用的话,你可以收藏这篇文章慢慢看。虽然本文所举案例大多与红警2对接,但是如果你是一个EmberGen学习者的话,本文的一些条目翻译或许也会对你有帮助。

本文目录:
一.红警2的爆炸动画究竟是什么?
二.爆炸动画的通常设计原则
三.EmberGen的下载与基础界面介绍
3-1.基础界面介绍
3-2.渲染与输出设置
3-3.场景设置(Scene节点)
3-4.镜头设置(Camera节点)
四.EmberGen核心功能区详解
4-1.Skybox与Ground
4-2.Shading
4-3.Lights
4-4.Volume
4-5.Simulation
4-6.Emitter
4-7.Shape
4-8.Force
4-9 Modulator
4-10 Collider
五.爆炸案例
5-0.共同原则
5-1.小型空中爆炸
5-2.带粒子飞出的地面爆炸
5-3.破片烟雾弹
5-4.核弹蘑菇云爆炸
六.结语

如果你是一个看完了我写的所有专栏的粉丝,你一定会发现在美工的版块上,爆炸特效这方面我一直没有过多描述。一方面我确实没怎么学习这方面的知识,另一方面,制作爆炸动画的软件十分多样。当我需要一个特效时,有时我可能会用AE的效果去做,有时我会去幻影粒子里掰扯一下预设,还有时我甚至在搜索引擎内看见了一些好的特效gif我也会直接去转换成帧序列。这些特别随缘的方法在我心里也一直是一个结,如何找到一个合理的方法去制作个性化的爆炸特效?亦或者如何根据自己的需求去调整特效?
事实上,专业的爆炸特效制作软件在其他modder们心中也是一个结。一方面,幻影粒子与win10及以上版本系统兼容极差,AE特效更多是为视频服务。另一方面,modder们对3D软件的使用频率的增加使得新增特效与个性化模型的交互需求进一步上升。于是曾经的我把目光投向了3D软件附赠的插件上,比如凤凰流体与FumeFX。只不过,因为3dsmax自己的渲染机制问题,这些插件与现在更推崇的即时演算即时显示的原则有些不符,这些插件更多是在渲染阶段才能以很慢的速度显示出用户设置的特效,也让它们的调整变得十分麻烦。
此时,一个名叫EmberGen的软件通过颜落随风的探索出现在了红警2modder的视野中,似乎它就是满足modder们心中有关特效制作那块缺失拼图的正解。

既然是一个新软件,那么一定会有认识它的新过程。下面我就以一个新手的角度,逐步破除这个软件与特效间的迷雾,从而建立一个完整的特效制作流程。
首先,当我获得“需要一个特别的爆炸动画”的目标需求时,我会将其分解为以下几个步骤来实现:
分析已有的爆炸动画的特点
对软件相关设置的基础认识
使用软件功能构建一个想要的形状
调试,修改并输出
而这也是我接下来这篇专栏撰写的主要思路,读者可以方便通过这个目录来随时查询这篇专栏的相关内容。
一.红警2的爆炸动画究竟是什么?
红警2的美工主要分为两个部分,一是体素vxl,二是平面图像索引序列shp。在红警2里,除了vxl碎片(比如复仇时刻中的坦克飞炮台,心灵终结中的百夫长飞炮台)以外,所有的动画特效都是shp。shp的特性相信看过我之前写的专栏 CV4085755 “以制作红警2的模型贴图入手,论对模型的贴图修改” 的开头部分都会知道,这是一种外置色盘索引图像序列的文件。所以当我们要做一个爆炸动画时,最后一定离不开使用帧序列制作色盘然后导入ImageShaper的过程。
在制作爆炸动画之前,确认大小是一个很重要的事。按照遇事不决参考原版的原则,以下我以一些常见的特效动画为例来介绍红警2内常用的爆炸的分辨率大小。(下列数字单位均为像素点pxl,例如100*80即100pxl长 80pxl宽)
小爆炸案例:

中等爆炸案例:

爆炸主体实际大小约为66*60(算上边缘粒子效果)/ 20*50(仅考虑中央火焰大小)
大爆炸案例:

特大爆炸案例:

考虑到实际大小,我们不难得出一个结论。即与一个步兵大小相仿的爆炸动画中心火焰大小约为22*22,与一个坦克大小相仿的爆炸动画中心火焰大小约为50*50,一个相对较大的爆炸中心火焰大小约为65*65,一个超级大爆炸(核弹级别)的火焰大小最大也只需要200长宽左右即可。
至于画布大小则取决于你自己的需求,如果你需要在爆炸附近留空方便展示,你可以创造一个远大于爆炸范围的画布;如果你的爆炸里有粒子变化,你的画布则需要为粒子飞出的特效留空;而如果你的爆炸只有烟雾与火焰,你也可以创造一个仅包含全部帧数完整图像面积的画布。考虑到避免游戏里爆炸动画偏移的问题,画布大小的选取总原则为:在爆炸动画主体的中央在图像正中央的前提下,能容纳所有图像的最小画面即可。
帧数方面,由于红警2的动画播放速度可以在art相关ini里手动调整,所以具体爆炸帧数则与用户需求有关。如果你希望你的动画帧率很高的话,那么你可以把速度调快一点并且加一个较高的rate,不过这对电脑也提出了更高的要求。
二.爆炸动画的通常设计原则
一个合格的爆炸应该是怎样的?在制作一个个性化的动画之前,仔细观察已有的效果是必不可少的。
首先,几乎所有的爆炸都会以一个快速膨胀的火焰或者做为开头。从爆炸百度百科定义我们可以知道,爆炸是一种在极短时间内,释放出大量能量,产生高温,并放出大量气体,在周围介质中造成高压的化学反应或状态变化的过程。任何爆炸的第一波效果一定是冲击波,而在红警2中,除了Ares里的波纹扭曲Ripple.Radius以及NP,H-Ares,Phobos等相关平台能产生离子炮般的波纹效果以外没有别的方法使空气扭曲,所以想要做出爆炸的首波特效一定第一步是制作一个扩散的火焰或是烟雾。
然后,弹药内火药的爆炸性质为化学爆炸,化学爆炸往往伴随着燃烧,所以火焰的生成也是一个必不可少的部分,而对于火药本身,爆炸燃烧反应的速度很快,再加上弹药内火药装药量一般不足以支撑爆炸反应发生很久(爆炸剩下的火焰往往是因为爆炸核心的高温引燃了其他可燃物导致其缓慢燃烧),所以爆炸火焰一般会先于烟雾消失。
最后,因为冲击波向外的特性与烟雾粒子的运动的相对无序,烟雾往往会从内往外的逐渐消失,这个消失过程相比烟雾的发生会慢许多,在动画的视角就是烟雾粒子逐渐减少的过程。

总结:爆炸的核心要素有三点:一是让烟雾或是火焰在开头具有剧烈膨胀的效果;二是火焰会先于烟雾消失;三是从内向外合理安排烟雾逐渐消失。
三.EmberGen的下载与基础界面介绍
EmberGen是一个由JangaFX开发,基于GPU运算进行即时爆炸模拟的软件。这个软件并没有出现很久,甚至版本号也不过刚刚过1.0。它的出现主要是为了解决即时渲染与GPU渲染爆炸特效的问题。对于红警2modder来说,比起大费周章的安装一堆AE插件,又或是在建模软件里不停地渲染,甚至是下载整个unity3D引擎只为了制作几个爆炸动画,EmberGen无疑是最佳解决方案。它很小(软件本体只有42MB),调试特别方便(基本上有blender基础与程序节点基础的人一看就懂),输出格式也很符合红警2的环境(背景Alpha,帧序列,等线视角)。唯一不太好的地方在于,它对你的显卡要求有点高(据说至少要i7 7代以上+GTX1060完全版(就是显存大的那种)才能较完整的使用这个软件,否则就只能做点小东西了)。
这个软件可以在JangaFX的官网https://jangafx.com里购买。而在评论区置顶链接是0.7.5.9的破解版,读者也可以通过那个链接下载。
破解版的压缩包打开后,先使用embergen_beta_0_7_5_9_installer.exe进行安装,然后在安装好后将文件夹内的version.dll复制到embergen安装的根目录内即可完成破解,具体详情可以参考文件夹内的安装教程的步骤进行。
安装以后打开它,在经过一段时间的等待以后(首次加载时间较长),我们就能看见EmberGen的主要界面了。

第一次使用,难免会有一些疑惑。对于国人来说这个软件造成的最大疑惑肯定是语言问题,由于此软件的封装比较严格且出现时间比较晚,所以目前只有英文原版可供使用。不过经常使用各种新软件的人应该都清楚,当你知道怎么用以后,记住相对单词的位置与拼写其实都能了解这些按钮的详细作用,更不用说有许多专业名词即使翻译也不一定特别直观,所以接下来所以相关讲解都会基于英文版进行。
3-1.基础界面介绍
首先是任务栏,任务栏从左往右分别是 主页(就是那个房子形状的图标),文件(File),编辑(Edit),模拟(Simulation),设置(Setting),关于(About),帮助(Help)。这里面需要注意的是两点:第一,大多数这里面的操作都能用快捷键代替鼠标手动点选,这也会显著提高使用速度。第二,主页界面也有一些重要内容,而由于默认打开的案例隐藏了主页,这部分内容可能会被新手忽视。
从工具栏功能与快捷键说起,除了新建(Ctrl+N)与打开(Ctrl+O)以外,常见的两种保存——即保存(Ctrl+S)与另存为(Ctrl+Shift+S)与常见软件的共识一致。而更加常见的剪切(Ctrl+X),复制(Ctrl+C),粘贴(Ctrl+V),撤销(Ctrl+Z)也都与正常软件一致。唯一值得注意的是,重做的快捷键不再是部分软件使用的Ctrl+Y,而是Ctrl+Shift+Z,这也是唯一一个需要注意的快捷键要点。
而在模拟(Simulation)部分,这个软件的特性让它拥有了一些需要注意的地方。
虽然我们可以清楚的看见它有时间轴,但是不同于一般动画软件的时间轴可以自由调整回溯动画,它对爆炸的演算是即时的。也就是说,如果你需要重新观看动画的某一帧,你必须使用重载(R)来重载整个动画。不过如果你真的想要确切的查看某一帧的动画形态也不必担心无法准确停止在那个时间点,用户可以使用步进(Z)可以让整个动画向前行进一帧。也就是说用户可以在想要查看的某帧之前的某个较近的时间点按下暂停/继续(Space)来暂停动画的播放,然后再按Z键逐渐调整到目标帧。

比起重载来说还有一个硬重载(Ctrl+R),目前我掌握的资料里并没有详细描述用户视角里重载与硬重载的明显区别(程序上估计是有区别的,比如一个不丢弃内存中缓存,硬重载全部重来丢弃内存中的缓存),这里希望一些更了解的读者能对此处内容进行补充,我对此不胜感激。
而主页界面,点进去显示的是位于软件根目录下的用户个人保存的个人工程文件列表。值得注意的是,JangaFX在软件的根目录下建立了110个特效案例,你可以在软件根目录下的Presets文件下找到他们,也可以通过主页的Presets板块来访问它们。同时主页板块也有教程链接(英文原版且为油管链接,无科学上网渠道者就不考虑了,而且有时候此处的教程会无法显示,如果教程列表不显示你又可以科学上网的话,建议直接点击油管图标跳转软件作者油管链接)可以方便用户使用学习。同时,如果你对软件有疑问,你也可以访问它们的Discord讨论组或是意见收集网站。

至于设置界面,对于一个第一次使用的人来说,许多具体设置新用户还并不清楚如何运作。所以我在这里暂时只提供一个方便修改预览画质的快速修改方案,即首选项(Preference)中的显示质量(Viewport Quality),用户可以通过快速调整Low / Medium / High的预设来改变预览画质,从而使硬件条件不太好的用户有更好的使用体验。

任务栏下方的主界面有四个窗口,分别为渲染预览区,节点视图区,时间轴与节点设置区,渲染预览区即查看即时特效的地方,节点视图是展现用户工程的节点关系的区域,时间轴即时间轴视图,可以方便用户查看特效的相关作用域,而节点设置则是当你在节点视图选中某个具体节点后,节点的相关设置会在该区域显示。
这四个区分别有着不同但很必要的操作。在左上方的显示区域是渲染区,渲染区有三个选项卡,分别为场景,渲染预览与输出,场景是工作区域,用户可以方便移动场景中的内容来调整,场景区的左上角的三个按钮分别是移动、旋转与缩放,这能方便用户对场景中的内容进行更改;渲染预览是以摄像机视角(包括角度,分辨率,光圈等)观察用户自定义场景的内容,渲染区右上角的选项卡可以方便用户查看各种通道的渲染效果,具体项目下文会再次提及;而输出则是当用户已经有输出序列后才会有效的内容,输出选项的右上角会显示当前帧的数字与尺寸。
然后在右上方的显示区域是节点关系区,节点关系区可以方便用户连接不同节点与新建节点,新建节点的内容是鼠标停留在节点关系区的背景画布的空白处右键即可调出相关下拉菜单。

接下来是默认在左下方的时间轴区,时间轴区可以调整不同效果的影响范围,添加效果可以通过选中节点以后对指定参数右边的空白圆圈进行单击或双击加入不同的效果,单击任意功能左侧的按钮一次是将这个功能加入时间轴,再点一次则是在加入时间轴的情况下引入表达式,表达式可以通过Modulator节点输入(Modulator节点会在本文之后的部分里有介绍),再点一次则是取消加入时间轴。

最后是右下方的节点设置区,节点设置区的内容与用户选中的节点有关,这里会提供用户选中节点的相关设置。节点设置去有一个喜爱/收藏/偏好/标记(favorites)选框,在每个选项后面都有两个按钮,一个是重置为默认按钮,另一个是设置为喜爱按钮,当你将一个参数设置为喜爱后,在favorites里这个参数就会保存于那个地方,同时你也可以随时取消参数的标注,让这个参数在favorites里被移除。

通过对四个区的认知,我们可以清楚的知道:即在渲染窗口的显示中,节点的组合使渲染窗口呈现不一样的效果,通过改变时间轴可以调整这些效果的出现时间段,然后点击各个节点,然后通过点击节点并在节点区域设置参数,从而做到对节点的个性化改变,而这也是这个软件的最基础使用思路。
3-2.渲染与输出设置
既然这个软件是一个标准的节点工作系统,那么认识节点的重要性就不言而喻了。程序节点/程序图像节点有一个通用的使用原则,即越左边的节点越靠近基础,越右边的节点越靠近输出效果。根据我个人习惯而言,我更喜欢先搭建一个通用合理的平台,所以我会从摄像机与输出开始介绍整个节点系统。

首先是最终输出节点Export: Image。节点拥有4个表面的接口,分别为RGBA,这分别代表了输出视频序列的四个通道(R通道,G通道,B通道,Alpha透明度通道)。点开详情,如果你略懂英语你不难发现,许多设置对于一般的使用场景来说都是冗余(有点像是程序员加的一些奇奇怪怪的功能)。
从上往下看,首先是Export Mode,红警2需要帧序列作为shp导入的必备部分,所以我们必须将其从默认的Flipbook(图像序列视图)改为Sequence(图像帧序列),FilePath是你保存的帧序列目标目录,你可以创建一个输出目录然后将其设置为那个目录。同时这个目录支持目录变量设置,你可以像设置程序输出变量一样来设置它。

需要注意的是,你的保存目录必须是纯英语目录,任何包括其他国家文字的目录都很有可能报错(中文会报错)。
设置好目录以后,下方的输出Export To File旁的Export Now按钮就可以点了,点下去就是开始渲染,不过在渲染之前我们还需要修改一些其他的参数。下方的Component Mode是输出颜色通道的选择,对于全色爆炸来说我们不需要动任何参数。然后的三个选项分别为使用Use Absolute Frames绝对帧输出,Disconnected Pin Color空白输出色与Automatic Frames自动帧输出,这三个选项一般也无需修改。
再往下就是很重要的基础设置了,First Frame是输出第一帧,绝对第一帧都是从编号0开始的,而Num Frames是你输出的总帧数,比如默认的64,那么最终就会输出64个图像。Frame Stride是输出帧间隔,即每n帧输出首帧。举个例子,比如你的Num Frames是10,Frame Stride是2,First Frame是0,那么系统会选取2*10=20帧,也就是0帧到19帧,将其划分为10个,每个组容量为两张图片的组,并且输出每个组的第一帧,即编号为0 2 4 6 8 10 12 14 16 18帧的图像。这个组合功能可以供使用者在不重新渲染的情况下快速提高播放速度。众所周知,动画的原理便是静态图像的连续播放,那么当有规律抽取等量静态图像中的一部分重新组成帧序列时,这个动画的播放速度就会成比例增加。
而最后的Image Size则是输出图像的分辨率,W代表Width长,H代表Height高,单位是pxl像素。
在Playback Control部分,主要是对背景色的相关修改与全局缩放调整,考虑到统一背景的问题,这里的黑色最好不做其他变动,另外由于Display Scale To Fit的直译是缩放画面以适应大小,但是我实际操作发现,实际图像并不会因为这里的变动或是下方的缩放倍率变动而变动,这可能与摄像机固定有关,所以此处功能其实并不太重要。
在Render部分,最重要的调整就是Capture Types,虽然中文直译为“捕获种类”,但是我个人觉得叫通道类别更为合适,因为在这里就是改变渲染通道的地方。在模型贴图贴图我介绍过有不同的通道与组合方案,比如金属贴图组Metal-Roughness,漫反射贴图组Diff-Spec,而在对于渲染来说,最主要的节点一般有透明度Alpha,环境Ambient,发光Emissive,遮罩Mask,对于抠图需求来说或许还有一个坡度。对于新手来说,在这种地方介绍的越多也就越增加上手难度,所以简而言之,我们最需要的是将Alpha选框选中,并将其节点与Export中的Alpha节点连接起来,否则整个图像不会有Alpha,处理背景的黑色会大幅增加后期难度。

当然,对于Capture Types的详情来说,渲染框的右上角会详细显示其每个种类的渲染样式,这可以很方便使用者来对输出通道进行相关修改(毕竟这个软件是可见即所得标准的践行者)。

考虑到辉光与天空球默认在Render All是开启的,为了在制作爆炸动画时追求辉光等进阶效果的默认显示,用户可以将其默认的Render改成Render All,然后重新连接Render All中对应的RGB节点,这样渲染设置的大部分也就完成了。
在Render下方大部分人都不需要特别更改的选项内,Current Render View与HDR设置类似,都能提升你场景的动态明暗对比度,只不过对于半透明度很高的火焰来说,这个选项的选中可能会让整个火焰明暗对比强烈。

Common Parameters主要是更改Alpha渲染方式与调整发射器是否出现在最终渲染效果里,如果此处Shape Rendering是Ignore(忽视形状),那么发射器自己形状就不会渲染(成为遮罩),而其他选项分别是Regular Lit(作为燃料来源渲染),Regular Unlit(作为燃烧中的不可燃物渲染),Regular Black(纯黑色遮罩),Holdout(放在那,不渲染且仅作为不可燃物交互)。

单独的HDR(High-Dynamic Range,高动态范围图像)选框则是可以让用户指定单独输出通道进行HDR处理;Background则是指定背景颜色(既然背景已经是黑色了就没必要改成其他颜色了,一般都保持默认全黑);组件列表(Components)则是可以让你渲染时指定渲染的部位(比如只渲染火焰,只渲染烟雾,只渲染燃料或是组合起来只渲染其中两者亦或都渲染);其他组件(Other Components)内则拥有一些对火焰温度,火焰范围,动态模糊程度等选项的调整(反正新手统统默认就对了,等你玩熟了再改也不迟);六点参数(Six-Points Parameters)与火焰在平面上产生的法线贴图有关,这对于红警2来说也根本不重要,故在此也不做过多介绍了。
3-3.场景设置(Scene节点)
场景设置主要围绕色调映射(Tonemapping),颜色(Colors),暗角(Vignetting)与渲染风格(Style)展开。色调映射中我认为比较重要的有曝光度调整,色彩抖动(也就是dither技术,我在之前的专栏CV9213190 如何快速用ReShade插件构造一个更棒的红警2画面 中有提到dither技术的核心),明度调整与饱和度调整等,大部分都是字如其名,用户根据需求来个性化调整渲染场景变化。
ps:dithering可以帮助用户在颜色数目有限的情况下合理减少渐变的突兀感,而Color Vibrance让我一下就想到了AK大神在AE里做的Vibrance插件,不过由于此处会修改全局色调,所以要更改火焰颜色我是不太建议在这里修改的,毕竟直接改火焰颜色不好吗?

在场景设置中最有用的可能就是改变渲染风格了,考虑到红警2的半写实风,遵从默认设置也成为了最优解。至于色调映射,颜色眩光,渐晕效果之类的……我更建议纯新手去看一下光学相关教程再来感受其区别(我也不做纯光学项目,所以有些专业名词的具体解释我也不太好讲,硬要说我现在的正经事倒是与光学有一点相关……)。
3-4.镜头设置(Camera节点)
对于镜头来说,红警2modder们最需要的功能无疑是正交/等距视角/Isometric 效果了,以下是在eg中设置正交视角的方法:
(此方法适用于版本高于0.755的EmberGen,低版本可以参考颜落写的专栏CV15573928 【教程】使用EG在RA2中做出比较精致的特效 (第二期) ,摄像机设置在这篇专栏的正中间。)
首先在Display中,把Projection中默认的透视(Perspective)改成正交(Orthographic)即可完成透视视角到正交视角的初步转换。

然后修改Transform的相关参数如下:

值得注意的是,Position Z的值不为0主要是为了对齐火焰中心点与图像中央,至于填什么值能对齐,主要取决于你做的动画的位置在何处,对于默认那个圈的中心点来说这个值写1.667就可以对齐了。
除了默认的Camera以外,还有另一种Camera节点是Camera:Look At,其与普通摄像机节点Camera的区别在于设置参数类型的不一样,一个是通过坐标与旋转角度实现,另一个是通过设置目标点与摄像机点来实现。功能类似我也就不再过多介绍了,大家可以哪个顺手就用哪个。
四.EmberGen核心功能区详解
在设置完摄像机以后,制作一个爆炸特效的前置工作已经全部完成,接下来用户也就可以开始正式制作爆炸特效了。
制作爆炸之前,我们不妨先了解一下3D软件构建爆炸的基础。毫无疑问,爆炸是一个动态操作,也就是说我们必须去设置时间轴;其次,爆炸需要一团制造云雾/火焰的机器,所以我们需要体积云;另外,爆炸一定包含对火光的自定义设置,所以我们需要燃料与火焰设置。

同时,一个必须普及的观念是,在任何对爆炸的模拟都需要一个范围,如果没有一个指定的范围或者范围不必要的大的话,整个模拟就会变得非常的慢,毕竟爆炸涉及场中颗粒的运动模拟,那么边界范围的必要性就不言而喻了。

了解了一个大概需求以后,下面我们按照从节点顺序逐步展开介绍。
4-1.Skybox与Ground
刚才我介绍了Scene,在Scene的输入节点(也就是左边的四个)拥有4个条件,这四个条件也是构建一个场景的必要组件,Shading直译为阴影,在3D软件中一般翻译为渲染设置,Skybox是天空球,也就是背景环境效果,Ground是地板,也就是特效模拟的地面碰撞面,而Rendering直译为渲染,此处用于包含场景中特效的相关部分。
挑简单Skybox与Ground的先说,红警2的爆炸特效需求是一种素材,换句话说就是最终输出必须是一个透明背景无其他可见或遮挡物品的独立特效,所以如果你在制作过程中想直接观测到最终输出的效果,你可以在此处把天空环境关了或者直接把天空球环境设置为none(不过即使你开着天空球,在增加了Alpha通道的情况下,天空背景依旧不会被输出,除非该帧不包括任何特效。地板同理)。与天空同理,地板显示我们也可以关掉。如果你关闭了天空球,那么天空球节点后方如果连接了一个平行光,这个平行光将不会显示,而即使你关闭了地板显示,地板的物理反馈也依旧存在,此时如果你的发射器有部分在地板以下的话,也依旧会被地板隐藏。


4-2.Shading
下一个介绍的是着色器设置(Shading),着色器设置决定了光线亮度,散射,发光遮罩,火焰,烟雾与燃料的设置。

Lighting是着色器设置中的光线设置(不是Lightning闪电啊,这两个词差了个字母n),这条设置的源头都来自于最上方的开启高级设置的开关。默认不开启高级设置的时候,下方从上往下是设置阴影锐度(Shadowing sharpness),光线各向异性(Lighting anisotropy)(各向异性在最新的专栏 CV19170516 【自用】如何迈出程序贴图的第一步?里有提及),环境光遮蔽(Ambient occlusion,简称AO,许多做次时代贴图的人应该特别熟悉),阴影颜色(Extinction color),烟雾阴影密度与强度(Smoke shadow density与Smoke shadow intensity)。阴影锐化义如其名,对于低分辨率的爆炸来说,阴影锐化能直观的提升画质;光线各项异性能让火焰表面漫反射方向更接近两端而不是均匀发散;环境光遮蔽也能加强环境光投射到烟雾上的阴影效果,阴影颜色就是阴影颜色(显而易见……),烟雾阴影密度与强度也是义如其名,是对烟雾阴影参数的相关调整。
在开启了高级调整以后,光线设置的选项从上到下变成了体积阴影强度(Volumetric shadow intensity),阴影贴图强度(Shapes shadow intensity)与阴影密度参数(Shadow density clamping),最后的阴影颜色与上一个相同。在我看来,这两者设置是殊途同归的,只不过一个更倾向视觉效果,另一个更倾向物理表现。至于具体如何设置,那还要视案例而定。同时,勾选进阶调整以后,下方的一些设置会有大幅改变,稍后我将会逐条介绍。

散射设置则与光子轨迹与光束强度有一些关系,在未勾选光线进阶设置之前,里面只有三个设置选项,分别为直射光比重Direct light contribution,火焰亮度比重Flame contribution与散射遮蔽Scattering occlusion。

在勾选了光线设置的高级设置以后,里面东西显著变多了,为了方便各位快速理解条目意思,我在这里给几个此处设置中常见词汇的意思。首先是attenuation,衰减,带有这个单词的条目可以设置相应东西的衰减比率;contribution,直译贡献,在这里更多指的指定部位光线显示效果的权重,比如环境光占总亮度的比重,火焰自发光占总亮度的比重等;anisotropy,各向异性(刚才解释过了);softness,柔化;radius,半径,一般在影响范围设置中有出现;intensity,强度,一般在光线亮度等量级设置中出现。
在勾选了光线设置的高级设置以后,选项卡还会多出一个AO(adv)选项,条目直译为进阶环境光遮蔽设置。内部包含的也大多是与环境光遮蔽有关的部分,对于新手来说,我个人建议是不要设置这个部分,我觉得对于新手来说理解AO的概念也是一个比较麻烦的事情,所以各位刚入门时,在制作过程中可以不开启光线设置内的进阶设置。

发光遮罩Emissive masking,这里起作用的前提是勾选Masking Active,从上往下分别是设置遮罩强度参考值Density reference,遮罩宽度Width,遮罩梯度Masking ramp,遮罩强度Masking intensity,低中高频强度(Low/Medium/High frequencies)

接下来是火焰设置Flames部分。火焰从物理上来说结构为焰心,内焰与外焰三个部分,Flames的首个设置Render flames本质上是控制除焰心以外部分的渲染而不是整个火焰的渲染。火焰渲染默认是打开的。

火焰自身是有一个渐变色的,以最常见的黑-灰-白-黄-橙-红为例,黑灰白基本上反应了烟雾的变化,红橙是外焰到光线在烟雾上反射的变化,白黄则是内焰到焰心的逐渐变化。这点在Flame的火焰设置中也是一样的,火焰从内向外我们可以假定一个极坐标参考系,范围为0到∞(无穷大),那么染色范围Coloring remap range即是设置火焰的染色区域的重要参数。通过改变最大值我们可以改变火焰色相,最大值越大色相越接近深色区/左侧;改变最小值可以改变火焰向外扩展的辉光强度,最小值越大向外扩展越少,边界越清晰。

火焰强度(Shaping by flames)可以设置火焰产生器自身的强度,强度越高火焰越亮。

火焰密度可以设置火焰产生器产生的火焰燃烧光子单位的密度,密度越高整体越亮。
(其实跟上面的效果差不多)

火焰颜色的设定有三种方式,默认方式就是传统的手动设定颜色方式,此外还有黑体梯度方式与曝光色渐变的方式。黑体梯度与黑体辐射规律有关,简单的说就是一个物体越接近黑体,其辐射率与吸收率就越接近1,黑体火焰设置锁定了火焰颜色为黑-暗红-红-橙-黄-白。虽然不利于个性化调整,但是如果你想快速取一个火焰在现实生活中的物理表现可以直接手动设置黑体方式。(作为一个专业相关的人我想说,黑体火焰在现实生活中也不太可能存在,一方面火焰自身只能近似看为黑体,注意我指的是火焰自己而不是火焰的载体或是火焰燃烧腔体壁面,另一方面火焰也不全是橙色,燃烧温度与焰色反应等可以综合影响火焰本身的颜色)
而曝光色渐变方式则比较简单,你需要手动增加一个颜色渐变节点,然后你就可以在节点里调整渐变色来改变火焰颜色即可。


最后一个部分是火焰的透明度,相信大家都知道蜡烛火焰吧,蜡烛火焰的焰心由于石蜡的低温燃烧不充分让其温度较低辐射量较少,所以焰心是透明的。这种效果可以用这个部分来制作。用户可以设置启用火焰透明度Flames translucency来做出这种效果。在没有启用时,用户只能设置火焰的区域大小(Flames density min limit),火焰密度(Flames density scale)与火焰不透明度(Flames opacity),上述设置都义如其名。在勾选了火焰透明度选项后,用户可以设置透明度级别Translucency level与透明度宽度Translucency width,透明度级别可以调整火焰整体的透明度,级别数值越高透明度越低(注意是反比),透明度宽度可以调整透明区域大小,数值越高透明度区域从内向外越大。

再然后是烟雾部分,烟雾自不用多说,上方的火焰案例周围的白色便是烟雾。烟雾的设置主要是围绕烟雾颜色,烟雾密度与其他烟雾参数展开。
首先是烟雾的映射方式,如果勾选使用温度映射,那么烟雾的颜色渐变最小值与最大值就会变成实际温度,如果不勾选则是相对比例调整(调整方式而已,其实两者都可以)。接下来就是染色渐变梯度(Coloring remap ramp),这个东西就像火焰的透明度设置一样,越大烟雾透明度越高。烟雾色彩模式(Smoke coloring)中的选项与火焰颜色类似,分为单色,双色与色彩渐变度映射:单色就是一种颜色;双色就是烟雾浓密的地方用深色,烟雾稀疏的地方用浅色;色彩渐变度映射需要手动添加Color Gradient节点来控制颜色方式。最下方与Smoke density相关的都是烟雾密度参数,第一个Smoke density min limit参数用于控制烟雾密度显示最低值,当你调高它的时候,低于这个值的烟雾都将不可见,这个值在0的时候烟雾显示量是最多的(考虑到动画时间轴,它可以完美模拟烟雾的消散),第二个Smoke density clamp参数是设置最大烟雾密度数值的,这个值决定了场内烟雾的最大密度,第三个Smoke density scale则是简单粗暴的规定了烟雾的透明度/密度,数值越高烟雾越明显。

燃料部分就相对比较抽象了。普通渲染是不显示燃料的,这也是为何这个选项默认关闭的原因。目前我不对这个条目做过多解释,当我遇到了一个合理解释这个条目的案例的时候,我会对这个项目进行补充。

4-3.Lights
光线节点在EmberGen里有四种,分别为自然光,平行光,点光与聚光。在我看来,如果将其每个条目去逐条解释,或许会显得很散乱,所以我直接以一种我个人方便理解的方式直接讲解四种光线的作用原理。

Ambient,环境光。在3D软件的概念里,环境光一般指自然场景里均匀柔和的均匀光源,光源为天空球,一般来说环境光是一种基础方案,如果你不想做一个特定方向光源,或者你不想让烟雾因为没有光照而看不清,给个环境光总是没错的。环境光的设置有强度,颜色,阴影颜色与阴影强度等。这些设置多半都与环境光的属性有关。

Directional,平行光。平行光可以提供一个同方向平行射向物体的光线,一般来说它的光源是一个无穷大平板,用户可以设置这个光源的姿态,光线强度与颜色等数据。EmberGen给了两种设置平行光的方式,一种是角度调整,另一种则是传统的光源点与目标点坐标调整。

Point,点光。这种光源也就是max里的泛光,指的是单点发射的一个单一光源,可以设置光线强度与颜色相关。

Spot,聚光。聚光就跟生活中的聚光灯一样,有个一个从近到远半径逐渐变大的光束。设置一般有近光束半径,远光束半径与光线颜色强度相关。在这里,聚光范围使用了Cone angle参数来进行调整,数值越大发散的角度越大。

当然,节点一般都不能即拉即用,光线要想与场景有交互,光线的Light输出端必须连接到shading的light输入端上,如果不连接则新加入的光线无效。

那么问题来了,光线的添加原则是什么?我们在添加光线之前需要明确一个目标,所有的光线都是为最终效果服务的。所以说任意光线的添加离不开用户对光的需求,一般来说用户添加一个初始天光就可以解决问题了,如果你需要强调阴影或是突出某个部位的颜色的话,可以视情况添加不同的光源。虽然燃烧自身是会发光的,但是如果完全没有打光的话,燃烧产生的烟雾会不可见。所以用户打光重点更多在显示不能自发光的燃烧部位上,当然也可以使用一些特殊的光效来增强某些效果。
4-4.Volume
在引入模拟主板块到场景之前,我们需要将模拟与场景间添加一个体积云节点(Volume),烟雾的运算离不开体积云,而体积云节点可以输入模拟结果并输出渲染项。这个节点最重要的就是叠加后调制选项(Post Modulation)到用户满意为止。

渲染模式(Rendering mode)有三种,体积云模拟(Volumetric),粒子模拟(Particles Experimental)与混合模拟(Hybrid Experimental)。体积云模拟就是不带粒子系统的模拟方式(比如纯火焰与烟雾),粒子模拟就是只带粒子系统的模拟方式(比如飞出的火星),混合模式就是两个都有。很明显,单独的体积云模拟吃电脑资源是最少的,粒子模拟其次,混合模拟最吃电脑资源。

后处理(Post Process)有四种,默认是无(None)后处理,另外三种分别是运动模糊(Motion Blur),锐化(Sharpen)与扩张(Dilate)。这些名词我觉得都算是很具象的名词了,使用者根据他们的表面意思自行调整相关参数即可。
最下方的切片遮罩(Slicing mask)则是给整体创造一个遮罩,遮罩规则按照用户自定义的参数设定来决定。鉴于所有参数都是为了制造遮罩来设定的,建议各位读者如果想体会遮罩功能可以自己上手实际试试这些参数都分别能影响什么,我在此就不一一介绍了。

后调制选项(Post Modulation)则是整个节点的重点。用户每确认一层后调制选项,系统就会创建下一层后调制选项的开关。后调制选项是一种改变渲染形态的重要方式,以标准的发射器燃烧为例,我们知道一个火焰燃烧模拟分为许多部分,包括燃料变化,烟雾变化,火焰变化。如果要个性化设置这些部分的形态,我们就需要用到后调制功能。首先,我们可以在调和目标(Target)里选定要改变的部分,包括烟雾,温度场,燃料,火焰等,之后在调制源(Source)内选定不同要素的表现方式当做调制方式,并在叠加方式(Operator)里选择不同的叠加方法。同时,源范围与目标范围可以设置两者混合的分比值。(很抽象对吧,因为这是一个典型的实践大于解释的部分。如果你想做出不同的效果,多实践这部分的变化会让你更快理解这部分的内容)
插入模式(Interpolation mode)决定了重映射曲线(Remapping curve)基础形状,重映射曲线类似于PS的混合模式曲线功能,它决定了两个混合通道的强度比。插入模式有四种,分别为常数(constant),线性(Linear,一次函数),余弦(Cosine,弦函数)与立方(Cubic,立方曲线函数)。我们都知道曲线上是可以自己新增点的,而插入模式则决定了点两端的变化的运算依赖。如果是常数,则整个曲线是平直一条,如果是线性,不同的点直接则是直接连接,如果是余弦则是如弦函数那种弧线连接点的两端,而立方就是立方函数的过渡方式。(不理解的话还是一句话,实践第一)

Volume设置整体都比较抽象,因为这个部分是程序员们为了能更好用计算机模拟爆炸特效,而高度抽象并控制变量的产物。说白了,如果你没有经历过抽象化表象的过程,你也就无法理解这些参数设置的意义。所以这部分的具体作用我会在后面的实际案例中再次讲到,从而让读者能更好的理解这里面的相关作用。
4-5.Simulation
这个模块就是整个爆炸模拟的核心区。模拟设置主要有边界条件设置,模拟条件设置,时间设置,燃烧设置,涡流强度,力场,风力,碎片,湍流强度与遮罩这些选项。

首先是模拟区域设置(Simulation Size),模拟区域设置最主要的部分是设置模拟区域的长宽高。对于模拟来说可能有人会有一个误区,就是说一定要把区域弄的特别大这样才会有一个好效果。其实模拟区域比火焰主要可见部分大一点其实就差不多了,你可以使用一个较小的区域首先进行一个初步模拟,如果发现火焰有显著接触空气墙而不显示完整烟雾的行为,再考虑根据碰撞方向调整相应轴向的数值。

下面从第一个模拟范围(Simulation Size)开始介绍。最上面的模拟体素数目(Voxel count)可以调整模拟区域的长宽高,单一体素尺寸(Voxel size)可以调整单个体素的大小,放大倍率(Upscaling)可以让你等比放大模拟范围,这与你手动将Voxel count的X Y Z三个数值手动填写乘以相应倍率的方法是一致的。快速放大(Fast upscaler)是改变Upscaling的放大方式的,勾选后放大方式会从详细计算变为一种粗略但更快的计算方式。最下方的三个选项指的是三个轴向的零点设置,例如当你改变上面的Z值时整个模拟范围会向上增长而不是双向增长,这就是因为Z轴的零点默认是地面。而当你改变模拟范围的X与Y值时,由于其零点选项默认是中心向外,所以放大X与Y值时模拟区域会向相应轴的双向增长。

(如果你只想对软件建立认识,下列绿字可以不看)
模拟设置(Simulation)可以对模拟的性质进行相关设置。
模拟模式(Simulation Mode)可以切换为燃烧模拟(Combustion)或烟雾模拟(Colored Smoke)。
平流模式(Advection method)则是改变模拟中对流体运动模拟的相关方式(为啥没有湍流模拟?这就要掰扯一下雷诺数不同对湍流模拟公式的拟合影响了。先不说这东西详细说可以说一篇流力论文,这个软件又不是cfd,火焰体素近似一个无粘牛顿仅平流流体不好吗?)。软件给出了两种模拟方式半拉格朗日函数(Semi Lagrangian)与BFECC(Back and forth error compensation and correction,中文翻译为来回误差补偿与校正)。从介绍来说拉格朗日更平滑,但是部分情况会失真;BFECC则会进行多次平流计算,这会降低模拟速度提升模拟准确性,提升粒子整体的边缘清晰度,但是也有可能在某些情况因为不适用的边界条件而产生尖锐边角失真。(还不太懂?这也很正常,毕竟流体模拟可是人类目前科学极其前沿的东西,这里的某些情况可能就真的是某些不知道是啥情况的情况,一切以最终效果为准)。
平流准确度算法(Advection accurency)可以设置一次运算(First Order),两次运算(Second Order)或四次运算(Fourth Order)。对于一般用户来说,他们只需要记住运算次数越高越准确但模拟时间越长就可以了。(至于为啥流体模拟需要计算多次?因为大多数模拟运算都是一种回归运算。最简单的回归案例就是猜大小游戏,游戏参与者可以随便说个值告诉对方,然后对方会反馈猜数字的人是大了还是小了。对于流体运算方式的计算,专业的流体模拟软件一般会运算至用户设定值或是残差收敛时,提供最终结果与残差变动曲线。毕竟任何软件都不是上帝,无法做到在未知数大于已知方程的情况下一次就能运算出运算曲线。)
BFECC速度场校正(Advect BFECC velocity)能让用户选择是否启用速度校正。它只在平流模式选择了BFECC时才起效。一般来说启用会使模拟速度变慢但是效果变好一点。(这部分我宕机了,我也不研究视效流体算法……)
平流偏移(Advection offset),直观理解就是给予一个风向效果,这个风向由XYZ轴偏移量共同实现。
禁用粘性碰撞(Disable sticky colliders),启用该选项以后,程序定义的粘性交互流体,比如火焰,燃料,烟雾等(我本来想用粘性流体的翻译的,但是考虑到真实的粘性流体粒子模拟,流体内部必须考虑粘性作用力,而很明显这个软件只模拟了流体与固相界面交互而产生粘性的过程,计算时却把流体当无粘平流流体来计算,所以我换了个我认为意思更准确的翻译),就不能附着在固体物品的表面了。对于一般用户来说只需要记住如果关闭了它,你的发射器可能会粘附一些燃料而导致火焰在表面燃烧即可。
总之,这部分最需要关注的部分主要有三类:一是模拟方式是燃烧还是烟雾,二设置场中风速,三设置渲染性能与修正图像。

时间轴设置(Time Control)主要是设置用户在模拟过程中的时间相关,循环模式(Looping Mode)可以设置模拟过程是单纯线性前进还是循环模拟,如果是默认的无循环(No Looping)就是帧数一直涨且整个过程是一直持续下去的,如果是循环模拟(Loop Simulation),那么特效显示还是单一持续,但过程会一直在你指定的帧中循环。而重复模拟(Repeat Simulation)则是到达用户设定的指定帧以后重新模拟并回到0帧。

燃烧设置(Combustion),在不启用进阶设置(Advanced parameters)时,用户可以设置烟雾产生率(Generated smoke,越大越多)、烟雾耗散率(Smoke,越大越快)、火焰强度(Flame intensity,越高越强)、燃烧扩展(Expansion,越大火焰越远,前提是在模拟范围内)
开启高级设置以后,用户可以对燃烧的燃料模拟进行相关操作,比如控制燃料含氧量,火焰即时温度等等,进阶燃烧内容的部分功能会在下方的案例中有所提及,如果需要知道这里面部分功能的作用的话可以到下方的实战案例中区寻找。

涡度(Vorticity),经常观察火焰我们可以知道,除非稳定的平静燃烧火焰,否则火焰的焰体一定会随着周围流体的变化而旋转变化,涡度参数也正是模拟了这种现象。不同的参数都会对火焰在燃烧过程中的扭曲产生不同的影响。总体来说大多数参数都是强度参数(*intensity),其数值越大代表火焰焰体扭曲程度越高,整体显得也更紊乱。

力场(Force),力的开关(力紧密性,Force tightness)是个权重值,默认的0%并不是代表无作用,而是代表力中设置只会作为一个增加项添加到已有的场的力学设置中。而如果设置为100%的话,那么整个场内就只会存在力场设置的力这一个力。如果将其反过来说似乎就会更好理解一些,即力紧密性规定了除Force设置以外其他力的作用强度,其他力的作用强度为100%-设置值,如果设置值是0,意味着其他力可以100%作用于场内,但是如果设置值是100,则其他力不作用于场内。值得注意的是,火焰涡旋的产生是火焰依附于场中流体制造的力产生的(比如太空中,在无重力真空环境燃烧的火焰就是稳定球形),所以当力紧密性设置100%时,火焰自身的涡流也会消失。

浮力(Buoyancy),烟雾重量(Smoke Weight)与燃料重量(Fuel Weight)是义如其名的三个选项,由于重量与质量直接挂钩,所以这三个选项的设置都是重力倍率,由于火焰温度会影响密度,密度又会影响火焰在流场中的运动,所以浮力同时也与温度相关。而重量的额外参数越高,相应物体的物理反馈就会越慢,这就好比质量越大的物体惯性越大,质量一致的情况下收到的力越大惯性越大的道理。最下面的六个选项分别代表了模拟区域内方块空间六个面的阻塞。阻塞与边界最大的区别在于,阻塞会实实在在的阻隔特效的运动,就好像放了一块板子在那一样,而没有阻塞只有边界的话,边界外的情况只是不显示在屏幕上,而不是被什么东西挡住了。
风力设置(Wind)是在场中制造一个风力的选项,不同于一般的单向力,风向可以设置一个类似于弦函数的风力,即沿纵轴波动并指向指定方向的力。风力的设置特别直观易懂,比如风向(Wind direction),风速(Wind speed),风的随机程度(Wind dir randomization),风的混乱程度(Wind choas)等等。这些参数因为比较直观且方便易调,所以我就不做过多展示了。唯一值得注意的是,这里的选项是作用于场中的风力,所以当Force-Force tightness设置为100%(即此时只有力中设置的力可以作用于场内)时,风向设置会无效。
碎片(shredding)只有三个选项,一个碎片强度(Shredding intensity),一个碎片产生阈值(Shredding temp threshold),一个碎片产生范围(Shredding threshold width),后两者单位为温度。

湍流设置(Turbulence)就是针对场内的湍流设置,比如平流湍流强度设置(Advection turbulence),烟雾湍流强度设置(Smoke turbulence),温度湍流强度设置(Temperature turbulence)等等,同时湍流也可以单独指定大小(Turbulence size)与速度(Animation speed)。

遮罩(Mask)是给整体特效图像制造一个遮罩,这个遮罩并没有清晰边缘,而是在显示的体素中产生实际现象,三种遮罩分别代表了三个形状,为了强调不同遮罩的区别,我将遮罩强度(Mask intensity)与遮罩影响深度(Mask distance)都调整至最大,再更换三种遮罩形状(Mask shape),不同遮罩形状之间的区别就呈现出来了。当然,实际使用还是根据需求来,如果你需要此处的遮罩,使用它就是了。

4-6.Emitter
发射器(Emitter)是整个特效爆炸形状的核心,主要分为基础动作设置(Activity),发射器位置(Transform),发射器参数(Emission),发射器压力(Pressure),力场(Forces,这里是来源于发射器的力场而不是模拟器中的力场),发射器视效(Visuals),粒子参数(Particles Parameters),粒子渲染(Particles Shading)几个大的设置部分组成。

首先是发射器动作(Activity),里面只有三个选项可供用户更改:启用发射器开关(Emitter activity),单轮燃烧时间(Duration of burst)与燃烧间隔(Time between bursts)。当你把燃烧间隔改为非0值时,第二个选项就十分显而易见了。每个燃烧循环是一个燃烧与停止燃烧,再重复下一个过程继续燃烧,单轮燃烧时间(Duration of burst)就是设置一个循环中的燃烧时间,燃烧间隔(Time between bursts)就是设置一个循环中不燃烧的时间。

发射器位置(Transform)就是设置发射器位置的参数,发射器具体位置一般都在渲染选框内被用户以手柄手动调整位置缩放与旋转,所以我就不多介绍此处的相关参数了。

发射器参数(Emission)主要是设置发射器燃烧部位的相关参数的部分。在EmberGen里,发射器要素围绕燃料,烟雾与温度展开,燃料指的是中间火焰部分,烟雾指的是外围烟雾部分,而温度则是指的火焰燃烧的程度。燃烧参数的大方向设置有四种,分别是无(No Emission),线性添加(Add),平滑添加(Add clamped)与全部替换(Replace)。无就是不起作用。添加就是单纯的叠加,平滑添加相比直接叠加,在渐变的处理曲线上有更加平滑了(比如从烟雾到火焰的过渡,直接叠加会是火焰直接出现,而平滑添加则是渐变过渡),全部替换就是唯一显示。
同时在温度与燃料方面,除了No Emission是完全没有以外,Add更像是仅把发射器核心添加(比如燃料发射模式是Add,那么火焰会从发射器上冒出来),Replace则是整个发射器空间内都是。(比如燃料发射模式是Replace,由于默认温度场是Replace,这导致整个发射器空间都充满了燃料且达到了指定温度,那么火焰会因为燃料充足而剧烈燃烧)

构造一个火焰需要把一个燃料加热到指定温度,所以温度选项一般使用Replace填满整个发射器,这也让火焰更大,燃烧更充分。在燃料设置内,replace能让整个发射器内部剧烈燃烧,从而出现一个巨大的火焰,如果将烟雾设置成replace,则烟雾会充满整个空间。而温度则可以控制燃料燃烧程度,温度越高,燃料燃烧越充分,火焰颜色越接近设定的燃烧充分的部分。


发射器压力(Pressure)是设置发射器向外火焰的压力的参数,最上方的总压力设置(Additional pressure rate)能设置压力数值,越大火焰对外喷射速度也越快,下方则是发射器向外发射的随机相关参数,它们包括随机性强度(Pressure random intensity,这个控制的是随机现象发生的概率),随机尺度(Pressure random scale,这个控制的是随机现象发生以后随机量的大小),随机种子(Pressure random seed,指随机算法产生的参数依据,就跟MC里随机产生世界的种子代号一样)与随机速率(Pressure random speed)。
力场(Forces)只有一个选项,即速度传递率(Velocity transfer)。虽然默认值是0,但即使你修改值为非零,发射器节点并没有额外的传递给Simulation的Forces输出点。这是因为力已经通过Emitter输出节点传递给模拟器节点了,我在此也就不多说明。
发射器视效(Visuals)可以让用户改变发射器的显示属性。比如你可以改变发射器是否显示在世界中(Show emitter),如果不显示发射器是否让发射器交互影子(Show caster),也可以改变发射器自身颜色是什么(Albedo),或者是否发光(Emit light),发光颜色如何(Emissive),发光强度如何(Emissive intensity)。

粒子部分分为粒子参数(Particles Parameters)与粒子渲染(Particles Shading)。正常情况下用户并不能看见粒子效果,这是因为在体积云(Volume)的渲染模式(Rendering mode)里,默认设置是体积云模拟(Volumetric),此时粒子本身是不可见的状态。如果我们要做纯粒子特效,那么在渲染模式里我们必须改成粒子模拟或者混合模拟(粒子模拟是仅粒子,混合模拟是粒子与烟雾火焰这种体积云都有)。
此外,粒子系统开启时,循环模拟将不可用,否则报错。(重复模拟还是可以的)

打开粒子模拟以后,我们就能清楚的看见发射器粒子的参数含义了。发射器表面现在变成了发射粒子的工具。单一粒子的本质是一个质点在寿命内移动的过程,所以在粒子发射器里,我们可以设置粒子是否产生(Continuous emission)、粒子的产生频率(Emission rate)、粒子是否分裂(Burst emission)、粒子分裂大小(Burst size)、粒子产生方式(Shading type)、粒子发射方式(Emission type)、粒子寿命(Lifetime limits)与大小(Size limits)、粒子尺寸衰减率(Size attenuation over life)、粒子紧密程度(Tightness),粒子紧密衰减率(Tightness att. over life)、粒子锐化程度(Sharpness)、粒子时间随机性(Timing randomness)与粒子渲染方式(Particles render type)。粒子渲染的两个选项则分别为灰烬衰减率(Embers fading rate)与灰烬转换率(Embers chance)。

粒子产生方式(Shading type)的设置可以让你选择是否开启纯粒子系统,默认是体积云粒子(Volumetric),打开则是Per Particle,修改该选项后,Particle shading的选项会修改。修改后菜单如下:

开启特殊粒子系统后的粒子着色器选项包括这些内容:粒子初始颜色种类(Initial color type),粒子初始颜色(Initial color)、粒子调制方法(Modulation type)、粒子调制颜色(Modulation)、色彩增强率(Color boost)、透明度(Opacity)、粒子随寿命的透明度衰减率(Alpha attenuation over life)与粒子阴影强度(Shadowing intensity)
粒子系统属于这个软件的进阶内容,待我研究一段时间以后再出个专栏详细介绍这个部分。至于一些基础设置,我在这里已经翻译过而且很清楚的选项,各位也可以参考一下,然后自己动手做一些案例。
对于Emitter来说,除了输出给Simulation的Emitter输出框以外,它还有两个最基础的输入窗口,分别是发射器力场(Forces)与发射器形状(Shapes)
4-7.Shape
这里的Shape特指发射器模型,在节点列表里我们可以找到找到6种发射器模型,分别为混合模型(Blend),爆破模型(Burst),修改器(Modifier),噪波模型(Noise),粒子模型(Particles)和标准模型(Primitive)。

在这些节点里,爆破模型(Burst),粒子模型(Particles)和标准模型(Primitive)是基础模型,他们直接拉到合成器的Shape上都会有不同的效果;混合模型(Blend)可以将两种Shape合二为一,修改器(Modifier)是一种处理方式,可以将一种模型处理后输出,噪波模型(Noise)是一种修饰性模型,可以用于混合模型时修饰基础模型从而组成新的模型。
标准模型(Primitive)包含球体(Sphere),方块(Box),圆角方块(Rounded Box),胶囊(Capsule),甜甜圈(Torus),圆柱(Cylinder),圆角圆柱(Rounded Cylinder),圆台(Cone),圆角圆台(Rounded Cone)与梭形(Ellipsoid),不同形状拥有与形状匹配的不同的调整参数。
爆破模型(Burst)则是在一个范围内产生随机膨大到最大并迅速消失的发射器的发射器模型。爆破模型的设置主要分为几个方面,一是设置单一发射器的膨胀大小与膨胀速度等数据,代表选项是 爆破时间(Burst Duration)与爆破时间范围(Range of shapes duration),运作原理是每隔一个爆破时间就产生一个;二是设置爆炸随机性,随机种子(Random seed)就是用来干这个事情的;三是设置爆炸分布的总体形状,Positions的整个选项都是为这一条服务的;四是设置发射次数与频率的,比如发射器类性质(Emission Type)可以设置发射次频次是单次还是重复;五是单一形状相关,比如爆破顺序(Trigger Order),形状分布(Size distribution),粒子膨胀范围(Initial radius),插入模式(Interpolation mode,没错这里插入模式又回来了,运作原理大抵相似,只是把对象换成了爆破类发射器模型),形状类型(Shape type)等。当然,不同的形状类型也能再有不同的设置选项,形状设置与标准模型大同小异。

噪点(Noise)模型是官方用来搭配混合(Blend)模型使用的推荐模型,噪波的设置围绕着噪点的大小(Scale)、位置(Position / Rotation)、生成种子(Seed)、阶数(Octave)、间隙(Lacunarity)、增幅(Gain)、振幅(Amplitude)、偏移(Bias)与动画速率(Animation speed)。最终噪波模型会提供一个噪波的最终合成预览图,使用者可以清楚的看出噪波贴图的样式。

粒子(Particles)模型可以让发射器像粒子一样产生,也就是说,粒子模型可以让发射器也拥有力学,初始力度,寿命等粒子才拥有的性质。

主要设置(Main)可以设置发射器的位置与种子;发射设置(Emission)字如其名,是设置发射器的生成样式,粒子爆炸范围,粒子寿命与发射规则的部分;动作(Motion)设置的是粒子运动相关的参数;形状(Shape)可以改变粒子随寿命衰减的形状样式与变化曲线;碰撞箱(Collisions)可以设置粒子间碰撞,粒子弹力与粒子运动范围边界碰撞箱。注意,以上所有的粒子都是粒子发射器,就是说发射出的粒子每一个都是一个发射器。

混合(Blend)是一种组合复杂模型的标准方式,单个混合节点可以将两个输入的模型混合成一个,当然,你也可以输入一个混合模型套娃。官方比较推荐你将混合模型的Shape B设置为噪波(Noise)模型,这与混合模型的默认混合模式为平滑交叉(Smooth Intersection)有关。混合模式的核心在于混合类型(Type),混合类型的选项列表如下:
并集(Union):直接相加,类似于建模中布尔的并集操作。
平滑并集(Smooth Union):平滑叠加。
差集(Subtraction):用Shape A减去Shape B得到的图形。
平滑差集(Smooth Subtraction):…
交集(Intersection):即Shape A与Shape B重合的区域。
平滑交集(Smooth Intersection):…
相加(Add):将Shape B布尔相加Shape A上。
变形(Morph):变形能创造一个从Shape A变到Shape B的过程,在默认权重0下,形状是Shape A,权重1则是Shape B,随着权重从0到1的变化,形状将会从Shape A变成Shape B。
不同于二合一的Blend,修改器(Modifier)是一种将单一模型进行处理的节点。修改器处理种类只有三种,分别是取整(Rounding),高尔夫化(Golf Ball)与填充(Invert)。高尔夫球是可以将表面变成网格化的修改器,填充则既可以模型暴力填充至整个模拟空间,也可以让一个形状成为碰撞箱必不可少的东西(这个选项的设置可以设置内部作为墙壁,类似天空球),至于取整……我只能说我也没看出来到底是个啥取整(难道是减面的手段?)

4-8.Force
力学节点一共有五种,分别为线性力(Line),噪点力(Noise),点状力(Point),矢量力场(Vector Field)与漩涡力(Vorticles)。各个力场基本上与名字直接相关。

线性力(Line)就是速度、时间、位移成正比的力,用户可以设置这个力的大小方向衰减随机性等(单轴随机,本质上是一种纵波);噪点力(Noise)比起线性力多了更多横向随机性;点状力(Point)则是仅作用于一个点上的力;矢量力(Vector Field)可以让你从外部导入力学文件来制造力学效果,此处的力的制作需要使用JangaFX本家的另一个软件VectorayGen,我也就不多叙述了;漩涡力(Vorticles)则是一种制造角动量的力,比如你想要让粒子旋转起来就得使用漩涡设置。
4-9 Modulator
表达式相信用过AE的人都知道是个啥,而想要在动画里实现表达式相关的效果则需要在双击功能节点前的圆圈使其激活表达式。(跟AE里Alt点击关键项是一样的)

大家都知道表达式本质上是个函数,函数本质上是个波。所以这些节点的含义其实也很一目了然。波的设置是三个方向x,y,z分别与时间t的函数,Constant常数波、Cycle是锯齿波(为啥叫Cycle呢,那是因为虽然三个方向上的波是锯齿波,但是三个方向空间合成后就是圆形波了,建议查阅波的合成相关资料)、Math是自定义波,Oscillator是弦波,Time Shift则是一种时间回溯手段,与Modifier修改器模型类似,也是一种处理波形态的修改器,而Combine则是波里的Blend,也是将两种波以一种方式混合的节点。
MIDI则是一个神奇的功能,如果你想让你的粒子随着声音舞动,MIDI配合一些外接设备可以很方便的制作出这种效果。官方的案例中的83 midi controller sample则是对midi修改器案例的体现,用户如果想使用可以详细去那个预设里参考相关功能。(需要midi设备支持与在设置中开启midi功能)
4-10 Collider
碰撞箱节点是一个能将燃烧模拟区从传统的方形压缩到自定义碰撞箱里的一个节点,它需要输入一个形状,并接入Simulation节点的碰撞箱节点上。碰撞箱与发射器类似,用户都可以手动指定它是否显示,或是碰撞规则相关。至于接入的形状是如何,详情可以复习Shape节点的相关内容。

碰撞箱的三个基础设置也十分清楚,通用设置(General)可以规定碰撞箱是否启用与其位置,物理设置(Physics)可以规定碰撞箱内粒子碰撞的规则,显示(Visuals)则是对碰撞箱自身是否显示的一种设置。
五.爆炸案例
上述相关介绍基本是一个软件的说明书,如果没有相应的案例,快速的入门这个软件依旧很难。下面我就以一些做红警2的大部分人可能都需要的案例来介绍一些场景的动画制作解决方案,从而让读者更好的体验相关节点在制作流程中的作用。
5-0.共同原则
所有爆炸动画为保证预览效果,都需要修改摄像机至正交,同时最好关闭天空与地板显示以方便调试,在Render部分,你可以将默认的Render通道改成Render All通道,但是改完了记得连接Render All的RGB通道到输出通道上。同时,必须新增Alpha通道以保证半透明可以在PS里被仿色处理(照顾到shp文件不能半透明)。
5-1.小型空中爆炸
空中爆炸并消失毫无疑问是一个最简单的爆炸案例,所以从它开始入门是一个很好的选择。官方在98号案例98_small_game_explosion里给出了一个很标准的游戏内爆炸案例。如果你觉得你无法理解全过程的每个设置,那么可以直接另存为并修改那个案例来制作自己想要的爆炸效果。
既然是空中扩散爆炸,那么我们肯定需要一个圆形浮在空中的发射器。首先修改默认的形状为Sphere并调整合适大小。发射器的大小决定了你的爆炸最开始的火焰大小,所以各位综合考虑一下确定一个合理的爆炸范围。

考虑到爆炸烟雾飘动的随机性,我们可以保持Force的性质为Noise。当然,如果你想要让发射器收到的力更乱一些,修改Noise的参数也是可以的。比如修改Force中的种子(Force: Noise-Seed)可以让爆炸在冲击力不变的情况下形状发生改变(每个seed都可以是一个新爆炸)。
在发射器(Emitter)内,首先我们关掉发射器的显示(Emitter-Visuals-Show emitter),然后将发射器动作设置的发射器启用(Emitter-Activity-Emitter activity)加入时间轴(单击前面的空心圆圈)。然后随便在你想要发射器不工作的帧上取消勾选Enabled,并且在最开始的帧里勾选Enabled,这样一个粗略的爆炸动画就已经呼之欲出了。


然后我们会发现一个问题,这个烟雾消失的太慢了。我们想让这个烟雾消失的再快一点。打开模拟器(Simulation)中的燃烧设置,提高烟雾耗散率即可让烟雾更快的消失(Simulation-Combustion-Smoke dissipation)。当然此处也可以调整烟雾量(Simulation-Combustion-Generate smoke)与火焰相关参数。如果你需要进一步调整爆炸,你也可以打开高级参数选项。
现在烟雾的消失是向上飘的,如果不需要这个效果怎么办?将模拟器中力学分支的浮力选项(Simulation-Force-Buoyancy)改小即可。

现在已经得到了一个合适的小爆炸了,考虑到红警2动画的播放速率大概是15fps左右,我们可以在输出里选择每4帧输出一次动画(Export: Image-Frame Stride,数值改为4)。调整好合适的输出分辨率(Export: Image-Image size),修改输出格式为帧序列(Export: Image-Export Mode,改为Sequence),设置好合理的输出目录(Export: Image-Filepath)就可以输出这个爆炸了(Export: Image-Export to file,点击Export Now)。

5-2.带粒子飞出的地面爆炸
不同于在空中爆炸,地面爆炸需要有一个与地面的交互,让爆炸与地面发生碰撞是地面爆炸的精髓。
所以最初的设置与上面的空爆类似(发射器性质,烟雾消散率等等),只不过这次我将发射器固定在地面上,并且相对来说地面爆炸的烟雾需要一个向上腾起的过程,所以这次的烟雾浮力我们也不需要调的那么低以至于让烟雾原地消散了。
当然,这次的爆炸会尝试一些新东西。比起上次的轻火轻烟,我想让这次的火焰从烟雾中突出然后消失而不是之前的先火后烟。那么应该如何怎么做呢?在这里我将发射器的发射器参数中燃料的发射性质(Emitter-Emission-Fuel emission)变成Replace,而温度的发射性质(Emitter-Emission-Temperature emission)则变成了Add。此时我们可以看见爆炸有了明显不一样的特点。(不同的组合可以出不同的效果,各位可以在自己试验的时候多改改,改到自己满意为止)

下面我再为这个爆炸增加几个弹出的火焰充当碎片,首先新建一个粒子形状(Shape: Particles),同时为它建立一个单独的发射器(Emitter)来调整这个形状的火焰性状与燃烧特性。把这个粒子形状稍微调一下改变它本来的发射模式,首先改变粒子形状里动作子选项(Shape: Particles-Motion)中的Min Speed与Max Speed的x值与y值从而改变粒子往外飞出的距离,修改合适的z值来匹配他们上抛的速度与下落的速度,最后修改重力值改变这些粒子从向上转变为向下的加速度。为了让所有的碎片都合理显示,记得适度调高模拟器中的模拟范围(Simulation-Simulation size-Voxel count)以让粒子不会碰到模拟边缘。

同时,我们将这个粒子形状单独连接一个发射器(Emitter),然后把发射器的显示发射器(Emitter-Visual-Show emiter)关掉,更改合理的燃料烟雾与温度以适配碎片。

最后,我期望碎片掉到地板上就消失,所以我着手给地板增加一个碰撞箱。考虑到我们的粒子是从地板下方开始发射的,所以在最初的发射阶段我们不想让这个碰撞箱工作,只有当所有粒子都发射完毕了才开始工作,在粒子形状的碰撞区(Shape: Particles-Collisions)找到Collisions Z- ground,单击前方空心圈添加动作到时间轴,然后将0时刻的碰撞箱改成Ignore属性,然后选取一个粒子都已经发射并且没有粒子落地的时刻将碰撞箱属性改成Kill,就大功告成了。

另外,一开始突然出现的那个爆炸球可能太过突兀,所以我将整个已经做好的动画时间轴向前挪了一点,然后给初始爆炸的基础形状发射器(Shape: Primitive)的Radius做了个K帧,让其缓慢变大,然后为了让火焰纹理更清晰,我选择在Volume节点的后处理上增加了一个锐化(Volume-Post Process-Volume post process,选择Sharpen)并调整了一些参数,以下是最终效果。

5-3.破片烟雾弹
刚才的案例我们使用了两种制作爆炸的方式——固定形状发射器时间轴K帧与粒子形状发射碎片。下面我们来使用爆破形状(Shape: Burst)来构建一种新的爆炸方式。
为了避免这个案例比较抽象,这次我先把最终效果展示出来。

这个案例中要做的效果便是拥有多个爆炸点的烟雾效果,所以此时我需要一个主爆区与次爆区。主爆区我计划用一个基础形状(Shape: Primitive)来制作爆炸效果,而在烟雾中隐隐约约产生的二次爆炸则使用爆破形状(Shape: Burst)来构成。
首先,由于这是一个地爆模型,按照之前用过的方法,我把基础形状设置成球体(Shape: Primitive-Type,Sphere),且将球体的部分隐藏于地板之下(Shape: Primitive-Position,将z改成小于0的合适值);合理改变球的大小(Shape: Primitive-Radius),然后将发射器的发射时间加入时间轴(Shape: Primitive-Shape Activity)。
而这次,在默认的噪波力学节点作用的同时,我加入一个线性力(Force: Line)以让烟雾扩张的更大的同时,多一个可以控制的选项,同时也能让爆炸不局限与一个球状烟雾中,增加最初烟雾爆炸的表现力。默认的推力在这个场景里有些大,所以我降低一些推力值(Force: Line-Push Strength)来让爆炸扩张不那么快。同时为了让烟雾扩散开,我把附加压力率(Force: Line-Additional pressure rate)增加到17.333%且将排斥强度(Force: Line-Repel Strength)增加到0.7来让烟雾是扩张而不是紧缩消散的(这两个地方为负数时,爆炸产生的烟雾会逐渐缩回远点),最后注意把线性力与噪波力连接到主爆炸专用发射器的同一个力学输入节点上(多个力是可以连接一个点的)就大功告成了。

这次我们只需要烟雾,所以在发射设置里(Emitter-Emission),我关掉燃料温度,只留下烟雾并将其设置一个较高值。
下面来制作烟雾中隐隐约约的碎片爆炸效果。由于两个爆炸都是烟雾,所以我复制了之前已经设置好的发射器作为碎片烟雾爆炸效果的发射器。只不过考虑到碎片爆炸效果可能比较小,所以我把复制出的那个发射器的烟雾效果进一步增强了(Emitter-Emission-Smoke Rate,将数值进一步增加)。
关于形状方面,因为爆破形状默认的爆炸是个特别规整的圆形,所以我将一个噪波形状与爆破形状进行混合,然后将混合选项改成平滑差集(差集其实也可以)来让burst中每个碎片爆炸更随机一些(Shape: Blend-Type,Smooth Subtraction)。此时,噪波设置变得格外重要了,这是因为噪波的噪点大小与噪点密度会直接影响爆炸的效果,下图是我自己设置的相关参数供给读者参考,当然,各位也可以通过自己的理解给出更好的设置。

在爆破模型中,我从上往下逐条设置。首先我改变爆破产生数为20(Shape: Burst-Main-Amount of shapes);然后修改爆破间隔时间为0.6s(Shape: Burst-Main-Burst duration),最小形状时间范围为0.04s(Shape: Burst-Main-Range of shapes duration,Min),最大为0.14s(Shape: Burst-Main-Range of shapes duration,Max);接下来开始设置爆炸整体分布的形状(比如所有爆炸的中心点都在一个圆内),保持椭圆随机不变(Shape: Burst-Positions-Distribution shape)并合理在下方改变这个椭圆的长轴长度,短轴长度与高;在爆炸顺序触发与爆炸形状上面,我选择的触发方式是从外到内(Shape: Burst-Shapes-Trigger Order,Outside To Center)(但是这种方式产生的多次爆炸其实是从内向外的,很奇怪,可能是bug)且形状与位置无关(Shape: Burst-Shapes-Size distribution,Random),之后就是对形状与膨胀率的相关改变了;设置调制模式为余弦函数(Shape: Burst-Positions-Interpolation mode,Cosine);最后把爆破形状的样式(Shape: Burst-Shapes-Shape type)改成空心球,然后合理改变球的尺寸关联值(Shape: Burst-Shapes-Relative width)使粒子球的膨胀既清晰可见也没有喧宾夺主的大小。

体积云上,我这次把后处理选项选择了动作模糊。然后略微修改了一些后调制选项,下图是我的设置,至于如果读者们有更好的设置的话也可以试试修改其他的选项。当然,既然是两个发射器的出现动画,两者播放的时间段的匹配也是很重要的事,这也是这个案例的需要注意的重要地方。

5-4.核弹蘑菇云爆炸
(由于专栏的图添加快到上限了,接下来关于节点的设置我就只用文字叙述而不放截图了,详细图可以去上面的说明书里寻找)
核弹蘑菇云拥有两个部分,一个部分是上升的火焰球,它也构成了蘑菇云的主体;而另一部分则是地面的烟雾波,烟雾波的出现让核弹的冲击波更直观,让破坏力的感觉也得到了增强。
首先我们来捏火焰球。上升的火焰效果其实很容易在embergen里复现,当你打开软件时,默认的设置是一个甜甜圈在不断燃烧,此时我们删掉Force: Noise节点,神奇的事情发生了,甜甜圈默认冒出的火焰就变成了一个天然的蘑菇云。

当然,这个甜甜圈形发射器制造的蘑菇云有点太扁了,所以我把发射器形状改成球形并把发射器工作的区间在时间轴上改变一下。接下来我开始对火焰开始进行相关修改,默认的火焰有点太暗了,同时火球时间出现不够长,所以我稍微的修改一下发射器发射选项中的相关内容(Emitter-Emission);修改燃料与烟雾的发射模式,这会使蘑菇云本体更加实心(毕竟是大爆炸,烟雾不应该太虚);考虑到核弹烟雾消散的特殊性,我在模拟器内把高级燃烧参数(Simulation-Combustion-Advanced paramters)打开,这样我可以对烟雾的消散做出更精准的控制(Simulation-Dissipation(adv)-Smoke dissipation)。当然,在更换成高级燃烧参数设置以后,烟雾产生与燃料燃烧的设置都与普通设置不太一致。高级设置中的常见选项有以下几个:调整火焰消失后烟雾还持续多久可以通过改变废气产量(Extinction smoke gain)来改变;改变火焰与烟雾的爆炸后大小可以通过燃烧气体排放量(Combustion gas release)来改变;改变火焰何时在爆炸中熄灭转换成烟雾可以通过废气最高温度(Extinction smoke temp)来改变(这个值作用原理是当场中质点温度小于一定值就把火焰变成烟雾,所以这个值越高,在燃料最初燃烧温度一定的情况下,火焰也就越早消失,烟雾同时也会越早消失);当然,其他选项也可以根据个人需求进行适当调整。
调整完蘑菇云以后再来加入底部冲击波的显示,加入一个爆破形状(Shape: Burst),相应的,为这个形状添加一个专属的发射器(Emitter)并将其连接到模拟节点的发射器入口(Simulation-Emitters输入节点)处。默认的爆破形状是随机在一个范围内自由产生爆炸,我们需要让所有的爆炸都在中轴线处,这可以通过修改位置选项(Shape: Burst-Positions)来实现,将修改位置选项改为“沿Z轴分布的长方体”(Shape: Burst-Positions,Box Evenly Distributed On Z)并将这个长方体的x与y都设置为0,这样就能保证爆炸位置都保持在z轴为中心发生了。
接着我们来调整单个爆炸样式,在形状类中(Shape: Burst-Shapes),先把爆炸的形状改成环状(Shape: Burst-Shapes-Shape type,Ring)。仔细观察爆炸环可以知道爆炸环的扩散是越往外越粗但高度却不怎么变动,做出这种效果我们需要把环的厚度数据改成一个绝对值(取消勾选Thickness is relative,改动Absolute thickness为一个绝对值则会让环的厚度变成定值)并保持Width is relative的勾选,然后改变Relative width的比例而环的粗细与往外扩散的距离保持关联。
爆炸冲击波一般是以地面为半径产生的一个半球状扩散波,所以在环的大小设置上,由冲击波带动的核弹爆炸烟雾应该也是离地面越远环越小。这个设置可以通过改变尺寸关联规则为Z Axis Downward(Shape: Burst-Shapes-Size distribution,Z Axis Downward)来实现;我希望这个环从最小变成最大而不是直接显示出来,所以我将Range of expansion的最小值改成0%,最大值改成100%来保证最大的扩张效果;我希望Z轴值低的环(更靠近地面的环)大一些而Z轴值高的环(远离地面的环)小一些,此时可以设置初始大小的最小值来确定最顶部小环的大小(Shape: Burst-Shapes-Initial radius-Min),设置初始大小的最大值来确定最底部大环的大小(Shape: Burst-Shapes-Initial radius-Max)(换句话来说就是蘑菇云的腰多细);关于爆炸环的扩张效果动画播放速率,使用过AE的人都知道,如果要想把MG动画做成有弹性或是改变扩张率,则需要改变动画曲线,而在此处,用户可以通过改变调制模式(Shape: Burst-Shapes-Interpolation mode)曲线类型来实现。因为目前这个曲线(Shape: Burst-Shapes-Remapping curve)的本质是环大小百分比与时间百分比的关系,改变调制模式就可以改变这个曲线的样式。我将调制模式改成余弦曲线(Shape: Burst-Shapes-Interpolation mode,Cosine),此时环的爆炸效果就显得更有张力了。

光有一个环还不太够,我们还需要给这个爆炸环增加烟雾。基于环的烟雾也参与整个蘑菇云的塑形,所以我们需要相当大量的烟雾。大幅增加爆破模型连接的专属发射器烟雾生成率(Emitter-Emission-Smoke Rate),同时把爆破环的燃料(Emitter-Emission-Fuel Rate)与温度(Emitter-Emission-Temperature)都改成0。
设置完模拟节点以后,现在进入体积云设置(Volume),将后处理中的锐化(Volume-Post Process-Volume post process)打开以增加烟雾细腻程度,打开一个后调制器(Volume-Post Modulation 1-Active,勾选上),让温度与速度绑定(Volume-Post Modulation 1-Source项设置为Velocity;Volume-Post Modulation 1-Target项设置为Temperature)。改变计算方法为添加至源(Volume-Post Modulation 1-Operator,Add Sub),将源头的范围设置为0到100%(Volume-Post Modulation 1-Source range;Min=0%,Max=100%),目标的范围设置为-64%到84%(Volume-Post Modulation 1-Target range;Min=-64%,Max=84%)。
最后根据最终效果微调一些数据并修改模拟范围使环与蘑菇云都能完整显示,接下来就是见证奇迹的时刻了。

六.结语
其实,这个世界上大多数的专业软件其实都不难,当你拥有理论基础并对理论基础相关的操作足够熟悉以后,专业软件就是一个很方便的电子工具。EmberGen也是相同的道理,虽然其多数界面与介绍我都十分详细的配上了截图,但如果你想要好好的学习这个软件,拒绝云使用才是精通之路的第一步。我希望大家都能每天想到一个新想法然后去软件里掰扯一下,通过修改不同的参数与连接不同的节点来完成对EmberGen的更深度了解,如果你能做到,那么我相信很快每个读者就能取得长足的进步。
2022年快结束了,希望大家度过了一个有收获的一年,也希望疫情能早点过去。