基于3ds max的脚本语言对多个同类对象进行动画设计

时间:2022-08-19 11:01:32

基于3ds max的脚本语言对多个同类对象进行动画设计

摘要:3ds max是最流行、应用最广泛的三维动画设计软件,然而全面掌握该软件交互操作技术的人很少,更是少有人涉足其深层次的脚本语言。虽然手工交互操作技术功能很强大,但实际应用时,时常出现用于手工交互操作的工具功能不够的问题,从而造成用户无从下手、难以制作。使用脚本语言的程序设计方法能进行复杂的图形图像处理,能延伸与扩展手工交互操作工具的功能。通过“众志成城”与“动态奥运五环”这两个案例,并用3ds max脚本语言进行多个同类对象的动画设计,来解决手工交互操作工具的功能缺陷,并使这两种技术的结合,让动画设计能力得到极大的提高。

关键词:脚本语言;交互操作;对象;动画设计

中图分类号:TP37文献标识码:A文章编号:1009-3044(2009)27-7769-04

Carries on the Animation Design Based on the 3ds Max Script Language to many Objects of the same Kind

YAN Ya-jun

(Anhui Broadcast Movie and Television Professional Technology Institute, Hefei 230022, China)

Abstract: 3ds max is the most popular thing, applied for the most widespread three dimensional animation design software,The person who comprehensively grasp this software handwork operating alternative technology is very fewer, the person who steps in its deep level of the script language is fewer. Although manual operating technical function is very alternately formidable , When practical application is applying, the tools' function insufficient problem which uses in handwork operating alternately often creates the users' starting problem and the difficulty that the users don't understand where to begin. The using script language programming method can carry on the complex graph imagery processing and that way is another method that is about the comprehensive soluting animation system.Through the two examples of "Zhong Zhi Cheng Cheng"and the "Dynamic Five Circles of the Olympic Games",we can design various objects of the same kind by using 3Ds Max Script Language.We can also solve the problem the disadvantage of the manual operating alternative tools' foundation and mix these two technology, making the capability of cartoon designing improved at a high speed.

Key words: script language; operates alternately; object; animation design

3ds max是当今应用最广泛的三维动画设计软件,人们常应用它进行工业造型、建筑、室内外装潢、游戏、影视片头与影视栏目包装、影视特技特效、影视广告等等的制作与设计,它的功能十分强大。在进行动画设计与制作时,绝大多数用户采用该软件的手工交互操作技术进行动画作品设计,如今这种手工交互操作技术的功能已经非常强大,要能全面清楚的掌握和应用这种技术,都不是易事,至于其深层次的脚本语言程序设计,更是少有人涉足。虽然手工交互操作技术功能很强大,但在实际应用时,还是时常出现手工交互的工具功能不够的问题,例如物体复制建模,如果克隆物体很多,且物体的属性参数有一个定量的改变或随机改变等,此时用手工交互操作技术进行制作就显得力不从心了;再如很多个空间里的同类型物体如果需要在空间内进行移动等变形动画时,用手工交互操作设置也将会非常麻烦,甚至无从下手,等等。对这些同类对象使用手工交互操作技术难以制作的问题,我们可以使用3ds max内置的Maxscript脚本语言,进行程序设计加以解决。

1 Maxscript脚本语言及多个同类对象的产生

脚本语言往往是多媒体软件内置的语言体系,它是程序设计的平台。这种语言一般涵盖了多媒体软件所有手工交互操作技术的功能,同时对交互操作技术的功能进一步延伸和扩展。在当今流行且功能强大的多媒体处理技术软件中,大多会内置脚本语言,如Flash、After Effects等,它能够解决更加复杂的图形图像处理问题。3ds max是应用最广泛的多媒体处理技术软件,Maxscript脚本语言内置其中,与其它高级语言如C语言、VB、JAVA等程序设计语言有很多相似的地方,能进行运算、具有数据结构、函数、一定的语句、类、文件处理等等,但它是一个独立的语言体系,有其自身的设计要求和规则,“它是基于表达式的语言设计,每一种语言点的结构都是以表达式的形式出现的,这种结构是其它程序设计语言中的段”[1]。是面向对象的程序设计。这种技术,被动画设计的高端用户所应用,是另类全面解决动画体系的方法,程序设计技术使得手工交互操作技术的功能得到延伸与扩展,两者相互结合,让动画设计的能力得到极大的提高。

