欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法和裝置與流程

文檔序號(hào):11520717閱讀:712來(lái)源:國(guó)知局
動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法和裝置與流程

本發(fā)明涉及計(jì)算機(jī)動(dòng)畫(huà)技術(shù)領(lǐng)域,特別是涉及一種動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法和裝置。



背景技術(shù):

游戲中人物的走動(dòng),跑動(dòng),攻擊等動(dòng)作是必不可少,實(shí)現(xiàn)它們的方法一般采用幀動(dòng)畫(huà)或者骨骼動(dòng)畫(huà)。幀動(dòng)畫(huà)與骨骼動(dòng)畫(huà)的區(qū)別在于:幀動(dòng)畫(huà)的每一幀都是角色特定姿勢(shì)的一個(gè)快照,動(dòng)畫(huà)的流暢性和平滑效果都取決于幀數(shù)的多少。而骨骼動(dòng)畫(huà)則是把角色的各部分身體部件圖片綁定到一根根互相作用連接的“骨頭”上,通過(guò)控制這些骨骼的位置、旋轉(zhuǎn)方向和放大縮小而生成的動(dòng)畫(huà)。

在3d游戲開(kāi)發(fā)過(guò)程中,角色模型的動(dòng)作表現(xiàn)通常是使用骨骼蒙皮動(dòng)畫(huà)來(lái)實(shí)現(xiàn),標(biāo)準(zhǔn)的骨骼動(dòng)畫(huà)是由美術(shù)設(shè)計(jì)人員預(yù)先設(shè)計(jì)然后再輸出到游戲應(yīng)用程序當(dāng)中,通過(guò)程序運(yùn)算來(lái)播放模型在每一幀的動(dòng)作表現(xiàn)。然而,預(yù)先設(shè)計(jì)好的動(dòng)畫(huà)表現(xiàn)并不能滿(mǎn)足一些特殊的情形,比如隨著人物的轉(zhuǎn)動(dòng),身上的衣物輕盈的飄動(dòng)起來(lái);或者隨著馬匹的跑動(dòng),尾巴隨著跑動(dòng)作不同幅度地?cái)[動(dòng)等等。

動(dòng)態(tài)骨骼動(dòng)畫(huà)適用于這類(lèi)情況,因?yàn)樗墓趋绖?dòng)作表現(xiàn)是在游戲運(yùn)行過(guò)程中根據(jù)關(guān)聯(lián)的骨骼信息動(dòng)態(tài)計(jì)算出來(lái)的。使用動(dòng)態(tài)骨骼除了使動(dòng)畫(huà)模型具有逼真的動(dòng)作表現(xiàn),還具有制作簡(jiǎn)單,控制便捷等特點(diǎn),一般只需要美術(shù)設(shè)計(jì)人員預(yù)先將網(wǎng)格模型各個(gè)頂點(diǎn)的蒙皮信息設(shè)計(jì)好即可直接輸出結(jié)果模型,由程序根據(jù)配置的各類(lèi)參數(shù)控制模型的動(dòng)作表現(xiàn)。

但是,如何合理控制動(dòng)態(tài)骨骼的移動(dòng),以使得動(dòng)態(tài)骨骼所對(duì)應(yīng)的的部分的動(dòng)畫(huà)模型的移動(dòng)能夠更逼真地符合視覺(jué)效果,是動(dòng)態(tài)骨骼技術(shù)面臨的主要問(wèn)題。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的主要目的在于,提供一種動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法和裝置,在本發(fā)明的作用下,通過(guò)控制動(dòng)態(tài)骨骼的移動(dòng),能夠使得所對(duì)應(yīng)的動(dòng)畫(huà)模型的移動(dòng)更為逼真地符合視覺(jué)效果。

根據(jù)本發(fā)明的一個(gè)方面,提供了一種動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法,包括:創(chuàng)建針對(duì)目標(biāo)對(duì)象的骨骼關(guān)節(jié)樹(shù),其中,骨骼關(guān)節(jié)樹(shù)中直接相連的兩個(gè)關(guān)節(jié)中更接近根節(jié)點(diǎn)的關(guān)節(jié)為父關(guān)節(jié),更遠(yuǎn)離根關(guān)節(jié)的關(guān)節(jié)為子關(guān)節(jié);計(jì)算骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息;針對(duì)骨骼關(guān)節(jié)樹(shù)中的至少一個(gè)子關(guān)節(jié),將該子關(guān)節(jié)從當(dāng)前幀到下一幀的位置變換轉(zhuǎn)換為繞該子關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換,從而通過(guò)旋轉(zhuǎn)變換,將子關(guān)節(jié)移動(dòng)到其下一幀的位置。

由此,通過(guò)將關(guān)節(jié)的位置變換轉(zhuǎn)換為繞其父關(guān)節(jié)的旋轉(zhuǎn)變換,可以使得運(yùn)動(dòng)過(guò)程更加平滑,改善視覺(jué)效果。

優(yōu)選地,計(jì)算骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息可以包括:計(jì)算預(yù)定作用力下骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息,其中,預(yù)定作用力可以包括下列至少一項(xiàng):重力;關(guān)節(jié)移動(dòng)過(guò)程中受到的與移動(dòng)方向相反的阻力;以及來(lái)自周?chē)h(huán)境的干擾力。

由此,可以計(jì)算在骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在受到重力、干擾力、阻力等外力作用下在下一幀的位置信息,使得計(jì)算出的位置信息能夠準(zhǔn)確地反映關(guān)節(jié)的實(shí)際運(yùn)動(dòng)情況。

優(yōu)選地,計(jì)算預(yù)定作用力下骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息可以包括:使用如下位置計(jì)算公式計(jì)算關(guān)節(jié)在下一幀的位置信息posn+1,

posn+1=posn+(posn-posn-1)*(1-r)+(gv+d)*δt2

其中,posn+1為關(guān)節(jié)在下一幀的位置信息,posn為關(guān)節(jié)在當(dāng)前幀的位置信息,posn-1為關(guān)節(jié)在上一幀的位置信息,r為阻力作用下的阻力系數(shù),0≤r≤1,gv為重力在關(guān)節(jié)的長(zhǎng)度方向上的法向方向上的重力分力作用下的加速度,d為干擾力作用下的加速度,δt為上一幀與當(dāng)前幀之間的時(shí)間間隔。

優(yōu)選地,該實(shí)現(xiàn)方法還可以包括:使用如下第一修正公式對(duì)計(jì)算得到的關(guān)節(jié)在下一幀的位置信息posn+1進(jìn)行修正,

其中,pos'n+1為關(guān)節(jié)經(jīng)過(guò)補(bǔ)償后在下一幀的位置信息,posp為關(guān)節(jié)的父關(guān)節(jié)的位置信息,len為關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度。

由此,通過(guò)第一位置修正公式可以使得關(guān)節(jié)的長(zhǎng)度在關(guān)節(jié)的運(yùn)動(dòng)過(guò)程中保持不變。

優(yōu)選地,將子關(guān)節(jié)在下一幀的位置信息與當(dāng)前幀的位置信息之間的位置變換轉(zhuǎn)換為繞該子關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換可以包括:根據(jù)子關(guān)節(jié)在當(dāng)前幀的位置信息,確定從父關(guān)節(jié)到子關(guān)節(jié)的當(dāng)前方向向量;根據(jù)子關(guān)節(jié)在下一幀的位置信息以及當(dāng)前幀的位置信息,確定子關(guān)節(jié)在其父關(guān)節(jié)坐標(biāo)系下的移動(dòng)向量;根據(jù)當(dāng)前方向向量和移動(dòng)向量,獲取繞父關(guān)節(jié)進(jìn)行旋轉(zhuǎn)變換的四元數(shù)。由此,可以使用四元數(shù)來(lái)表示繞子關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換。

優(yōu)選地,將子關(guān)節(jié)在下一幀的位置信息與當(dāng)前幀的位置信息之間的位置變換轉(zhuǎn)換為繞該子關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換還可以包括:使用四元數(shù)插值算法對(duì)四元數(shù)進(jìn)行插值運(yùn)算,以得到緩沖四元數(shù);基于緩沖四元數(shù)對(duì)父關(guān)節(jié)和子關(guān)節(jié)進(jìn)行旋轉(zhuǎn)變換。

通過(guò)對(duì)四元數(shù)進(jìn)行插值運(yùn)算,可以對(duì)旋轉(zhuǎn)進(jìn)行緩沖過(guò)濾,以使得運(yùn)動(dòng)關(guān)節(jié)所對(duì)應(yīng)的動(dòng)畫(huà)模型的運(yùn)動(dòng)更加柔順平滑。

優(yōu)選地,該實(shí)現(xiàn)方法還可以包括:消除旋轉(zhuǎn)變換在子關(guān)節(jié)與其父關(guān)節(jié)構(gòu)成的軸向方向上的分量;通過(guò)消除后的旋轉(zhuǎn)變換,將子關(guān)節(jié)移動(dòng)到其下一幀的位置。由此,可以避免子關(guān)節(jié)的自轉(zhuǎn)造成的關(guān)節(jié)絞繞問(wèn)題。

