
模拟制作任务
任务一 篝火
任务背景
《小龙阿布》的剧本里有一个山洞,居住着一只邪恶的狐狸。由于山洞里光线不足,环境很黑,所以山洞里有一堆篝火,用来照亮山洞。
任务要求
设计制作一团篝火,要求符合整体的动画风格。
任务分析
一团篝火基本上由木材、火焰、火星、烟等组成。木材是模型建造的,不需要特效人员来制作。火焰、火星、烟都可以通过Maya粒子来产生,再用后期合成软件对渲染出来的特效素材进行调色等操作,最后和渲染组提供的图片进行匹配合成。
本案例的重点、难点
如何让粒子运动具备火焰运动的特征。
利用后期合成软件对素材添加一些特效滤镜产生火焰效果。
【素材来源】“光盘\素材\模块02\任务一\abu”
操作步骤详解
创建粒子发射器
01 启动Maya,在开始制作案例前先设置以下工程目录:选择【File】>【Project】>【New】命令,弹出【New Project】对话框。在【Name】中设定工程目录名,【Location】中设置工程目录的路径。单击【Use Defaults】按钮,系统会自动将【Project Locations】中的项目设置为默认值,然后单击【Accept】按钮,完成工程目录的创建,如图2-1所示。

图2-1
02 将Maya状态栏中的模块改为“Dynamics”模块,如图2-2所示。

图2-2
03 新建一条曲线作为粒子的发射器,选择【create】>【CV Curve Tool】命令,在视窗中创建一条CV曲线,如图2-3所示。

图2-3
04 将这条CV曲线作为粒子的发射器,让粒子从这条CV曲线上发射。先在视图中选择曲线,再选择【Particles】>【Emit from object】>令,弹出【Emitter Options(Emit from object)】对话框,修改【Emitter name】和【Emitter type】01的属性,如图2-4所示。

图2-4
05 对话框中的其他选项暂时先设定为默认值,单击【Create】按钮创建发射器。选择【Window】>【Outliner】命令,弹出【Outliner】窗口,双击粒子名称重命名,如图2-5所示。

图2-5
06 在【Outliner】窗口中选择粒子发射器,按【Ctrl+A】组合键打开粒子发射器的属性面板,修改【Rate】、【Direction X】、【Speed】、【Normal Speed】属性,如图2-6和图2-7所示。

图2-6
07 在【Outliner】窗口中选择粒子,按【Ctrl+A】组合键打开粒子的属性面板。先调节粒子寿命,因为默认的粒子寿命方式是Live forever,即粒子永远存在,但是在实际案例中需要粒子在发射后经过一段时间便消失,于是需要在【Lifespan Mode】下拉菜单中选择“Random range”选项,如图2-8所示。

图2-7

图2-8
08 此时将时间线设置为500帧,因为默认的100帧时间线并不能完整地反映出所做出的效果,然后播放动画,视图中显示粒子运动的效果,如图2-9所示。

图2-9
给粒子添加场
09 粒子附着在CV曲线上,并没有向上运动的趋势。下面就需要借助Maya的Fields(场)来实现所想要的运动效果。先要运用Uniform这个力场来给粒子一个向上的力,Uniform的作用就是可以使被影响物体往某个方向运动。在【Outliner】窗口中选中粒子,选择【Fields】>【Uniform】>命令,弹出【Uniform Options】对话框,在【Uniform Field name】中为力场命名。将【Magnitude】值设置为“4”, 【Magnitude】是一个控制力场的强度值。将衰减值【Attenuation】设置为“0”,将【Direction X】设置为“0”, 【Direction Y】设置为“1”,本案例中需要【Uniform】力场来影响粒子在Y轴上的动势,具体设置如图2-10所示。

图2-10
10 单击【Create】按钮创建力场,播放动画观察现在的粒子效果,如图2-11所示。

