国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

三維計(jì)算機(jī)動(dòng)畫中的關(guān)節(jié)動(dòng)畫關(guān)鍵算法的分析探討

2015-05-30 07:26方向
藝術(shù)科技 2015年12期

方向

摘 要:本文主要針對(duì)計(jì)算機(jī)動(dòng)畫中的關(guān)節(jié)動(dòng)畫,以關(guān)節(jié)鏈結(jié)構(gòu)為基本單位架構(gòu)骨架系統(tǒng),對(duì)于角色動(dòng)畫中關(guān)節(jié)動(dòng)畫的一些關(guān)鍵算法進(jìn)行了分析探討。

關(guān)鍵詞:關(guān)節(jié)動(dòng)畫;關(guān)鍵算法;逆運(yùn)動(dòng)法

三維計(jì)算機(jī)動(dòng)畫中,基于人體運(yùn)動(dòng)的角色動(dòng)畫具有廣泛的應(yīng)用前景,在影視制作、計(jì)算機(jī)游戲、廣告動(dòng)畫設(shè)計(jì)、虛擬現(xiàn)實(shí)等諸多領(lǐng)域都有著重要的用途。關(guān)節(jié)動(dòng)畫是計(jì)算機(jī)動(dòng)畫中富有挑戰(zhàn)性的技術(shù)之一。在關(guān)節(jié)動(dòng)畫中,以關(guān)節(jié)鏈結(jié)構(gòu)為基本單位構(gòu)架骨架系統(tǒng),用運(yùn)動(dòng)學(xué)方法來控制運(yùn)動(dòng)。

計(jì)算機(jī)動(dòng)畫一般包含四個(gè)重要的過程:造型,動(dòng)畫,繪制和合成。計(jì)算機(jī)動(dòng)畫中研究的首要內(nèi)容是動(dòng)畫,即生成物體的各種運(yùn)動(dòng)和變化,或者稱為運(yùn)動(dòng)控制。本文在研究關(guān)節(jié)動(dòng)畫時(shí),主要涉及的也只有動(dòng)畫部分。

1 骨骼皮膚動(dòng)畫

三維角色動(dòng)畫本質(zhì)上是擬人動(dòng)畫——從運(yùn)動(dòng)考慮。它從誕生開始就得到廣泛的應(yīng)用,并且在不同的應(yīng)用領(lǐng)域有不同的技術(shù)要求。例如,在電影、仿真應(yīng)用中,要求極具真實(shí)感的角色;而游戲、輔助訓(xùn)練應(yīng)用中,要求在保證速度的基礎(chǔ)上具有較好的真實(shí)感。不過相同的是運(yùn)動(dòng)控制和角色造型是角色動(dòng)畫的關(guān)鍵和難點(diǎn)。

從角色造型過程中的分層角度可以把造型建模技術(shù)分為四種:桿狀模型,皮膚模型,骨骼皮膚模型和多層模型。根據(jù)角色表達(dá)方式一一建模技術(shù)的不同,角色動(dòng)畫也可以分為:桿狀動(dòng)畫,頂點(diǎn)動(dòng)畫,骨骼皮膚動(dòng)畫和多層模型動(dòng)畫四種。

骨骼皮膚動(dòng)畫包含兩部分信息:一是層次化骨架;另一個(gè)部分是蒙在骨架上的皮膚。用骨骼承載運(yùn)動(dòng),用皮膚模型表達(dá)角色,再利用骨骼控制皮膚變形,就達(dá)到了角色動(dòng)畫模擬的目的。

由于在骨骼皮膚動(dòng)畫中,運(yùn)動(dòng)的控制實(shí)際上是對(duì)骨骼運(yùn)動(dòng)的控制。人體的整個(gè)骨架系統(tǒng)可以看作很多個(gè)關(guān)節(jié)鏈結(jié)構(gòu)組成的N-元樹結(jié)構(gòu),或者說骨架系統(tǒng)可以分解為很多個(gè)相關(guān)聯(lián)的關(guān)節(jié)結(jié)構(gòu)。因此,本文中的關(guān)節(jié)動(dòng)畫和骨骼動(dòng)畫在某種意義上是等價(jià)的。

2 骨架系統(tǒng)的建立和運(yùn)動(dòng)控制