優(yōu)選地,該實(shí)現(xiàn)方法還可以包括:在檢測(cè)到計(jì)算得到的關(guān)節(jié)在下一幀的位置信息與目標(biāo)碰撞體發(fā)生碰撞的情況下,對(duì)關(guān)節(jié)的位置信息進(jìn)行修正,以使得修正后關(guān)節(jié)在下一幀的位置信息基本滿(mǎn)足以下條件:修正后關(guān)節(jié)位于目標(biāo)碰撞體的邊緣;修正后關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度不變。

由此,可以避免出現(xiàn)模型穿透的問(wèn)題,比如人物在跑動(dòng)過(guò)程中,衣服的飄動(dòng)穿透了皮膚、頭發(fā)在人物播放跑動(dòng)動(dòng)作會(huì)嵌入后背等等,這些都是違背現(xiàn)實(shí)世界物體的運(yùn)動(dòng)規(guī)律的,對(duì)視覺(jué)體驗(yàn)造成嚴(yán)重的影響。

優(yōu)選地,關(guān)節(jié)與目標(biāo)碰撞體均為具有預(yù)定半徑的球體,對(duì)關(guān)節(jié)的位置信息進(jìn)行修正可以包括:使用如下第二修正公式對(duì)關(guān)節(jié)的位置進(jìn)行修正:

其中,pos”n+1為關(guān)節(jié)進(jìn)行修正后在下一幀的位置信息,c1為關(guān)節(jié)修正前在下一幀的位置信息,c2為碰撞體的位置信息,r1為關(guān)節(jié)的半徑,r2為碰撞體的半徑,posp為關(guān)節(jié)的父關(guān)節(jié)的位置信息,len為關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度。

優(yōu)選地,該實(shí)現(xiàn)方法還可以包括:從與根關(guān)節(jié)直接相連的關(guān)節(jié)開(kāi)始,逐級(jí)計(jì)算骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息、將該關(guān)節(jié)在下一幀的位置信息與當(dāng)前幀的位置信息之間的位置變換轉(zhuǎn)換為繞該關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換。

由此,通過(guò)循環(huán)體的形式從根骨骼關(guān)節(jié)下的子關(guān)節(jié)開(kāi)始進(jìn)行迭代運(yùn)算,以此模擬整個(gè)骨骼動(dòng)畫(huà)的運(yùn)動(dòng)軌跡。如此一來(lái),既滿(mǎn)足了各骨骼關(guān)節(jié)運(yùn)算的獨(dú)立性,又保證了整棵骨骼關(guān)節(jié)樹(shù)運(yùn)算的順序性。

根據(jù)本發(fā)明的一種動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)裝置,包括:骨骼關(guān)節(jié)樹(shù)創(chuàng)建模塊,用于創(chuàng)建針對(duì)目標(biāo)對(duì)象的骨骼關(guān)節(jié)樹(shù),其中,骨骼關(guān)節(jié)樹(shù)中直接相連的兩個(gè)關(guān)節(jié)中更接近根節(jié)點(diǎn)的關(guān)節(jié)為父關(guān)節(jié),更遠(yuǎn)離根關(guān)節(jié)的關(guān)節(jié)為子關(guān)節(jié);計(jì)算模塊,用于計(jì)算骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息;旋轉(zhuǎn)變換模塊,用于針對(duì)骨骼關(guān)節(jié)樹(shù)中的至少一個(gè)子關(guān)節(jié),將該子關(guān)節(jié)從當(dāng)前幀到下一幀的位置變換轉(zhuǎn)換為繞該子關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換,從而通過(guò)旋轉(zhuǎn)變換,將子關(guān)節(jié)移動(dòng)到其下一幀的位置。

優(yōu)選地,計(jì)算模塊計(jì)算預(yù)定作用力下骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息,預(yù)定作用力可以包括下列至少一項(xiàng):重力;關(guān)節(jié)移動(dòng)過(guò)程中受到的與移動(dòng)方向相反的阻力;以及來(lái)自周?chē)h(huán)境的干擾力。

優(yōu)選地,計(jì)算模塊使用如下位置計(jì)算公式計(jì)算關(guān)節(jié)在下一幀的位置信息posn+1,posn+1=posn+(posn-posn-1)*(1-r)+(gv+d)*δt2

其中,posn+1為關(guān)節(jié)在下一幀的位置信息,posn為關(guān)節(jié)在當(dāng)前幀的位置信息,posn-1為關(guān)節(jié)在上一幀的位置信息,r為阻力作用下的阻力系數(shù),0≤r≤1,gv為重力在關(guān)節(jié)的長(zhǎng)度方向上的法向方向上的重力分力作用下的加速度,d為干擾力作用下的加速度,δt為上一幀與當(dāng)前幀之間的時(shí)間間隔。

優(yōu)選地,實(shí)現(xiàn)裝置還可以包括:第一修正模塊,用于使用如下第一修正公式對(duì)計(jì)算得到的關(guān)節(jié)在下一幀的位置信息posn+1進(jìn)行修正,

其中,pos'n+1為關(guān)節(jié)經(jīng)過(guò)補(bǔ)償后在下一幀的位置信息,posp為關(guān)節(jié)的父關(guān)節(jié)的位置信息,len為為關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度。

優(yōu)選地,旋轉(zhuǎn)變換模塊可以包括:當(dāng)前方向向量確定模塊,用于根據(jù)子關(guān)節(jié)在當(dāng)前幀的的位置信息,確定從父關(guān)節(jié)到子關(guān)節(jié)的當(dāng)前方向向量;移動(dòng)向量確定模塊,用于根據(jù)子關(guān)節(jié)在下一幀的的位置信息以及當(dāng)前幀的位置信息,確定子關(guān)節(jié)在其父關(guān)節(jié)坐標(biāo)系下的移動(dòng)向量;四元數(shù)獲取模塊,用于根據(jù)方向向量和移動(dòng)向量,獲取繞父關(guān)節(jié)進(jìn)行旋轉(zhuǎn)變換的四元數(shù)。

優(yōu)選地,旋轉(zhuǎn)變換模塊還可以包括:插值運(yùn)算模塊,用于使用四元數(shù)插值算法對(duì)四元數(shù)進(jìn)行插值運(yùn)算,以得到緩沖四元數(shù),旋轉(zhuǎn)模塊,用于基于緩沖四元數(shù)對(duì)父關(guān)節(jié)和子關(guān)節(jié)進(jìn)行旋轉(zhuǎn)變換。

優(yōu)選地,旋轉(zhuǎn)變換模塊還用于消除旋轉(zhuǎn)變換在子關(guān)節(jié)與其父關(guān)節(jié)構(gòu)成的軸向方向上的分量,通過(guò)消除后的旋轉(zhuǎn)變換,將子關(guān)節(jié)移動(dòng)到其下一幀的位置。

優(yōu)選地,實(shí)現(xiàn)裝置還可以包括:第二修正模塊,用于在檢測(cè)到計(jì)算得到的關(guān)節(jié)在下一幀的位置信息與目標(biāo)碰撞體發(fā)生碰撞的情況下,對(duì)關(guān)節(jié)的位置信息進(jìn)行修正,以使得修正后關(guān)節(jié)在下一幀的位置信息基本滿(mǎn)足以下條件:修正后關(guān)節(jié)位于目標(biāo)碰撞體的邊緣;修正后關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度不變。

優(yōu)選地,第二修正模塊可以使用如下第二修正公式對(duì)關(guān)節(jié)的位置進(jìn)行修正:

其中,pos”n+1為關(guān)節(jié)進(jìn)行修正后在下一幀的位置信息,c1為關(guān)節(jié)修正前在下一幀的位置信息,c2為碰撞體的位置信息,r1為關(guān)節(jié)的半徑,r2為碰撞體的半徑,posp為關(guān)節(jié)的父關(guān)節(jié)的位置信息,len為關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度。

優(yōu)選地,計(jì)算模塊從根關(guān)節(jié)開(kāi)始逐級(jí)計(jì)算骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息,旋轉(zhuǎn)變換模塊從與根關(guān)節(jié)直接相連的關(guān)節(jié)開(kāi)始,逐級(jí)將該關(guān)節(jié)在下一幀的位置信息與當(dāng)前幀的位置信息之間的位置變換轉(zhuǎn)換為繞該關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換。

本發(fā)明的動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法和裝置,通過(guò)計(jì)算關(guān)節(jié)在下一幀的位置信息,將關(guān)節(jié)的位置變換轉(zhuǎn)換為繞該關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換,從而通過(guò)所述旋轉(zhuǎn)變換,將關(guān)節(jié)移動(dòng)到其下一幀的位置,可以使得運(yùn)動(dòng)過(guò)程更加平滑,改善視覺(jué)效果。

附圖說(shuō)明

通過(guò)結(jié)合附圖對(duì)本公開(kāi)示例性實(shí)施方式進(jìn)行更詳細(xì)的描述,本公開(kāi)的上述以及其它目的、特征和優(yōu)勢(shì)將變得更加明顯,其中,在本公開(kāi)示例性實(shí)施方式中,相同的參考標(biāo)號(hào)通常代表相同部件。

圖1是示出了根據(jù)本發(fā)明一實(shí)施例的動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法的示意性流程圖。

圖2是示出了針對(duì)頭發(fā)構(gòu)建的骨骼關(guān)節(jié)樹(shù)的示意圖。

