胡曉輝 郭建平
摘 要:三維建模過(guò)程復(fù)用是動(dòng)畫制作過(guò)程中常見(jiàn)的操作,傳統(tǒng)的方式是手工建模和手工復(fù)制,大量的重復(fù)性操作造成了時(shí)間和精力的巨大浪費(fèi)。文中以動(dòng)畫場(chǎng)景中創(chuàng)建一組旋轉(zhuǎn)噴泉群為例,通過(guò)Maya MEL語(yǔ)言對(duì)三維建模過(guò)程復(fù)用的操作進(jìn)行程序開(kāi)發(fā),此外還開(kāi)發(fā)了該MEL腳本的可視化操作界面。經(jīng)調(diào)試,該MEL腳本可快捷實(shí)現(xiàn)旋轉(zhuǎn)噴泉群的參數(shù)化建模,對(duì)其它三維建模過(guò)程復(fù)用的MEL腳本開(kāi)發(fā)提供了設(shè)計(jì)思路。
關(guān)鍵詞:Maya;三維建模;復(fù)用;MEL語(yǔ)言;模塊
中圖分類號(hào):TP391.4 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2018)10-0005-03
Abstract: The reuse of 3D modeling process is a common operation in animation production. The traditional way is manual modeling and manual copying. A large number of repetitive operations have caused a huge waste of time and energy. Taking the creation of a group of rotating fountains in the animation scene as an example, a program is developed for the reuse of 3D modeling process using Maya MEL language. In addition, the visual operation interface of the MEL script is also developed. After debugging, the MEL script can quickly realize the parameterized modeling of the rotating fountain group, and provides the design idea for the MEL script development of other 3D modeling process reuse.
Keywords: Maya; 3D modeling; reusing; MEL language; module
引言
隨著計(jì)算機(jī)軟硬件技術(shù)和計(jì)算機(jī)圖形學(xué)的快速發(fā)展,三維動(dòng)畫制作已經(jīng)在多個(gè)領(lǐng)域推廣開(kāi)來(lái)。Autodesk公司的三維動(dòng)畫軟件Maya在動(dòng)畫設(shè)計(jì)和制作中應(yīng)用廣泛。Maya的可擴(kuò)展性較強(qiáng),MEL語(yǔ)言可以進(jìn)行Maya命令的擴(kuò)展和模塊的開(kāi)發(fā),通過(guò)編制MEL腳本,可以大大簡(jiǎn)化一些動(dòng)畫制作過(guò)程中的重復(fù)性操作,提高了動(dòng)畫制作效率,節(jié)約了大量的人力物體。動(dòng)畫制作中三維建模過(guò)程復(fù)用的情況非常常見(jiàn),完全可以利用MEL腳本實(shí)現(xiàn)重復(fù)建模和模型的多次重復(fù)調(diào)用。
1 MEL語(yǔ)言在Maya中的應(yīng)用
MEL語(yǔ)言和其它程序設(shè)計(jì)語(yǔ)言一樣是通過(guò)命令來(lái)實(shí)現(xiàn)程序控制的。三維制作軟件Maya可以看作是由MEL命令集與節(jié)點(diǎn)組合而成,MEL用來(lái)動(dòng)態(tài)的控制過(guò)程,節(jié)點(diǎn)是靜態(tài)的來(lái)表現(xiàn)結(jié)果。雖然在Maya軟件操作界面中,一般用戶察覺(jué)不到在操作過(guò)程中對(duì)MEL語(yǔ)言的調(diào)用和執(zhí)行,但是實(shí)際上所有的Maya操作都離不開(kāi)MEL語(yǔ)言。
因?yàn)镸EL語(yǔ)言的單獨(dú)命令都只能執(zhí)行一條程序操作,很少有操作僅僅靠一個(gè)獨(dú)一的MEL語(yǔ)言命令就能實(shí)現(xiàn)的,所以在Maya中,MEL語(yǔ)言的調(diào)用都是以MEL腳本的形式進(jìn)行。根據(jù)需要的操作而將多個(gè)MEL語(yǔ)言命令組合起來(lái)放在一起就構(gòu)成了一個(gè)MEL腳本。將執(zhí)行特定操作的MEL語(yǔ)言命令集寫入一個(gè)數(shù)據(jù)文件中,那么這個(gè)數(shù)據(jù)文件就是一個(gè)腳本文件。MEL腳本的設(shè)計(jì)者可以定義一個(gè)命令來(lái)調(diào)用和執(zhí)行這個(gè)腳本文件,這個(gè)命令是一個(gè)Maya中新的命令,也叫做腳本命令,腳本命令和Maya中自帶的命令一樣,還能在其它腳本中調(diào)用。Maya中調(diào)用這種新的MEL腳本程序,除了可以使用自定義命令來(lái)執(zhí)行,還可以將這個(gè)自定義命令添加編輯到Maya系統(tǒng)菜單中,通過(guò)鼠標(biāo)點(diǎn)擊菜單中的該自定義命令關(guān)聯(lián)到MEL腳本程序執(zhí)行所需要的操作。
可以通過(guò)兩種方法運(yùn)行MEL腳本,一種是對(duì)于那些沒(méi)有進(jìn)行模塊化設(shè)計(jì)的MEL腳本,這種腳本只是單獨(dú)的標(biāo)準(zhǔn)命令集文件,通過(guò)調(diào)用該腳本直接執(zhí)行其中的MEL命令,這種MEL腳本多用于功能單一、需要執(zhí)行的操作不存在動(dòng)態(tài)設(shè)置的情況。另一種是可視化腳本調(diào)用。將寫成標(biāo)準(zhǔn)命令的MEL腳本通過(guò)可視化操作界面執(zhí)行調(diào)用。這樣雖然需要另行制作可視化模塊界面,但是可以通過(guò)MEL腳本中的變量設(shè)置與關(guān)聯(lián),實(shí)現(xiàn)在模塊化調(diào)用MEL腳本時(shí)的動(dòng)態(tài)參數(shù)調(diào)整和輸入,適合于執(zhí)行的MEL腳本需要用戶參與變量設(shè)置的情況。
2 三維建模過(guò)程復(fù)用模塊的開(kāi)發(fā)
三維建模過(guò)程復(fù)用是動(dòng)畫制作過(guò)程中常見(jiàn)的操作。例如在一個(gè)動(dòng)畫制作項(xiàng)目中,劇本中的場(chǎng)景需要?jiǎng)?chuàng)建一組旋轉(zhuǎn)噴泉群。這組旋轉(zhuǎn)噴泉群是由多個(gè)結(jié)構(gòu)和外形相同的單獨(dú)噴泉組成,其中中間的一個(gè)噴泉稍大一些,其余噴泉作為小噴泉圓形均布環(huán)繞這個(gè)大噴泉,這些噴泉在場(chǎng)景中需要一直噴射水花,然后水花落進(jìn)噴泉的水池里。
這組旋轉(zhuǎn)噴泉如果在Maya中逐個(gè)建模,再手工復(fù)制到指定位置費(fèi)時(shí)費(fèi)力,通過(guò)MEL語(yǔ)言編制一段腳本可以實(shí)現(xiàn)這個(gè)建模過(guò)程復(fù)用。主要思路和過(guò)程是先制作一個(gè)三維噴泉模型,把它作為一個(gè)整體建模,放置到場(chǎng)景中特定位置,再?gòu)?fù)制若干個(gè)噴泉模型圍繞在這個(gè)中央噴泉周圍。建模效果如圖1所示。
創(chuàng)建如圖1中的一組旋轉(zhuǎn)噴泉群,在這個(gè)小場(chǎng)景中,其中的第一個(gè)噴泉底座的模型直接建模,周圍的其它噴泉底座模型是通過(guò)命令陣列復(fù)制而來(lái)。噴泉的底座大小、層數(shù)都可能變化,噴泉的水流向上噴射的花型、速度、高度也可能不同,這些都需要設(shè)置變量參數(shù)。這些變量參數(shù)可以依據(jù)用戶的設(shè)計(jì)需要輸入,用戶可以快捷方便的通過(guò)操作輸入界面創(chuàng)建不同的旋轉(zhuǎn)噴泉群。
噴泉噴出的水花是向上發(fā)射的,圓形擴(kuò)散,然后在重力的作用下自由落體。這些水花可以用粒子實(shí)現(xiàn),場(chǎng)景中創(chuàng)建一個(gè)向上的粒子發(fā)射器,擴(kuò)散的形狀和速度可以通過(guò)變量參數(shù)控制,噴泉水噴出后,要給粒子增加重力,使得水粒子在重力作用下落回到噴泉池子中。此外,在水落下時(shí)還需要設(shè)置水粒子與水池中的水進(jìn)行碰撞。通過(guò)上述方式就創(chuàng)建出模擬現(xiàn)實(shí)生活場(chǎng)景的噴泉水池。
發(fā)射器可以通過(guò)以下MEL語(yǔ)句實(shí)現(xiàn):
emitter -pos 0 0 0 -type direction -sro 0 -r 200 -nuv 0 - cye none -spd -cyi l $Fountain_Speed -srn 0 -nsp l - mxd 0 -tsp 0 -mnd 0 -dx 0 -dy l -dz 0 -sp $Fountain_Spread -n myEmitter;
particle -n myParticle;
connectdynamic -em myEmitter myParticle;
語(yǔ)句中的變量$Fountain_Speed用來(lái)存儲(chǔ)噴泉水柱噴出的速度值,變量$Fountain_Spread用來(lái)存儲(chǔ)噴泉水柱的擴(kuò)散值,這兩個(gè)變量都由用戶在程序腳本模塊的操作界面輸入。
在Maya場(chǎng)景中設(shè)置基本重力,定義水粒子運(yùn)動(dòng)受重力場(chǎng)影響。水粒子與水池中的水進(jìn)行碰撞可以利用循環(huán)語(yǔ)句來(lái)反復(fù)調(diào)用,保證噴泉不斷水流不斷,關(guān)鍵性腳本語(yǔ)句是:
int $j=0;
for ($j=0;$j<5;$j++)
{select -r myParticle;
select -add ("surface"+$j);
collision -r l -f 0 ("surface"+$j);
connectdynamic -c ("surface"+$j) myParticle;
event -n ("event"+$j) -die 0 -count 0 myParticle;
event -name ("event"+$j) -e -die l myPartical;}
制作完單一的噴泉模型之后,再利用MEL語(yǔ)言實(shí)現(xiàn)多個(gè)噴泉的陣列圓形環(huán)繞,同樣采用一個(gè)for循環(huán)來(lái)實(shí)現(xiàn),關(guān)鍵性腳本語(yǔ)句是:
int $j;
for ($j=1;$j<13;$j++)
{$Exp=$Exp+"group"+$j+".rotateY"="+$Rotate_Speed+"*frame+"+($j-1)*(360/$num)+";\nif ("+($j%2)+"==0)\n{\nif(frame%(10/"+$Glitter_Speed+")<("+$Glitter_Speed+"*2)))\ngroup"+$j+".visibility=0;\nelse\ngroup"+$j+".visibility=1;\n}\nelse\ngroup"+$j+"..visibility=1;\n";}
expression -s $exp -o "" -uc all -ae 1 -n experssionl;
這段語(yǔ)句可以根據(jù)用戶設(shè)置,實(shí)現(xiàn)旋轉(zhuǎn)噴泉群的建模,噴泉可以實(shí)現(xiàn)旋轉(zhuǎn)。語(yǔ)句中的變量$Rotate_Speed控制旋轉(zhuǎn)速度。
旋轉(zhuǎn)噴泉群建模腳本制作完成之后,再創(chuàng)建一個(gè)可視化模塊界面與這段腳本程序相互關(guān)聯(lián),通過(guò)該模塊界面可直接調(diào)用和運(yùn)行旋轉(zhuǎn)噴泉群建模腳本。旋轉(zhuǎn)噴泉群的建模效果都可以通過(guò)界面進(jìn)行直觀快捷的設(shè)置,創(chuàng)建的旋轉(zhuǎn)噴泉群模型經(jīng)過(guò)測(cè)試如果不符合要求,還可以對(duì)參數(shù)進(jìn)行修改重新建模,直至滿意。旋轉(zhuǎn)噴泉群建模的制作界面如圖2所示。
這個(gè)可視化界面中的radius參數(shù)用來(lái)控制噴泉陣列的圓周半徑,fountain Speed參數(shù)用來(lái)控制水柱的噴射速度,fountain Spread參數(shù)控制水的擴(kuò)散范圍,num參數(shù)控制噴泉陣列的數(shù)量。設(shè)置好這些參數(shù)后點(diǎn)擊“create”即可創(chuàng)建旋轉(zhuǎn)噴泉群,“delete”按鈕可以刪除不滿意的模型。Rotate Speed用來(lái)控制圓周的噴泉旋轉(zhuǎn)速度,glitter Speed用來(lái)控制噴泉群的動(dòng)作頻率。設(shè)置好之后點(diǎn)擊“anim”可以運(yùn)行動(dòng)畫。
3 結(jié)束語(yǔ)
文中利用MEL語(yǔ)言制作了三維建模過(guò)程的復(fù)用的Maya二次開(kāi)發(fā)腳本,該腳本可以實(shí)現(xiàn)旋轉(zhuǎn)噴泉群模型的批量建模,總結(jié)步驟如下:
首先,根據(jù)場(chǎng)景需要對(duì)建模過(guò)程進(jìn)行分析;其次,運(yùn)用MEL腳本實(shí)現(xiàn)建模和模型的復(fù)用,一些模型的動(dòng)態(tài)數(shù)據(jù)可以設(shè)計(jì)成變量由用戶控制;最后,制作這個(gè)三維建模過(guò)程復(fù)用模塊的可視化制作界面,通過(guò)這個(gè)界面實(shí)現(xiàn)最終的三維建模。
在動(dòng)畫制作過(guò)程中遇到的其它類型的模型需要建模和復(fù)用的,都可以通過(guò)這個(gè)思路編寫MEL腳本模塊來(lái)實(shí)現(xiàn)。
參考文獻(xiàn):
[1]Mark R. Wilkins. Maya動(dòng)畫師MEL腳本編程全攻略[M].北京:電子工業(yè)出版社,2004.
[2]陳清,韓杰,楊娟.電腦動(dòng)畫設(shè)計(jì)與制作[M].濟(jì)南:山東美術(shù)出版社,2006.
[3]戴健文.面向真實(shí)感渲染的材質(zhì)轉(zhuǎn)換系統(tǒng)與優(yōu)化[D].杭州:浙江大學(xué),2016.
[4]何偉.MEL腳本語(yǔ)言在數(shù)字集群動(dòng)畫中的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京工業(yè)大學(xué),2012.
[5]賀瞿.基于動(dòng)力學(xué)原理的Maya粒子特效插件[D].上海:上海交通大學(xué),2011.
[6]李志豪,李才應(yīng).Maya命令參考大全[M].北京:兵器工業(yè)出版社,2006.
[7]劉娟娟.基于MayaMEL語(yǔ)言的數(shù)字媒體動(dòng)畫控制技術(shù)的研究[J].電子技術(shù)與軟件工程,2015(1):115.
[8]羅漢.MayaMEL動(dòng)畫編程從入門到精通[M].北京:兵器工業(yè)出版社,2005.
[9]孟詩(shī)涵.創(chuàng)意材質(zhì)在Maya動(dòng)畫創(chuàng)作中的表現(xiàn)研究[D].長(zhǎng)春:東北師范大學(xué),2016.
[10]田玉婷.Maya的MEL語(yǔ)言在項(xiàng)目中的開(kāi)發(fā)應(yīng)用[J].黑龍江科技信息,2007(22):100.
[11]王澄宇.Maya腳本應(yīng)用手冊(cè):表達(dá)式與MEL語(yǔ)言[M].北京:人民郵電出版社,2013.
[12]吳文哲.MEL語(yǔ)言在Maya場(chǎng)景設(shè)計(jì)中的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2010(3):65-67.
[13]夏航.MAYA軟件中使用MEL腳本設(shè)計(jì)粒子碰撞[J].中國(guó)現(xiàn)代教育裝備,2010(17):31-34.
[14]徐冰.數(shù)字媒體動(dòng)畫控制技術(shù)研究[J].電子制作,2015(4):109-110.
[15]于海雯.Maya編程技術(shù)[J].電腦知識(shí)與技術(shù),2013(36):8409-8410.
[16]胡曉輝,萬(wàn)嵩.基于軟件工程及其模型的課件開(kāi)發(fā)研究[J].高教學(xué)刊,2015(23):95-96.