3D MAX神奇的Expression控制器 魏启明 1999年 第42期 38版   Autodesk公司的3D MAX是一套功能强大的动画制作软件,让你在普通PC上就能做出工作站级的三维效果。它的Expression控制器是一个由用户自己定义数学表达式来决定它的输出的动画制作工具,几乎可应用于所有的动画参数。利用它可以很容易地做出一些用定义关键帧很难或根本不能想象的动画效果。 下面我们就用一个简单的例子来学习这个功能强大的控制器。在这个实例中,我们将制作一个简易的汽车模型,然后给汽车的车身赋予一个Expression控制器,让它在Z轴上的旋转受汽车方向盘的控制,产生用方向盘控制汽车前进方向的动画效果。由于主要是为了学习Expression控制器,所以本例中的汽车模型就用一个抽象的立方体来代替。   打开3D MAX,在TOP视窗中新建一个Length值为150,Width值为80,Height值为40的立方体BOX01作为车体,再生成一个Radius1值为30,Radius2值为2的圆环Torus1。单击工具行中的Align钮,在TOP视窗中点取刚生成的车身BOX01,在弹出的对话框中选取Align Position\x Position;Current Object\Center;Terget Object\Center等选项;单击OK退出。击活Left视窗,在Left视窗中生成一个R值为2,Height值为30的圆柱体Cylinder01,单击工具行中的Align钮,在TOP视窗中点取刚生成的圆环,在弹出的对话框中选取Align Position\x Position,Y Position,Z Position;Current Object\Pivot Point,Terget Object\Pivot Point等选项,并单击OK退出。选取圆柱体Cylinder01,单击工具行中的Select and Rotate钮,单击工具行中的Restrict to Z钮,再单击视窗底部的Angle Snap Toggle钮,再在TOP视窗中按住键盘上的Shift键旋转圆柱体120度,在随后弹出的Clone Options对话框中选取Object\instance,设置Number值为2,单击OK退出。 选中圆柱体Cylinder01,按住键盘上的Ctrl键,选取另外的两个圆柱体Cylinder02、Cylinder03,单击工具行中的Select and Link钮,在任意视窗中使这三个圆柱与圆环连结,在TOP视窗中生成一个Radius值为2,Height值为-40的圆柱体Cylinder04,单击工具行中的Align钮,在TOP视窗中点取圆环Torus01,在弹出的对话框中选取Align Position\x Position,Y Position;Current Object\Center;Terget Object\Pivot Point;单击OK退出。选取圆柱体Cylinder04,单击工具行中的Select and Link钮,在任意视窗中使圆柱体Cylinder04与圆环连结。   选取圆环,单击工具行中的Select and Move钮,再单击工具行中的Restrict to Y钮,在Front视窗中将圆环向上移动到方向盘的支撑轴Cylinder04没有露出车身的位置,在TOP视窗中将方向盘移动到车身1/3的位置。 单击工具行中的Select and Rotation钮,再单击工具行中的Restrict to X钮,在TOP视窗中将圆环旋转大约30度,单击工具行中的Select and Link钮,在任意视窗中与车身BOX01连结。现在我们已经制作了一个简单的汽车模型(^423801a^1)。 下面我们将分别给汽车方向盘和车身指定相应的动画控制器。单击工具行中的Track View钮,弹出Track View编辑窗口,为了排除一些视觉上的干扰,我们隐藏一些不需要的项目。   单击左上角的Filter钮,设置如^423801b^2,单击OK退出。   在Track View的层级窗口中,选取Torus01\Transform\Rotation:TCB Rotation选项,单击工具行中的Assign Controllers钮,在弹出的对话框中选取Euler XYZ,单击OK退出。在层级窗口中选取Box01\Transform\Rotation:TCB Rotation,单击工具行中的Assign Controllers钮,再选取Euler XYZ,单击OK退出。   这样做的目的,是为了获取可存取单个坐标轴的控制器Euler XYZ。在层级窗口中展开Box01\Transform\Rotation:TCB Rotation\Euler XYZ,选取Z Rotation\Bezier Float,单击Assign Controllers钮,选取Float Expression,单击OK退出。   在层级窗口中选取Box01\Transform\Rotation:Euler XYZ/Z;Rotation:Float Expression,单击鼠标右键,选取Properties项,弹出如^423801c^3所示的Expression控制器的属性编辑窗口。   在Expression控制器中有两种变量可供使用,第一种是标量(Scaler),另一种是向量(Vector)。在CreateVariables\Name中输入变量名,然后指定它是标量还是向量,单击Creat钮,变量名就出现在相应的区域中。如果它是标量,则初始值为0;如果它是向量,则初始值为[0,0,0]。在下面的两个按钮中,Assign to Constant钮赋予变量一个定值,Assign to Controller将把一个与变量值匹配的控制器输出值赋予变量,单击该钮后,弹出Track View Pick对话框,如果控制器输出数据类型与变量类型匹配,则相应的控制器用深色显示。Tick Offset参数指定变量的时间偏移量值,其值可正可负。Expression区域用于输入数学表达式;Description区域则可输入对该表达式的描述,下面区域是列出的能被Expression控制器调用的数学函数和Expression控制器的保留字,这几个保留字不能作为变量名(除此之外,还有e、pi、TPS不能作变量名,e表示常量变2.718...,pi表示常量3.1415...,TPS表示每秒的tick数4800)。指定了相应函数后,单击Evaluate钮最后求值,如果表达式有错误,将弹出相应的警告框。   下面我们为车身指定一个具体的Expression值。在Creat Variables Name中输入a,选取Scalar项,在Tick Offset中输入“-480”(这将使其旋转滞后3帧),单击Create,再单击Assign to Controller,在弹出的Track View Pick中选取Torus01\Transform\Rotation:Euler XYZ/Z选项和Rotation:Bezier Float选项,单击OK,在Expression编辑窗中输入a/4,单击Evaluate。现在我们已经完成了整个Expression控制器的设置。   关闭Track View编辑窗口,选取圆环Torus01,单击工具行中的Select and Rotate钮,将坐标系锁定为Local坐标系,单击工具行中的Restrict to Z钮,在Top视窗中旋转圆环,你将看到除了圆环旋转外BOX01也跟着旋转。如果最后在Z轴为圆环的旋转指定一段动画,而为车身BOX01在Y轴的位移指定一段动画,你就会看到,车子在前进的同时,随着圆环在Z轴的旋转而旋转,车身的转速是圆环转速的1/4,且旋转滞后3帧。你也可以试将a/4改为a/2或别的函数来检验效果。   Expression的功能实在非常强大,用好了它许多问题都会迎刃而解。