圖3是示出了根據(jù)本發(fā)明另一實(shí)施例的動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法的示意性流程圖。

圖4是示出了關(guān)節(jié)所受重力的分析示意圖。

圖5是示出了疊加各外在作用力后頭發(fā)的運(yùn)動(dòng)效果圖

圖6a是示出了在模型圖中定義約束碰撞體的示意圖。

圖6b是示出了另一種方式下定義約束碰撞體的示意圖。

圖7是示出了判定球體與球體是否碰撞的示意圖。

圖8是示出了判定球體與膠囊體是否碰撞的示意圖。

圖9是示出了定義碰撞體前和定義碰撞體后頭發(fā)的對(duì)比圖。

圖10是示出了進(jìn)行插值處理前和插值處理后的對(duì)比圖。

圖11是示出了旋轉(zhuǎn)過(guò)程造成的絞繞現(xiàn)象以及解決后的示意圖。

圖12、圖13是示出了利用本發(fā)明進(jìn)行處理后的動(dòng)畫(huà)效果圖。

圖14是示出了根據(jù)本發(fā)明一實(shí)施例的動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)裝置的結(jié)構(gòu)的示意性方框圖。

具體實(shí)施方式

下面將參照附圖更詳細(xì)地描述本公開(kāi)的優(yōu)選實(shí)施方式。雖然附圖中顯示了本公開(kāi)的優(yōu)選實(shí)施方式,然而應(yīng)該理解,可以以各種形式實(shí)現(xiàn)本公開(kāi)而不應(yīng)被這里闡述的實(shí)施方式所限制。相反,提供這些實(shí)施方式是為了使本公開(kāi)更加透徹和完整,并且能夠?qū)⒈竟_(kāi)的范圍完整地傳達(dá)給本領(lǐng)域的技術(shù)人員。

在詳細(xì)介紹本發(fā)明前,首先對(duì)本發(fā)明涉及的一些背景術(shù)語(yǔ)做以簡(jiǎn)要說(shuō)明。

多邊形網(wǎng)格(polygonmesh):簡(jiǎn)稱(chēng)網(wǎng)格,是在三維電腦繪圖中用來(lái)表示立體模型的一種結(jié)構(gòu),包括頂點(diǎn)、面、法線、切線、頂點(diǎn)顏色、紋理坐標(biāo)等一系列基礎(chǔ)數(shù)據(jù)的定義。

骨骼蒙皮動(dòng)畫(huà)(skeletalanimation):簡(jiǎn)稱(chēng)骨骼動(dòng)畫(huà),其原理為:在每一幀的動(dòng)畫(huà)播放過(guò)程中,動(dòng)畫(huà)關(guān)鍵幀數(shù)據(jù)驅(qū)動(dòng)骨骼關(guān)節(jié)變換(包括位移、旋轉(zhuǎn)、縮放),然后結(jié)合蒙皮信息,骨骼關(guān)節(jié)進(jìn)一步驅(qū)動(dòng)網(wǎng)格頂點(diǎn)的變換,以此完成模型動(dòng)畫(huà)的模擬。一個(gè)骨骼動(dòng)畫(huà)模型通常包括骨骼關(guān)節(jié)(joint)層次結(jié)構(gòu)數(shù)據(jù),網(wǎng)格數(shù)據(jù),網(wǎng)格蒙皮數(shù)據(jù)和骨骼的動(dòng)畫(huà)(關(guān)鍵幀)數(shù)據(jù)。相比于其他動(dòng)畫(huà)類(lèi)似(如頂點(diǎn)動(dòng)畫(huà)、變形動(dòng)畫(huà))具有數(shù)據(jù)簡(jiǎn)明、占用存儲(chǔ)空間少、制作便捷、支持動(dòng)態(tài)生成序列幀、支持正向反向動(dòng)力學(xué)等諸多優(yōu)點(diǎn)。

蒙皮信息(skininfo):簡(jiǎn)稱(chēng)蒙皮,一種三維動(dòng)畫(huà)制作過(guò)程中使用到的技術(shù)手段,由于骨骼關(guān)節(jié)與網(wǎng)格頂點(diǎn)在結(jié)構(gòu)設(shè)計(jì)上是相互獨(dú)立的,為了實(shí)現(xiàn)骨骼關(guān)節(jié)對(duì)網(wǎng)格頂點(diǎn)的控制,需要一種橋接數(shù)據(jù)來(lái)指定它們之間的關(guān)聯(lián)性,即骨骼關(guān)節(jié)對(duì)周?chē)男╉旤c(diǎn)產(chǎn)生影響以及影響權(quán)重是多少,這種將模型各網(wǎng)格頂點(diǎn)綁定骨骼關(guān)節(jié)并指定權(quán)重的技術(shù)叫做蒙皮;生成的數(shù)據(jù)結(jié)構(gòu)稱(chēng)為蒙皮信息。

萬(wàn)向節(jié)死鎖(gimballock):簡(jiǎn)稱(chēng)萬(wàn)向鎖,當(dāng)使用歐拉角構(gòu)件剛體在三維歐幾里得空間中的有限轉(zhuǎn)動(dòng)時(shí),三個(gè)旋轉(zhuǎn)軸中的兩個(gè)軸發(fā)生重合時(shí),會(huì)失去一個(gè)自由度的情形。

靜態(tài)骨骼動(dòng)畫(huà):指模型的骨骼關(guān)節(jié)的運(yùn)動(dòng)軌跡是固定不變的,通常由美術(shù)制作人員負(fù)責(zé)設(shè)計(jì)并以特定的文件格式輸出的動(dòng)畫(huà)類(lèi)型,是相對(duì)于動(dòng)態(tài)骨骼而言的。

下面首先結(jié)合圖1就本發(fā)明的動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法的基本流程做簡(jiǎn)要說(shuō)明。參見(jiàn)圖1,在步驟s110,創(chuàng)建針對(duì)目標(biāo)對(duì)象的骨骼關(guān)節(jié)樹(shù)。

本發(fā)明所針對(duì)的目標(biāo)對(duì)象可以是多種類(lèi)型的動(dòng)畫(huà)模型,例如可以是動(dòng)畫(huà)人物、人物的頭發(fā)、人物所持有的武器、以及動(dòng)畫(huà)環(huán)境中的其它物體如植物、動(dòng)物、云朵等等。

由于本發(fā)明的主要目的在于使得動(dòng)畫(huà)模型的運(yùn)動(dòng)在視覺(jué)上更加逼真,因此,本發(fā)明所針對(duì)的目標(biāo)對(duì)象可以?xún)?yōu)選地是某個(gè)動(dòng)畫(huà)物體中需要進(jìn)行移動(dòng)的部分。例如,目標(biāo)對(duì)象可以是動(dòng)畫(huà)人物的頭發(fā)、裙子、所持有的鞭子等等。如圖2所示,針對(duì)圖中左邊的頭發(fā)模型,可以右圖所示的構(gòu)建骨骼關(guān)節(jié)樹(shù),右圖中的圓球即表示所構(gòu)建的骨骼關(guān)節(jié)樹(shù)中的每個(gè)骨骼關(guān)節(jié),相鄰兩個(gè)圓球之間的白色線段可以視為相鄰關(guān)節(jié)之間的關(guān)節(jié)臂。

創(chuàng)建針對(duì)目標(biāo)對(duì)象的骨骼關(guān)節(jié)樹(shù)的過(guò)程為本領(lǐng)域技術(shù)人員所公知,這里不再詳述。需要說(shuō)明的是,骨骼關(guān)節(jié)樹(shù)的創(chuàng)建過(guò)程可以由制作動(dòng)畫(huà)的美術(shù)制作人員開(kāi)發(fā),并且出于調(diào)試效率與控制粒度的需求,所構(gòu)建的骨骼關(guān)節(jié)樹(shù)中的每個(gè)關(guān)節(jié)可以綁定一個(gè)腳本進(jìn)行參數(shù)的控制,包括阻力系數(shù)、碰撞半徑、目標(biāo)碰撞體(即需要進(jìn)行穿透規(guī)避評(píng)估的碰撞體)。例如,骨骼關(guān)節(jié)樹(shù)中的每個(gè)關(guān)節(jié)都可以綁定包括中心位置坐標(biāo)、半徑、所受拖拽力、所涉及的目標(biāo)碰撞體等參數(shù)的腳本,以便實(shí)時(shí)模擬運(yùn)動(dòng)軌跡,同時(shí)方便對(duì)參數(shù)進(jìn)行調(diào)整。

可以將所創(chuàng)建的骨骼關(guān)節(jié)樹(shù)中直接相連的兩個(gè)關(guān)節(jié)中更接近根關(guān)節(jié)的關(guān)節(jié)為父關(guān)節(jié),更遠(yuǎn)離根關(guān)節(jié)的關(guān)節(jié)為子關(guān)節(jié)。骨骼關(guān)節(jié)樹(shù)中沒(méi)有子關(guān)節(jié)的關(guān)節(jié)可以稱(chēng)為葉子關(guān)節(jié),最頂端的關(guān)節(jié)為根關(guān)節(jié)。

