用表达式控制器制作视觉残像 视觉“残像”(一) 我们在许多科幻电影中都可看到一些物体或人在高速运动时会在身后留下几个残像。这样的效果直接加强了人或物体的运动视觉效果,如高达F-91中决战的场景。试想,如果在制作两个角色的战斗场景,一方的动作带有残像,在另对方还未做出反映时出招将对手解决,随后在对手痛苦的喘气声中主角摆出胜利姿势。 当然我们要首先认清运动模糊与视觉残像之间的区别,运动模糊一般是指由于物体在运动时速度致使我们无法看清他的实际形态,比如下雨时的雨滴,我们一般会使用运动模糊,而视觉残像虽然也是在运动中产生的但他却可以清楚的看到物体的结果和轮廓,是一种经过夸张的艺术效果,他会更加突出角色的运动时速度感和视觉效果。 现在,我们使用视觉残像的一种效果来制作一个简单的例子,但这并不是使用video post的渲染合成,而是直接用模型来制作残像,这样的好处是大大的加快渲染速度,并且模型还会提供更加可靠的操控手段。稍后还后介绍另一种残像效果更加突出的制作方法,当然步骤也这个要复杂。 现在让我们重新打开max,制作或选择一个将要产生残像的物体,为了方便,我选择了一个标准的球体来做这个场景。接下来,我们将会用到max的表达式来控制残像物体的运动方式。 选择好物体后打开track view面版,在objects层级下会看到一个物体被选中了,由于我生成的是一个球体,所以物体的名字会显示Sphere01。现在我们并没有对Sphere01做过任何操作,因此他现在只包含两个子层级,Transform和Object,前一个会纪录物体的位移、旋转、放缩,后面的记录了物体的原始参数,包括半径、片断数、圆滑组等等。稍后,我们的主要工作将主要在Transform层级中完成。 那么,如何来制作残像呢?要知道,所谓残像只是艺术加工的一种产物,并不是实际存在的,可我们可以假定他的存在,并且还可以随意控制他的数目。 现在我们假定要使物体Sphere01运动,在他身后要产生2个残像效果。 复制Sphere01两次,系统默认的物体名称暂时不要改动。 由于我们要用到表达式来控制球体的位移,所以现在要将Sphere01和Sphere02的Position位移项里的三个可控轴X、Y、Z分离出来单独操作。 单击Sphere01的Position,点击assign controller弹出assign position controller对话框,max默认的选项是Bezier Position,不要管他,选择Position XYZ,单击OK退出。 此时,在Sphere01的位移项下面多出了三个子层级,他们将联合另两个球体的运动。 用同样的方法将Sphere02的XYZ位移层级分离出来。并且单独赋予表达式。 选择Sphere02的X Position,再次单击assign controller,此时弹出的是assign float controller对话框。放弃默认选项,选择float Expression,单击OK。这是会出现表达式的编写控制面版。 在Create Variables下面现输入一个变量名称posx,点选Scala项,按Create键。这样,就在Scalars下面生成一个叫posx的标量,下面的两个按键也同时被激活。 选择右面的assign to Controller,在选择Sphere01的X Position,单击OK。 现在,Sphere02和Sohere01的X Position已经产生了关联,我们还要赋予一段表达式来指定它们以何种方式关联运动。 现在,在对话框右侧的Expression下面输入posx*1。 posx既是刚才产生的标量,*1表明Sphere02将和Sphere01在X轴的运动相同。 单击Evaluate运行该表达式,如果书写有错误,将会弹出报警信息。完成后选close关闭控制器。 下面将Sphere02的X、Z轴与Sphere01的X、Z轴产生关联。 选择Sphere02的Y Position,将控制方式选为float expression,按OK键。生成变量posy,单击assign to controller,选择与他对应的Sphere01的Y Position。在右面的表达式栏中输入posy*1。点击evaluate运行并单击close退出。 选择Sphere02的Z Position,将控制方式选为float expression,按OK键。生成变量posz,单击assign to controller,选择与他对应的Sphere01的Z Position。在右面的表达式栏中输入posz*1。点击evaluate运行并单击close退出。 现在在视窗中选择Sphere01m,并托动。会发现Sphere02的位置与Sphere01重叠,并没有残像效果。这是因为Sphere02的运动时间和Sphere01是相同的因此造成了重叠。我们可以根据需要调节Sphere02在运动时的延迟时间。 分别在Sphere02的XYZ表达式控制对话框中的tick offset中输入-600。这表明Sphere02将比Sphere01的运动延迟1/8秒。 现在在试试结果,Sphere01在运动时Sphere02便尾随其后。现在打开动画开关将当前桢调为30,将Sphere01移动10个单位,在调整当前桢为50,将Sphere01在继续移动20个单位。播放动画,两个球体之间的距离将随速度的改变而改变。 在将Sphere01复制一个Sphere03,用同样的方法是他与Sphere02关联,并调大运动延迟时间。在观看动画试试。 MAX s cript(3ds max脚本语言) 和许多应用程序一样,3DS Max也有自己的脚本语言MAX s cript,所谓脚本语言,即在应用程序中由用户根据由应用程序以供的命令集,自己编写的程序段,用来简化程序的操作过程或对应用程序进行扩展。如Word中的VBA程序、PhotoShop中的Action等都属此类。这样的程序给用户提供了更多的想象空间,也是高级用户的必修课。表达式控制器和MAXs cript的基本结构和VB类似,但由于3DSMax是图形程序,所以在MAX s cript中有许多绘制图形的命令,这些命令类似于AUTOCAD中的LISP文件命令。这样的命令不需要编辑,可直接在程序中运行,并可直接看到运行结果。 3DS Max 3.X版本中添加了一个新菜单——MAX s cript,在这个菜单中有一个记录宏(Macro Recorder)选中这一项,在以后绘制图形时,每一步的操作都会自动转化成脚本语言,打开同一菜单下的脚本记录(MAX s cript Listener),可以看到每一步操作的命令形式,通过这种方法可以初步了解MAXs cript的基本格式,也可以通过复制命令简化编程步骤。下面以一个简单的实例说明之。 1、打开记录宏命令,打开脚本记录。 2、在任意窗口划一直线和一个球体。 3、为球体制定位置控制器为路径,选择直线作为运动路径。 4、打开动画记录按钮,将时间调到100帧。 5、将球体在路径中位置调到50(%Along Path),关闭动画记录按钮。 下面是相应的脚本语言: line transformmatrix3 [1,0,0] [0,0,1] [0,-1,0] [4.42805,-1.45167e-007,3.32103]) isSelected:on Sphere radius:13.0567 smooth:on segs:32 chop:0 slice:off sliceFrom:0 sliceTo:0 transformmatrix3 [1,0,0] [0,0,1] [0,-1,0] [86.7159,-3.25819e-006,74.5387]) isSelected:on select $Sphere01 $.pos.controller = path () $.pos.controller.path = $Line01 max tool animmode set animate on sliderTime = 100f select $Sphere01 $.pos.controller.percent = 50 max tool animmode set animate off 现欲使球体前50帧运动1/4路程,后50帧运动3/4路程。则根据上面记录编写程序如下(其中绘制物体的过程省略): max tool animmode set animate on "开启动画记录 for t=1 to 100 by 1 do at time t "设置动画范围从1? 0 ( $Sphere01.pos.controller = path () "指定路径控制器 $Sphere01.pos.controller.path = $line01 "选择路径 if t$#@60;50 then "当在50帧以内时 ( $Sphere01.pos.controller.percent =t/2 "路程为0到25% ) if t$#@62;=50 then "当在50帧以后时 ( $Sphere01.pos.controller.percent =t*75/50-50 "路程为25%到100% ) ) max tool animmode set animate off "关闭动画记录 这样就完成了一个简单的脚本语言的编制。可见通过这种方法编制脚本语言是一种简便快捷的好方法。另外脚本语言中还有很多函数,可通过相关资料查询其用法,这里就不再赘述了。 下面讲一点MAXs cript在应用方面的技巧:
1、用MAXs cript控制布尔运算 先生成一子弹状物体起名bullet,再生成一与其等直径圆柱和一个立方体,调整子弹头部指向x轴合颍渲嵝脑谧拥痻轴最小值处,立方体和圆柱体轴心在x最大值处,对齐立方体和圆柱体轴心,(注意在使用MAXs cript时轴心的位置非常重要),关联复制立方体和圆柱体,复制后的物体分别起名为box、bar(圆柱体),将复制后的物体移开便于观察,对原物体进行布尔运算,这是通过对复制后的物体进行控制即可控制布尔物体。下面的程序通过控制圆柱体的高度来控制子弹在立方体上打孔的深度。(在此为简化程序未考虑加减速问题,有兴趣的读者可加以补充) animate on for t=1 to 100 by 1 do at time t ( $bullet.pos.x=3000-10*t "子弹匀速向x轴负向运动 if $bullet.pos.x-$box.pos.x$#@62;=0 then ( $bar.height=0 "当子弹未接触到立方体时洞深为0 ) if $bullet.pos.x-$box.pos.x$#@60;0 then ( $bar.height = $box.pos.x-$bullet.pos.x "当子弹未接触到立方体时洞深 为子弹头距立方体右边的距离 if $bar.height$#@62;250 then "圆柱体高度即洞深不超过立方 体厚度 ( $bar.height=250 ) ) ) animate off 2、MAXs cript对灯光的控制 通过对灯光的三种颜色分别控制可以模仿霓虹灯的效果,当然通过开关控制器就可以较简单的控制灯光,但那样的控制方式比较单调,无法形成霓虹变幻莫测的效果,用MAXs cript控制灯光产生的效果几乎可以乱真,这里只提供一种思考不做详细介绍,希望广大爱好者们开动脑筋,发挥想象创造出完美的场景。 3、MAX s cript对模型的变形控制 物体的变形动画是动画的一种重要的形式,用MAXs cript控制模型Modify面板中的各种变形修改命令,可以产生多种真实的效果,如飞翔、摇摆、扇动、磨光等。 到了这里我想读者一定对MAX s cript有了一定的认识,但作为一种脚本语言它还有很大的潜力等着我们去开发,希望MAX s cript能成为你的一种超强的辅助工具,使你在三维领域展翅翱翔。