3ds max的同类对象是指类型一致的对象,如都是球体、同是泛光灯等。多个同类对象的创建与应用是3ds max常用的创作技术之一,如中央电视台二套的很多小红球在跳动的片头设计。实现多个同类对象的创建在3ds max中有很多方法,如用创建工具一个个的创建对象、对对象进行阵列工具复制、变形工具进行对象的变形复制、还有间隔复制工具、快照复制工具、粒子发射器等等,虽然它们都可以制作出多个同类对象,但还是存在着一定的功能缺陷,Maxscript脚本语言的程序设计也是创建多个同类对象的方法,它能很好的对其功能进行延伸与扩充。

动画设计,它是在不同时间内让对象的属性或视角发生变化,如位置、大小、角度、颜色、摄影机镜头等等发生变化,在动画软件里,这些变化往往以关键帧的形式进行记录。3ds max的动画设置方法非常丰富,其中改变对象属性参数与对象变换是常用的动画设置方法之一。

2 基于3ds max的脚本语言对多个同类对象进行动画设计

在3ds max中,如果需要创建的同类对象非常多,每个对象的属性参数需要随机的改变,甚至每个对象在空间有一定的变形与属性动画效果,显然此时用人们习惯使用的手工交互操作技术是难以制作的。脚本语言的程序设计则能很好的解决这些问题。基于3ds max脚本语言在进行程序设计时,一般借助手工交互操作技术进行作品的部分操作,应用宏记录将操作过程记录下来,由系统自动转换成语句,然后在程序编辑器中,将这些转换的语句,按语言的设计要求和规则,进行修改、调整、编排等编辑工作,执行调试、编辑直到满足要求。在实际作品创作时,我们常使用手工交互操作技术与程序设计技术结合起来使用,用程序设计对手工交互操作进行功能的延伸与扩充,使得作品设计在两者技术的结合下,变得更加容易、更加丰富。

下面我们以“众志成城”与“动态奥运五环”这两个案例,来研究与解决基于脚本语言是如何实现多个同类对象的动画设计的。

案例1,悼念08.5.12汶川特大地震遇难的人,众志成城。此案例采取手工交互操作技术与脚本语言程序设计相结合的技术。

案例动画的表现过程:如图1至4,充满视图,大小不一,位置零乱的2008个白色光点,向内汇聚成“512”型,“5”、“1”与“2”同时显现,如图2,停顿片刻,由“512”光点再绕成心型,在心型内隐现出黄色“2008”字样,停顿片刻,最后,“2008”字样消失,心型又逐渐扩散并充满视图的亮点。

案例的创作过程以及程序设计:首先在3ds max环境下使用手工交互操作进行设置:1、将场景时间设置为PAL制式,250帧;2、在顶视图绘制或导入二维图形,心型,改名为“xinxing”,缩放至合适大小;3、在顶视图心型内创建“2008”文本,勾选可渲染性可选项,调节粗细至合适,设置颜色为白色;4、对2008年的可见性设置动画,120帧至140帧逐渐显现出来,200至220帧逐渐淡出。

接着在当前场景下进行程序设计,选择工具new script命令进入脚本编辑(脚本侦测器)对话框,编写的程序如下:

myshape=converttosplineshape(text text:"512" renderable:false) ―-创建默认属性的文本“512”,可渲染性为假,赋给变量myshape

myshape1=converttosplineshape(text text:"512" renderable:false)―-在同位置创建同样的文本“512”

myshape2=converttosplineshape(text text:"512" renderable:false)

myge1=Dummy isSelected:on--建立虚拟物体并选中,赋给变量myge1

myge1.Position.Controller=path path:myshape--将myge1路径约束到myshape即“512”上,这里以“512”中的第一个字符“5”为路径

myge1.pos.controller.follow = on--设定路径跟随

kk=67-250

inserttime myge1.position.Controller 250 kk

--将myge1关键帧第250帧前移kk个单位即第67帧

setfirstspline myshape1 2C-设置二维图形myshape1中的第二条样条线即“1”为第一条样条线

myge2=Dummy isSelected:on

myge2.Position.Controller=path path:myshape1--将myge2路径约束到myshape1即“512”上,这里以“512”中的第二个字符“1”为路径

myge2.pos.controller.follow = on

selectkeys myge2.position.Controller 250C-选择myge2第250帧处的关键帧

movekeys myge2.position.Controller kk #selection--将myge2选中的关键帧前移到67帧

setfirstspline myshape2 3

myge3=Dummy isSelected:on

myge3.Position.Controller=path path:myshape2

myge3.pos.controller.follow = on

selectkeys myge3.position.Controller 250