在創(chuàng)建完成骨骼關(guān)節(jié)樹(shù)后,針對(duì)骨骼關(guān)節(jié)樹(shù)中的一個(gè)關(guān)節(jié),可以順序執(zhí)行步驟s120、步驟s130。

在步驟s120,計(jì)算該關(guān)節(jié)在下一幀的位置信息。此處需要說(shuō)明的是,本發(fā)明中所計(jì)算的關(guān)節(jié)的位置信息可以是骨骼動(dòng)畫(huà)中的世界坐標(biāo)系下的位置信息。

在步驟s130,將該關(guān)節(jié)從當(dāng)前幀到下一幀的位置變換轉(zhuǎn)換為繞該關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換,從而通過(guò)旋轉(zhuǎn)變換,可以將子關(guān)節(jié)移動(dòng)到其下一幀的位置。將關(guān)節(jié)的位置變換轉(zhuǎn)換為該關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換的具體實(shí)現(xiàn)過(guò)程將在下文詳細(xì)說(shuō)明,這里暫不敘述。

需要說(shuō)明的是,步驟s130所針對(duì)的關(guān)節(jié)主要是骨骼關(guān)節(jié)樹(shù)中的非根關(guān)節(jié)。這是因?yàn)?,根關(guān)節(jié)一般是動(dòng)態(tài)骨骼與靜態(tài)骨骼的交匯處,根關(guān)節(jié)的運(yùn)動(dòng)軌跡主要由靜態(tài)骨骼動(dòng)畫(huà)決定。例如,頭部可以認(rèn)為是根關(guān)節(jié),頭發(fā)屬于頭部的子關(guān)節(jié),頭部的運(yùn)動(dòng)狀態(tài)應(yīng)該由其父關(guān)節(jié)軀干(靜態(tài)骨骼)決定。因此,對(duì)于根關(guān)節(jié)的位置變換,可以不執(zhí)行本發(fā)明的動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法,而由美術(shù)預(yù)先設(shè)定,或者是游戲里的動(dòng)畫(huà)控制器設(shè)定。

至此,結(jié)合圖1、圖2簡(jiǎn)要說(shuō)明了利用本發(fā)明實(shí)現(xiàn)骨骼關(guān)節(jié)樹(shù)中的一個(gè)關(guān)節(jié)在下一幀的移動(dòng)的過(guò)程。在利用本發(fā)明實(shí)現(xiàn)骨骼關(guān)節(jié)樹(shù)中多個(gè)關(guān)節(jié)的移動(dòng)時(shí),可以由上到下逐級(jí)進(jìn)行。如圖3所示,方法開(kāi)始于步驟s210,從與根關(guān)節(jié)直接連接的關(guān)節(jié)(即根關(guān)節(jié)的子關(guān)節(jié))開(kāi)始,計(jì)算關(guān)節(jié)在下一幀的位置信息(步驟s220),然后將該關(guān)節(jié)的位置變換轉(zhuǎn)化為繞該關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換(步驟s230),由此完成了對(duì)根關(guān)節(jié)的子關(guān)節(jié)的處理,在完成后,可以判斷該關(guān)節(jié)是否為最底層的葉子關(guān)節(jié)(步驟s240),如果是,則處理結(jié)束(步驟s250),如果不是,則可以繼續(xù)對(duì)該關(guān)節(jié)的子關(guān)節(jié)執(zhí)行步驟s220、步驟s230的處理,直到處理完骨骼關(guān)節(jié)樹(shù)中的葉子關(guān)節(jié)為止。其中,步驟s220、步驟s230的處理過(guò)程與圖1中的步驟s120、步驟s130相同,這里不再贅述。

如上文所述,根關(guān)節(jié)一般是動(dòng)態(tài)骨骼與靜態(tài)骨骼的交匯處,根關(guān)節(jié)的運(yùn)動(dòng)軌跡主要由靜態(tài)骨骼動(dòng)畫(huà)決定,因此對(duì)于根關(guān)節(jié)可以?xún)H確定其在下一幀的位置信息,而不進(jìn)行旋轉(zhuǎn)變換。

也就是說(shuō),可以從與根關(guān)節(jié)直接相連的關(guān)節(jié)開(kāi)始,逐級(jí)計(jì)算骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息、將該關(guān)節(jié)在下一幀的位置信息與當(dāng)前幀的位置信息之間的位置變換轉(zhuǎn)換為繞該關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換。

根據(jù)上文對(duì)本發(fā)明的描述可知,本發(fā)明的動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法主要包括三個(gè)步驟:創(chuàng)建骨骼關(guān)節(jié)樹(shù)、計(jì)算關(guān)節(jié)的位置變換、將關(guān)節(jié)的位置變換轉(zhuǎn)換為父關(guān)節(jié)的旋轉(zhuǎn)變換。其中,關(guān)節(jié)骨骼關(guān)節(jié)樹(shù)的創(chuàng)建過(guò)程為本領(lǐng)域技術(shù)人員所公知,這里不再贅述。下面分別就“計(jì)算關(guān)節(jié)的位置變換”、“關(guān)節(jié)的位置變換轉(zhuǎn)換為父關(guān)節(jié)的旋轉(zhuǎn)變換”的具體實(shí)現(xiàn)做進(jìn)一步說(shuō)明。

一、計(jì)算關(guān)節(jié)的位置變換

下面主要從算法的選擇、外力的干擾以及碰撞的規(guī)避三方面進(jìn)行說(shuō)明。

1.1算法的選擇

在游戲開(kāi)發(fā)過(guò)程中,常常需要控制各種物體進(jìn)行移動(dòng),如人物角色、子彈等等,最為常用的方法便是使用歐拉方法,也叫歐拉折線法,即在每一幀中記錄物體的位置與速度,與幀間間隔結(jié)合運(yùn)算來(lái)預(yù)測(cè)下一幀物體的位置,于是物體就“動(dòng)”起來(lái)了。

定義物體當(dāng)前位置為x,下一步位置為x',當(dāng)前速度為v,下一步速度為v',加速度為a,質(zhì)量為m以及所受到的力為f,則有

歐拉方法的幾何解析就是將物體的整個(gè)移動(dòng)過(guò)程分割為無(wú)數(shù)個(gè)小段,通過(guò)迭代式地計(jì)算每一段路線,最后將所有這些路線“累加”在一起,以近似的模擬物體的運(yùn)動(dòng)軌跡。然而改變物體運(yùn)動(dòng)軌跡的力一般都是持續(xù)進(jìn)行的,而不是斷續(xù)進(jìn)行的。比如一個(gè)受重力影響垂直降落的物體,在下墜的過(guò)程中,基速度的變化是平滑遞增的,而不是公式所表述的在幀末才考慮速度的變更,這無(wú)形中會(huì)造成物體運(yùn)動(dòng)軌跡的失真。雖然通過(guò)降低幀間的繪制間隔可以讓速度的變更更為平滑,但跳躍式計(jì)算造成的誤差還是依然存在。其次,因?yàn)槲矬w最新的位置是將之前無(wú)數(shù)個(gè)小段的計(jì)算結(jié)果的累加,而中間每小段的計(jì)算都存在一定的誤差,這就導(dǎo)致了最終的計(jì)算結(jié)果也包含了無(wú)數(shù)個(gè)小段誤差的累加,即誤差存在放大效應(yīng),這進(jìn)一步造成物體運(yùn)動(dòng)軌跡的失真。

在數(shù)學(xué)和計(jì)算機(jī)科學(xué)中,歐拉方法,是一種解決數(shù)值常微分方程的最基本的一階數(shù)值方法,是一種常用于計(jì)算非線性動(dòng)力學(xué)的顯式求解法(explicitmethod),而顯式求解法的缺點(diǎn)就是步長(zhǎng)對(duì)結(jié)果的準(zhǔn)確性影響較大,步長(zhǎng)越大,準(zhǔn)確性越差。

韋爾萊算法是經(jīng)典力學(xué)(牛頓力學(xué))中經(jīng)典的積分方法,是對(duì)牛頓第二定律(運(yùn)動(dòng)方程)在計(jì)算機(jī)上運(yùn)用的一種數(shù)值積分方法。一般情況下,它有三種表述形式:位置積分方程,蛙跳積分方程和速度積分方程,本提案需要使用到的是位置積分方程。與歐拉方法不同,韋爾萊位置積分方程通過(guò)物體當(dāng)前位置和上一步的位置來(lái)預(yù)測(cè)物體下一步的位置,假設(shè)物體在第n步的移動(dòng)加速度為an、移動(dòng)速度vn、位置xn,時(shí)間步長(zhǎng)為δt則有:

假設(shè)物體在移動(dòng)過(guò)程中,加速度a和時(shí)間步長(zhǎng)δt是固定不變的,結(jié)合

xn+1=xn+(xn-xn-1)+a*δt2=2xn-xn-1+a*δt2

