APP下载

MAXScript脚本语言在3D动画制作中的应用探讨

2015-12-22

陕西学前师范学院学报 2015年4期
关键词:数学公式瓦片脚本

许 伟

(陕西学前师范学院计算机与电子信息系,陕西西安 710100)

1 引言

MAXScript是3DS Max内置脚本语言,类似C++程序语言,在一定程度上可以控制3DS MAX。使用MAXScript可以建立和操控几何体、摄像机、灯光、辅助物体、粒子、修改器、动画、控制器、轨迹视窗、渲染器等。

使用MAXScript在MAX里可以完成一些工作量很大且重复单调并相当耗时的工作,有时只需要几行命令,就可以取得高效的操作,也可以处理非常复杂的问题。对于临时性的专项工作,如果要使用脚本提高工作效率时,可直接在“MAXScript Listener”窗口中或脚本编辑窗口中录入命令运行即可,而不必设置和设计用户操作界面。多年来,笔者在项目工程和教学中使用MAXScript实现动画制作,取得了较好的效果。希望将方法和经验以案例的形式与读者共享,以期与读者交流、探讨,达到共同提高的目的。

2 3DS MAXScript实现动画制作的案例介绍

2.1 利用MAXScript扩充软件功能

由于用户需求的多面性,3DS MAX不可能涉及到应用的各个层面,具体应用的算法和功能模块就需要用户自己开发,即使编写的程序不成体系,代码运行效率不高也无关紧要,因为应用的目的就是减少交互创建的繁琐。如在3DS MAX软件中创建园形平面物体。

[分析]3DS MAX软件中没有创建圆形平面的命令,在实际教学中会经常用到圆形平面对象,通过下列脚本可创建一个建立圆形平面的插件,直接将下列程序拷贝 “MAXScript Listener”窗口中运行即可,如图1左图所示效果。

程序中setMesh命令用来创建三角面[1],三个不重叠的顶点坐标就可以创建一个可视的三角面。setMesh命令其后有两组数组参数,第一组数组为所创建三角面的顶点坐标值,第二组数组指定三角面的顶点的索引值,该索引值的顺序,决定了三角面的法线方向,如图1右图所示。

2.2 利用MAXScript提高制作效率

在使用3DS MAX的过程中,针对某个具体案例会经常重复使用同一个或一些命令,这既费时又乏味的重复劳动就可以使用脚本来完成。脚本的应用有时为了简化制作过程,提高制作效率,只需要一行或数行语句就可完成耗时、费力的工作。如制作古建筑屋顶的瓦片。

[分析]由于瓦片是错落而上摆放,每后一排瓦片都要产生错落操作:选择要提升的一排瓦片,然后将其挤压一定数值的高度,释放选择;再选择次一排要提升的瓦片……。对于这样重复性的操作就可用脚本完成。

图1 创建圆面物体所需数组对应

实现上述操作的脚本其实并不需要用户熟记多边形编辑里的相关命令脚本,只需利用宏脚本记录器记录下操作命令,系统会自动将操作转化为MAXScript脚本命令。在3DS MAX场景中以面为子物体对象选择第二排瓦片,使用Editable Poly中的Extrude命令对所选的第二排瓦片的面进行30个单的高度挤压,接着撤销这次挤压操作,这样就可以在“MAXScript Listener”窗口面板中得宏记录记录下的命令:

对这两行命令稍加改造,就可使改造后的命令变成一个临时的命令按钮。完成后的命令脚本如下:

在“MAXScript Listener”窗口面板中用鼠标选中上述四条命令运行它一次,然后再选择除了第一条命令以外的其它三条命令,将它们拖动到3DS MAX软件的工具栏上,将其变成命令按钮。

接着,只需要依次选择每一排的瓦片面,每选择一排,按一下刚才在工具栏上生成的按钮,直至完成每排瓦片高度的制作,再多的瓦片都能很快建立。如图2所示。

图2 可编辑多边形中Extrude操作30各单位对应的脚本命令

2.3 利用MAXScript直接生成动画

在3DS MAX中使用脚本产生动画效果是动画创作的较高层次,用MAXScript生成的动画往往具有出神入化、令人惊叹的视觉效果,这恰恰是传统的交互操作方式很难完成的。

如用户要求将一幅彩色画上的每个像素都创建一个尺寸很小且固定大小的正方形平面,并且这个正方形对应于画幅上这个像素的颜色,要求按照像素的亮度的大小对正方形个体产生旋转角度不一的动画效果,亮度暗的正方形个体旋转角度小,反之则旋转角度大,它的效果像是大型运动会开幕式前演员表演的翻版动画,如图3截图效果。

[分析]由于图像上像素的排列是矩形的阵列,因此读取位图的像素必须按照先行后列,不能跨行读取像素。像素的读取可使用getpixels命令并配合For循环语句完成,对于彩色图像中的亮度信息计算的转换矩阵为:=0.299+0.587+0.114,此公式中的数据分别为三基色的相对强度。

图3 按像素生成几何模型并设置动画的效果

位图像素的存放是按一定的阵列方式存放的,例如,像素为50X28的图形其左上角为[0,0],其右下角则为[49,27],如图3所示。读取位图的像素必须按照先行后列,不能跨行读取像素。运行完上述这段脚本程序,直接播放动画按钮即可产生动画效果。笔者选用的图像的像素为50×50,RGB全彩色,总计可产生2500个三维几何体。

2.4 利用MAXScript应用数学公式产生三维效果

利用MAXScript可根据数学公式编程生成非常优美的数学曲线,这在实际教学中会带来直观效果,使晦涩抽象的数学公式变得生机勃勃。

如用MAXScript根据球面螺旋线数学公式进行编程可以生成非常漂亮的球面螺旋线,如图4所示。

图4 球面螺旋曲线

[分析]球坐标是三维坐标系的一种,用以确定三维空间中点、线、面以及体的位置,它以坐标原点为参考点,由方位角、仰角和距离构成。球坐标系与其他坐标系的变换需要用到特别的方程式。径向距离、天顶角、方位角,分别标记为 (r,θ,φ)。表示一个点p在三维空间的位置的三维正交坐标系,其对应的直角坐标系的坐标转换公式为[2]:

根据上述公式,利用MAXScript中的创建样条曲线命令编程就可创建出球面螺旋曲线,具体脚本程序如下。

3 结束语

笔者在实际的项目制作和教学活动中,每当遇到重复性的工作时,都会使用脚本或指导学生使用脚本来减轻工作量。开始使用会感到非常困难,但只要勤于练习,渡过适应过程就能体验到使用脚本的优势。同时要学会使用《3DS MAX MAXScript Reference》,在手册里找到自己所要使用的节点属性、相应的类及所需的操作命令,就能进一步提高解决问题的能力。

[1][美]Fletcher Dunn,Lan Parberry.3D数学基础:图形与游戏开发[M].史银雪,陈洪,王荣静,译.北京:清华大学出版社,2005.

[2]Spherical Coordinates[EB/OL].http://mathworld.wolfram.com/SphericalCoordinates.html.

猜你喜欢

数学公式瓦片脚本
酒驾
形神兼备,聚焦小学数学公式定律教学策略
安奇奇与小cool 龙(第二回)
一种基于主题时空价值的服务器端瓦片缓存算法
惯性
数学难题解开啦
快乐假期
小编的新年愿望
活用数学公式 优化数学课堂
巧拼火柴棒