图2-11
11 现在粒子有了一个向上运动的状态,但是离火焰的形态还相差很多。再为粒子添加上扰乱场【Turbulence Field】02,扰乱场的作用是可以使被影响的物体产生不规则的噪波运动效果,利用它可以模拟自然界中某些液态或者气态(如空气和水)无规则的运动状态。在选中粒子的情况下选择【Fields】>【Turbulence】>命令,弹出【Turbulence Options】对话框,为扰乱场命名,更改力场强度值【Magnitude】,衰减值【Attenuation】以及频率值【Frequency】,【Frequency】是指振荡力场的振动频率,然后调节【Noise level】和【Noise Ratio】两个数值来控制形成噪波的等级以及比率,如图2-12所示。

图2-12
给扰乱场添加表达式
12 单击【Create】按钮创建扰乱场,然后需要在扰乱场的【Phase Y】值上添加一个简单的表达式,使得扰乱场在Y轴方向上能产生随机的变化,来模拟火苗随机抖动的效果,在【Turbulence】属性面板中【PhaseY】数值框中单击鼠标右键,在弹出的快捷菜单中选择【Create New Expression】命令,如图2-13所示。

图2-13
13 弹出【Expression Editor】对话框,输入表达式:flame turbulenceField.phaseY=-2.5*time;如图2-14所示。

图2-14
14 单击【Edit】按钮创建表达式,播放动画预览效果,这时粒子已经大致上具备了火焰的形态了,但还有需要调整之处,如图2-15所示。

图2-15 目前粒子效果
调节粒子的透明度和颜色
15 下面调整粒子的透明度,调整透明度能让粒子在上升过程中有个渐隐的效果,使得粒子不是突然消失。选择粒子,打开粒子的属性菜单,下拉滚动条,在【Add Dynamic Attributes】扩展栏中单击【Opacity】按钮,如图2-16所示,为粒子添加透明度属性,弹出【Particle Opacity】对话框,选中【Add Per Particle Attribute】复选框,如图2-17所示。

图2-16

图2-17
16 单击【Add Attribute】按钮完成属性添加,这时在【Per Particle(Array)Attributes】面板中会多出一个【Opacity PP】的属性,右键单击【Opacity PP】后边的空白部位,在出现的快捷菜单中选择【Create Ramp】03命令,为【Opacity PP】属性连接上一张【Ramp】贴图,用黑白两种颜色来控制粒子的透明度,如图2-18所示。

图2-18
17 然后在属性面板中找到【Ramp Attributes】面板,将【Ramp】贴图进行调整,用【Ramp】贴图控制粒子透明度,贴图的黑色区域代表透明,白色区域代表不透明,如图2-19所示。

图2-19
18 最后给粒子赋予一个颜色,以便能在后期软件中方便处理粒子,方法与给粒子添加透明度属性差不多。在选中粒子的情况下打开粒子的属性菜单,下拉滚动条,在【Add Dynamic Attributes】扩展栏中单击【Color】按钮,如图2-20所示,为粒子添加色彩属性,弹出【Color Opacity】对话框,选中【Add Per Particle Attribute】复选框,如图2-21所示。

图2-20

图2-21
19 单击【Add Attribute】按钮完成属性添加,这时在【Per Particle(Array)Attributes】面板中会多出一个【RGB PP】的属性,右键单击【RGB PP】后边的空白部位,在弹出的快捷菜单中选择【Create Ramp】命令,为【RGB PP】属性连接上一张【Ramp】贴图,如图2-22所示。

图2-22
20 切换到【Ramp Attributes】面板,将【Ramp】贴图颜色改为白色,此时播放动画,粒子颜色就变成白色,有利于输出到后期软件中进行调整,如图2-23所示。

图2-23
渲染输出图片
21 然后需要将做好的粒子输出成序列帧图片的格式,方法有很多种。本案例介绍运用Hardware Render Buffer算出序列帧图片的方法。这种方法与普通的硬件渲染方法相比较要快速很多,但是输出图片的质量没有硬件渲染高,因为这种方法类似于屏幕截图,只是将界面中的粒子以截图的方式输出序列帧。调整好粒子在视窗中的角度和位置,选择【Window】>【Rendering Editors】>【Hardware Render Buffer】命令,打开【Hardware Render Buffer】窗口,选择【Render】>【Attributes】命令,打开属性面板,设置输出图片序列帧名称、起始帧和结束帧、图片尺寸以及图片格式,具体参数设置如图2-24所示。