關(guān)節(jié)鏈結(jié)構(gòu)是由一系列依次相連的剛體連接而成的開鏈,兩剛體的連接點(diǎn)成為關(guān)節(jié),連接兩相鄰關(guān)節(jié)的剛體成為鏈桿,可抽象看作一條線段。在計(jì)算機(jī)動(dòng)畫中,一般把關(guān)節(jié)限制為旋轉(zhuǎn)關(guān)節(jié),即相鄰的剛體在其連接關(guān)節(jié)處只能作相對(duì)旋轉(zhuǎn)運(yùn)動(dòng),而不能做平移等其他運(yùn)動(dòng)。

在關(guān)節(jié)鏈結(jié)構(gòu)中有兩個(gè)端點(diǎn),關(guān)節(jié)鏈的起點(diǎn)為基結(jié)點(diǎn),其自由末端為末端影響器;能夠完全確定關(guān)節(jié)鏈結(jié)構(gòu)狀態(tài)所需要的獨(dú)立變量個(gè)數(shù)稱為自由度;關(guān)節(jié)鏈結(jié)構(gòu)的所有可能形態(tài)的向量空間稱為狀態(tài)空間,其每一個(gè)向量定義一種形態(tài)。

建立運(yùn)動(dòng)方程:

其中,:關(guān)節(jié)鏈末端影響器關(guān)于世界坐標(biāo)系的方位;:關(guān)節(jié)鏈結(jié)構(gòu)的狀態(tài)向量。運(yùn)動(dòng)方程式關(guān)節(jié)鏈結(jié)構(gòu)的顯式運(yùn)動(dòng)描述,根據(jù)提出的問題不同,有兩種求解方法,實(shí)際上是兩類問題的不同求解方法——正向運(yùn)動(dòng)學(xué)法(Forward kinematics)和逆向運(yùn)動(dòng)學(xué)法(Inverse Kinematics)。

我們得出了求解單鏈結(jié)構(gòu)的一般方法,進(jìn)而得出單鏈結(jié)構(gòu)的運(yùn)動(dòng)控制。但是角色動(dòng)畫中的骨架一般都不是單鏈結(jié)構(gòu),往往是很復(fù)雜的,而且是多分支關(guān)節(jié)結(jié)構(gòu)的。采用的方法是把復(fù)雜的多分支骨架系統(tǒng)分解成若干個(gè)單鏈結(jié)構(gòu),即把骨架的求解問題轉(zhuǎn)化為單鏈結(jié)構(gòu)問題來處理。

一般情況下,角色的骨架結(jié)構(gòu)在一些關(guān)節(jié)處具有多個(gè)分枝,而所有的鏈桿在關(guān)節(jié)處形成了一個(gè)網(wǎng)狀結(jié)構(gòu)。為此,我們把復(fù)雜骨架表達(dá)為一關(guān)節(jié)的樹狀層次結(jié)構(gòu),樹中每一結(jié)點(diǎn)均對(duì)應(yīng)于一個(gè)關(guān)節(jié)。描述一個(gè)簡(jiǎn)化之后的人體骨架樹層次結(jié)構(gòu)。這樣的骨架樹結(jié)構(gòu)中有一個(gè)根結(jié)點(diǎn),從根節(jié)點(diǎn)出發(fā)遍歷骨架樹可以達(dá)到任何一個(gè)結(jié)點(diǎn);從任何結(jié)點(diǎn)出發(fā)向上搜索可到任意一個(gè)結(jié)點(diǎn),直至根結(jié)點(diǎn)。骨架的分解過程,實(shí)際上就是選擇若干結(jié)點(diǎn)對(duì)。每一對(duì)結(jié)點(diǎn)確定一條開得單鏈結(jié)構(gòu),其中一個(gè)結(jié)點(diǎn)作為基結(jié)點(diǎn),另一個(gè)結(jié)點(diǎn)作為末端影響器。在選擇結(jié)點(diǎn)對(duì)時(shí),要保證基結(jié)點(diǎn)在骨架樹結(jié)構(gòu)中的層次高于末端影響器對(duì)應(yīng)結(jié)點(diǎn)的層次。這樣骨架就被分解成若干個(gè)單鏈結(jié)結(jié)構(gòu),進(jìn)而分別采用單鏈結(jié)構(gòu)的運(yùn)動(dòng)控制來完成骨架系統(tǒng)的運(yùn)動(dòng)控制。根據(jù)樹狀層次結(jié)構(gòu),正運(yùn)動(dòng)學(xué)方法的求解仍然是顯示的;對(duì)于逆運(yùn)動(dòng)學(xué)方法,則需要采用分解方法來分別處理。在角色動(dòng)畫的應(yīng)用中,一般采用逆運(yùn)動(dòng)學(xué)方法。由于運(yùn)動(dòng)捕捉技術(shù)的發(fā)展,獲取人體骨架中各個(gè)狀態(tài)參數(shù)值是一件比較容易的事,而只設(shè)定末端影響器的位置參數(shù)對(duì)于動(dòng)畫制作者來說很容易,相對(duì)設(shè)定整個(gè)骨架的狀態(tài)參數(shù)。

