摘要:本文主要介绍了3dsmax中的脚本语言maxscript的主要功能,并简单介绍了脚本语言的编制及其应用技巧。
关键词:脚本语言、maxscript、函数表达式
所谓脚本语言,即在应用程序中由用户根据由应用程序以供的命令集,自己编写的程序段,用来简化程序的操作过程或对应用程序进行扩展。像许多应用程序一样,3dsmax也有自己专门设计的脚本语言maxscript,它是像3dstudiomax一样面向对象的,有许多对于max用户界面中特征和结构,带动画关键帧的动画模式,并通过层次改变场景对象对应于max的对象层次。是可以调用大部分c++函数的,和maya的mel语言也有很多的相通之处。对于三维软件的高级用户来说,掌握了较全面的技术后发现现有的软件已无法全力表现出她们的思想,他们需要一种可以随时扩展软件工作能力的工具,可以自己开发程序外挂来帮助工作已经是必需的要求了。maxscript程序给用户提供了更多的想象空间,也是高级用户的必修课。
maxscript是3dsmax中的插入脚本语言,它为用户提供了以下功能:
·描述3dstudiomax的全部用途,如造型、动画、材质、渲染等;
·将脚本集成在用户应用面板卷展栏工作界面上,给脚本一个标准的max用户接口;
·使用插入的文件的i/o,建立用户输入/输出工具;
·写入可以访问全部场景状态的过程控制器;
·建立批处理工具,例如批处理渲染脚本;
·通过oleautomation,与外部系统建立活动接口。wwW.133229.coM
表达式控制器和maxscript的基本结构和vb类似,但由于3dsmax是图形程序,所以在maxscript中有许多绘制图形的命令,这些命令类似于autocad中的lisp文件命令。这样的命令不需要编辑,可直接在程序中运行,并可直接看到运行结果。
在3dsmax的maxscript这个菜单中有一个记录宏(macrorecorder),选中这一项,在以后绘制图形时,每一步的操作都会自动转化成脚本语言,打开同一菜单下的脚本记录(maxscriptlistener),可以看到每一步操作的命令形式,通过这种方法可以初步了解maxscript的基本格式,也可以通过复制命令简化编程步骤。下面以一个简单的实例加以说明。
1、打开记录宏命令,打开脚本记录。
2、在任意窗口划一直线和一个球体。
3、为球体制定位置控制器为路径,选择直线作为运动路径。
4、打开动画记录按钮,将时间调到100帧。
5、将球体在路径中位置调到50(%alongpath),关闭动画记录按钮。
下面是相应的脚本语言:
1.linetransform:(matrix3[1,0,0][0,0,1][0,-1,0][4.42805,-1.45167e-007,3.32103])isselected:on
sphereradius:13.0567smooth:onsegs:32chop:0slice:offslicefrom:0sliceto:0transform:(matrix3
[1,0,0][0,0,1][0,-1,0][86.7159,-3.25819e-006,74.5387])isselected:on
2.select$sphere01
$.pos.controller=path()
$.pos.controller.path=$line01
3.maxtoolanimmode
setanimateon
slidertime=100f
select$sphere01
4.$.pos.controller.percent=50
maxtoolanimmode
setanimateoff
现欲使球体前50帧运动1/4路程,后50帧运动3/4路程。则根据上面记录编写程序如下(其中绘制过程省略):
maxtoolanimmode
setanimateon’开启动画记录
fort=1to100by1doattimet’设置动画范围从1到100
(
$sphere01.pos.controller=path()’指定路径控制器
$sphere01.pos.controller.path=$line01’选择路径
ift<50then’当在50帧以内时
(
$sphere01.pos.controller.percent=t/2’路程为0到25%
)
ift>=50then’当在50帧以后时
(
$sphere01.pos.controller.percent=t*75/50-50’路程为25%到100%
)
)
maxtoolanimmode
setanimateoff’关闭动画记录
这样就完成了一个简单的脚本语言的编制。可见通过这种方法编制脚本语言是一种简便快捷的好方法。另外脚本语言中还有很多函数,可通过相关资料查询其用法,这里就不再赘述了。
下面讲一点maxscript在应用方面的技巧:
1、用maxscript控制布尔运算
先生成一子弹状物体起名bullet,再生成一与其等直径圆柱和一个立方体,调整子弹头部指向x轴负向,其轴心在子弹x轴最小值处,立方体和圆柱体轴心在x最大值处,对齐立方体和圆柱体轴心,(注意在使用maxscript时轴心的位置非常重要),关联复制立方体和圆柱体,复制后的物体分别起名为box、bar(圆柱体),将复制后的物体移开便于观察,对原物体进行布尔运算,这是通过对复制后的物体进行控制即可控制布尔物体。下面的程序通过控制圆柱体的高度来控制子弹在立方体上打孔的深度。(在此为简化程序未考虑加减速问题,有兴趣的读者可加以补充)
animateon
fort=1to100by1doattimet
(
$bullet.pos.x=3000-10*t’子弹匀速向x轴负向运动
if$bullet.pos.x-$box.pos.x>=0then
(
$bar.height=0’当子弹未接触到立方体时洞深为0
)
if$bullet.pos.x-$box.pos.x<0then
(
$bar.height=$box.pos.x-$bullet.pos.x’当子弹未接触到立方体时洞深为子弹头距立方体右边的距离
if$bar.height>250then’圆柱体高度即洞深不超过立方体厚度
(
$bar.height=250
)
)
)
animateoff
2、maxscript对灯光的控制
通过对灯光的三种颜色分别控制可以模仿霓虹灯的效果,当然通过开关控制器就可以较简单的控制灯光,但那样的控制方式比较单调,无法形成霓虹变幻莫测的效果,用maxscript控制灯光产生的效果几乎可以乱真,这里只提供一种思考不做详细介绍,希望广大爱好者们开动脑筋,发挥想象创造出完美的场景。
3、maxscript对模型的变形控制
物体的变形动画是动画的一种重要的形式,用maxscript控制模型modify面板中的各种变形修改命令,可以产生多种真实的效果,如飞翔、摇摆、扇动、磨光等。
利用脚本可以帮助大家更好的控制场景元素,生成意想不到的效果。到了这里我想大家一定对maxscript有了简单的了解,但作为一种脚本语言它还有很大的潜力等着我们去开发,希望maxscript能成为你的一种超强的辅助工具,使你在三维领域展翅翱翔。