Maxscript脚本语言在动画制作中的应用
2016-10-31阎双
阎双
摘要:在3ds MAX中运用Maxscript脚本语言可提高三维动画制作的效率,还能创建浮动卷展栏窗口,嵌入到工具面板中,为3ds MAX扩充各种实用功能。Maxscript对节点和属性的应用和操作方法有特定要求,文中的程序代码已经经过测试可直接运行。
关键词:3dsmax;脚本语言; Maxscript ;动画制作
中图分类号:TP37 文献标识码:A 文章编号:1009-3044(2016)22-0188-03
Abstract: In 3ds MAX, using Maxscript scripting language can improve the efficiency of the three dimensional animation, also can create Windows floating rollout, embedded in the tools panel, all sorts of utility functions for 3ds MAX expansion. Maxscript application of nodes and attributes and operation methods have specific requirements, the program code has been tested can be run directly.
Key words: 3ds Max scripting language, Maxscript, animation
1引言
MAXScript是专为3ds Max设计的内置脚本语言,3dsmax的大多数功能如建立几何体、摄像机、灯光、辅助物体、粒子、修改器、动画、控制器、渲染器等,都可以通过脚本调用来实现,而且能实现无法用鼠标键盘实现的操作。
对于大量的重复单调且耗时的工作,MAXScript可以轻松使用几行命令就可以完成。对于临时性的专项工作,可以直接在MAXScript窗口中录入命令运行即可,而不必设置和设计用户操作界面。笔者从事三维动画制作教学多年,希望能将经验与方法以案例的形式与读者交流、探讨,达到共同提高的目的[1]。
2 Maxscript脚本语言实现动画制作的案例介绍
2.1 利用MAXScript提高制作效率
在使用3dsmax过程中,经常会遇到一些案例如万马奔腾、气球飞天等,场景中的物体重复出现,在制作中经常重复使用同一个或一些命令。脚本的出现就是简化制作过程,提高制作效率。像这种即耗时又费力,重复乏味的劳动可以通过MAXScript脚本轻松完成[2]。
【分析】气球飞天的案例中,由于气球的大小一样,但颜色不同,摆放的位置也不相同,对于这样的重复操作可用脚本完成。
【具体操作方法】创建几体体球体,将其转换为多边形,修改成气球形状。选择气球几何体,打开maxscript菜单,打开maxscript侦听器,输入语句:for i=1 to 100 do copy $ pos:[(random -200 200),(random -200 200),(random -200 200)],一个循环语句,就可以让场景中随机摆放100个气球。若要创建更多数量,只需要修改数值即可。由此可以推理,要做出万马奔腾的效果并非难事。如果要将气球变成五彩缤纷的颜色,也只需在maxscript中输入一条语句:for t in $ do t.material=meditmaterials[random 1 3],场景中的气球颜色如果没有变化,只需要将多个材质球赋上不同颜色即可。效果如图1所示。
应用脚本语言可以把复杂的制作任务变简单,把重复性多的工作变轻松,当有大场面、多角色出现在场景中时,我们也不必惊慌,使用maxscript来改变了传统的制作方式。
2.2 用脚本语言开发动画插件方法
任何一个插件都是在一定目标的设定下进行的,为此,若要利用脚本语言制作插件首先就需要分析目标,对要实现的目标进行可行性分析[3]。我们在利用三维软件自身的工具完成动画制作时,需要很多次反复修改、变形等操作才能达到我们设计的要求。但是利用脚本语言就可以设计出适应性强、功能强大的插件,这种插件可以满足我们设计的需求[4]。比如在制作 齿轮模型或烟花绽放效果时,需要反复修改几何体或粒子才能完成。如果通过简单的编程实现这一功能插件,不仅提高了制作效率,而且扩展了系统的功能和实用性,因此利用脚本语言开发插件具有非常独特的优势,也是可行的。
【分析】如果我们要制作烟花效果,需要使用 Particle Flow粒子流来制作,它的参数比较多,制作起来较复杂。如果我们把常用的参数做成UI界面中可以调节控制的,每次使用时直接调用,就能实现复杂动画效果的简单操控。
【具体操作方法】
(1)打开3ds Max软件,选择Scripting下的MaxScript Listener,打开了脚本监听器窗口,这时启动macroRecorder的enable选项,记录宏。
(2)将制作烟花的过程操作一遍,具体操作过程简要绘制如图2所示。注意此时会将操作过程记录在上半部分的宏记录窗口,可以将记录保存为一个脚本。目的就是为后面编辑脚本提供方便,简化重复工作。
(3)新建脚本,在菜单中选择Scripting下的new Script,在弹出的窗口中选择Tools下的Edit Rollout。此时我们可以通过3ds Max的脚本工具和编辑卷展栏工具创建一个带有自主界面的插件。编辑UI界面效果如图3如示。
(4)部分代码如下所示:
rollout fireworks "烟花插件" width:162 height:300
(
button 'create_fireworks' "创建烟花" pos:[30,109] width:91 height:33
spinner 'amount' "数量" pos:[30,24] width:68 height:16 range:[1,100,20] type:#integer
spinner 'fire_gravity' "重力" pos:[31,51] width:63 height:16 range:[0,1000,200] type:#integer
colorPicker 'single_color' "设置烟花单色" pos:[26,183] width:109 height:19
button 'random_color' "设置烟花随机颜色" pos:[25,214] width:110 height:23
on chuangjian pressed do
(
Plane length:20 width:100 lengthsegs:1 widthsegs:1 pos:[0,0,0] isSelected:on
hide $Plane001
PF_Source restoreOriginalPose:off name:"PF Source 001->PF Source 001" isSelected:on
particleFlow.BeginEdit()
op1 = Birth()
op2 = Position_Icon()
op3 = Speed()
op4 = Rotation()
op5 = ShapeLibrary()
op6 = RenderParticles()
op7 = DisplayParticles()
op7.color =single_color.Color
ev1 = Event()
ev1.SetPViewLocation (500) (100)
particleFlow.EndEdit()
ev1.AppendAction op1
……
ev1.AppendAction op5
ev1.AppendAction op7
$.AppendAction op6
$.AppendInitialActionList ev1
particleFlow.openParticleView()
$'Particle View 001'.selected = #($'Birth 001')
$'Birth 001'.amount = amount.value
……
$'Particle View 001'.selected = #($'Speed 001')
$'Speed 001'.reverse = on
gravity pos:[53.0547,-24.1158,0] isSelected:on transform:(matrix3 [1,0,0] [0,-1,0] [0,0,-1] [50,-50,0])
particleFlow.BeginEdit()
op1 = Force()
$'Event 001'.insertAction op1 5
particleFlow.EndEdit()
$'Particle View 001'.selected = #($'Force 001')
$'Force 001'.Force_Space_Warps.count = 0
$'Force 001'.Force_Space_Warps = #($'Gravity001')
$'Force 001'.Influence =fire_ gravity.value
……
$'Speed Test 001'.setNextActionList $'Event 004' $'Speed Test 001'
$'Particle View 001'.selected = #($'Spawn 002')
$'Spawn 002'.Spawn_Type = 0
$'Spawn 002'.Number_of_Offsprings = 20
……
particleFlow.BeginEdit()
op1 = Force()
$'Event 004'.insertAction op1 3
particleFlow.EndEdit()
$'Particle View 001'.selected = #($'Force 002')
$'Force 002'.Force_Space_Warps.count = 0
$'Force 002'.Force_Space_Warps = #($'Gravity001')
$'Force 002'.Influence = fire_gravity.value
……
$'Particle View 001'.selected = #($'Display 001')
$'Display 001'.type = 3
$'Particle View 001'.selected = #($'Display 002')
$'Particle View 001'.selected = #($'Display 002', $'Display 005')
$'Display 005'.type = 1
)
on tongyiyanse changed col do
(
$'Particle View 001'.selected = #($'Display 001')
$'Display 001'.color =single_color.color
$'Particle View 001'.selected = #($'Display 002')
$'Display 002'.color = single_color.color
$'Particle View 001'.selected = #($'Display 003')
$'Display 003'.color = single_color.color
$'Particle View 001'.selected = #($'Display 004')
$'Display 004'.color = single_color.color
$'Particle View 001'.selected = #($'Display 005')
$'Display 005'.color = single_color.color
)
)
Createdialog fireworks
(5) 保存脚本之后可通过调用脚本实现快速制作烟花的效果。
3 结束语
很多制作动画的人员对编程技术存在畏惧感,其实它只是依托于动画制作软件帮助我们完成复杂的动画,只要掌握基本的语法之后就可应用,零基础的人亦可学习。笔者在动画编程语言的教学中,认为首先应从心理上打破学生对编程语言的陌生感与距离感,从简单的实例入手,让学生从心理上克服对编程语言的抵触情绪,以直观简单的精彩实例激发学生的学习兴趣。让学生从认识脚本,读懂脚本,然后到灵活应用脚本,直至自己编写脚本。
随着国内外制作动画水平的不断提升,艺术与技术的结合也越来越紧密,手工交互调整动画已经不能满足动画制作的要求,应用脚本制作动画成为新宠,因为它不仅方便快捷,省时省力,而且对动画制作人员来说掌握一门与动画相关的脚本语言在未来发展道路中是相当有益的[5]。
参考文献:
[1] 许伟. MAXScript脚本语言在3D动画制作中的应用探讨[J]. 陕西学前师范学院学报,2015(4):121-125.
[2] 曾艳春. 基于MAXScript的粒子特效系统设计与实现[D].电子科技大学,2015.
[3] 王璐,王山东,周明明,等. MaxScript在构建三维城市中的应用[J]. 计算机与数字工程,2014(1):169-173.
[4] 高晶,唐俊. 以电影《神偷奶爸》为例,浅谈动画脚本语言在动画教学中的运用[J]. 艺术科技,2014(8):30-31.
[5] 邱建英. 基于MAXScript的三维水墨效果仿真研究及实现[J]. 计算机光盘软件与应用,2012(21):16-18.