房煥祁
摘要:動(dòng)畫制作為了追求效果的表現(xiàn)對(duì)于物體和環(huán)境的空間關(guān)系,物體與物體之間的運(yùn)動(dòng)關(guān)系都有著十分苛刻的要求。在常規(guī)的剛體物體運(yùn)動(dòng)中,通過學(xué)習(xí)了相應(yīng)的物體的運(yùn)動(dòng)規(guī)律之后,可以通過人眼的觀察對(duì)物體的物理運(yùn)動(dòng)進(jìn)行判斷來作為參考進(jìn)行制作。但是在柔性類物體的運(yùn)動(dòng)中,由于maya軟件自身的動(dòng)力學(xué)模擬計(jì)算需要一個(gè)解算的環(huán)節(jié),這就導(dǎo)致一旦所制作的動(dòng)畫中,出現(xiàn)了頭發(fā)和布料類的物體就需要不斷地解算和返修以期達(dá)到最好的效果。但是在解算和返修的過程中需要大量的時(shí)間和工作量,會(huì)拖慢整個(gè)制作的進(jìn)度,長時(shí)間的返修和解算會(huì)影響制作人員的情緒增加制作時(shí)間和工作量,導(dǎo)致作品不能夠達(dá)到預(yù)期的效果。因此在動(dòng)畫制作中實(shí)現(xiàn)實(shí)時(shí)動(dòng)力學(xué)對(duì)整個(gè)動(dòng)畫制作有著重要的意義。
關(guān)鍵詞:maya;動(dòng)力學(xué);實(shí)時(shí)動(dòng)力學(xué)
一、maya軟件動(dòng)力學(xué)介紹
maya軟件是一款集模型制作、角色綁定、動(dòng)畫制作、特效制作以及渲染圖形的綜合性軟件。其功能及其強(qiáng)大,是目前制作三維動(dòng)畫的主流軟件。本文中提到的動(dòng)力學(xué)就是maya特效模塊中的一個(gè)分支。在maya軟件中對(duì)動(dòng)力學(xué)的定義是指通過軟件來描述一個(gè)在真實(shí)的物理環(huán)境中的物體是如何進(jìn)行移動(dòng)的物理學(xué)分支。maya軟件的動(dòng)力學(xué)動(dòng)畫是通過使用了物理學(xué)的規(guī)則來通過軟件計(jì)算模擬自然力,maya動(dòng)力學(xué)動(dòng)畫能夠計(jì)算模擬逼真的物理運(yùn)動(dòng),這一點(diǎn)如果使用傳統(tǒng)的序列幀動(dòng)畫來實(shí)現(xiàn)會(huì)使工作量劇增而且難以實(shí)現(xiàn)。
二、在動(dòng)畫制作中使用maya軟件實(shí)現(xiàn)實(shí)時(shí)動(dòng)力學(xué)的意義
首先在動(dòng)畫制作中都不能避開物理運(yùn)動(dòng),所有的動(dòng)畫在制作的同時(shí)都會(huì)遵循物理學(xué)定律。拋開特殊的環(huán)境和效果不談,絕大多數(shù)的動(dòng)畫制作都是要在一個(gè)基本符合物理規(guī)律的環(huán)境下進(jìn)行制作的。所以在動(dòng)畫制作的制作中,物理運(yùn)動(dòng)規(guī)律是必須遵守的一個(gè)基本條件。由于必須遵循物理運(yùn)動(dòng)規(guī)律,在比較完整的物體或者肢體動(dòng)畫制作中所需的制作工作量不是十分繁重,但是一旦進(jìn)入到一些特定物體,例如布料、頭發(fā)、衣服等柔性物體的制作中,要制作出真實(shí)的物理狀態(tài)是難以通過序列幀動(dòng)畫的制作方法來實(shí)現(xiàn)的,所以maya軟件有專門的FX動(dòng)力學(xué)模塊應(yīng)對(duì)來對(duì)此類情況。
在maya軟件的FX模塊是有專門的針對(duì)頭發(fā)和布料類別物體模擬的專用設(shè)置,但是這些設(shè)置有一個(gè)明顯的缺陷,也就是無法實(shí)現(xiàn)實(shí)時(shí)的動(dòng)力學(xué)模擬效果,雖然有交互式模擬的設(shè)置,但是在交互模式下對(duì)動(dòng)畫制作有很大的影響,并且每一種動(dòng)力學(xué)設(shè)置都需要一個(gè)解算階段,也就是無法在動(dòng)畫制作的過程當(dāng)中即時(shí)的解算動(dòng)力學(xué)效果,這樣會(huì)衍生出很多的問題。例如動(dòng)畫中最不允許出現(xiàn)的穿幫,在動(dòng)畫制作的過程中,如果物體和物體之間出現(xiàn)了不符合物理學(xué)不合理的穿插,這種情況通常被稱作穿幫。穿幫會(huì)對(duì)動(dòng)畫效果產(chǎn)生巨大破壞,會(huì)使整段動(dòng)畫顯得不真實(shí)極大地破壞了動(dòng)畫的表演效果,所以這種情況是絕對(duì)不允許出現(xiàn)在動(dòng)畫制作中的。而頭發(fā)、衣服、和布料類的柔性物體,因其特殊的物理運(yùn)動(dòng)規(guī)律是十分容易出現(xiàn)穿幫的情況。所以在動(dòng)畫制作中,經(jīng)常會(huì)因?yàn)闊o法及時(shí)的觀察到這類物體的即時(shí)動(dòng)力學(xué)表現(xiàn)而導(dǎo)致出現(xiàn)穿幫,需要再次重新調(diào)整動(dòng)畫反復(fù)的測試,導(dǎo)致工作量劇增的情況。
動(dòng)畫制作為了追求效果的表現(xiàn)對(duì)于物體和環(huán)境的空間關(guān)系,物體與物體之間的運(yùn)動(dòng)關(guān)系都有著十分苛刻的要求。在常規(guī)的剛體物體運(yùn)動(dòng)中,通過學(xué)習(xí)了相應(yīng)的物體的運(yùn)動(dòng)規(guī)律之后,可以通過人眼的觀察對(duì)物體的物理運(yùn)動(dòng)進(jìn)行判斷來作為參考進(jìn)行制作。但是在柔性類物體的運(yùn)動(dòng)中,由于maya軟件自身的動(dòng)力學(xué)模擬計(jì)算需要一個(gè)解算的環(huán)節(jié),這就導(dǎo)致一旦所制作的動(dòng)畫中,出現(xiàn)了頭發(fā)和布料類的物體就需要不斷地解算和返修以期達(dá)到最好的效果。但是在解算和返修的過程中需要大量的時(shí)間和工作量,會(huì)拖慢整個(gè)制作的進(jìn)度,長時(shí)間的返修和解算會(huì)影響制作人員的情緒增加制作時(shí)間和工作量,導(dǎo)致作品不能夠達(dá)到預(yù)期的效果。因此在動(dòng)畫制作中實(shí)現(xiàn)實(shí)時(shí)動(dòng)力學(xué)對(duì)整個(gè)動(dòng)畫制作有著重要的意義。
三、在maya軟件中實(shí)現(xiàn)實(shí)時(shí)動(dòng)力學(xué)的兩種方式
(一)如何在maya軟件中通過動(dòng)力學(xué)曲線和樣條線IK配合實(shí)現(xiàn)實(shí)時(shí)動(dòng)力學(xué)
在maya軟件中動(dòng)力學(xué)設(shè)置有很多種方式,例如頭發(fā)系統(tǒng)或者是布料系統(tǒng),我們先對(duì)動(dòng)力學(xué)曲線和樣條IK配合來實(shí)現(xiàn)實(shí)時(shí)動(dòng)力學(xué)進(jìn)行介紹。本文中提到的動(dòng)力學(xué)曲線是通過maya軟件中的頭發(fā)系統(tǒng)(Hair System)生成的,它具有頭發(fā)幾乎全部的屬性,在控制上和靈活性都十分的強(qiáng)大和方便。而樣條線IK是maya軟件中骨骼反向動(dòng)力學(xué)設(shè)置中的一項(xiàng)功能,通常為體積比較長而且彎曲的關(guān)節(jié)鏈對(duì)象設(shè)定動(dòng)畫pose或者設(shè)置動(dòng)畫。
首先創(chuàng)建一根曲線模擬馬尾發(fā)型的狀態(tài):對(duì)其命名為Test_curve。然后選中曲線Test_curve在maya軟件的FX模塊下執(zhí)行nHair菜單下的動(dòng)力學(xué)華選定曲線命令,使曲線成為動(dòng)力學(xué)曲線。這一步驟是將一個(gè)原始的無屬性曲線轉(zhuǎn)化成為一個(gè)帶有動(dòng)力學(xué)模擬屬性的曲線,為后續(xù)工作做準(zhǔn)備。此時(shí)在maya軟件的大綱視圖中原始曲線消失出現(xiàn)了hairSystem1、nucleus1解算器、hairSystem1Follicles組以及hairSystem1OutputCurves組。此時(shí)我們需要?jiǎng)h除nucleus1解算器,因?yàn)樵诖谁h(huán)節(jié)不需要nucleus1解算器進(jìn)行工作。并且在hairSystem1的屬性設(shè)置中將使用Nucleus1解算器的選項(xiàng)取消掉,由于刪除nucleus1解算器的節(jié)點(diǎn)所以在解算設(shè)置中需要將Nucleus1解算器關(guān)掉。將hairSystem1Follicles組的中心點(diǎn)移動(dòng)到曲線的起始端,然后在hairSystem1Follicles組下的follicle1節(jié)點(diǎn)下的形狀節(jié)點(diǎn)中將點(diǎn)鎖定屬性修改為基礎(chǔ),這樣動(dòng)力學(xué)曲線的運(yùn)動(dòng)會(huì)以曲線的起始點(diǎn)為基點(diǎn)進(jìn)行動(dòng)力學(xué)模擬。此時(shí)在打開交互式播放的模擬狀態(tài)下,移動(dòng)曲線就能夠觀察到曲線在模擬動(dòng)力學(xué)運(yùn)動(dòng)的效果。此時(shí)為了能夠讓曲線更加接近頭發(fā)在物理環(huán)境下的運(yùn)動(dòng)效果,可以對(duì)hairSystem1屬性中hairSystemShape1節(jié)點(diǎn)下的動(dòng)力學(xué)特性菜單中迭代次數(shù)增加到8,將剛度增加到0.35。
接下來創(chuàng)建一段骨骼使用樣條線IK命令將動(dòng)力學(xué)曲線和骨骼結(jié)合成線性IK骨骼。先創(chuàng)建一段骨骼,數(shù)量視具體長度而定。打開在裝備模塊下的骨架菜單中的創(chuàng)建樣條線IK控制柄命令的屬性,只保留根在曲線上的選項(xiàng)其他選項(xiàng)全部勾選掉。接下來先選擇我們創(chuàng)建的骨骼鏈的根骨骼,再加選末端骨骼,最后在保留之前的選擇的骨骼鏈的根骨骼和末端骨骼的前提下再次加選hairSystem1OutputCurves組下的curve1動(dòng)力學(xué)輸出曲線。此時(shí)線性IK骨骼制作完成,骨骼能夠跟隨動(dòng)力學(xué)曲線進(jìn)行運(yùn)動(dòng)。
此時(shí)我們將hairSystem1OutputCurves組下面的曲線curve2加載到節(jié)點(diǎn)編輯器中,展開它的上下游節(jié)點(diǎn),在展開的節(jié)點(diǎn)中在hairSystemShape1節(jié)點(diǎn)的菜單下面有一個(gè)當(dāng)前時(shí)間的選項(xiàng)是被連接的狀態(tài)。這個(gè)選項(xiàng)連接在time1的節(jié)點(diǎn)的輸出時(shí)間中,也就是說在maya軟件中這個(gè)動(dòng)力學(xué)曲線的動(dòng)力學(xué)模擬效果是通過時(shí)間節(jié)點(diǎn)的輸入來進(jìn)行開始和結(jié)束模擬的。也就是動(dòng)力學(xué)模擬是通過時(shí)間來控制的,但是這個(gè)時(shí)間是一個(gè)獨(dú)立的時(shí)間,和當(dāng)前的時(shí)間是區(qū)分開的。只有當(dāng)這個(gè)當(dāng)前時(shí)間開始運(yùn)行的時(shí)候動(dòng)力學(xué)模擬才會(huì)開始,否則動(dòng)力學(xué)曲線的模擬是不會(huì)運(yùn)行的。因此我們需要對(duì)這個(gè)當(dāng)前時(shí)間進(jìn)行修改和設(shè)置。
首先我們需要打斷hairSystemShape1下當(dāng)前時(shí)間的連接,然后創(chuàng)建一個(gè)定位器locator1,我們通過定位器locator1來模擬當(dāng)前時(shí)間。并將定位器locator1吸附到線性IK骨骼組的末端骨骼上,使用線性IK骨骼組的末端骨骼對(duì)定位器locator1進(jìn)行一個(gè)保持偏移的點(diǎn)約束,下面我們使用表達(dá)式進(jìn)行設(shè)置。
if(frame!=hairSystemShape1.startFrame)
hairSystemShape1.currentTime = hairSystemShape1.startFrame + 1 + locator1.translateX - locator1.translateX + locator1.translateY - locator1.translateY +locator1.translateZ - locator1.translateZ
else
hairSystemShape1.currentTime = hairSystemShape1.startFrame;
以上表達(dá)式的內(nèi)容是,如果maya軟件時(shí)間幀數(shù)不等于動(dòng)力學(xué)曲線模擬的開始時(shí)間,那么動(dòng)力學(xué)曲線模擬時(shí)間就等于動(dòng)力學(xué)曲線模擬開始時(shí)間加1,并加上定位器locator1的X軸位移,再減去定位器的X軸位移,加上定位器的Y軸位移,再減去定位器的Y軸位移,加上定位器的Z軸位移,再減去定位器的Z軸位移,如果條件不成立那么動(dòng)力學(xué)曲線模擬時(shí)間等于動(dòng)力學(xué)曲線模擬開始時(shí)間。其目的是使用定位器locator1模擬了動(dòng)力學(xué)曲線模擬的開始時(shí)間,通過使用表達(dá)式將動(dòng)力學(xué)曲線模擬的時(shí)間和當(dāng)前時(shí)間連接,讓動(dòng)力學(xué)曲線的模擬時(shí)間不在受原時(shí)間節(jié)點(diǎn)的限制,能夠即時(shí)的進(jìn)行動(dòng)力學(xué)模擬,使之能在動(dòng)畫制作中進(jìn)行更加直觀的觀察,方便制作節(jié)約時(shí)間。
(二)如何在maya軟件中使用布料系統(tǒng)實(shí)現(xiàn)實(shí)時(shí)動(dòng)力學(xué)
在maya軟件中布料模擬系統(tǒng)也是在動(dòng)畫制作中重要的一個(gè)環(huán)節(jié),布料系統(tǒng)的工作原理和maya軟件中的頭發(fā)系統(tǒng)的工作原理十分類似。也是通過解算后才能展示布料的物理運(yùn)動(dòng)效果,所以實(shí)現(xiàn)maya軟件布料系統(tǒng)的實(shí)時(shí)動(dòng)力學(xué)效果也需要從解算時(shí)間下手。
首先創(chuàng)建一片多邊形面片(pPlane1)并將其分段加高,以便于在模擬布料解算時(shí)能夠有比較精確的效果。調(diào)整好大小及位置之后將其所有屬性都進(jìn)行凍結(jié)變換,讓多邊形面片(pPlane1)的通道欄數(shù)值都?xì)w為默認(rèn)狀態(tài)。然后再次創(chuàng)建球型多邊形物體(pSphere1)將其設(shè)置為被動(dòng)碰撞物體。為多邊形面片(pPlane1)設(shè)置布料模擬命令(創(chuàng)建ncloth),此時(shí)多邊形面片(pPlane1)被設(shè)置成布料模擬物體,在大綱中出現(xiàn)了nucleus1、nRigid1、nCloth1三個(gè)節(jié)點(diǎn)。再次對(duì)多邊形面片(pPlane1)進(jìn)行設(shè)置,進(jìn)入多邊形面片(pPlane1)的點(diǎn)級(jí)別旋轉(zhuǎn)最頂端的頂點(diǎn)設(shè)置變換約束,此時(shí)大綱中出現(xiàn)了dynamicConstraint1節(jié)點(diǎn)。此命令是為了讓布料系統(tǒng)能夠按照設(shè)置進(jìn)行移動(dòng)。創(chuàng)建一個(gè)控制器nurbsCircle1并添加兩個(gè)屬性,第一個(gè)屬性TimeOn為枚舉型作為開關(guān),第二個(gè)屬性位浮點(diǎn)型tm。將大綱中dynamicConstraint1節(jié)點(diǎn)作為子物體設(shè)置到控制器nurbsCircle1的層級(jí)下面為方便以后控制物體。然后對(duì)變換約束產(chǎn)生的dynamicConstraint1節(jié)點(diǎn)進(jìn)行動(dòng)畫設(shè)置播放并測試模擬效果。解算模擬正常后找到nucleus1節(jié)點(diǎn),將其在節(jié)點(diǎn)編輯其中展開能夠看到布料系統(tǒng)的解算時(shí)間和maya軟件的時(shí)間滑塊之間的關(guān)聯(lián)方式。在節(jié)點(diǎn)編輯器中顯示,時(shí)間滑塊將時(shí)間輸入給布料解算系統(tǒng)的當(dāng)前解算開始時(shí)間也就是當(dāng)前時(shí)間選項(xiàng),這表示在時(shí)間滑塊運(yùn)動(dòng)時(shí)布料解算才開始解算。我們需要將nucleus1節(jié)點(diǎn)下的被時(shí)間節(jié)點(diǎn)控制連接的當(dāng)前時(shí)間選項(xiàng)打斷,斷開時(shí)間節(jié)點(diǎn)的控制。此時(shí)當(dāng)前時(shí)間就是解算模擬的開始時(shí)間,打斷了時(shí)間節(jié)點(diǎn)的連接后當(dāng)前時(shí)間選項(xiàng)不受時(shí)間節(jié)點(diǎn)的控制,表明布料解算模擬的開始時(shí)間不再受控制,此時(shí)我們通過MEL命令進(jìn)行連接。
float $tm;
$tm="nurbsCircle1.translateX";
$tm="nurbsCircle1.translateY";
$tm="nurbsCircle1.translateZ";
$tm="nurbsCircle1.rotateX";
$tm="nurbsCircle1.rotateY";
$tm="nurbsCircle1.rotateZ";
$tm="nurbsCircle1.scaleX";
$tm="nurbsCircle1.scaleY";
$tm="nurbsCircle1.scaleZ";
$tm=time1.o;
if(nurbsCircle1.TimeOn==0){
nurbsCircle1.tm+=1;
}
else{
nurbsCircle1.tm=1;
}
以上MEL命令的意思是我們賦值一個(gè)變量,讓布料解算開始的當(dāng)前時(shí)間和變量連接,變量被賦值了控制器的位移和旋轉(zhuǎn)以及縮放屬性,此時(shí)變量的值不為零是跟隨控制的移動(dòng)變化的,也就實(shí)現(xiàn)了在物體運(yùn)動(dòng)的時(shí)候,布料解算系統(tǒng)的開始時(shí)間不再受時(shí)間滑軌的限制。此時(shí)控制布料系統(tǒng)解算開始的時(shí)間是變量,變量不為0時(shí)布料解算的當(dāng)前時(shí)間就不為0也就意味著開始了布料的解算模擬。此時(shí)就能實(shí)現(xiàn)布料解算的實(shí)時(shí)運(yùn)動(dòng),并且控制器的兩個(gè)屬性能夠控制實(shí)時(shí)布料解算的開關(guān),以便于在動(dòng)畫制作中能夠任意打開或者關(guān)閉布料系統(tǒng)的實(shí)時(shí)動(dòng)力學(xué)效果,方便動(dòng)畫師的工作。
到此通過對(duì)IK骨骼和樣條線的設(shè)置以及布料系統(tǒng)的設(shè)置,在maya軟件中實(shí)現(xiàn)了實(shí)時(shí)動(dòng)力學(xué)的效果。并且在maya軟件動(dòng)畫制作中有很多種方法都能夠?qū)崿F(xiàn)實(shí)時(shí)動(dòng)力學(xué)的效果,制作方法千差萬別但最終的目的都是為了能夠使動(dòng)畫制作更加方便和快捷。在眾多的為了能夠使動(dòng)畫制作的過程變得更加容易和輕松方法中,實(shí)時(shí)動(dòng)力學(xué)只是極其微小和冷門的一個(gè)小分支。動(dòng)畫制作產(chǎn)業(yè)是一個(gè)密集型的工作產(chǎn)業(yè),在每一個(gè)環(huán)節(jié)都需要大量的時(shí)間來設(shè)計(jì)和制作。而每一個(gè)能夠行之有效的減少工作量和制作時(shí)間的小技巧,都能夠一點(diǎn)點(diǎn)的節(jié)省動(dòng)畫制作的時(shí)間和減少動(dòng)畫制作的工作量。以此來減少大家的工作負(fù)擔(dān)和節(jié)約工作時(shí)間,使大家的作品能夠達(dá)到預(yù)期的效果。