馬躍
摘要:三維動(dòng)畫制作中,存在著正向動(dòng)力學(xué)與反向動(dòng)力學(xué)兩種控制方式,這兩種控制方式各有特點(diǎn),在實(shí)際項(xiàng)目制作時(shí)更是相輔相成,不可缺少,甚至很多時(shí)候,需要二者不斷轉(zhuǎn)換從而達(dá)到制作目的。該文通過對(duì)Maya骨骼設(shè)置中正向動(dòng)力學(xué)與反向動(dòng)力學(xué)的分析,總結(jié)了正向動(dòng)力學(xué)與反向動(dòng)力學(xué)各自的特點(diǎn),并指出正向動(dòng)力學(xué)與反向動(dòng)力學(xué)在Maya中相互轉(zhuǎn)換的難點(diǎn)所在,最后論述如何通過表達(dá)式實(shí)現(xiàn)無縫轉(zhuǎn)換的制作思路。
關(guān)鍵詞:三維動(dòng)畫;骨骼設(shè)置;IK;FK
中圖分類號(hào):TP37文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)09-2141-03
1正向動(dòng)力學(xué)與反向動(dòng)力學(xué)
在三維軟件中,角色動(dòng)畫的控制方式有兩種,即正向動(dòng)力學(xué)(Forward Kinematics,簡(jiǎn)稱“FK”)與反向動(dòng)力學(xué)(Inverse kinematics,簡(jiǎn)稱“IK”)。其中正向動(dòng)力學(xué)是遵循父子關(guān)系的層級(jí),用父層級(jí)物體帶動(dòng)子層級(jí)的物體;反向動(dòng)力學(xué)一般運(yùn)用在骨骼物體上,是通過先確定末端子骨骼的位置,然后反求推導(dǎo)出其所在骨骼鏈上n級(jí)父骨骼的旋轉(zhuǎn)角度,從而確定整條骨骼鏈形態(tài)的方法。
正向動(dòng)力學(xué)與反向動(dòng)力學(xué)各自有其特點(diǎn),正向動(dòng)力學(xué)計(jì)算簡(jiǎn)單,運(yùn)算速度快,動(dòng)畫時(shí)需從父關(guān)節(jié)到子關(guān)節(jié)逐一指定每個(gè)關(guān)節(jié)的角度;反向動(dòng)力學(xué)求解方程組需要耗費(fèi)相對(duì)較多的計(jì)算機(jī)資源,但隨著計(jì)算機(jī)硬件性能的不斷升級(jí),這個(gè)問題并不明顯。事實(shí)上,正向動(dòng)力學(xué)與反向動(dòng)力學(xué),本身沒有優(yōu)劣之分,我們需要結(jié)合實(shí)際制作項(xiàng)目,具體問題具體分析。例如,人在走路時(shí),手臂進(jìn)行擺動(dòng),這時(shí)肩關(guān)節(jié)帶動(dòng)大臂帶動(dòng)小臂帶動(dòng)手腕進(jìn)行曲線運(yùn)動(dòng),這時(shí)更符合正向動(dòng)力學(xué)的運(yùn)動(dòng)方式;如果使用反向動(dòng)力學(xué),就會(huì)造成更多的關(guān)鍵幀去控制末端骨骼以便精確算出其父關(guān)節(jié)的運(yùn)動(dòng)角度。再如,人在做俯臥撐運(yùn)動(dòng)時(shí)手臂末端關(guān)節(jié)保持在地上,這時(shí)運(yùn)用反向動(dòng)力學(xué),反向求出大臂和小臂的骨骼角度更加方便,而這時(shí)如果運(yùn)用正向動(dòng)力學(xué),通過大臂和小臂的角度變化實(shí)現(xiàn)手保持在底面上的效果就會(huì)非常困難。由此可見,實(shí)際三維動(dòng)畫項(xiàng)目開發(fā)中,應(yīng)靈活運(yùn)用正向動(dòng)力學(xué)與反向動(dòng)力學(xué),選擇適合的動(dòng)畫方法將使工作達(dá)到事半功倍的效果。
在實(shí)際項(xiàng)目制作中,正向動(dòng)力學(xué)與反向動(dòng)力學(xué)是經(jīng)常需要綜合運(yùn)用的,例如制作一個(gè)伸手開門的動(dòng)作,在伸出手放到們把手之前,手臂的運(yùn)動(dòng)更適合使用正向動(dòng)力學(xué),而手放到門把手后開門的動(dòng)作則適合運(yùn)用反向動(dòng)力學(xué),可將手部控制器約束到門把手上,這樣實(shí)現(xiàn)起來更方便。由此可見,正向動(dòng)力學(xué)與反向動(dòng)力學(xué)在三維動(dòng)畫制作中,是非常重要,相互不可替代的,制作動(dòng)畫時(shí),二者需要相輔相成,能夠相互轉(zhuǎn)換。
2正向動(dòng)力學(xué)與反向動(dòng)力學(xué)轉(zhuǎn)換存在的問題
正反向動(dòng)力學(xué)在動(dòng)畫中都是不可或缺的,因此在進(jìn)行三維動(dòng)畫骨骼設(shè)置時(shí),應(yīng)分別設(shè)置正反向動(dòng)力學(xué),并且需要讓其切換自如。在MAYA軟件中,骨骼系統(tǒng)需要與相應(yīng)控制器進(jìn)行連接,以方便動(dòng)畫的設(shè)置。而正向動(dòng)力學(xué)與反向動(dòng)力學(xué)切換的時(shí)候,由于兩套控制器之間無法直接聯(lián)系影響,使得骨骼進(jìn)行正反向動(dòng)力學(xué)切換后,骨骼的位置會(huì)發(fā)生改變,從而增加動(dòng)畫控制的難度,因此如何解決正向動(dòng)力學(xué)與反向動(dòng)力學(xué)的無縫轉(zhuǎn)換是三維動(dòng)畫骨骼控制系統(tǒng)中的關(guān)鍵問題。
3正向動(dòng)力學(xué)與反向動(dòng)力學(xué)無縫轉(zhuǎn)換的實(shí)現(xiàn)
1)實(shí)現(xiàn)思路:之所以造成正向動(dòng)力學(xué)與反向動(dòng)力學(xué)轉(zhuǎn)換時(shí)骨骼發(fā)生變化,就是因?yàn)閮商卓刂葡到y(tǒng)在轉(zhuǎn)換時(shí)所處的位置和角度不同,我們?nèi)绻囍贗K、FK轉(zhuǎn)換之前將他們的位置角度匹配好,然后再進(jìn)行轉(zhuǎn)換的時(shí)候就不存在骨骼位置的跳轉(zhuǎn),而每次通過動(dòng)畫師手動(dòng)去控制位置的匹配會(huì)非常麻煩,我們需要尋找一種更方便的方法來實(shí)現(xiàn)IK、FK轉(zhuǎn)換之前進(jìn)行相應(yīng)控制器的匹配。
2)通過MEL語言實(shí)現(xiàn)IK、FK控制器位置及角度的匹配:MEL語言是maya自己的一套編程語言,在Maya中可通過xform語句設(shè)置或查詢transformation節(jié)點(diǎn)中的任何元素,同時(shí)也能被用來查詢一些不能被直接設(shè)置的數(shù)值,如transformation矩陣或bounding box。這樣就可以通過xform語句來匹配控制器的位置和角度。
在Maya中通過xform語句實(shí)現(xiàn)跟蹤物體的方法:如圖1,場(chǎng)景中創(chuàng)建一個(gè)球體pSphere1,和一個(gè)虛擬物體locator1,如果要實(shí)現(xiàn)使虛擬物體與球體位置進(jìn)行匹配,其方法為,在腳本編輯器中輸入語句:
$abc = `xform -q -ws -t pSphere1`;
xform -ws -t $abc[0] $abc[1] $abc[2] locator1;
圖1
其中第一句語句用來查找目標(biāo)物體在世界坐標(biāo)中的位置坐標(biāo),首先聲明一個(gè)變量abc(變量名稱可自定義),用xform語句獲取pSphere1在世界坐標(biāo)中的位置信息,并賦值給abc變量,然后執(zhí)行第二句語句,將變量abc獲得的pSphere1坐標(biāo)值賦予locator1虛擬物體上,執(zhí)行這兩句命令即可實(shí)現(xiàn)使虛擬物體與球體位置進(jìn)行匹配,如圖2。
圖2
基于以上分析結(jié)果,我們就不難實(shí)現(xiàn)正向動(dòng)力學(xué)與反向動(dòng)力學(xué)的相互無縫切換,首先我們需要建立IK極向量控制器的跟蹤物體(locator),將其成為大臂子物體,胳膊在發(fā)生變化時(shí),跟蹤體仍保持原先與骨骼的相對(duì)位置,手腕部的IK控制器和FK控制器位置和角度已經(jīng)是完全一致的,因此手腕的IK控制器和FK控制器互為跟蹤物體。這樣當(dāng)FK切換IK時(shí),先用xform語句查找跟蹤體的世界坐標(biāo),并將數(shù)值賦予給相對(duì)應(yīng)的控制器,然后執(zhí)行切換到IK控制,這樣FK切換到IK就是無縫切換了。同理,為大臂關(guān)節(jié)和肘關(guān)節(jié)創(chuàng)建FK控制器的跟蹤物體,并分別成為大臂骨骼、肘部骨骼的子物體,當(dāng)IK切換到FK時(shí),先用xform語句查找跟蹤體的世界坐標(biāo),并將數(shù)值賦予給相對(duì)應(yīng)的控制器,然后執(zhí)行切換到FK控制,從而實(shí)現(xiàn)IK到FK的無縫切換。FK、IK相互無縫轉(zhuǎn)化的MEL偽代碼如下:
$變量IK_FK = `賦值為IKFK控制器下的IKFK轉(zhuǎn)換屬性`;
//FK到IK無縫轉(zhuǎn)換//
if($變量IK_FK==0)
{
$變量IK_t_L = `xform查詢手腕FK控制器在世界坐標(biāo)中的位置信息`;
xform將得到的世界坐標(biāo)系中的位置信息$變量IK_t_L[0] $變量IK_t_L[1] $變量IK_t_L[2]賦值給IK手腕控制器;
$變量IK_ro_L = `xform查詢手腕FK控制器在世界坐標(biāo)中的旋轉(zhuǎn)信息`;
xform將得到的世界坐標(biāo)系中的旋轉(zhuǎn)信息$變量IK_ro_L[0] $變量IK_ro_L[1] $變量IK_ro_L[2]賦值給IK手腕控制器;
$變量ArmIKCon_t_L = `xform查詢極向量控制器跟蹤物體在世界坐標(biāo)中的位置信息`;
xform將得到的世界坐標(biāo)系中的位置信息$變量ArmIKCon_t_L [0] $變量ArmIKCon_t_L [1] $變量ArmIKCon_t_L [2]賦值給極向量控制器;
轉(zhuǎn)換為IK控制;};
//IK到FK無縫轉(zhuǎn)換//
if($變量IK_FK==1)
{
$變量Arm_FK_ro_L = `xform查詢大臂跟蹤物體在世界坐標(biāo)中的旋轉(zhuǎn)信息`;
xform將得到的世界坐標(biāo)系中的旋轉(zhuǎn)信息$變量Arm_FK_ro_L[0] $變量Arm_FK_ro_L[1] $變量Arm_FK_ro_L[2]賦值給大臂FK控制器;
$變量Elbow_FK_ro_L = `xform查詢肘部跟蹤物體在世界坐標(biāo)中的旋轉(zhuǎn)信息`;
xform將得到的世界坐標(biāo)系中的旋轉(zhuǎn)信息$變量Elbow_FK_ro_L[0] $變量Elbow_FK_ro_L[1] $變量Elbow_FK_ro_L[2]賦值給肘部FK控制器;
$變量Hand_FK_ro_L = `xform查詢手腕跟蹤物體在世界坐標(biāo)中的旋轉(zhuǎn)信息`;
xform將得到的世界坐標(biāo)系中的旋轉(zhuǎn)信息$Hand_FK_ro_L[0] $Hand_FK_ro_L[1] $Hand_FK_ro_L[2]賦值給手腕FK控制器;
轉(zhuǎn)換為FK控制;};
4結(jié)束語
通過MEL表達(dá)式,實(shí)現(xiàn)Maya動(dòng)畫中正向動(dòng)力學(xué)與反向動(dòng)力學(xué)之間的無縫轉(zhuǎn)換,
有效的解決了實(shí)際制作中IK、FK轉(zhuǎn)換時(shí)骨骼位置改變的問題,優(yōu)化了骨骼設(shè)置,為后面動(dòng)畫制作流程提供了更方便的控制方案,使動(dòng)畫控制起來更加靈活、容易,能夠有效的提高動(dòng)畫制作效率,達(dá)到事半功倍的作用。
參考文獻(xiàn):
[1]王澄宇.Maya深入精髓[M].北京:北京科海電子出版社,2005.
[2] Wavefront Inc.Maya Using maya polygonal modeling[EB/OL].http:// wenku.baidu.com/view/ec608169011ca300a6c39051.html
[3]司紀(jì)濤.三維動(dòng)畫與三維特技[J].電視字幕特技與動(dòng)畫,1995(2).
[4]王琦.Autodesk Maya 2008標(biāo)準(zhǔn)培訓(xùn)教材[M].北京:人民郵電出版社,2008.