這就是經(jīng)典的韋爾萊位置積分方程,通過(guò)公式可以看出,為求下一步物體所在的位置,需要具備的因子有加速度a、時(shí)間步長(zhǎng)δt、當(dāng)前所在位置xn和上一步所在位置xn-1。顯然,在游戲運(yùn)行過(guò)程中,如果加速度是固定的情況下,其他三個(gè)因子可以完美地跟游戲的繪制過(guò)程結(jié)合在一起,即xn為物體當(dāng)前幀所在的位置,xn-1為物體上一幀所在的位置,δt為兩幀之間的時(shí)間差。因?yàn)閍、xn-1和δt已知,所以通過(guò)改變物體當(dāng)前幀的位置xn即可對(duì)物體的移動(dòng)軌跡實(shí)現(xiàn)控制,這在交互類(lèi)游戲中很是常見(jiàn),比如橡皮球掉到地上表面出現(xiàn)收縮后膨脹的表現(xiàn)、風(fēng)吹動(dòng)布匹時(shí)出現(xiàn)的飄揚(yáng)舞動(dòng)的效果,都可以通過(guò)方程的運(yùn)算來(lái)模擬。

韋爾萊算法不僅計(jì)算效率快(跟歐拉方法一樣快),而且其誤差等級(jí)達(dá)到了4階精度(歐拉方法的誤差等級(jí)只有1階精度)。相比之下,使用歐拉方法則“笨拙”得多,物體受力狀態(tài)如何、當(dāng)前幀的速度是多少,這些“包袱”都需要一一計(jì)算得出,然后再代入到方程求得結(jié)果,運(yùn)算效率因此變得低效。

1.2、外力的干擾

通過(guò)上文的分析可知,可以使用韋爾萊算法計(jì)算關(guān)節(jié)在下一幀的位置。其中,關(guān)節(jié)在運(yùn)動(dòng)的過(guò)程中一般會(huì)受到重力、阻力、干擾力(如風(fēng))等力的作用。除此之外,因?yàn)槊繋瑢?duì)關(guān)節(jié)的位置都進(jìn)行偏移運(yùn)算,所以對(duì)關(guān)節(jié)的長(zhǎng)度(即從當(dāng)前關(guān)節(jié)到父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度)也要進(jìn)行修正處理,以確保在骨骼動(dòng)作播放過(guò)程,每個(gè)關(guān)節(jié)的長(zhǎng)度都是一直不變的。當(dāng)然,有些骨骼動(dòng)畫(huà)會(huì)帶有關(guān)節(jié)伸縮的需求,但這不在本發(fā)明的討論范圍之內(nèi)。具體的運(yùn)算過(guò)程如下:

1.2.1、重力模擬

由于物體的受重力影響的表現(xiàn)是以墜落加速度的形式體現(xiàn)的。出于簡(jiǎn)化模型的目的,本提案用一個(gè)浮點(diǎn)數(shù)來(lái)表示關(guān)節(jié)受重力影響的權(quán)重,通常為一個(gè)負(fù)數(shù)。如果關(guān)節(jié)在下墜過(guò)程中受到的空氣阻力越大,則權(quán)重越小,反之亦然。由于關(guān)節(jié)之間的長(zhǎng)度不變性,因此關(guān)節(jié)的運(yùn)動(dòng)軌跡受重力的影響需要結(jié)合力的分解進(jìn)行分析,如圖4所示,一般情況下重力g向量與ab關(guān)節(jié)向量u是不平行的,因?yàn)閎關(guān)節(jié)在運(yùn)動(dòng)過(guò)程中,其與父關(guān)節(jié)a的長(zhǎng)度保持不變,即u向量的長(zhǎng)度不變,因此重力g向量可分解為兩個(gè)正交向量:對(duì)ab運(yùn)動(dòng)有貢獻(xiàn)的分量垂直于u向量,設(shè)為gv,對(duì)ab運(yùn)動(dòng)無(wú)貢獻(xiàn)的分量平行于u向量,設(shè)為gu。有

g=gu+gv

合并兩式,可得

gv即為重力g對(duì)關(guān)節(jié)運(yùn)動(dòng)產(chǎn)生影響的部分。出于簡(jiǎn)化計(jì)算的目的,不考慮重力加速度的影響,可以直接將gv作為變化因素并入公式計(jì)算之中。

1.2.2、干擾力摸擬

一般情況下,角色所受干擾力主要指來(lái)自于風(fēng)等自然因素的影響,具有隨機(jī)性,包括隨機(jī)的方向、隨機(jī)的力度和隨機(jī)的持續(xù)時(shí)間。本發(fā)明可以采用噪聲來(lái)模擬這三個(gè)因素。此因素是可選的,如果模型在場(chǎng)景中不受任何干擾力影響,可以忽略。

1.2.3、阻力模擬

每個(gè)關(guān)節(jié)在運(yùn)動(dòng)的過(guò)程中都會(huì)受到阻力的影響,關(guān)節(jié)的運(yùn)動(dòng)幅度隨著關(guān)節(jié)的傳遞表現(xiàn)得越來(lái)越小,阻力的方向與運(yùn)動(dòng)的方向相反。為了簡(jiǎn)化運(yùn)算,本提案使用一個(gè)浮點(diǎn)數(shù)來(lái)表示受阻力影響下運(yùn)行幅度的衰減程度,其范圍在[0,1]區(qū)間,0表示無(wú)衰減,即完全不受阻力影響,1表示全衰減,即在阻力的影響下關(guān)節(jié)運(yùn)動(dòng)幅度為零。

假設(shè)d為干擾力作用下的加速度,gv為重力在關(guān)節(jié)的長(zhǎng)度方向上的法向方向上的重力分力作用下的加速度,r為阻力作用下的阻力系數(shù),0≤r≤1,結(jié)合上面的韋爾萊公式有

posn+1=posn+(posn-posn-1)*(1-r)+(gv+d)*δt2(1)

其中,posn+1為關(guān)節(jié)在下一幀的位置信息,posn為關(guān)節(jié)在當(dāng)前幀的位置信息,posn-1為關(guān)節(jié)在上一幀的位置信息,δt為上一幀與當(dāng)前幀之間的時(shí)間間隔。posn+1、posn、posn-1、gv、d可以均是矢量,r為標(biāo)量。

公式(1)為綜合了重力、阻力以及干擾力三種外力作用下的位置計(jì)算公式,在實(shí)際計(jì)算中,如果需要忽略某個(gè)或某幾個(gè)作用力,去除公式(1)中相應(yīng)的參量即可。例如,如果忽略重力的影響,gv的取值為零,此時(shí)有posn+1=posn+(posn-posn-1)*(1-r)+d*δt2。

圖5示出了疊加各因素后頭發(fā)的運(yùn)動(dòng)效果圖。其中,圖中的圓點(diǎn)即為骨骼關(guān)節(jié),圖5中的四幅圖由左到右依次為標(biāo)準(zhǔn)形態(tài)(不考慮外力作用下的形態(tài))、疊加重力的形態(tài)、進(jìn)一步疊加干擾力的形態(tài)、進(jìn)一步疊加阻力的形態(tài)。

1.2.4、位置修正

可以使用如下第一位置修正公式對(duì)計(jì)算得到的關(guān)節(jié)在下一幀的位置信息posn+1進(jìn)行修正,

其中,pos'n+1為關(guān)節(jié)經(jīng)過(guò)補(bǔ)償后在下一幀的位置信息,posp為關(guān)節(jié)的父關(guān)節(jié)的位置信息,len為關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度。pos'n+1即為每幀中關(guān)節(jié)在原有速度移動(dòng)的情況下受各力影響以及進(jìn)行修正后所處的新位置。

第一位置修正公式中的運(yùn)算為矢量運(yùn)算,|posn+1-posp|表示posn+1到posp的距離(歐氏距離),表示posn+1到posp的單位方向向量,表示從父關(guān)節(jié)的位置向posn+1到posp的方向向量上移動(dòng)一個(gè)關(guān)節(jié)長(zhǎng)度的距離。

1.3、穿透規(guī)避

在利用上述公式得到了骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在各種力作用下的實(shí)時(shí)位置后??紤]到部分關(guān)節(jié)與外界環(huán)境存在交互的可能,而模型頂點(diǎn)隨骨骼關(guān)節(jié)運(yùn)行過(guò)程中,其運(yùn)行軌跡是在運(yùn)行過(guò)程中實(shí)時(shí)計(jì)算的,有一定的隨機(jī)性,這就意味著可能出現(xiàn)模型穿透的問(wèn)題,比如人物在跑動(dòng)過(guò)程中,衣服的飄動(dòng)穿透了皮膚、頭發(fā)在人物播放跑動(dòng)動(dòng)作會(huì)嵌入后背等等,這些都是違背現(xiàn)實(shí)世界物體的運(yùn)動(dòng)規(guī)律的,對(duì)視覺(jué)體驗(yàn)造成嚴(yán)重的影響。

因此,還需要對(duì)關(guān)節(jié)定義相應(yīng)的約束碰撞體,進(jìn)行碰撞規(guī)避運(yùn)算,即在骨骼關(guān)節(jié)完成位置變換運(yùn)算后進(jìn)行穿透規(guī)避運(yùn)算以便對(duì)關(guān)節(jié)位置作出校正。此處可以通過(guò)關(guān)節(jié)上的腳本來(lái)指定約束碰撞體,例如可以在腳本上為關(guān)節(jié)指定一個(gè)或多個(gè)約束碰撞體。如圖6a所示,可以指定模型圖中的兩只手的上臂與下臂部分為約束碰撞體,圖6a中示出的球體即為我們定義的約束碰撞體。