图2-24
22 参数设置好后在【Hardware Render Buffer】窗口上的菜单中选择【Render】>【Render Sequence】命令,开始输出序列帧图片,输出的图片可在工程目录设置中的【images】文本框中显示的路径中找到。
利用Fusion软件对素材进行调整和合成
23 下面需要在Fusion 5.2软件中完成,打开Fusion5.2,将输出的序列帧图片导入到工作区,先为序列帧图片添加Defocus节点,选择【Tools】>【Blur】>【Defocus】命令,将图片节点与Defocus 1节点相连接,如图2-25所示。

图2-25
24 单击工作区中的Defocus节点打开工作区右侧的属性面板,调整Defocus节点属性,如图2-26所示。

图2-26
25 然后连接上Displace节点04,在菜单栏中选择【Tools】>【Warp】>【Displace】命令,创建Displace节点,将Displace 1节点与Defocus 1节点相连接,如图2-27所示。

图2-27
26 选中Displace节点,调整其属性,具体设置参数如图2-28所示。

图2-28
27 最后调整火焰颜色,通过ColorCorrector节点调整粒子颜色,使之得到最后想要达到的效果。ColorCorrector节点是个很强大的调色节点,能够方便地调整画面暗部、中部、亮部等不同部位的色彩属性。选择【Tools】>【Color】>【ColorCorrector】命令,创建ColorCorrector节点,将Displace节点与ColorCorrector节点相连接。先进行整体的调整,修改【Gain】值和【Gamma】值,如图2-29所示。

图2-29
28 分别调整火焰暗部、中部、亮部的色彩,使之达到我们想要的效果,如图2-30所示。

图2-30
29 此时得到的就是最终效果,通过调节ColorCorrector节点,可以得到各种不同颜色的火焰效果,包括普通火焰以及各种各样的魔法火焰效果。读者可以根据实际需要自行调整相关属性,以便得到更好的效果。最终效果如图2-31所示。

图2-31
任务二 火焰人
任务背景
《小龙阿布》的动画中有一只老虎,由于它得到了一枚龙珠,所以拥有了法力,可以控制火焰。老虎的身上经常会发出熊熊大火,用它来攻击敌人。
任务要求
老虎的全身包裹在熊熊大火里面,就好像是老虎的毛发一样,随着老虎的运动而运动。产生的火焰还要照亮周围的物体。本案例中火焰要求用Sprites类型的粒子来制作,与篝火案例有所区别。
任务分析
利用三维软件Maya把老虎的三维模型变成一个面发射器,再通过面发射器发射粒子,调节粒子发射器和粒子的属性产生火焰的运动特征。粒子从老虎身上发射出来后要往上运动,所以要给粒子添加力场。
本案例的重点、难点
怎么使用Sprites类型的粒子产生火焰运动。
【素材来源】“光盘\素材\模块02\任务二\abu”
操作步骤详解
创建粒子和发射器
01 启动Maya,将状态栏中的模块改为“Dynamics”模块。选择场景中的物体,选择【Particles】>【Emit from object】命令,创建粒子发射器。选择【window】>【Outliner】命令,弹出【Outliner】窗口,更改粒子名称为“particle fire”,如图2-32所示。

图2-32
02 在【Outliner】窗口中选择“particle fire”粒子,按【Ctrl+A】组合键打开粒子的属性面板,先调整发射器的属性,切换到发射器属性面板,调整【Emitter type】为“Surface”,使粒子能从其他物体表面上发出,调整粒子数量为“2000”,然后将属性面板的滚动条向下拉,找到【Basic Emsision Speed Attributes】扩展栏,将粒子发射速度设为“0”,速度的随机值设置为“10”如图2-33和图2-34所示。

图2-33

图2-34
03 设置好发射器属性后调整粒子的属性。将属性栏的滚动条下拉到【Render Attributes】属性栏,选择发射的粒子类型,在【Particle Render Type】下拉菜单中选择“Sprites”选项,单击【Current Render Type】按钮显示出Sprites粒子的基本属性,调整属性如图2-35所示。

图2-35
04 调整粒子寿命值,在【Lifespan Attributes】扩展栏的【Lifespan Mode】下拉菜单中选择“Random range”选项,然后设置【Lifespan】值以及【Lifespan Random】值,如图2-36所示。