舉個(gè)例子來說明:動(dòng)畫制作者設(shè)定右手骨運(yùn)動(dòng)后的位置參數(shù),我們就可以選擇“髖骨(基結(jié)點(diǎn))—脊椎骨—右肩骨—右上臂—右前臂—右手骨(末端影響器)”這條單鏈結(jié)構(gòu),用逆運(yùn)動(dòng)學(xué)方法處理問題。關(guān)節(jié)鏈結(jié)構(gòu)是一種冗余結(jié)構(gòu),運(yùn)動(dòng)求解往往有多組解。如果采用單鏈結(jié)構(gòu),最終使得髖骨的狀態(tài)發(fā)生變化,則需要處理由于髖骨的狀態(tài)變化而影響的整個(gè)人體的狀態(tài)變化。假如動(dòng)畫制作者同時(shí)限定了右肩骨狀態(tài)參數(shù)沒有變化,則選擇“右上臂(基結(jié)點(diǎn))—右前臂—右手骨(末端影響器)”這條單鏈結(jié)構(gòu)來處理問題。因此,在具體的問題求解中需要結(jié)合問題來選擇單鏈結(jié)構(gòu)。

關(guān)節(jié)模型的定義如下:

class CAnimationBone

{……

private:

//本地位移

CVector4f mTranslation;

//本地旋轉(zhuǎn),四元數(shù)格式

CVector4f mRotation;

//全局變換矩陣

float mGlobalMatrix[16];

//子節(jié)點(diǎn)數(shù)組

CAnimationBone*

mChildList;

//子節(jié)點(diǎn)的數(shù)目

Unsigned char

mNumChildren;

//父節(jié)點(diǎn)

CAnimationBone*

mParent;

……};

其中mTranslation是骨骼相對(duì)于它的父節(jié)點(diǎn)的位移,mRotation是骨骼相對(duì)于其父節(jié)點(diǎn)的旋轉(zhuǎn)。它們的幾何意義分別是骨骼的長(zhǎng)度和兩塊骨骼之間關(guān)節(jié)的旋轉(zhuǎn)。mGlobalMatrix是骨骼相對(duì)于全局坐標(biāo)系的變換矩陣。根據(jù)骨架的層次結(jié)構(gòu),結(jié)合骨架系統(tǒng)的知識(shí)可以建立一個(gè)人體的骨架系統(tǒng)。

3 結(jié)語(yǔ)

本文首先介紹了構(gòu)成骨架系統(tǒng)的基本單元——關(guān)節(jié)鏈結(jié)構(gòu)。在此基礎(chǔ)上建立骨架系統(tǒng),從而得出骨架系統(tǒng)的運(yùn)動(dòng)求解的一般方法,即建立對(duì)整個(gè)骨架的運(yùn)動(dòng)控制方法。

參考文獻(xiàn):

[1] 金小剛,鮑虎軍,彭群生.計(jì)算機(jī)動(dòng)畫技術(shù)綜述[J].軟件學(xué)報(bào),1997(04).

[2] Dave Shreiner . OpenGL編程指南[M].北京:機(jī)械工業(yè)出版社,2011.

[3] 宋人杰,史長(zhǎng)東,崔衛(wèi)麗.復(fù)雜場(chǎng)景中多細(xì)節(jié)層次模型生成新算法[J].東北電力大學(xué)學(xué)報(bào),2014(3).