通過(guò)以上的定義規(guī)劃之后,圖6a中動(dòng)畫(huà)模型的頭發(fā)在運(yùn)行狀態(tài)下,關(guān)節(jié)的運(yùn)動(dòng)軌跡就會(huì)一直受到碰撞體影響,約束在一定范圍內(nèi)。由于不同關(guān)節(jié)的規(guī)避需求可能不同,所以每個(gè)需要約束的關(guān)節(jié)均可以定義各自的約束碰撞體。

另外,除使用球體進(jìn)行碰撞檢測(cè)外,也可以使用膠囊體作為目標(biāo)碰撞體。在綁定碰撞體時(shí),對(duì)于近似球體或膠囊體的模型部位,我們可以直接分別綁定球形碰撞體或膠囊形碰撞體來(lái)定義碰撞區(qū)域。而對(duì)于無(wú)規(guī)則形體的部件,可以采用多個(gè)球體或膠囊體連接定義的形式來(lái)處理。如圖6b所示,人體模型的手臂由上手臂與下手臂組成,此時(shí)可以通過(guò)兩個(gè)膠囊體連接來(lái)定義碰撞區(qū)域。

下面分別就球體和球體之間進(jìn)行碰撞的檢測(cè)、規(guī)避,球體和膠囊體之間進(jìn)行碰撞的檢測(cè)、規(guī)避進(jìn)行說(shuō)明,應(yīng)該知道,對(duì)于其它模型的碰撞也可以參考本發(fā)明的方法進(jìn)行相應(yīng)的處理,這里不再贅述。

1.3.1、判定球體與球體是否碰撞

對(duì)于每個(gè)需要檢測(cè)碰撞的關(guān)節(jié),可以通過(guò)定義一個(gè)球體(包括球心與半徑)來(lái)指定它的碰撞區(qū)域以及它需要檢測(cè)的其他碰撞體區(qū)域(如肢體),也是以球體的形式進(jìn)行規(guī)劃。可以根據(jù)兩個(gè)球體半徑之和與球心距離的關(guān)系,判斷它們是否發(fā)生碰撞。

如圖7所示,假設(shè)關(guān)節(jié)的位置為c1,半徑為r1,目標(biāo)碰撞體位置為c2,半徑為r2,關(guān)節(jié)與目標(biāo)碰撞體發(fā)生碰撞時(shí),兩者的距離d=|c1-c2|。

當(dāng)d=|c1-c2|<r1+r2時(shí),表明關(guān)節(jié)發(fā)生碰撞,需要進(jìn)行位置校正,方法就是將關(guān)節(jié)的位置往目標(biāo)碰撞體的反方向移動(dòng),直至滿(mǎn)足d=|c1-c2|=r1+r2。

而為了規(guī)避碰撞,同時(shí)保持關(guān)節(jié)的長(zhǎng)度不變,避免模型伸縮的情況出現(xiàn),還需要對(duì)規(guī)避碰撞后的位置進(jìn)行修正。

因此,在檢測(cè)到計(jì)算得到的關(guān)節(jié)在下一幀的位置信息與目標(biāo)碰撞體發(fā)生碰撞的情況下,對(duì)關(guān)節(jié)的位置信息進(jìn)行修正時(shí),需要滿(mǎn)足或基本滿(mǎn)足以下條件:①、修正后關(guān)節(jié)位于目標(biāo)碰撞體的邊緣;②、修正后關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度不變。

基于上述兩個(gè)限制條件,可以使用如下第二修正公式對(duì)關(guān)節(jié)的位置進(jìn)行校正,

其中,pos”n+1為關(guān)節(jié)進(jìn)行修正后在下一幀的位置信息,c1為關(guān)節(jié)修正前在下一幀的位置信息,c2為碰撞體的位置信息,r1為關(guān)節(jié)的半徑,r2為碰撞體的半徑,posp為關(guān)節(jié)的父關(guān)節(jié)的位置信息,len為關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度。

posp、c1、c2可以均為三維向量,公式(2)中的運(yùn)算可以為矢量運(yùn)算,|c1-c2|表示c1到c2的距離(歐氏距離),表示c1到c2的單位方向向量,表示從目標(biāo)碰撞體的圓心出發(fā),以c1-c2為方向,以r1+r2為目標(biāo)長(zhǎng)度進(jìn)行偏移,由此使得關(guān)節(jié)位于目標(biāo)碰撞體的外部邊緣,然后基于關(guān)節(jié)長(zhǎng)度len、父關(guān)節(jié)的位置進(jìn)一步對(duì)其進(jìn)行修正即可得到上述公式(2)。

由此,利用公式(2)對(duì)關(guān)節(jié)進(jìn)行修正,可以保證關(guān)節(jié)長(zhǎng)度不變的前提下,沿著目標(biāo)碰撞體邊緣放置關(guān)節(jié)。通過(guò)蒙皮變換后,模型的表面就會(huì)按關(guān)節(jié)的位置“覆蓋”在目標(biāo)碰撞體的邊緣上。例如,可以使得人物模型在跑動(dòng)過(guò)程中,頭發(fā)只會(huì)披在后背上或者隨風(fēng)飄動(dòng)起來(lái),不會(huì)出現(xiàn)穿透皮膚的問(wèn)題。

1.3.2、判定球體與膠囊體是否碰撞

在使用膠囊體作為目標(biāo)碰撞體時(shí),需要判定球體與膠囊體的碰撞檢測(cè)。判定兩者發(fā)生碰撞的主要方法就是將球心往膠囊體的軸進(jìn)行投影,通過(guò)計(jì)算投影位置與球心的距離長(zhǎng)度是否達(dá)到膠囊體半徑進(jìn)行判定。

具體如圖8所示,假設(shè)球體的球心為c、半徑為rs,膠囊體的兩個(gè)球心為m、n,半徑為rc,球體球心在膠囊體上的投影點(diǎn)為p,如果p點(diǎn)位于mn之間,則判定dpc=|p-c|<rs+rc

如果p點(diǎn)位于mn之外,會(huì)有兩種情況,靠近m點(diǎn)或靠近n點(diǎn)。如果靠近m點(diǎn),則判定dmc=|m-c|<rs+rc

如果p點(diǎn)靠近n點(diǎn),同理dnc=|n-c|<rs+rc

至此,可以確定球與膠囊體是否發(fā)生碰撞。同樣,為了實(shí)現(xiàn)碰撞規(guī)避,需要對(duì)球(骨骼關(guān)節(jié))進(jìn)行位置校正,基本方法與上文1.3.1節(jié)球體的處理是一樣的,這里不再贅述。

在模型的某些部件綁定碰撞體后,動(dòng)態(tài)骨骼關(guān)節(jié)在模擬運(yùn)動(dòng)軌跡時(shí)就會(huì)計(jì)算是否與這些碰撞體發(fā)生碰撞,一旦發(fā)生碰撞,就會(huì)采用上文的規(guī)避公式進(jìn)行位置修正。如圖9所示,左圖是頭發(fā)定義碰撞體之前各骨骼關(guān)節(jié)的形態(tài),它們以順滑的姿態(tài)逐個(gè)排列;右圖是定義了碰撞體(球體)后各骨骼關(guān)節(jié)的形態(tài),因受碰撞體影響,整個(gè)骨骼鏈路出現(xiàn)的彎曲,特別是第三個(gè)骨骼關(guān)節(jié),在對(duì)碰撞體進(jìn)行碰撞規(guī)避中,它對(duì)骨骼關(guān)節(jié)的排列的影響是最大的。

最后需要說(shuō)明的是,穿透規(guī)避只在需要約束特定部件的關(guān)節(jié)運(yùn)動(dòng)范圍時(shí)才需要采用,一般是由美術(shù)或策劃決定。如果沒(méi)有這方面的需求,則可以不指定約束碰撞體。

二、旋轉(zhuǎn)變換

2.1、四元數(shù)的獲取

在得到每個(gè)關(guān)節(jié)在各種力作用以及規(guī)避碰撞體的約束下的實(shí)時(shí)位置后,可以使用這些新的關(guān)節(jié)位置來(lái)控制模型各頂點(diǎn)按前后幀的變換進(jìn)行移動(dòng),以表現(xiàn)出模型的動(dòng)畫(huà)效果。

但由于向量的變換插值并不是平滑的,因此可以借助一個(gè)數(shù)學(xué)工具——四元數(shù)來(lái)實(shí)現(xiàn)。四元數(shù)通常用來(lái)表示3d動(dòng)畫(huà)中的旋轉(zhuǎn)變換,其最大的特點(diǎn)就是它表示的變換插值是一個(gè)球面線性插值,是平滑的。因此,可以將關(guān)節(jié)的位置變換轉(zhuǎn)換為父關(guān)節(jié)的旋轉(zhuǎn)變換,該旋轉(zhuǎn)變換可以由四元數(shù)表示。

關(guān)于四元數(shù)的概念為本領(lǐng)域技術(shù)人員所公知,這里不再贅述。下面主要就根據(jù)關(guān)節(jié)的位置變換確定四元數(shù)的一種可行的方式進(jìn)行說(shuō)明,下面述及的四元數(shù)的確定方式僅是一種示例性說(shuō)明,應(yīng)該知道,還可以有其它多種確定四元數(shù)的方式,這里不再贅述。

