主题:  翻译教程---- 飘动的蜡烛火焰[推荐]

hw3d

职务:普通成员
等级:1
金币:0.0
发贴:27
#12002/6/18 12:20:56
飘动的蜡烛火焰

翻译:hw3d

要建立一个真实的蜡烛火焰,首先要干的呢,当然是点一支蜡烛了。然后我们要做的就是建立很有动感和质感 的火焰外形。用maya的专业术语来说就是,这个火焰呢,看起来要比用成千上万的粒子做出来的星云更加明亮。火焰呢,要对它的硬边进行柔化,而且呢,要一个过渡非常平滑的内部,好似于流体和丝织品的柔滑,更多的明度变化。

图片如下:
[upload=jpg]

在这个观察的基础上,我们打算用柔体来建立这个动画。这个技术呢,包括两个阶段:怎样建立动画和渲染。再者呢,我们的焦点不在是怎么建立火焰,它可以是壁炉里的火,篝火,当然也可以是一个火球。它们的效果大多来自maya的粒子系统,比用几何体的时间多得多。我们呢想联合这两种方法,用大量的粒子去建立一个iso表面,当然你也可以用流体动力来实现这个功能,这个功能在maya4.5里面有,但是在这里我们不用。或者像pdi工作室专门写一个这样的插件,就好像《恐龙》中的那个大火球,但在这里,我觉得不需要。
这个例子中我们将作几个单独的假设,就是你已经知道这个软件的知识,换句话说,就是这个例子更适合于高级用户。我尽可能将这个例子说得更短。我们将选择建模,柔体,目标,弹性,场,灯光,超级阴影,渲染工具,编辑联结和辉光。
(1)建立一个火焰的模型,重要的是要知道火焰的UV点距离要一样,如果是一个多边形的表面,UV点要清晰,去掉多余的点,以便使color ramps能够很光滑的粘到表面上,我的方法是建立一条nurbs线,然后将其旋转.然后将它转换成一个柔体,但是一定要有足够多的顶点来获得光滑的动力变形.
(2)将火焰转化成柔体然后设计它的动作形态.选择这个火焰,打开:"Creat Softbody"的对话模型,选择:Duplicate Make Copy Soft,HIde Original,Make non-soft a goal,然后设weight value为1,在这个时候柔体的粒子根本不会做任何移动,除非目标发生移动,因为它们的 goalPP vaalues为1,而goalweight value 也是1.
(3)用component Editor设置goalPP values 以便这个粒子能紧紧围绕灯芯移动,这时就要将goalPP values 设得高一点,如0.8,那么其它的就要设得低一点,如:0.2.
(4)增加一个紊乱场,用较小的频率和动态的相位,在这个值上火焰在goalPP从0.8变到0.2时会出现撕裂的现象.
(5)增加一个spring给柔体一个流动性.就好像布一样.在这个对话框中设wireframe为2.0.现在你就将开始调试
紊乱场的magnitude, frequency, phase 和spring 的stiffness 和 damping.

图片如下:

完成这段动画后,我们的焦点马上转向如何渲染.在明亮度,颜色,透明度和边缘的质量方面要给予特别的观注.火焰的颜色在底部往往趋向于蓝色,而到了火焰的顶部带一点橙色,有时间是一点红色.这个用ramp贴图很容易就可以做到.一个火焰在它的中间部分,是最亮的.这可以打开material中的translucency(半透明).但相比这下,透明的设置可能会有一些难度.蜡烛的火焰中间的比边缘的更加透明,在它的底部也是一样的.
首先,将color ramp 作为火焰的颜色.增加透明度的值,给poit light一个适当的颜色,强度和衰减用在柔体的中部,如果你想让pointlight和火焰一起移动,那么可以将particleShape的worldcentroid连接到point light的变换矢量.如果你的point light需要投射阴影的话,那么一定要记住将打开火焰的 casts shadows 哦.
好了,现在该轮到了透明度的设置了,这可是很重要部分啊,一定要搞清楚.

图片如下:



以上我们看到6种不同的形态的火焰的表面,它是用不同的透明度控制方法而设定的,每种都是用lambert和一个白色的表面组成,折射呢是关掉的.
(A)没有透明度的时候
(B)透明度设成50%的灰色,;这是maya透明度的默认算法,当透明度越接近白色,那么表面透明将会越均匀.
(C)透明度直接用一个取样节点对表面比率进行控制.
(D)透明度用一个被驱动关联来对表面比率进行控制(其中Sampler info vtility 作为驱动)
(E)透明度直接用ramp来控制.
(F)透明度用多层的ramp,将驱动帧曲线和sampler info vtility作为一个关联(将sample info vtility作为驱动.当然也可以将facing ratio曲线连在一个直接接在透明度上的ramp的color gain.
渲染节点的神密点在于可以减少文档的数量,这适合于很大的范围.在这一点上,sampler info vtility完全不同于particle Sampler vtility.
对于Sampler info vitily(siv)有许多的属性,在它的"float"中的一个叫" facing ratio",这个属性值介于0到1这间,它决定一个摄像机在表面上的法线比率.在这时,如果法线指向摄影机的话,它的值1将被返回.当法线垂直于摄影机的视线时,这时它的值是0.用connection editor 来连接output中的siv到透明度的vector上,我们将获得一个线性关系在透明度和facing ratio之间.

图片如下:

在上面我们看到用hypershade编辑的最后结果,c的效果就是这样设置的。如果你想得到相反的效果,那么在它的边缘将会变得透明,或者是想得到一个像 d那样的戏剧变化效果。

图片如下:

在上面我们创建了一个驱动关联,将facing ratio作为 驱动,而将透明度的r,g,b值作为被驱动。用这个方法,我们可以用曲线在graph editor对渐变进行控制。这个的窍门就在于,当你在将驱动和被驱动载入set driven window的时候要设置关键帧,以便创建一个关联曲线,你将不需要设置其它的关键帧。这是因为你不可以用手改变facing ratio,因些,你应该在3个曲线内结束当你先择了材质节点的时候,但是每条曲线,只能够拥有一个在0,0的关键帧。在这点上你需要用手增加帧在每条曲线上,以使每条曲线至少有两个关键帧,就是在0,0和1,1之间。一旦你用这种方法表示了,就需要打开切线的权值,解开关键帧的切线属性,修改
切线来控制透明度的渐变。用这种方法可以完成像d面的结果。

图片如下:


最后一步是,不仅是要使火焰的边缘的透明度小于中心的,而且下面的部分,要小于上面的。要完成这个,先打开开始建立的驱动关联,从output中断开sdk曲线和材质的连接,然后创建一个ramp 和divide vitility.连接ramps的color output到多层节点的input 中,再连接sdk 曲线到input two. 然后将多层节点的output联到透明材质.如果你愿意的话,连接sdk曲线到ramp节点上,这样可以避免使用多层节点。

图片如下:

在这个过程的最后,我们将加上辉光,以得到更加真实的效果。从上面我们可以看到加上了辉光后的效果。最左边的那副图没有辉光,但是透明度是很明显的。一但"grow"打开过后,我们的几何体也保留了下来,但这是可以选择的,当打开"Hide source"后,真实的几何体将不被渲染, 用这种极好的技术,运用类似的工作流程,甚至可以完全创出幽灵的似的神奇效果.
当"grow"被打开后,最重要的还是shader grow的节点问题.在multilister/hyperhader 中,一个shader看起来好像与许多其它材质的 shader grow都是相同的,你如果想要在不同的场景中得到不同的效果的话,就要用 进行渲染,此外还要很多的属性可以改变光的效果,其中的一个叫"Threhold",在上面右边三个图形中的threhole的值分为:0,0.08,0.04.Threshold
clip的亮度值对于要获得想要的辉光是非常有帮助的,另外一个重要的设置是关闭 Auto Exposure,这个可以获得光闪烁的效果。


另外一个要提的是要创建的是火焰的surface's color,而不是incandecance.这是因为我们通过translucency来使火焰变得亮起来,如果你需要使用incandecance的话,如果你使用了incandecance的话,要记住在透明的区域会变得很亮,所以你可以使用siv来用incandecence,倒传它的值,如图所示:

图片如下:


我们用上面这个图来确定火焰的亮度,用相同的siv sdk曲线来设置incandecence和 transparency,不过在siv sdk和incandecence的中间使用一个Reverse utility.

编辑历史:[这消息被hw3d编辑过(编辑时间2002-06-18 12:23:49)]
[这消息被hw3d编辑过(编辑时间2002-06-18 12:31:48)]
[这消息被hw3d编辑过(编辑时间2002-06-18 12:36:47)]


LS

职务:管理员
等级:12
金币:30.8
发贴:8074
#22002/6/18 22:48:51
非常棒!
转到5D网站可以吗?
期待更多的好东西。


5D艺术网站长。

5DJSP技术版主

职务:版主
等级:2
金币:10.0
发贴:436
#32002/6/19 0:00:15
哈哈 好文章 好文章