movekeys myge3.position.Controller kk #selection;myge4=Dummy isSelected:on

myge4.Position.Controller=path path:$xinxing--myge4路径约束到在场景中创建的心型上

myge4.pos.controller.follow = on

selectkeys myge4.position.Controller 250

movekeys myge4.position.Controller -189.76 #selection--将myge4选中的关键帧前移189.76帧

selectkeys myge4.position.Controller 0

movekeys myge4.position.Controller 100 #selection

--下面是自定义函数,设置count个球的数组,赋给全局变量bb,每个球的半径为0.05至1之间的随机数,球的位置在空间以f与t间的随机数,球的物体通道号为2

fn qiustar count extent:[400,400,400] pos:[0,0,0]=

(f=pos-extent/2;t=pos+extent/2

global bb=for i=1 to count collect sphere radius:(random 0.05 1) segs:5 wirecolor:white position:(random f t) gbufferchannel:2)

qiustar 2008--调用上述的自定义函数,数量2008个

lens=lens_effects size:2 name:"len1"--设置镜头特效,尺寸2

addeffect lens--将镜头特效增加到场景中

le.addglow lens--增加光晕镜头特效

glo=lens.glow;glo.name="sss"

glo.size=1--光晕镜头特效尺寸设为1

glo.objectid=2--光晕镜头特效的对象通道ID号设为2

glo.applyimage=true--将效果指定到渲染输出的图像上

glo.sourceobjectid=true--设置效果应用于ID的特定对象

glo.source_color=100--设置光晕颜色使用场景中的对象颜色

j=0.1;jj=0

for cc in bb do--对象在数组bb中做

(jj=jj+1

if jj==1 then (animate on at time j (zz1=myge1.pos;cc.pos=zz1)--在j帧处设置CC的位置等于此时的myge1的位置的关键帧

movekeys cc.pos.controller (random 1 10) --将cc的所有关键帧向后随机移动1至10帧

animate on at time 87 cc.pos=zz1) --在87帧追加位置的关键帧

else (if jj==2 then (animate on at time j (zz2=myge2.pos;cc.pos=zz2) --在j帧处设置CC位置等于此时的myge2位置的关键帧

movekeys cc.pos.controller (random 1 10)

animate on at time 87 cc.pos=zz2 )

else(animate on at time j (zz3=myge3.pos;cc.pos=zz3)

movekeys cc.pos.controller (random 1 10)

animate on at time 87 cc.pos=zz3

jj=0;j=J+0.1)));j=100

for cc in bb do (animate on at time j (zz=myge4.pos

cc.pos=zz)

selectkey cc.pos.controller 3--选择cc关键帧号为3的关键帧

selectkey cc.pos.controller 4

movekeys cc.pos.controller (random 1 10) #selection

animate on at time 190 (cc.pos=zz)

j=j+0.03012)

for cc in bb do (animate on at time 240 (

cc.pos=[(random -300 300),(random -300 300),(random -300 300)]))--在240帧设置关键帧,将所有的球置随机移到空间-300至300之间

将程序保存,在当前场景下运行该程序,对透视图进行调整,移动时间快速渲染看看,如不满意进行调试以及改变视角,最后利用渲染工具对场景输出保存最终视频作品。

案例分析:2008个大小不一位置零乱的亮点,如果用手工交互技术制作非常的麻烦,这些点随时间的改变汇聚成文字并变换成心型,这些点的移动动画同样使用手工交互技术是不能实现的。而程序设计则完全实现了这种同类对象的制作及动画。

案例2,“动态奥运五环”。这是一个场景的基本设置与最终渲染工具交互操作输出外,完全用程序设计的基于3ds max脚本语言对多个同类对象进行动画设计的案例,如图5。

案例动画的表现过程:图中五个环均由半径5的100个圆柱围成、高度以5为起始逐个增加2个单位,且随时间一个一个的显示出来。蓝环显示完,黑色环逐渐显示出来,接着红色环、黄色环和绿色环按序逐个显示出来。

案例的创作过程以及程序设计:首先在3ds max环境下使用手工交互操作进行设置:使用默认的场景,或将场景设置为PAL制式,100帧。接着进行程序设计其程序如下:

myshape=Circle radius:100 name:"shape1" pos:[0,0,0]―-创建半径100、名shape1、位置在(0,0,0)的圆,并送给变量myshape

mycopysh=for i=1 to 5 collect (copy myshape)―-将myshape复制5个给数组mycopysh

move mycopysh[2] [(myshape.pos.x+220),0,0]―-将数组中第二个圆位置在X方向移动220个单位

