第四节 烟雾的制作
Sprite(精灵)粒子最简单的属性能够产生的效果在前两节已经学过了,这一节就是用常用属性制作常用特效烟雾。
使用Cloud粒子也可以制作烟雾,但是与使用Sprite(精灵)粒子制作烟雾产生的效果是不一样的,这一点我们可以在制作完毕Sprite(精灵)粒子烟雾以后将粒子类型改变成Cloud来了解其中的区别。
要制作出烟雾,首先要制作烟雾的图片序列,当然可以从素材库里找到,但是这里我们还是自己制作:
首先在场景里面创建一个球体,我们将使用这个球体制作烟雾的贴图元素:
为球体添加一个新的lambert材质,然后将透明度调整到最高,使球体彻底透明:
然后为材质的Incandescence进行贴图,使用Maya的三维程序文理Cloud纹理:
Incandescence贴图:
将Cloud纹理的参数作如下图的调整,进行渲染测试:
粒子要贴的图像元素大致图像效果差不多了,接下来就是让它变成动画了,方法很简单,只需要动画3d纹理的纹理坐标就可以了:
然后把摄影机正对着纹理坐标前进的方向,渲染得到烟雾的元素序列:
将渲染器的渲染尺寸设置成为64*64:
最后渲染得到100张的图片序列,但是我们制作贴图的图片序列使用的是材质的Incandescence进行贴图,所以是没有通道信息的,这样直接贴图到Sprite粒子上面是不会产生应有的透明的。所以我们使用后期软件制作图片序列的通道。
我们使用AdobeAfterEffect来制作通道,先倒入图片序列:
将图片序列倒入以后,创建一个图层轨道。
创建通道的方法是使用SetMate来制作,首先复制一层轨道,然后命名为:通道层。
接下来选择图片序列,使用菜单命令:Effect→channel→setmate为图片序列制造通道,将该特效参数进行如下设置:
这样图片序列的通道就使用了自身的亮度(Luminance)信息,接下来隐藏掉“通道层”,于是有通道的图片序列制作好了:
颜色:
通道:
接下来就是将轨道上的内容输出成为含有通道的图片序列(使用Tga格式),使用菜单命令Composition→MakeMove:
于是,烟雾的贴图元素制作完成了。接下去回到Maya中,我们制作一个需要用到烟雾的场景,这里制作一个车轮,快速的旋转摩擦土地就会需要制作产生烟雾了:
接下来,既然是轮子摩擦地面发出烟雾,那么就在轮子和地面交界处创建一个粒子发射器来产生粒子,然后使用力场和表达式控制粒子制作出烟雾来就可以了。
所以首先还是使用菜单命令:Particles→CreateEmiter在轮子和地面交界处创建一个粒子发射器:
使用体积发射器:
体积类型为Cylinder:
发射器发射速度属性设置如下:
在场景里如图放置粒子发射器:
车轮这就发出摩擦时的烟雾了,接下来用力场控制粒子的运动产生烟雾的运动。
烟雾在摩擦时发出来,然后向车轮的反方向运动,并向上飘起来,所以使用力场Uniform(统一场)来制作粒子向上的运动是最好的,所以选中发射出来的粒子,使用菜单命令Fields→Uniform创建一个统一场(Uniform):
接下来将粒子的生命周期调整到合适大小:
增加粒子发射器的发射量(Rate到合适的数值:)
于是,烟雾粒子的运动状态如下:
这似乎有一点过于有规律了,灰尘的质量并不是都一样的,受力情况也是不一样的,同时车轮后面是有乱流的,所以气流也会有混乱。
所以我们模仿真实情况,将粒子的质量(mass)设置成为各不相同,为粒子的mass属性添加Creation表达式:
particleShape1.mass=rand(0,1);//每一个粒子的质量都是一个0~1之间的随机数,这样质量不同,受到相同的力,速度就会不一样,所以效果如下:
接下来模仿车轮后面的乱流,使用一个混乱场就可以了,所以选择粒子使用菜单命令Fields→Turblence为粒子创建一个乱流:
总体的运动差不多了:
接下去就是制作烟雾了,首先当然是把粒子类型转换成Sprite类型,然后为粒子赋予Lambert材质,并给Color属性一个文件纹理贴图,使用上一节的知识我们很容易制作出使用循环动画贴图的Sprite(精灵)粒子。
首先将粒子属性改为Sprite类型:
接下来给Sprite粒子一个新的Lambert材质,同时给Color属性一个文件纹理贴图使用烟雾贴图序列的第一张(名字是Smoke.0000.iff):
利用上一节学过的知识,很容易就可以将我们前面制作的烟雾的图片序列进行循环贴图到Sprite粒子上面。
使用UseImsgeSequence,并设置关键帧如下图,同时启动粒子贴图缓存(UseInteractiveCathing)并且进行设置如下:
启动贴图序列:
经过上面的设置可以确定贴图已经循环了,然而现在的烟雾实在是惨不忍睹,所以接下来一步步的把这个很恶心的东西变成我们想要的烟雾。
首先当然是改变粒子的大小了,烟雾从车轮子下面出来的时候是很小很浓密的,随之会逐渐变得面积很大颜色很淡,位置当然也属越来越高,最后淡到看不见为止,粒子的运动我们已经做好了。现在先做大小变化,当然还是添加spriteScaleYPP粒子属性和.spriteScaleXPP属性了:
这两个属性分别控制了粒子在X和Y轴上的缩放比例的大小,我们需要粒子在生命周期开始的时候很小,在生命周期即将结束的时候变得最大,所以只需要为这两个属性创建Ramp控制就可以了。为了方便期间我们可以为两个属性使用同一个Ramp因为我们并不需要分别控制两个方向的大小,只要一样就可以了。
先为spriteScaleXPP属性添加Ramp控制,然后再Hapershade里面显示粒子的输入和输出节点,然后找到ArryMaper节点,用鼠标中键托放到粒子上面选择defult,默认的会自动打开ConnectionEditor:
在弹出的ConnectionEditor里面连接OutValuePP和SpriteScaleYpp:
这样我们就是用一个Ramp控制了两个属性,操作起来就很方便了,我们将Ramp进行如下调整:
粒子变得从小到大了,但是小的太小,大的太大,所以进一步我们要调整最大值和最小值:
选择粒子,在spriteScaleYPP粒子属性或者spriteScaleXPP属性上面用鼠标右键单击,在弹出菜单里面选择EditArrayMapper:
然后对参数进行如下调整:
可以自己随意调整觉得合适的参数,直到觉得粒子的大小满意为止:
浓烟滚滚,这个效果显得比较夸张,接下来就进入了细节调整阶段,首先是透明度的控制,因为我们认为这个烟太浓密了,根本就没有办法看出我们辛苦制作的烟雾贴图的细节效果来,所以为粒子添加OpacityPP属性,然后使用ramp控制粒子的透明,在生命周期里进行改变,还是使用默认创建就可以了。
添加OpacityPP属性:
创建Ramp控制:
调整Ramp结构:
通过对透明的控制产生了足够的透明感,但是烟雾还是黑色的,看来,仅仅使用透明属性是不够用的,这里想做的烟雾并不是黑烟,需要将黑色烟雾变成白色的,所以就需要使用rbgPP粒子属性了。
很简单的为粒子添加颜色rbgPP属性,然后为粒子rbgPP属性添加ramp控制,将控制颜色的Ramp颜色结构调整为上下全部是白色,当然如果读者有兴趣可以调整为不同的颜色以产生不同时间产生的不同颜色:
添加rgbPP属性:
创建Ramp控制:
调整Ramp的颜色结构为全部白色:
得到效果:
到此为止,烟雾似乎已经可以了,但是细节还是不够,因为每一个sprite粒子的旋转角度都是一样的,这样产生的烟雾在细节上还是会有规律可查,接下来我们将最后的规律也打破,为粒子添加spriteTwistPP粒子属性,这个属性控制了每一个粒子的旋转角度,我们让粒子在生命周期中随机旋转,每一个旋转的角度和速度都不相同,这样就更增加了烟雾的随机性:
为粒子添加spriteTwistPP粒子属性:
为了产生想要的随机旋转,不同速度,我们需要一个自定义的粒子PerParticles的属性,我们取名为rate:
接下来是使用表达式产生每个粒子烟雾都有不同的旋转速度和角度:
首先是在粒子出显的一瞬间要给粒子的spriteTwistPP属性一个360°的随机值,使用Creation表达式:particleShape1.spriteTwistPP=rand(360);就可以了。
接下来运动的时候粒子要继续旋转,只需要一个Runtime表达式来为spriteTwistPP属性的值,每一帧加上一个数值就可以了:particleShape1.spriteTwistPP+=rate;只要rate每个粒子都不一样,那么粒子旋转的速度就不一样了。
所以我们为粒子创建的粒子属性rate就是用在这里的,为rate属性添加一个Creation表达式:particleShape1.rate=rand(2);于是每一个粒子都有了一个不同的rate。
为粒子spriteTwistPP属性添加一个Runtime表达式:
particleShape1.spriteTwistPP+=particleShape1.rate;//粒子的spriteTwistPP属性每一阵都增加rand(2)的大小产生不同的旋转速度和角度。
最后进一步调整透明的ramp控制结构,直到满意为止,所有的细节差不多就制作完成了:
Creation表达式:
RunTime表达式:
最终效果:
如果还是感觉粒子的贴图边缘太过于明显的话,可以在纹理节点里面对AlphaGain属性进行进行修改:
这个属性可以控制粒子通道的边缘柔和程度。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。