图2-36
给粒子设置目标物体Goal
05 然后为粒子添加Goal属性,在【Outliner】窗口中选择粒子,再按住【Ctrl】键选中场景中发射粒子的物体,再选择【Particles】>【Goal】命令,为粒子添加上Goal属性。接着切换到发射器属性面板,在【Basic Emitter Attributes】扩展栏中选中【Need Parent UV(NURBS/Poly surfaces only)】复选框。切换到粒子属性面板,在【Add Dynamic Attributes】选项栏下单击【General】按钮,弹出【Add Attributes】对话框,切换到Particle面板,按住【Ctrl】键选择面板中的“goalU”、“goalV”、“parentU”、“parentV”,单击【OK】按钮完成属性创建,如图2-37所示。

图2-37
06 这时在【Per Particle(Array)Attributes】面板中会多出“goalU”、“goalV”、“parentU”、“parentV”属性,如图2-38所示,右键单击【goalU】后边的空白部位,在弹出的快捷菜单中选择【Creating Expression...】命令,弹出【Expression Editor】对话框,为属性添加表达式。

图2-38
particle fireShape.goalU=particle fireShape. parentU;
particle fireShape.goalV=particle fireShape. parentV;
单击【Create】按钮完成添加表达式。
07 此时播放动画观察粒子效果,发现粒子只是均匀地分布在物体表面,并没有像火焰一样有一种上升的趋势,如图2-39所示。

图2-39
为粒子添加力场
08 下面需要为粒子添加力场使之有向上运动的趋势,选中粒子,在菜单栏中选择【Fields】>【Uniform】命令,为粒子添加【Uniform】力场,在【Outliner】窗口选中【Uniform】力场,打开立场的属性面板,调节力场属性,如图2-40所示。

图2-40
09 此时粒子已经有了向上运动的趋势,继续切换回粒子属性面板的【Per Particle(Array)Attributes】板块,为【Goal PP】属性连接上一张【Ramp】贴图,右键单击【Goal PP】后边的空白处,在弹出的快捷菜单中选择【Create Ramp】命令,然后在属性面板中找到【Ramp】面板,将【Ramp】贴图进行调整,如图2-41所示。

图2-41
给粒子赋予材质
10 下面为精灵粒子添加材质贴图。在菜单栏中选择【Window】>【Rendering Editors】>【Hypershade】命令,打开材质编辑器窗口,在左侧材质选择面板中选择“Lambert”材质,此时在【Hypershade】窗口的工作区域会显示Lambert材质球,在选择粒子的情况下右键单击Lambert材质球,选择【Assign Material To Selection】选项,如图2-42所示。

图2-42
11 此时已经为粒子添加上了Lambert材质。选中粒子,在粒子的属性面板中找到Lambert材质属性面板,单击在【Color】属性后的按钮,弹出【Create Render Node】对话框,在【Textures】选项卡下的【2D Textures】区域中,单击【File】为【Color】属性连接上贴图,如图2-43所示。

图2-43
12 接下来会直接切换到File节点的属性面板,单击【Image Name】后边的按钮,导入火焰的序列帧图片,选中【Use Image Sequence】复选框,这个选项的作用是在播放动画时精灵粒子显示的是序列帧动画的效果;取消选中【Use Image Sequence】复选框时,精灵粒子只显示单帧图片的效果,如图2-44所示。

图2-44
13 下拉属性面板的滚动条,找到【Color Balance】扩展栏,打开后设置火焰贴图的颜色,单击【Color Gain】调色框,弹出【Color Chooser】对话框,选择接近橘红色的颜色,单击【Accept】按钮,如图2-45所示。

图2-45
14 返回Lambert材质的属性面板,将【Common Material Attributes】扩展栏下的【Diffuse】值设置为“2”。播放动画预览下效果,如图2-46所示。

