閻雙
摘要:在3ds MAX中運用Maxscript腳本語言可提高三維動畫制作的效率,還能創(chuàng)建浮動卷展欄窗口,嵌入到工具面板中,為3ds MAX擴充各種實用功能。Maxscript對節(jié)點和屬性的應用和操作方法有特定要求,文中的程序代碼已經(jīng)經(jīng)過測試可直接運行。
關鍵詞: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設計的內(nèi)置腳本語言,3dsmax的大多數(shù)功能如建立幾何體、攝像機、燈光、輔助物體、粒子、修改器、動畫、控制器、渲染器等,都可以通過腳本調(diào)用來實現(xiàn),而且能實現(xiàn)無法用鼠標鍵盤實現(xiàn)的操作。
對于大量的重復單調(diào)且耗時的工作,MAXScript可以輕松使用幾行命令就可以完成。對于臨時性的專項工作,可以直接在MAXScript窗口中錄入命令運行即可,而不必設置和設計用戶操作界面。筆者從事三維動畫制作教學多年,希望能將經(jīng)驗與方法以案例的形式與讀者交流、探討,達到共同提高的目的[1]。
2 Maxscript腳本語言實現(xiàn)動畫制作的案例介紹
2.1 利用MAXScript提高制作效率
在使用3dsmax過程中,經(jīng)常會遇到一些案例如萬馬奔騰、氣球飛天等,場景中的物體重復出現(xiàn),在制作中經(jīng)常重復使用同一個或一些命令。腳本的出現(xiàn)就是簡化制作過程,提高制作效率。像這種即耗時又費力,重復乏味的勞動可以通過MAXScript腳本輕松完成[2]。
【分析】氣球飛天的案例中,由于氣球的大小一樣,但顏色不同,擺放的位置也不相同,對于這樣的重復操作可用腳本完成。
【具體操作方法】創(chuàng)建幾體體球體,將其轉換為多邊形,修改成氣球形狀。選擇氣球幾何體,打開maxscript菜單,打開maxscript偵聽器,輸入語句:for i=1 to 100 do copy $ pos:[(random -200 200),(random -200 200),(random -200 200)],一個循環(huán)語句,就可以讓場景中隨機擺放100個氣球。若要創(chuàng)建更多數(shù)量,只需要修改數(shù)值即可。由此可以推理,要做出萬馬奔騰的效果并非難事。如果要將氣球變成五彩繽紛的顏色,也只需在maxscript中輸入一條語句:for t in $ do t.material=meditmaterials[random 1 3],場景中的氣球顏色如果沒有變化,只需要將多個材質球賦上不同顏色即可。效果如圖1所示。
應用腳本語言可以把復雜的制作任務變簡單,把重復性多的工作變輕松,當有大場面、多角色出現(xiàn)在場景中時,我們也不必驚慌,使用maxscript來改變了傳統(tǒng)的制作方式。
2.2 用腳本語言開發(fā)動畫插件方法
任何一個插件都是在一定目標的設定下進行的,為此,若要利用腳本語言制作插件首先就需要分析目標,對要實現(xiàn)的目標進行可行性分析[3]。我們在利用三維軟件自身的工具完成動畫制作時,需要很多次反復修改、變形等操作才能達到我們設計的要求。但是利用腳本語言就可以設計出適應性強、功能強大的插件,這種插件可以滿足我們設計的需求[4]。比如在制作 齒輪模型或煙花綻放效果時,需要反復修改幾何體或粒子才能完成。如果通過簡單的編程實現(xiàn)這一功能插件,不僅提高了制作效率,而且擴展了系統(tǒng)的功能和實用性,因此利用腳本語言開發(fā)插件具有非常獨特的優(yōu)勢,也是可行的。
【分析】如果我們要制作煙花效果,需要使用 Particle Flow粒子流來制作,它的參數(shù)比較多,制作起來較復雜。如果我們把常用的參數(shù)做成UI界面中可以調(diào)節(jié)控制的,每次使用時直接調(diào)用,就能實現(xiàn)復雜動畫效果的簡單操控。
【具體操作方法】
(1)打開3ds Max軟件,選擇Scripting下的MaxScript Listener,打開了腳本監(jiān)聽器窗口,這時啟動macroRecorder的enable選項,記錄宏。
(2)將制作煙花的過程操作一遍,具體操作過程簡要繪制如圖2所示。注意此時會將操作過程記錄在上半部分的宏記錄窗口,可以將記錄保存為一個腳本。目的就是為后面編輯腳本提供方便,簡化重復工作。
(3)新建腳本,在菜單中選擇Scripting下的new Script,在彈出的窗口中選擇Tools下的Edit Rollout。此時我們可以通過3ds Max的腳本工具和編輯卷展欄工具創(chuàng)建一個帶有自主界面的插件。編輯UI界面效果如圖3如示。
(4)部分代碼如下所示:
rollout fireworks "煙花插件" width:162 height:300
(
button 'create_fireworks' "創(chuàng)建煙花" pos:[30,109] width:91 height:33
spinner 'amount' "數(shù)量" 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) 保存腳本之后可通過調(diào)用腳本實現(xiàn)快速制作煙花的效果。
3 結束語
很多制作動畫的人員對編程技術存在畏懼感,其實它只是依托于動畫制作軟件幫助我們完成復雜的動畫,只要掌握基本的語法之后就可應用,零基礎的人亦可學習。筆者在動畫編程語言的教學中,認為首先應從心理上打破學生對編程語言的陌生感與距離感,從簡單的實例入手,讓學生從心理上克服對編程語言的抵觸情緒,以直觀簡單的精彩實例激發(fā)學生的學習興趣。讓學生從認識腳本,讀懂腳本,然后到靈活應用腳本,直至自己編寫腳本。
隨著國內(nèi)外制作動畫水平的不斷提升,藝術與技術的結合也越來越緊密,手工交互調(diào)整動畫已經(jīng)不能滿足動畫制作的要求,應用腳本制作動畫成為新寵,因為它不僅方便快捷,省時省力,而且對動畫制作人員來說掌握一門與動畫相關的腳本語言在未來發(fā)展道路中是相當有益的[5]。
參考文獻:
[1] 許偉. MAXScript腳本語言在3D動畫制作中的應用探討[J]. 陜西學前師范學院學報,2015(4):121-125.
[2] 曾艷春. 基于MAXScript的粒子特效系統(tǒng)設計與實現(xiàn)[D].電子科技大學,2015.
[3] 王璐,王山東,周明明,等. MaxScript在構建三維城市中的應用[J]. 計算機與數(shù)字工程,2014(1):169-173.
[4] 高晶,唐俊. 以電影《神偷奶爸》為例,淺談動畫腳本語言在動畫教學中的運用[J]. 藝術科技,2014(8):30-31.
[5] 邱建英. 基于MAXScript的三維水墨效果仿真研究及實現(xiàn)[J]. 計算機光盤軟件與應用,2012(21):16-18.