摘要:本文研究了怎樣把現(xiàn)有的人體運(yùn)動數(shù)據(jù)重新定向到新的動畫角色對象上,并實現(xiàn)了一個原型系統(tǒng)——盼盼三維角色動畫系統(tǒng)。通過這種方法, 用戶只需要從動畫庫中選擇所需的人體運(yùn)動,便可方便地控制任意三維動畫角色的運(yùn)動和變形,從而重用現(xiàn)存的人體運(yùn)動數(shù)據(jù)去控制新的角色,創(chuàng)作出一些夸張的動畫效果。
關(guān)鍵詞:運(yùn)動重用 三維角色 計算機(jī)動畫 人體動畫
一、引言
在近十幾年里,計算機(jī)動畫技術(shù)得到了突飛猛進(jìn)的發(fā)展,以動畫卡通、網(wǎng)絡(luò)游戲、手機(jī)游戲、多媒體產(chǎn)品等為代表的動漫產(chǎn)業(yè)是21世紀(jì)知識經(jīng)濟(jì)的核心產(chǎn)業(yè),被稱為21世紀(jì)最有希望的朝陽產(chǎn)業(yè),這場“后現(xiàn)代產(chǎn)業(yè)浪潮”不僅給全球經(jīng)濟(jì)戰(zhàn)略結(jié)構(gòu)帶來了根本性轉(zhuǎn)變,也為進(jìn)入新世紀(jì)的中國經(jīng)濟(jì)創(chuàng)造了一次千載難逢的歷史發(fā)展機(jī)遇。
但是,目前的動畫技術(shù)還遠(yuǎn)沒達(dá)到理想的地步。計算機(jī)輔助二維動畫具有制作相對方便、制作成本低、對制作和運(yùn)行的硬件環(huán)境要求較低等優(yōu)點(diǎn)。但是由于傳統(tǒng)的二維對象缺少顯式的三維信息,使得自動生成好的中間幀畫面非常困難,比如在變化過程中,特別是那些非平行于畫面的變換,引起的起各幀畫面之間對象的對應(yīng)問題、剪影輪廓的變化問題、各個部分的自遮擋問題、保持形狀比例和體積問題等等,都是研究者們一直試圖解決的難點(diǎn)問題。
計算機(jī)動畫之所以有那么強(qiáng)大的表現(xiàn)能力,各式各樣逼真的模型扮演著舉足輕重的地位。這些模型大多由獨(dú)立的動畫軟件,如3DSMax、Maya、Softimage等進(jìn)行設(shè)計。怎樣給一個靜態(tài)的模型賦予生命力,并讓它動起來一直是圖形學(xué)研究者感興趣的研究課題。三維動畫制作系統(tǒng)中,使用關(guān)節(jié)骨架控制三維動畫角色已非常流行,動畫師可以非常容易地設(shè)置和控制三維角色關(guān)節(jié)進(jìn)行動畫控制。但是準(zhǔn)確地控制三維模型的變形和運(yùn)動使其符合實際的物理規(guī)律,特別是想要達(dá)到實時的要求,難度很大。一種解決方法為采用自動角色動畫。角色動畫動包括骨骼動畫和頂點(diǎn)動畫。骨骼動畫把整個人體按生理結(jié)構(gòu)分為許多部分(圖1-2), 每個部分都有自己的幾何形體,然后再用數(shù)據(jù)結(jié)構(gòu)把所有的部分合理地組成為一個有層次的整體,例如,上臂連著前臂, 前臂連著手。骨骼動畫與頂點(diǎn)動畫相比,占用空間小,因為它不需要象頂點(diǎn)動畫那樣要存儲每一幀的各個頂點(diǎn)的數(shù)據(jù),而是只需要存儲每一幀的骨骼的數(shù)據(jù)。骨骼的數(shù)據(jù)量與頂點(diǎn)的數(shù)據(jù)量相比,要少得多。所以骨骼動畫有很多優(yōu)勢,不管是在游戲、電影動畫還是虛擬現(xiàn)實中,生動逼真的動畫(人、動物等)會使之增色不少。當(dāng)然骨骼動畫處理技術(shù)難度也很高,它需要解決的一個重要的問題是:如何得到和模型相關(guān)聯(lián)的骨架?
本文研究了把現(xiàn)有的人體運(yùn)動數(shù)據(jù)重新定向到新的動畫角色對象上。通過這種方法,動畫師能夠利用現(xiàn)存的BVH人體運(yùn)動數(shù)據(jù)去創(chuàng)造新的動畫。動畫角色對象常被賦予復(fù)雜的非剛體運(yùn)動方式以達(dá)到夸張的效果,我們實現(xiàn)了三維角色的自動綁定,使之能做到局部的非剛體變形描述。若要生成新的動畫,只需要從動畫庫中選擇用戶所需的人體運(yùn)動,便可方便地控制新的三維動畫角色的運(yùn)動和變形。人體的運(yùn)動數(shù)據(jù)可以來源于運(yùn)動捕捉,也可以從現(xiàn)存的動畫和影片視頻中通過圖像處理和計算機(jī)視覺的方法來獲取;谶@些素材,我們可以得到運(yùn)動的素材庫,作為動畫師創(chuàng)作新動畫的來源,從而豐富動畫產(chǎn)品的多樣化和體現(xiàn)制作者的創(chuàng)造性思維。在如今的計算機(jī)動畫中,建立模型的過程已經(jīng)變得比較簡單。但是如果要讓模型動起來,還需要人們手動去嵌入骨架,并且定義骨架驅(qū)動表面皮膚的每一個細(xì)節(jié)。這個復(fù)雜繁瑣的過程只能由專業(yè)的動畫師來完成,對于一些初學(xué)者來說是可望而不可及的。我們實現(xiàn)的系統(tǒng)可以讓一個靜態(tài)的模型可以根據(jù)給定的運(yùn)動數(shù)據(jù)進(jìn)行所需要的運(yùn)動。整個過程由程序自動實現(xiàn),不需要人手動來操作它。這樣的創(chuàng)新使它能夠表現(xiàn)更加復(fù)雜的動畫,因此不僅能夠為專業(yè)動畫師所用,而且讓初學(xué)者也能體驗到自己設(shè)計動畫的樂趣。
二、相關(guān)工作
在骨架提取方面,已經(jīng)有很多自動生成骨架的方法。①②③Baran等的Pinocchio系統(tǒng)創(chuàng)造性地提出了骨架嵌入的方法。在自動角色動畫方面,骨架嵌入比骨架提取要好的原因是對于復(fù)雜骨架的角色,骨架提取可能會產(chǎn)生不同的拓?fù)浣Y(jié)構(gòu),這就讓使用者很難將原來有的骨架運(yùn)動數(shù)據(jù)運(yùn)用到其中來。雖然可以通過附屬肢體模板來鑒別復(fù)雜的附屬肢體,但是由于拓?fù)浣Y(jié)構(gòu)的復(fù)雜性,自動生成時也會產(chǎn)生各種不同的誤差。骨架嵌入相對于骨架提取的另一個優(yōu)勢就是它能夠在骨架中定義角色所需要的很多的結(jié)構(gòu)信息,這是在提取的純幾何骨架圖中難以得到的。
幾乎所有的網(wǎng)格變形技術(shù),無論是基于表面的還是基于體積的,都可以用來作為基于骨架運(yùn)動動畫中的對表面進(jìn)行蒙皮。④⑤不幸的是,到目前為止,這些方法都不能實現(xiàn)實時的動畫。Baran等的線性混合蒙皮(LBS)具有簡單高效并且能夠利用GPU進(jìn)行運(yùn)算,并可以根據(jù)骨架進(jìn)行子空間變形等優(yōu)點(diǎn)。雖然在質(zhì)量上的不能夠達(dá)到很好的效果,但是它仍然成為在實踐應(yīng)用中最常用的方法。所以我們的系統(tǒng)采用該方法。⑥
三、原型系統(tǒng)設(shè)計設(shè)計過程
對于輸入的三維角色模型,我們首先嵌入骨架,然后通過定義骨骼運(yùn)動對表面網(wǎng)格上每個頂點(diǎn)的變化的影響權(quán)值,將表面皮膚依附在骨骼上。對于不同的角色,我們建立不同的罰函數(shù)去懲罰那些我們不期望的骨架嵌入方式;跇颖居弥С窒蛄繖C(jī)的方法求得最大邊緣解,然后對不同罰函數(shù)賦予不同的權(quán)值。用人工智能中A*啟發(fā)式的方法在指數(shù)級的搜索空間里加速尋找最優(yōu)的骨架嵌入方式。在蒙皮階段用熱擴(kuò)散方程的方法去計算骨架運(yùn)動時每一塊骨骼對表面網(wǎng)格上頂點(diǎn)的影響權(quán)值。據(jù)骨架的變化情況,插值計算出骨架的“蒙皮”模型的各個頂點(diǎn)的位置變化。對于某個特定骨骼,“蒙皮”模型的頂點(diǎn)變換矩陣=初始姿勢的變換矩陣的逆×姿勢變換后的矩陣。另外還要考慮到一個頂點(diǎn)可能受多個骨骼運(yùn)動的共同影響。
1.骨架嵌入
由于骨架嵌入需要將骨架重新定義大小和定位使得它能夠正確的嵌入到模型當(dāng)中,所以它能公式化為一個優(yōu)化的過程:計算關(guān)節(jié)點(diǎn)的位置和朝向使它能夠更好的適合于給定的模型。但是這個優(yōu)化是一個三維空間的問題,所以連續(xù)優(yōu)化的方法是不可行的。因此可以建立一個用頂點(diǎn)表示潛在關(guān)節(jié)點(diǎn),用邊表示獨(dú)立的骨骼的圖來簡化優(yōu)化問題。建立這樣一個圖是具有一定挑戰(zhàn)的,因為我們可以用未知數(shù)量的頂點(diǎn)和邊來表示相同模型的關(guān)節(jié)和骨架。我們在近似模型垂直等分的平面上建立中軸面,并且建立圓心在中軸面上的圓的一個特定的集合,將這些圖的圓心連接起來形成一個圖。然后使用自定義的離散的罰函數(shù)來最優(yōu)化的骨架嵌入這個圖。為了幫助優(yōu)化,在給定的骨架中可以包括一些關(guān)節(jié)點(diǎn)的額外的信息。比如說對稱的部位應(yīng)該以相同的名稱命名,又比如如果一個關(guān)節(jié)被命名為腳,那么就表示它應(yīng)該事在模型中位置最低的一個關(guān)節(jié)。由于定義的罰函數(shù)是獨(dú)立于具體的模型的,所以并沒有減弱它的通用性。
2.簡化骨架
前面的步驟建立了幾何圖G=(V, E)來表示骨架,我們需要將它嵌入到我們給定的骨架當(dāng)中。給定骨架原先是以有s個節(jié)點(diǎn)的樹的形式給出(在一般人形的骨架上會取s=18),但是如果這s個節(jié)點(diǎn)沒有經(jīng)過簡化,嵌入的優(yōu)化過程是很難處理的。因此我們需要一個簡單的骨架,所以在嵌入骨架之前,需要將骨架簡化。所有的自由度為2的關(guān)節(jié)都將被除去(比如說膝關(guān)節(jié)), 關(guān)節(jié)兩端的骨骼塊被連在一起。簡化后的骨架將會只有r個連接點(diǎn)。那么骨架嵌入以后缺少某些必要關(guān)節(jié)的骨架怎么讓角色動起來呢?我們根據(jù)未簡化骨架上關(guān)節(jié)在整條邊上的比例,重新計算出該關(guān)節(jié)在簡化骨架上的位置,然后插入到骨架中。在我們的系統(tǒng)中,簡化的骨架中r=7。簡化后的結(jié)果就是我們可以將簡化的骨架嵌入到系統(tǒng)中以最小化罰函數(shù)懲罰的對象。否則這樣的工作是很難實現(xiàn)的。
3.離散的嵌入骨架和優(yōu)化
一般不可能計算離散的嵌入方式時使罰函數(shù)最小,因為嵌入的數(shù)量是指數(shù)級的。但是可以用類似分支定界的方法在問題的解空間樹T上搜索問題解。我們使用這樣一種方法:首先根據(jù)部分嵌入的下界估計保存優(yōu)先級隊列。然后在每一步,取出在隊列中最好的部分嵌入,將它展開,與下一個關(guān)節(jié)進(jìn)行計算,然后將結(jié)果保存在隊列中。所以,第一個被完整展開的嵌入就是最好的嵌入。為了加速算法并且盡可能少的占用內(nèi)存,如果部分嵌入有一個很高的下界,那么它將被立即拒絕并不在嵌入到隊列中。雖然這種算法在最壞的情況下依然是指數(shù)級的,但是在我們測試實際情況它都是很快的。
在骨架嵌入前將骨架進(jìn)行了簡化,省略了很多的關(guān)節(jié),比如說膝關(guān)節(jié),但簡單骨架嵌入以后,要讓角色真正的動起來,還是需要重新插入這些關(guān)節(jié)。在這里可以通過按比列分割骨架圖中路徑最短的邊來得到。我們希望嵌入后的骨架能夠很好的滿足角色的形態(tài)比列,但是,有時候骨架并不能很好的適應(yīng)我們的角色。同時,一些小的被忽略的骨骼塊并沒有被賦予正確的朝向。骨架優(yōu)化的過程就是為了解決這些問題的提出的。
4.蒙皮
我們的角色和嵌入的骨架在將皮膚依附到骨架上之前是沒有任何關(guān)聯(lián)的。骨架并不能夠驅(qū)動角色運(yùn)動。因此我們需要指定骨架運(yùn)動與角色表面網(wǎng)格變化之間的聯(lián)系。雖然在這里我們可以用很多的網(wǎng)格編輯技術(shù)來進(jìn)行網(wǎng)格變形,但是我們選擇標(biāo)準(zhǔn)的LBS方法:假設(shè)表示網(wǎng)格頂點(diǎn)j的坐標(biāo),表示第i塊骨骼的變形矩陣,表示第i塊骨骼對第j個網(wǎng)格頂點(diǎn)的變形權(quán)值。LBS把j變形后的位置表示為。我們的目標(biāo)就是找到每一塊骨骼變化對所有頂點(diǎn)的影響權(quán)值。我們所期望權(quán)值有以下幾個特性:首先它應(yīng)該與網(wǎng)格的大小無關(guān),其次權(quán)值的變化應(yīng)該平滑,最后關(guān)節(jié)間兩塊骨骼的移動寬度必須與關(guān)節(jié)到表面網(wǎng)格的距離成一定的比例。即使有一個方案能夠得到權(quán)值使得骨骼能夠滿足這些特性,但是它們很可能失敗因為他們忽略了角色的的幾何學(xué)特性。作為代替,我們用熱平衡原理來尋找權(quán)值。假設(shè)我們把角色的體積認(rèn)為是一個不占容積的熱導(dǎo)體,然后我們強(qiáng)迫骨骼i的溫度為1,而其他骨骼的溫度為0。當(dāng)熱平衡以后,我們就可以把表面上每個頂點(diǎn)的溫度值作為該骨骼對它影響的權(quán)值。
四、實驗結(jié)果
盼盼動畫系統(tǒng)設(shè)計時主要依照三個標(biāo)準(zhǔn):① 廣泛性。適應(yīng)于盡可能多的模型。對一些結(jié)構(gòu)比較特殊,或者會產(chǎn)生歧義的模型能夠盡可能的正確嵌入骨架。②質(zhì)量。關(guān)鍵在于蒙皮的技術(shù),讓表面皮膚能根據(jù)骨架運(yùn)動驅(qū)動正確的位和形變,以期與視頻游戲中的模型相媲美。③ 性能。運(yùn)行在大多數(shù)的家用計算機(jī)上。 在盼盼動畫系統(tǒng)里對采用的模型進(jìn)行了一些簡單的限制:模型必須是全封閉的,并且是以最自然的姿勢站立,這樣能大幅度的提高骨架嵌入的準(zhǔn)確性。當(dāng)然模型需要是一個有四肢能被嵌入人體骨架的。
圖3為盼盼三維角色動畫系統(tǒng)的一張截圖畫面。系統(tǒng)主要包括模型選取、BVH運(yùn)動數(shù)據(jù)選取、運(yùn)行、視圖操作、工具條等功能。該系統(tǒng)的運(yùn)行環(huán)境為英特爾酷睿雙核CPU,主頻為1.73Mhz,內(nèi)存為1GB。因為盼盼動畫系統(tǒng)是單線程的,所以雙核的CPU幾乎沒有什么影響。測試發(fā)現(xiàn),計算的主要消耗花費(fèi)在分離過程中距離場的計算上。
五、展望
雖然盼盼動畫系統(tǒng)在人體動畫領(lǐng)域取得了一定的進(jìn)展,但是它依然存在著不足,限制著它的應(yīng)用范圍。在技術(shù)方面,建立骨架圖的時候可以用橢圓來建立初始骨架圖。在應(yīng)用方面,首先它的蒙皮質(zhì)量在某些地方還可以改進(jìn),可以通過在骨架上自動蒙皮的技術(shù)來提高質(zhì)量;其次,它的骨架中的關(guān)節(jié)與一般人體的關(guān)節(jié)有出入,不能由一般人體骨架運(yùn)動的數(shù)據(jù)來驅(qū)動,這樣就不能很好地利用網(wǎng)絡(luò)上大量的表現(xiàn)復(fù)雜運(yùn)動的運(yùn)動數(shù)據(jù)。另外,盼盼動畫系統(tǒng)依然不能夠表現(xiàn)手部動畫、臉部動畫這些需要細(xì)節(jié)的動作。如果能在后期中加入這些方面的應(yīng)用,一定能夠得到更為廣泛的應(yīng)用,并且大大減少人體動畫開發(fā)的整個周期。
注釋
、貺iu P, Wu F, Ma W, Liang R, Ouhyoung M, “Automatic animation skeleton using repulsive force field”, Proc. of Pacific Graphics’2003, pp. 309-413.
、赥eichmann M, Teller S. “Assisted articulation of closed polygonal models.” Proc. of Computer Animation and Simulation’98, pp. 87-102.
、跭atz S, Tal A, “Hierarchical mesh decomposition using fuzzy clustering and cuts”, ACM Transactions on Graphics, 2003, 22(3): 954-961.
、躓ade L. Automated generation of control skeletons for use in animation. PhD thesis, The Ohio State University, 2000.
、軧aran I, Popovi? J, “Automatic rigging and animation of 3D characters”, ACM Transactions on Graphics, 2007, 26(3):72.
、轐ry P, James D, Pai D, “EigenSkin: Real time large deformation character skinning in hardware”, Proc. of Symposium on Computer Animation (SCA)’2003, pp. 153-160.
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。