现在很多人都热衷于研究各种插件来制作某种动画效果,笔者也是如此,插件的效率的确很高,而且效果也很不错,但是它也有局限性的稳定性的问题,毕竟不是一家出的软件。所以最好的办法还是开发利用三维软件本身的功能特点来制作效果。
笔者前一阵要制作一段海水冲击海滩的效果,出于对插件的迷信,一开始就把目光集中在realflow这个流体插件上,但是经过研究和实验,发现其效果并不很理想,最后还是用Maya本身的线变形功能来完成了效果。下面就将制作过程介绍一下:
1创建一个Nurbs平面,作为海面,改名字为sea, 将细分设置为60*60,删除历史,为方便动画,请参考如下做位置,角度和缩放的调整:
Translate x: 0
Translate y: 0
Translate z: -1.302
Rotate x: 0
Rotate y: 45
Rotate z: 0
Scale x y z: 16.107
2 再创建一个Nurbs平面,作为海滩,改名字为beach, 将其角度做一下旋转,角度不要太大,具体参数可参考如下:
Translate x: -0.011
Translate y: 2
Translate z: -2.67
Rotate x: 3
Rotate y: 0
Rotate z: 0
Scale x : 19.305
Scale y : 11.089
Scale z : 11.089
之所以将海面做45度的旋转是为了以后线变形(wire deform)方便。
如图所示:
3 现在我们来创建一条曲线,将曲线的位置接近海面并与海滩平行,其离海面距离不要太远,否则线变形不起作用。
4 选择缺省命令animation\deform\wire tool,选择海面后回车,再选择曲线后回车,线变形生效。我们将曲线向上抬起,可以看到海面发生了形变。现在将曲线向海滩方向略移,产生出海浪向前冲的形态。
在这个动画里我们主要用到wire变形中的envelope和dropoff distance这两个属性, envelope 的作用是控制变形的强度,当它为零时变形的作用就消失了。Dropoff distance 的作用是控制线变形的影响范围。
现在我们将通道栏中wire 变形Outputs 打开,将Dropoff distance 设为0.5左右。如图如示:
当我们使用线变形时,maya自动创建了一个线变形基础物体curve1BaseWire,海面的形变就是由于Maya计算出curve1 和curve1BaseWire的差别,如果我们移动curve1,海面只是发生形变,但如何才能做出海浪的前推动画呢?很简单,就是要把curve1和curve1BaseWire成组,或者使用命令deform \ edit wire \ parent base wire,maya会将两个物体成组为curve1Wires。
5 下面我们来做海浪的前推的动画,将时间栏移到第1帧,调整镜头位置,选择组curve1Wires做关键帧,将时间栏移到第30帧,将curve1Wires向海滩移动4个单位左右,(视离岸远近而调整)设定关键帧,为了做出海浪消退的效果,可以在第45帧左右将线向下移动一点。选择curv1,将时间栏移到第25帧,打开通道栏中的wire1,在envelope上设关键帧,此时的值应为1,将时间栏移到第30帧,在envelope上设关键帧,值为0.4,将时间栏移到第45帧,在envelope上设关键帧,值为0.1,做出变形强度的动画,这里所有的动画均没有绝对数值,完全根据动画的感觉而定,而且要配合第6步的簇节点的动画。
6 现在我们基本做出海浪前推动画,下面的工作就是要做出海浪不规则的边缘,先播放动画当海浪接近海滩时暂停动画,选择接近海滩的几个cv点,做deform \ create clusters簇变形, 这时我们适当地将簇节点向海滩方向移动一点,就会发现原来齐整的边缘产生出一些向前的突起,如图所示,这正是我们想要的效果,我们可以适当地调整簇的权重以使边缘更自然。
8 创建一个nurbs平面,命名为spray,适当细分一些细节,将其拉长,到第1帧,移到海浪边上,如图所示:
到第30帧,也就是组curve1Wires向前移动并停止的那一帧,将spray平面向前移动到海浪与海滩相交处,设置关键帧,
9 选择spray平面,框选几个cv点,创建簇节点,选择簇节点设置关键帧,将时间栏向前移动40帧左右,将簇向前拉,最好让其变形相对与海浪的变形一致,如图所示:
10 选择这个spray平面,到deform \ particle \ emit from object,打开选项,将发射器类型改为surface,创建发射器。别忘了将这个平面设为不渲染。
打开粒子发射器,将粒子生命值改为1.1秒,将粒子渲染类型改为blobby surface,半径设为0.05,打开粒子形态节点,将粒子发射速率改为6000,将speed设为1,speed random设为0.5。
11 现在来设置关键帧,将时间栏移到32帧,将粒子发射速率设为6000,设置关键帧,移到第33帧,将粒子发射速率设为0。这样做的目地是让粒子在海浪冲刷过来时停止发射。
12 将beach面进行复制,稍稍向下移动一点,改名为beach gravity(将其设为不渲染),选择粒子节点,执行 dynamic \ fields \ gravity,给粒子加上重力,将重力值改为50, 再次选择粒子,同时选择beach gravity面执行 dynamic \ particle \ make collide,让粒子与这个面进行碰撞,将beach gravity 的反弹值和磨擦值均设为零,这样做的目地是让粒子浪花不会直接掉下去,并且能在beach面产生海浪退下去的效果。
13 播放动画,基本上这个动画就算做完了,其实这个动画的关键是海浪的制作,粒子的问题是需要反复调整各项参数之后才能最好地配合海浪的运动。
14这里只讲到基本动画的实现,对于材质的问题还需要一些工作,由于笔者水平有限,就不在这里详述了。这个教程只是介绍了一下制作思路,所有的数值均不是绝对的,具体的细节还需要根据要求反复调整。应该说maya本身的功能已经足够强大了,我们应该更多地关注maya本身,了解并掌握其强大的功能,剩下的只是一个制作方法问题了。