move mycopysh[3] [(myshape.pos.x+440),0,0]

move mycopysh[4] [(myshape.pos.x+110),-120,0]

move mycopysh[5] [(myshape.pos.x+330),-120,0]

delete myshape--删除myshape圆

for j=1 to 5 do-- j从1到5的循环

(myge=Cylinder smooth:on heightsegs:1 sides:18 height:5 radius:5 visibility:0--创建高度5、半径5、高度线段数1的圆柱,不可见,赋给变量名myge

myge.Position.Controller=path path:mycopysh[j] --对圆柱设置位置控制器是mycopysh数组中第j个圆作为路径的路径约束动画

myge.pos.controller.follow = on

k1=1.00/5 C-设置一个缩放比例0.2,并赋值于变量K1

scaletime myge.pos.controller 0 100 k1--将myge动画0至100帧间的两个关键帧缩放k1倍,第二个关键帧前移

k2=20*(j-1);movekeys myge.position.Controller k2--将myge所有关键帧向后移k2单位

k3=0;for i=k2 to (k2+20) by 0.25 do--变量i从0到100的循环语句

(k3=k3+1;at time i (zz=copy myge --在时间i帧处执行括号内语句体 -C复制myge赋给变量zz

zz.pos=myge.pos--在时间i帧处zz的位置与myge的位置重合

zz.height=myge.height+2*k3 --zz的高度为myge增加2k3倍即逐渐增加2个单位

deletekeys zz.Position.Controller #allkeys--删除zz圆柱所有的关键帧

animate on C-打开动画记录

at time i zz.visibility=on C-在i帧处设置圆柱可见

animate offC-取消动画记录

if i>0 then (zz.visibility.controller.keys[2].inTangentType = #step

zz.visibility.controller.keys[2].outTangentType = #step) C-当i>0时的所有圆柱可见性动画的第二个关键帧的动画入点与出点为跳跃变化

case of--选择语句

((j==1):zz.wirecolor=blueC-当j等于1时,zz圆柱为蓝色

(j==2):zz.wirecolor=black

(j==3):zz.wirecolor=red

(j==4):zz.wirecolor=yellow

(j==5):zz.wirecolor=green)))

delete myge) --删除myge圆柱

将程序保存,在当前场景下运行该程序,调试满意后渲染输出。

案例分析:每环中的100个圆柱高度逐次增加2个单位,并逐次显示出来,很显然这一动画与手工交互操作的阵列复制很相象,但阵列复制对圆柱高度只能使用等百分比高度的缩放量进行高度的控制,而这里的圆柱高度是定数量的逐次改变,如果应用阵列进行该动画设计,那我们需要对每环100个圆柱的高度进行修改,手工操作100次,5个环则要操作500次,这显然很麻烦。当我们对每环由100个圆柱改成200个或更多时呢,手工交互操作对这些同类对象的动画设计显得功能太弱、力不从心了,而使用脚本语言的程序设计则很容易实现这500个高度有定量改变的圆柱这种同类对象的动画设计。它是对阵列工具的一种功能补充,也可以说是阵列工具功能的延伸与扩展。

程序说明:上述两案例的程序语句中“--”后的文字为语句注释。程序在英文3ds max7、8、9、2009版本软件中调试运行。

4 结束语

通过上述案例,我们发现在进行动画设计时,对多个同类对象的动画设计,如果使用手工交互操作技术进行制作,有时其操作过程相当繁琐,就案例中2008个球且半径与位置不定,100个高度逐次增加2个单位的这种复制建模,手工交互操作技术就非常难以实现,更何况还要对它们进行位置等的动画设置呢,而使用脚本语言的程序设计,只需用几条程序语句就能轻松搞定。因此,3ds max脚本语言的程序设计能很方便的对多个同类对象进行动画设计,对手工交互操作的功能进行了延伸与扩展,极大的提高了动画设计能力。

参考文献:

[1] 王琦.3ds max 5白金手册(下)[M].北京:北京科海电子出版社,2003:457.

[2] 王琦.3ds max 5白金手册(上、中、下)[M].北京:北京科海电子出版社,2003.

[3] 黄峻.3ds max 6白金手册(升级版)[M].北京:兵器工业出版社,2004.

[4] 黄心渊.3ds max高级编程[M].北京:清华大学出版社,2004.8.

[5] 王华.3ds MaxScript脚本语言完全学习手册[M].北京:器工业出版社,2006.

上一篇:在PhotoShop中如何制作套红报纸广告 下一篇:计算机课程的网络教学