具體來(lái)說(shuō),可以根據(jù)關(guān)節(jié)在當(dāng)前幀的位置信息,確定從父關(guān)節(jié)np到子節(jié)點(diǎn)n的當(dāng)前方向向量為v’,v’可以視為是父關(guān)節(jié)坐標(biāo)系下的子關(guān)節(jié)的朝向向量。其中,這里父關(guān)節(jié)np的位置為所確定的父關(guān)節(jié)np在下一幀的位置。

根據(jù)子關(guān)節(jié)在下一幀的的位置信息以及當(dāng)前幀的位置信息,可以確定子關(guān)節(jié)在其父關(guān)節(jié)坐標(biāo)系下的移動(dòng)向量δv。

根據(jù)當(dāng)前方向向量為v’和移動(dòng)向量δv就可以確定四元數(shù)。例如可以使用四元數(shù)函數(shù)quaternion(v’,δv)確定繞父關(guān)節(jié)進(jìn)行旋轉(zhuǎn)變換的四元數(shù)rotp。四元數(shù)rotp的旋轉(zhuǎn)軸可以是過(guò)父關(guān)節(jié)的多種方向的旋轉(zhuǎn)軸,優(yōu)選地,可以是過(guò)父關(guān)節(jié)的垂直于δv和v’構(gòu)成的平面的垂線。

2.1、四元數(shù)插值

考慮到某些動(dòng)作的幅度較大,關(guān)節(jié)之間的旋轉(zhuǎn)角度在兩幀之間也隨著變大,為此,可以對(duì)旋轉(zhuǎn)進(jìn)行緩沖過(guò)濾,以使得運(yùn)動(dòng)關(guān)節(jié)所對(duì)應(yīng)的動(dòng)畫(huà)模型的運(yùn)動(dòng)更加柔順平滑。

因此,可以使用四元數(shù)插值算法對(duì)四元數(shù)進(jìn)行插值運(yùn)算,以得到緩沖四元數(shù),然后可以基于緩沖四元數(shù)對(duì)父關(guān)節(jié)和子關(guān)節(jié)進(jìn)行旋轉(zhuǎn)變換。例如,可以通過(guò)四元數(shù)插值函數(shù)quaternion.lerp來(lái)獲取緩沖四元數(shù)deltarot:

deltarot=quaternion.lerp(quaternion.identity,rotp)

由于骨骼動(dòng)畫(huà)的模型頂點(diǎn)位置由骨骼關(guān)節(jié)變換決定,因此可以將上面的四元數(shù)作為關(guān)節(jié)的旋轉(zhuǎn)變換分量以完成關(guān)節(jié)的動(dòng)畫(huà)控制,然后以此類(lèi)推,對(duì)模型整棵關(guān)節(jié)樹(shù)進(jìn)行類(lèi)似的處理,可以完成每幀骨骼關(guān)節(jié)變換的運(yùn)算。

通過(guò)對(duì)四元數(shù)進(jìn)行插值處理,基于插值處理后的四元數(shù)所對(duì)應(yīng)的旋轉(zhuǎn)變換控制關(guān)節(jié)運(yùn)動(dòng)可以使得模型的運(yùn)動(dòng)更加柔順平滑。如圖10所示,三幅圖中最左邊的圖為未經(jīng)旋轉(zhuǎn)變換后的形態(tài),中間的圖為沒(méi)有進(jìn)行插值過(guò)濾后旋轉(zhuǎn)變換后的形態(tài),最右邊的圖為進(jìn)行差值過(guò)濾后再進(jìn)行旋轉(zhuǎn)變換后的形態(tài),可以看出,經(jīng)過(guò)插值過(guò)濾可以使得頭發(fā)的運(yùn)動(dòng)更加柔順平滑。

2.2、修復(fù)關(guān)節(jié)的絞繞問(wèn)題

經(jīng)過(guò)關(guān)節(jié)的旋轉(zhuǎn)變換后,模型在關(guān)節(jié)的驅(qū)動(dòng)下,逼真地模擬了各種力的作用下的物理運(yùn)動(dòng)。但是,由于每一幀關(guān)節(jié)的位置都是基于前一幀狀態(tài)進(jìn)行疊加運(yùn)算得來(lái),并且最終以旋轉(zhuǎn)變換的形式表示,即四元數(shù)。而每一個(gè)旋轉(zhuǎn)變換都可能要對(duì)關(guān)節(jié)所在軸向作自轉(zhuǎn)變換,經(jīng)過(guò)一幀又一幀的累加,最終關(guān)節(jié)的可能形成較大的自轉(zhuǎn)變換,甚至觸發(fā)萬(wàn)向鎖現(xiàn)象,如圖11中左邊三幅圖所示,頭發(fā)a處的關(guān)節(jié)雖然朝向正確,但經(jīng)過(guò)一系列動(dòng)畫(huà)幀的播放后,累積的誤差造成了自轉(zhuǎn)軸分量出現(xiàn)明顯的偏差,由于頭發(fā)a處的關(guān)節(jié)發(fā)生了自轉(zhuǎn),造成a處的頭發(fā)隨之發(fā)生轉(zhuǎn)動(dòng),對(duì)視覺(jué)體驗(yàn)造成嚴(yán)重的影響。

為了解決這個(gè)問(wèn)題,可以為每個(gè)關(guān)節(jié)定義一個(gè)旋轉(zhuǎn)約束軸,關(guān)節(jié)所在的軸向可以作為旋轉(zhuǎn)約束軸的方向。此處關(guān)節(jié)所在的軸向,可以認(rèn)為是關(guān)節(jié)與其父關(guān)節(jié)構(gòu)成的軸向方向,例如,假設(shè)父關(guān)節(jié)的位置為p,子關(guān)節(jié)的位置為a,則pa可以認(rèn)為是關(guān)節(jié)所在的軸向。

對(duì)于獲取的四元數(shù)所對(duì)應(yīng)的旋轉(zhuǎn)變換,可以對(duì)旋轉(zhuǎn)變換在旋轉(zhuǎn)約束軸的方向上的分量進(jìn)行過(guò)濾,以此去除自轉(zhuǎn)變換部分。例如,可以將獲取的四元數(shù)轉(zhuǎn)換為歐拉角,然后對(duì)歐拉角在關(guān)節(jié)的軸向(即旋轉(zhuǎn)約束軸的方向)上的分量進(jìn)行過(guò)濾。例如,假設(shè)關(guān)節(jié)的軸向?yàn)閤軸,可以在關(guān)節(jié)的局部坐標(biāo)系下對(duì)它的旋轉(zhuǎn)變換對(duì)應(yīng)的歐拉角的x分量進(jìn)行過(guò)濾,即執(zhí)行:bone.localeuler.x=0。圖11中最右邊的附圖示出了經(jīng)過(guò)過(guò)濾后的頭發(fā)的示意圖,如圖所示,經(jīng)過(guò)對(duì)關(guān)節(jié)的軸向的分量進(jìn)行過(guò)濾,可以有效修復(fù)關(guān)節(jié)絞繞問(wèn)題。

至此,詳細(xì)說(shuō)明了本發(fā)明的動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法的具體實(shí)現(xiàn)過(guò)程。圖12、圖13是示出了利用本發(fā)明進(jìn)行處理后的效果圖。

參見(jiàn)圖12,在本測(cè)試案例中,圓點(diǎn)為骨骼關(guān)節(jié),白色線段為骨骼長(zhǎng)度,使用網(wǎng)格視圖,圖中一個(gè)女孩一邊拿著皮鞭一邊跑動(dòng)著,跑動(dòng)過(guò)程中,骨骼關(guān)節(jié)也會(huì)隨著右手的動(dòng)作計(jì)算關(guān)節(jié)擺動(dòng)的幅度并更新皮鞭模型各頂點(diǎn)的位置。

參見(jiàn)圖13,在本測(cè)試案例中,顯示的是在模擬風(fēng)力影響下頭發(fā)的擺動(dòng)效果,圖中圓點(diǎn)為骨骼關(guān)節(jié),白色線段為骨骼長(zhǎng)度,從網(wǎng)格視圖可以看到,由于風(fēng)使用噪聲來(lái)模擬,具有隨機(jī)性,所以頭發(fā)的飄動(dòng)也是隨機(jī)的。

圖14是示出了根據(jù)本發(fā)明一實(shí)施例的動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)裝置的功能框圖。其中,實(shí)現(xiàn)裝置300的功能模塊可以由實(shí)現(xiàn)本發(fā)明原理的硬件、軟件或硬件和軟件的結(jié)合來(lái)實(shí)現(xiàn)。本領(lǐng)域技術(shù)人員可以理解的是,圖13所描述的功能模塊可以組合起來(lái)或者劃分成子模塊,從而實(shí)現(xiàn)上述發(fā)明的原理。因此,本文的描述可以支持對(duì)本文描述的功能模塊的任何可能的組合、或者劃分、或者更進(jìn)一步的限定。

