3DMAX中表达式动画的控制方法 黄忠良 2001年 12期 #1 编者按:    表达式是三维动画软件3DMAX最强大的功能之一,它采用面向对象的设计方法,可方便地建立与改变模型与动画的设计,可建立完全参数化的动画。正确掌握表达式的用法能明显改善动画效果,大大提高动画设计效率。本文举例全面说明表达式控制器的使用,希望大家能举一反三,让3DMAX物尽其用。    在3DMAX中,对象生成动画都需要在运动轨迹上设置关键帧,由系统自动计算所有帧间的动画数据。然而我们也可通过表达式来控制动画效果,使用起来非常灵活,且表达式可以文件形式保存,在需要的地方可重复使用。下面通过设计一个乒乓球下落的动画来说明表达式控制器的用法。   #1 一、建立场景    在前视图中建立下列模型:一个平板P1(长、宽、高分别为40、800、400),作小球弹跳用,板上方球体S1(半径为50)及虚拟物体D1,在此虚拟物体作为乒乓球起始位置,将它移动到板的正上方,效果如图1(^12020705a^)。   #1 二、建立表达式控制器    选中球体,单击Motion面板,单击并展开Assign Controller按钮,如图2(^12020705b^)。    选中Position项,单击左上方Assign Controller按钮。    在弹出的对话框中单击Position Expression项,单击OK,这样就为球体指定了表达式控制器,接着再设置具体的表达式。   #1 三、建立位置控制器    下面我们分别为虚拟物体D1、平板P1建立位置控制器Dpos、Ppos。所谓位置控制器,实质上是代表某对象位置的一个矢量。选中小球,再次进入图2,单击鼠标右键,选Properties,则进入表达式控制对话框,如图3(^12020705c^)。    右上角括号中的坐标表示小球当前位置,在Name右边的文本框中,键入Dpos,单击Vector,再单击Create按钮,在Vectors列表框中可看到已建立的Dpos矢量,单击对话框底下的Assign to Controlle按钮,在打开的Track view pick对话框中单击“+”号展开Object项,选D1下的Position,如图4(^12020705d^),单击OK。重回到图3,为平板建立位置控制器Ppos,并指定给P1下的Position。   #1 四、为球体建立表达式    1.球体上下运动表达式    在图3的表达式区域中,改变表达式为Dpos.x,Dpos.y,cos(360×NT)×(Dpos.z-Ppos.z)+Ppos.z,该表达式中NT为系统变量,在动画过程中随时间从0~1线性变化,使用cos函数,使球体在活动时间段内以平板为基准完成一个上下运动。播放动画,从效果来看,上半部接近重力效果,而下半部运动不正常。小球撞击平板后应快速上跳,为此将表达式取绝对值,同时将周期缩短一半,这样表达式改为:    Dpos(x,Dpos.y,abs(cos(180×NT))×(Dpos.z-Ppos.z)+Ppos.z    现在看起来,小球动作好多了。    2.设定动画时间段跳动10次    Dpos(x,Dpos.y,abs(cos(180×NT×10))×(Dpos.z-Ppos.z)+Ppos.z    3.设置跳动衰减    球跳动的过程是逐渐衰减的过程,为此加入幅值衰减因子1-NT,表达式成为:    Dpos(x,Dpos.y,(1-NT)×abs(cos(180×NT×10))×(Dpos.z-Ppos.z)+Ppos.z    4.改变跳动时间间隔    当跳动高度渐小时,跳动时间间隔也应越来越小,为此引入指数衰减函数pow(NT,2),单击图3中的functionList按钮查看其功能。最后的表达式为:    Dpos(x,Dpos.y,(1-NT)×abs(cos(180×pow(NT,2)×10))×(Dpos.z-Ppos.z)+Ppos.z    这样,一幅小球从高处下落的逼真动画就设计成了,如果在表达式最后将小球半径因素考虑进去,则动作更为完美。