3DS Max学习:MAX Script


  和许多应用程序一样,3DS Max也有自己的脚本语言MAX Script,所谓脚本语言,即在应用程序中由用户根据由应用程序以供的命令集,自己编写的程序段,用来简化程序的操作过程或对应用程序进行扩展。如Word中的VBA程序、PhotoShop中的Action等都属此类。这样的程序给用户提供了更多的想象空间,也是高级用户的必修课。表达式控制器和MAXScript的基本结构和VB类似,但由于3DSMax是图形程序,所以在MAX Script中有许多绘制图形的命令,这些命令类似于AUTOCAD中的LISP文件命令。这样的命令不需要编辑,可直接在程序中运行,并可直接看到运行结果。

  3DS Max 3.X版本中添加了一个新菜单——MAX Script,在这个菜单中有一个记录宏(Macro Recorder)选中这一项,在以后绘制图形时,每一步的操作都会自动转化成脚本语言,打开同一菜单下的脚本记录(MAX Script Listener),可以看到每一步操作的命令形式,通过这种方法可以初步了解MAXScript的基本格式,也可以通过复制命令简化编程步骤。下面以一个简单的实例说明之。

  1、打开记录宏命令,打开脚本记录。
  2、在任意窗口划一直线和一个球体。
  3、为球体制定位置控制器为路径,选择直线作为运动路径。
  4、打开动画记录按钮,将时间调到100帧。
  5、将球体在路径中位置调到50(%Along Path),关闭动画记录按钮。
下面是相应的脚本语言:

  line transform:(matrix3 [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 transform:(matrix3
[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 "关闭动画记录

  这样就完成了一个简单的脚本语言的编制。可见通过这种方法编制脚本语言是一种简便快捷的好方法。另外脚本语言中还有很多函数,可通过相关资料查询其用法,这里就不再赘述了。

  下面讲一点MAXScript在应用方面的技巧

  1、用MAXScript控制布尔运算

  先生成一子弹状物体起名bullet,再生成一与其等直径圆柱和一个立方体,调整子弹头部指向x轴合颍渲嵝脑谧拥痻轴最小值处,立方体和圆柱体轴心在x最大值处,对齐立方体和圆柱体轴心,(注意在使用MAXScript时轴心的位置非常重要),关联复制立方体和圆柱体,复制后的物体分别起名为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、MAXScript对灯光的控制

  通过对灯光的三种颜色分别控制可以模仿霓虹灯的效果,当然通过开关控制器就可以较简单的控制灯光,但那样的控制方式比较单调,无法形成霓虹变幻莫测的效果,用MAXScript控制灯光产生的效果几乎可以乱真,这里只提供一种思考不做详细介绍,希望广大爱好者们开动脑筋,发挥想象创造出完美的场景。

  3、MAX Script对模型的变形控制

  物体的变形动画是动画的一种重要的形式,用MAXScript控制模型Modify面板中的各种变形修改命令,可以产生多种真实的效果,如飞翔、摇摆、扇动、磨光等。

  到了这里我想读者一定对MAX Script有了一定的认识,但作为一种脚本语言它还有很大的潜力等着我们去开发,希望MAX Script能成为你的一种超强的辅助工具,使你在三维领域展翅翱翔。