图2-46
调整粒子的大小和随机值
15 现在的效果离最终要达到的最终效果还是有很大差距的,接下来需要调整粒子的大小以及再给它一个随机旋转的值,使得火焰有更多的变化。切换回粒子属性面板,在【Add Dynamic Attributes】选项栏下单击【General】按钮,弹出【Add Attributes】对话框,切换到【Particle】选项卡,按住【Ctrl】键选择面板中的“spriteScaleXPP”、“spriteScaleYPP”、“spriteTwistPP”,单击【OK】按钮完成创建属性,如图2-47所示。

图2-47
16 右键单击【spriteTwistPP】后面的空白部位,在弹出的快捷菜单中选择【Creating Expression】命令,弹出【Expression Editor】对话框,为属性添加表达式:
particle fireShape.spriteTwistPP=rand(-10,10);
particle fireShape.spriteScaleXPP=rand(.5, 1.5)*particle fireShape.spriteScaleX;
particle fireShape.spriteScaleYPP=rand(.5, 1.5)*particle fireShape.spriteScaleXPP;
单击【Edit】按钮完成添加表达式,此时再播放时间线预览动画,发现粒子发射时已经有了一些随机的旋转角度变化,只是粒子大小还不够,需要调整粒子大小。此时无须修改表达式来调整粒子大小,只需要调整粒子属性面板中【Render Attributes】卷展栏下的【Sprite Scale X】属性,将值设置为“3”,如图2-48所示。

图2-48
调整粒子的透明度
17 再来为精灵粒子添加透明度的属性,用【Bump】贴图来控制粒子透明度,使粒子寿命结束时消失得不是那么突然。选择粒子,打开粒子的属性菜单,下拉滚动条,在【Add Dynamic Attributes】面板中单击【Opacity】选项,如图2-49所示,为粒子添加透明度属性,弹出【Particle Opacity】对话框,选中【Add Per Particle Attribute】复选框,如图2-50所示。

图2-49

图2-50
18 单击【Add Attribute】按钮完成属性添加,这时在【Per Particle(Array)Attributes】面板中会多出一个【Opacity PP】的属性,右键单击【Opacity PP】后边的空白部位,在出现的快捷菜单中选择【Create Ramp】命令,为【Opacity PP】属性连接上一张【Ramp】贴图,用黑白两种颜色来控制粒子的透明度,如图2-51所示。

图2-51
19 播放动画观察粒子,火焰的效果已经基本形成了,但是火焰并不是十分自然,因为我们为精灵粒子附上的贴图是序列帧图片,现在所有的粒子发射出来后每一帧的画面都是一样的,这就需要给这些粒子发射时的序列帧显示赋予随机值,使得粒子发射时火焰形态不那么统一。切换回粒子属性面板,在【Add Dynamic Attributes】选项栏下单击【General】按钮,弹出【Add Attributes】对话框,切换到【Particle】面板,选择【spriteNumPP】,单击【OK】按钮创建属性,右键单击【spriteNumPP】后边的空白部位,在弹出的快捷菜单中选择【Creating Expression】命令,弹出【Expression Editor】对话框,为属性添加表达式:
particle fireShape.spriteNumPP=rand(1,50);
然后在【Expression Editor】对话框中找到【Particle】选项,选择【Runtime before dynamics】,因为之前的表达式都是添加在【Creation】中,在【Runtime before dynamics】的【Expression】文本框中添加表达式:
particle fireShape.spriteNumPP+=1;
单击【Edit】按钮创建表达式。
20 播放动画预览,此时火焰表现已经自然很多了。为了使火焰更加自然,再为粒子添加一个【Turbulence】力场,在选中粒子的情况下选择【Fields】>【Turbulence】命令创建立场。在【Outliner】窗口中选择【Turbulence】力场,打开其属性面板,调整其【Turbulence Field Attributes】卷展栏下的属性如图2-52所示。

图2-52
21 在这里还可以为【Phase Y】这个属性添加表达式,使得Turbulence力场在Y轴方向上能产生随机变化来模拟火苗随机抖动的效果,在【Turbulence】属性面板中【Phase Y】的数值框中单击右键,在弹出的快捷菜单中选择【Creat New Expression】命令,打开【Expression Editor】对话框,如图2-53所示。为【Phase Y】添加表达式,输入表达式:
turbulenceField1.phaseY=-5*time;

图2-53
22 此时预览下最终效果,如图2-54所示。

图2-54