圖14所示的實(shí)現(xiàn)裝置300可以用來(lái)執(zhí)行圖1所示的實(shí)現(xiàn)方法,下面僅就實(shí)現(xiàn)裝置300可以具有的功能模塊以及各功能模塊可以執(zhí)行的操作做簡(jiǎn)要說(shuō)明,對(duì)于其中涉及的細(xì)節(jié)部分可以參見(jiàn)上文結(jié)合圖1的描述,這里不再贅述。

參見(jiàn)圖14,實(shí)現(xiàn)裝置300包括骨骼關(guān)節(jié)樹(shù)創(chuàng)建模塊310、計(jì)算模塊320以及旋轉(zhuǎn)變換模塊330。

骨骼關(guān)節(jié)樹(shù)創(chuàng)建模塊310用于創(chuàng)建針對(duì)目標(biāo)對(duì)象的骨骼關(guān)節(jié)樹(shù),其中,骨骼關(guān)節(jié)樹(shù)中直接相連的兩個(gè)關(guān)節(jié)中更接近根節(jié)點(diǎn)的關(guān)節(jié)為父關(guān)節(jié),更遠(yuǎn)離根關(guān)節(jié)的關(guān)節(jié)為子關(guān)節(jié);

計(jì)算模塊320用于計(jì)算骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息;

旋轉(zhuǎn)變換模塊330用于針對(duì)骨骼關(guān)節(jié)樹(shù)中的至少一個(gè)子關(guān)節(jié),將該子關(guān)節(jié)在下一幀的位置信息與當(dāng)前幀的位置信息之間的位置變換轉(zhuǎn)換為繞該子關(guān)節(jié)的父關(guān)節(jié)的旋轉(zhuǎn)變換,從而通過(guò)旋轉(zhuǎn)變換,將子關(guān)節(jié)移動(dòng)到其下一幀的位置。

計(jì)算模塊320可以計(jì)算預(yù)定作用力下所述骨骼關(guān)節(jié)樹(shù)中的關(guān)節(jié)在下一幀的位置信息,預(yù)定作用力包括下列至少一項(xiàng):重力;關(guān)節(jié)移動(dòng)過(guò)程中受到的與移動(dòng)方向相反的阻力;以及來(lái)自周?chē)h(huán)境的干擾力。

具體地,計(jì)算模塊320可以使用如下位置計(jì)算公式計(jì)算關(guān)節(jié)在下一幀的位置信息posn+1,posn+1=posn+(posn-posn-1)*(1-r)+(gv+d)*δt2

其中,posn+1為關(guān)節(jié)在下一幀的位置信息,posn為關(guān)節(jié)在當(dāng)前幀的位置信息,posn-1為關(guān)節(jié)在上一幀的位置信息,r為阻力作用下的阻力系數(shù),0≤r≤1,gv為重力在關(guān)節(jié)的長(zhǎng)度方向上的法向方向上的重力分力作用下的加速度,d為干擾力作用下的加速度,δt為上一幀與當(dāng)前幀之間的時(shí)間間隔。

如圖14所示,作為本發(fā)明的一個(gè)優(yōu)選實(shí)施例,實(shí)現(xiàn)裝置300還可以包括第一修正模塊340。第一修正模塊340用于使用如下第一修正公式對(duì)計(jì)算得到的關(guān)節(jié)在下一幀的位置信息posn+1進(jìn)行修正,

其中,pos'n+1為關(guān)節(jié)經(jīng)過(guò)補(bǔ)償后在下一幀的位置信息,posp為關(guān)節(jié)的父關(guān)節(jié)的位置信息,len為關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度。

如圖14所示,作為本發(fā)明的一個(gè)優(yōu)選實(shí)施例,旋轉(zhuǎn)變換模塊330可以包括:當(dāng)前方向向量確定模塊331、移動(dòng)向量確定模塊332以及四元數(shù)獲取模塊333。

當(dāng)前方向向量確定模塊331用于根據(jù)子關(guān)節(jié)在當(dāng)前幀的的位置信息,確定從父關(guān)節(jié)到子關(guān)節(jié)的當(dāng)前方向向量。

移動(dòng)向量確定模塊332用于根據(jù)子關(guān)節(jié)在下一幀的的位置信息以及當(dāng)前幀的位置信息,確定子關(guān)節(jié)在其父關(guān)節(jié)坐標(biāo)系下的移動(dòng)向量。

四元數(shù)獲取模塊333用于根據(jù)方向向量和移動(dòng)向量,獲取繞父關(guān)節(jié)進(jìn)行旋轉(zhuǎn)變換的四元數(shù)。

如圖14所示,旋轉(zhuǎn)變換模塊330還可以包括插值運(yùn)算模塊334和旋轉(zhuǎn)模塊335。

插值運(yùn)算模塊334用于使用四元數(shù)插值算法對(duì)四元數(shù)進(jìn)行插值運(yùn)算,以得到緩沖四元數(shù),旋轉(zhuǎn)模塊335用于基于緩沖四元數(shù)對(duì)父關(guān)節(jié)和子關(guān)節(jié)進(jìn)行旋轉(zhuǎn)變換。

作為本發(fā)明的一個(gè)優(yōu)選實(shí)施例,旋轉(zhuǎn)變換模塊330還用于消除旋轉(zhuǎn)變換在子關(guān)節(jié)與其父關(guān)節(jié)構(gòu)成的軸向方向上的分量,通過(guò)消除后的旋轉(zhuǎn)變換,將子關(guān)節(jié)移動(dòng)到其下一幀的位置。

如圖14所示,作為本發(fā)明的一個(gè)優(yōu)選實(shí)施例,實(shí)現(xiàn)裝置300還可以包括第二修正模塊350。第二修正模塊350用于在檢測(cè)到計(jì)算得到的關(guān)節(jié)在下一幀的位置信息與目標(biāo)碰撞體發(fā)生碰撞的情況下,對(duì)關(guān)節(jié)的位置信息進(jìn)行修正,以使得修正后關(guān)節(jié)在下一幀的位置信息基本滿(mǎn)足以下條件:修正后關(guān)節(jié)位于目標(biāo)碰撞體的邊緣;修正后關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度不變。

具體地,第二修正模塊350可以使用如下第二修正公式對(duì)關(guān)節(jié)的位置進(jìn)行修正:

其中,pos”n+1為關(guān)節(jié)進(jìn)行修正后在下一幀的位置信息,c1為關(guān)節(jié)修正前在下一幀的位置信息,c2為碰撞體的位置信息,r1為關(guān)節(jié)的半徑,r2為碰撞體的半徑,posp為關(guān)節(jié)的父關(guān)節(jié)的位置信息,len為關(guān)節(jié)到其父關(guān)節(jié)之間的關(guān)節(jié)臂的長(zhǎng)度。

上文中已經(jīng)參考附圖詳細(xì)描述了根據(jù)本發(fā)明的動(dòng)畫(huà)中動(dòng)態(tài)骨骼的實(shí)現(xiàn)方法和實(shí)現(xiàn)裝置。

此外,根據(jù)本發(fā)明的方法還可以實(shí)現(xiàn)為一種計(jì)算機(jī)程序,該計(jì)算機(jī)程序包括用于執(zhí)行本發(fā)明的上述方法中限定的上述各步驟的計(jì)算機(jī)程序代碼指令?;蛘?,根據(jù)本發(fā)明的方法還可以實(shí)現(xiàn)為一種計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)可讀介質(zhì),在該計(jì)算機(jī)可讀介質(zhì)上存儲(chǔ)有用于執(zhí)行本發(fā)明的上述方法中限定的上述功能的計(jì)算機(jī)程序。本領(lǐng)域技術(shù)人員還將明白的是,結(jié)合這里的公開(kāi)所描述的各種示例性邏輯塊、模塊、電路和算法步驟可以被實(shí)現(xiàn)為電子硬件、計(jì)算機(jī)軟件或兩者的組合。

附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)和方法的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)記的功能也可以以不同于附圖中所標(biāo)記的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專(zhuān)用的基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),或者可以用專(zhuān)用硬件與計(jì)算機(jī)指令的組合來(lái)實(shí)現(xiàn)。

以上已經(jīng)描述了本發(fā)明的各實(shí)施例,上述說(shuō)明是示例性的,并非窮盡性的,并且也不限于所披露的各實(shí)施例。在不偏離所說(shuō)明的各實(shí)施例的范圍和精神的情況下,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō)許多修改和變更都是顯而易見(jiàn)的。本文中所用術(shù)語(yǔ)的選擇,旨在最好地解釋各實(shí)施例的原理、實(shí)際應(yīng)用或?qū)κ袌?chǎng)中的技術(shù)的改進(jìn),或者使本技術(shù)領(lǐng)域的其它普通技術(shù)人員能理解本文披露的各實(shí)施例。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
西畴县| 楚雄市| 长春市| 滕州市| 班玛县| 调兵山市| 上林县| 公主岭市| 拉萨市| 东港市| 大厂| 汕头市| 龙口市| 平和县| 乌拉特后旗| 建瓯市| 盐津县| 巴南区| 贞丰县| 军事| 张掖市| 剑川县| 阳山县| 五大连池市| 新兴县| 平泉县| 邢台市| 长葛市| 新丰县| 四川省| 阜南县| 光泽县| 寿光市| 丽江市| 永顺县| 本溪市| 宜春市| 吴旗县| 阿拉善盟| 广汉市| 商河县|