999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于XNA的人體骨骼蒙皮動畫關鍵技術研究

2013-01-01 00:00:00潘軍孫少斌林學華張詩楠
計算機時代 2013年3期

摘 要: 人體骨骼蒙皮動畫技術是計算機動畫領域研究的熱點和難點。針對當前骨骼蒙皮動畫中關節斷裂、皮膚塌陷、頂點計算量大、執行效率低等問題,首先分析了其原理及實現過程,然后以Visual Studio 2012+XNA4.0為平臺,設計實現了一個骨骼蒙皮動畫的引擎框架,并采用優化旋轉算法、動畫混合、GPU更新頂點等關鍵技術,提高了動畫的執行效率,增強了動畫的真實感。

關鍵詞: 骨骼蒙皮動畫; XNA; GPU; 動畫混合

中圖分類號:TP391.9 文獻標志碼:A 文章編號:1006-8228(2013)03-13-04

0 引言

計算機動畫技術已被廣泛應用到電影、游戲、軍事、航空等領域,它的研究對象包括現實生活或虛擬世界中的云霧雨、河流、各種植物、動物等等,但其中最有難度和最有挑戰性的對象之一就是人體動畫[1]。人體運動非常復雜,人的形狀不規則,肌肉隨著人體的運動而變形,頭發、皮膚和衣服模擬起來很困難。另外,由于人類對自身的運動非常熟悉,不協調的運動很容易被觀察者所察覺。人體的行為通常包括細微行為(如表情變化)、局部行為(如閉眼、手勢等)和全身行為(如走、跳、跑等)。本文在分析骨骼蒙皮動畫原理的基礎上,利用XNA4.0較好地實現了人體骨骼蒙皮動畫,并采用多種關鍵技術對動畫進行優化。

1 骨骼蒙皮動畫原理

目前實時人體動畫技術可分為三類:關鍵幀動畫、關節動畫和骨骼蒙皮動畫。

關鍵幀動畫需要首先存儲每一幀動畫的網格模型,實質上是一種以空間換時間的動畫技術。它的優點是計算量小,速度快,角色也更逼真。如果場景中有幾百個動畫模型共享相同的動畫,這種方法將很有用。但是它的局限性也很明顯,首先是占用空間較大,其次是靈活性差,很難與用戶進行交互,所以關鍵幀動畫一般用于簡單的連續動作的模擬。XNA中使用關鍵幀動畫模型很簡單,因為XNA有處理靜態模型的類。

關節動畫是基于面模型的建模方法中的一種,它將骨架層(Skeleton layer)(如圖1左)和皮膚層(Skin layer)(如圖1右)進行剛性連接,動畫過程中,通過骨架運動帶動相應的皮膚頂點運動[2]。在該方法中,皮膚相對于與之相連的骨骼并沒有發生運動,所以只需要用矩陣描述各個骨骼的相對于父骨骼運動,不考慮皮膚的彈性變形,實現簡單,計算速度比關鍵幀動畫慢。但由于是剛性連接,在兩段骨骼交接處,容易產生裂縫,影響效果。所以關節動畫適合對皮膚精度要求不高的場合,如模擬機器人行為。

骨骼蒙皮動畫可以看作是關鍵幀動畫和關節動畫的組合,是目前比較流行的動畫技術。它在關節動畫的基礎上,利用頂點混合(Vertex Blend)技術,改變皮膚層頂點的數據結構,使其存儲影響這些頂點位置的骨骼信息及影響的權值,然后通過“蒙皮”算法得到頂點的最終位置。使用“蒙皮”算法相當于在骨骼關節上動態蒙皮,有效解決了裂縫問題。但由于“蒙皮”算法中權值的指定是由人工完成,而且在較大關節部分(如肩膀)權值的指定很困難,容易出現如“塌陷(collapse)”、“裹糖紙( candy wrapper)”效應等變形問題[2]。文獻[3]中,夏開建等提出了一種改進的“蒙皮”算法,使用向皮膚可變區域中增加輔助節點的方法很好地改善了變形問題,本文將按此改進的“蒙皮”算法進行皮膚頂點位置的計算。

2 基于XNA的骨骼蒙皮動畫的設計

2.1 動畫模型的創建

骨骼蒙皮動畫的創建一般分為模型的創建和動畫的創建,逼真的動畫模型需要由具有豐富經驗的建模師和動畫師通過專業的3D軟件如3DMAX、Maya等實現。模型中還需要存儲相關數據信息:

2.1.1 模型數據

靜態的模型包括骨骼層以及包圍它的皮膚層。模型中需要存儲用于骨骼蒙皮動畫的相關信息,主要包括骨骼的層次結構和皮膚的頂點信息。骨骼的層次結構是指按照角色的身體特征構成一個層次結構。圖2給出了人體骨骼的層次結構,箭頭由父骨骼指向子骨骼,從子骨骼用矩陣乘法累積到最頂層的根骨骼,就可求得每個子骨骼相對于世界坐標系的變換矩陣。皮膚的頂點信息包括頂點的索引、與頂點關聯的骨骼索引及權值、頂點的顏色、頂點的法向量等。

2.1.2 動畫數據

從程序員的角度來看,動畫數據就是動畫過程中的骨骼關鍵幀以及變換矩陣,由它們來決定模型的運動。在XNA中,可以將動畫的變換矩陣存放在模型內部,但是對于動畫比較復雜的模型,一般存儲在單獨的animation文件中,這樣便于對模型進行驅動和人機交互,以及進行動畫混合。

2.2 數據的載入

在使用XNA進行游戲編程時,首先要將3D軟件創建的動畫模型文件(X格式或FBX格式)轉換成XNB格式,才能被XNA的內容讀取器(Content Reader)讀取。在XNA中,程序員使用內容管道(Content Pipeline)來加載硬盤上的資源[4](如3D模型、2D圖像、聲音等)。這個過程分為兩步:當項目被編譯時,內容管線從硬盤讀取資源,將它處理成二進制文件存放在硬盤上;當游戲運行時,直接從二進制文件中讀取數據。這樣做的好處在于:大量的計算在游戲運行之前處理完畢,可提高游戲運行速度;同時,先前存儲的二進制數據可以被PC、Xbox 360、Zune和Windows Phone讀取,從而實現了跨平臺。

雖然XNA的內容管道可以很方便地進行資源的加載,但它并不完全支持骨骼蒙皮動畫,因為它可以導入帶有骨骼蒙皮動畫數據的X文件或FBX文件,但輸出時并不處理所有的骨骼蒙皮動畫數據。要在XNA中添加對骨骼蒙皮動畫的支持,程序員需要擴展默認的模型處理器(model processor),創建一個新的處理過程并存儲模型的骨骼和動畫數據。圖3顯示了擴展內容管道所需創建的類,添加了對骨骼蒙皮動畫模型的支持,新增加的類使用灰色字體和黑框標識。除此以外,還需要創建新的類存儲、寫入和讀取這些數據。

2.3 骨骼蒙皮動畫的更新

在游戲的運行過程中,角色需要時刻準備與用戶進行交互,完成相應的動畫,這也是實時動畫技術的一個必備功能。從程序員的角度來說,就是根據用戶的輸入實時更新角色的狀態。

2.3.1 骨骼信息的更新

首先根據動畫的播放時間確定該動畫在該時刻的兩個插值關鍵幀,然后按照播放時間對這兩個關鍵幀進行插值,從而確定每一塊骨骼該時刻在局部坐標系下的變換矩陣(平移和旋轉信息),最后與父骨骼在世界坐標系下的變換矩陣相乘便得到了每一塊骨骼的在世界坐標系下的變換信息[5]。在插值過程中,平移過程可使用普通的線性插值完成,而旋轉過程則通過四元數的球面線性插值來實現。

2.3.2 皮膚頂點信息的更新

對于皮膚頂點,根據每個頂點所關聯的骨骼以及對應的權值,使用“蒙皮”算法計算皮膚頂點的位置。“蒙皮”算法本質上是一種插值算法,它的基本思想是使關節處的皮膚頂點受到與之鄰近的幾段骨骼的影響,影響大小由權值確定。其公式如下:

其中,vd是初始狀態的皮膚頂點在世界坐標系中的坐標;Di表示在初始狀態下第i段骨骼由局部坐標系到世界坐標系的變換矩陣;表示皮膚頂點在第i段骨骼局部坐標系中的坐標值;Mi表示第i段骨骼在當前位置由局部坐標系到世界坐標系的變換矩陣。ωi表示第i段骨骼對于當前頂點的權值,v表示變形后的皮膚頂點在世界坐標系中的坐標。

2.4 骨骼蒙皮動畫的優化

2.4.1 旋轉算法的優化

旋轉是骨骼蒙皮動畫最基本的操作,因此旋轉算法的優劣與動畫的最終效果密切相關。傳統的XNA編程通常使用歐拉角表示旋轉,需要三個浮點數分別表示繞三個坐標軸的旋轉。本文使用四元數表示旋轉,四元數需要4個浮點數,雖然比歐拉角多使用一個浮點數導致耗費的內存增加,但四元數可以避免使用歐拉角帶來的抖動和萬向節鎖的缺陷。不僅如此,四元數還可以根據動畫的逝去時間(elapseTime)和動畫長度(animLength)對前后兩個關鍵幀進行球面線性插值,從而求得該時刻的變換矩陣。球面線性插值公式如下:

其中p,q是源和目標四元數;t是取值為0和1之間的插值參數;θ是兩個四元數之間的實際角度。

2.4.2 動畫混合

動畫混合就是利用兩個或多個已有動畫序列進行混合從而生成一個新動畫,如把走路和揮手相結合,就形成了走路揮手的動畫。這種技術在生成新動畫的同時,還節省了動畫載入的時間以及動畫存儲的內存開銷,而且減輕了動畫師制作動畫的工作量。

本文在動畫設計過程中已將動畫分為兩部分:上半身動畫和下半身動畫,在角色實際運動過程中可根據與用戶或與環境的交互來進行不同動畫效果的組合。上半身動畫主要是手部動畫,包括:走、跑、蹲、揮手、拔槍、射擊、死亡等;下半身動畫主要是腿部動畫,包括:走、跑、蹲、死亡等。最基本的動畫混合就是將上、下半身動畫進行組合生成多種新的動畫,這一類混合動畫的驅動方式與骨骼蒙皮動畫驅動方式相似,不過,要在更新時同時計算出上、下半身骨骼的變換矩陣。另一類動畫混合是兩種動作的過渡,如人在跑動過程中拔槍射擊或是跑動過程中中彈死亡,這些都需要在各個動畫之間進行無縫銜接。在實現中,需要在動畫變化的瞬間凍結前一個動畫,并獲得當前關鍵幀,然后與下一個動畫的第一個關鍵幀進行差值,從而實現平滑過渡[7]。

2.4.3 GPU編程更新頂點

在可編程圖形處理器出現之前,骨骼蒙皮動畫中大量的計算都是由CPU來完成的。但隨著圖形硬件性能的提高,尤其是GPU中使用頂點渲染器和像素渲染器,以及現在的流處理器,使得GPU的綜合運算能力得到了很大的提高,而其特有的向量運算和矩陣運算能力更是超越了CPU[6]。因此,可以充分發揮GPU的運算特點,分擔CPU在運算上的壓力。

GPU主要是針對圖形渲染的特點設計的,在GPU內部存在頂點渲染、光柵化、像素渲染這樣的流水線,但在頂點之間、像素之間是沒有任何關聯性和依賴性的。因此GPU適合做大規模的并行運算,而不適合用來做邏輯性和復雜性很高的算法運算,其運算結果也不會被保存下來供下次運算使用。因此,要將骨骼蒙皮動畫的某些運算交給 GPU來執行,這些運算必須保持算法簡單,且適用于大量數據。通過分析2.3節中骨骼蒙皮動畫所涉及到的運算可以發現:骨骼信息的更新涉及插值運算、遞歸運算、矩陣運算,其運算結果還需保留以便進行頂點信息的更新,所以骨骼信息的更新不能使用GPU進行計算;而頂點信息的更新針對的是每個頂點,頂點與頂點之間不存在依賴關系,僅僅利用與其關聯的骨骼和骨骼影響權值,使用骨骼的全局變換矩陣進行頂點數據的更新,更新結果無需保留而是直接顯示在屏幕上。可見,該過程非常適合于在GPU中進行處理[8]。這樣,就可以使用CPU更新骨骼信息,GPU更新頂點信息,二者協同完成骨骼蒙皮動畫的更新。

3 基于XNA的骨骼蒙皮動畫的實現

本文使用Visual Studio 2012+XNA4.0進行骨骼蒙皮動畫的實現。綜合以上對骨骼蒙皮動畫的分析與設計,下面將對其進行實現。程序結構設計圖如圖4所示,程序的實現分為模型和動畫的創建、數據載入、數據讀出和數據更新四個部分。在數據更新部分,對骨骼信息的更新在CPU中進行,將CPU中計算得到的骨骼在世界坐標系中的變換矩陣以及頂點與骨骼的關聯信息傳入GPU中,在GPU部分使用HLSL進行頂點的更新并輸出到屏幕。圖5為程序實現的主要類圖:KeyFrameSequence類用于獲取動畫序列的關鍵幀并進行插值運算;GameAnimateModel類用于矩陣轉換、動畫混合、動畫播放等;GamePlayer類用于與用戶進行交互;Game1類為XNA中程序的主類,是程序運行的入口。

4 結束語

本文從骨骼蒙皮動畫的原理出發,以XNA為開發平臺,設計并實現了骨骼蒙皮動畫。在實現過程中對動畫的旋轉算法進行了優化;使用動畫混合技術實現了人物各個動作的無縫銜接;將頂點更新及渲染交給GPU來完成。這些措施提高了動畫的執行效率,增強了動畫的真實感。隨著3D技術的發展,骨骼蒙皮動畫技術以其優良的執行效率及較為逼真的動畫效果,成為了實時動畫領域最受歡迎的技術之一。如何實現更加逼真的動畫混合,怎樣協調CPU與GPU的利用率,必將成為下一步研究的熱點。

參考文獻:

[1] AUBEL A. Anatomically-based human body deformations[D].

Université de Marne-la-Vallée,France,2002.

[2] 吳小,馬利莊,顧寶軍.計算機動畫中人體建模與皮膚變形技術的研

究現狀與展望[J].中國圖象圖形學報,2008.12(4):65-73

[3] 夏開建,王士同.改進的骨骼蒙皮算法模擬皮膚變形[J].計算機應用

與軟件,2009.26(12):174-176

[4] Alexandre Santos Lob?o A.Beginning XNA 3.0 Game Program-

ming From Novice to Professional[M].Apress,2009:305-319

[5] 袁會杰.骨骼動畫技術的研究與實現[D].電子科技大學,2010.

[6] 陳軍.復雜三維場景的數據處理及骨骼動畫實現[D].浙江大學,2008.

[7] 雷濤,羅維薇,王毅.一種具有逼真效果的虛擬人動畫生成方法[J].計

算機應用研究,2012.29(10):35-37

[8] Method in Real-time Skeletal Character Animation[J].International

Journal of Virtual Reality,2011.10(3):25

主站蜘蛛池模板: 77777亚洲午夜久久多人| 久草视频精品| 永久在线播放| 波多野结衣一二三| 色婷婷综合在线| 色妞永久免费视频| 色婷婷在线影院| 亚洲美女久久| 久久网欧美| 欧美成人影院亚洲综合图| a级毛片一区二区免费视频| 亚洲欧美日本国产综合在线| 午夜毛片免费看| 熟妇人妻无乱码中文字幕真矢织江 | 91精品国产自产91精品资源| 成人午夜天| 亚洲美女视频一区| 91亚瑟视频| 亚洲国产精品一区二区第一页免 | 久久久久亚洲av成人网人人软件| 亚洲国产看片基地久久1024| 国产在线精彩视频二区| 久久久久人妻一区精品| 日韩午夜福利在线观看| 看你懂的巨臀中文字幕一区二区| 亚洲国产无码有码| 极品尤物av美乳在线观看| 国产午夜一级淫片| 最新国产精品鲁鲁免费视频| 2021国产乱人伦在线播放| 亚洲一区二区约美女探花| 亚洲国产欧洲精品路线久久| 久久国产拍爱| 国产玖玖视频| 久久网欧美| 草草线在成年免费视频2| 久草青青在线视频| 日本不卡在线播放| 国产美女精品在线| 91小视频在线观看免费版高清| 色综合天天综合中文网| 91精品啪在线观看国产| 欧美精品成人| 国产91特黄特色A级毛片| 中文纯内无码H| 在线国产91| 99久久精品免费观看国产| 欧美成人综合在线| 国产成人欧美| 亚洲美女一区| 亚洲成人黄色在线观看| 国产激爽爽爽大片在线观看| 嫩草在线视频| 久久不卡精品| 97在线公开视频| 亚洲精品图区| 美女无遮挡拍拍拍免费视频| 欧美三級片黃色三級片黃色1| 欧美激情综合一区二区| 精品视频一区二区观看| 一级毛片在线免费看| 国产成人精品视频一区二区电影| 手机在线看片不卡中文字幕| 国产香蕉国产精品偷在线观看| 国产亚洲欧美日韩在线观看一区二区 | 亚洲综合亚洲国产尤物| 亚洲欧洲日韩综合色天使| 国产欧美成人不卡视频| 国产SUV精品一区二区6| 欧美成人免费一区在线播放| 最新日本中文字幕| 九九香蕉视频| 国产一区二区精品福利| 亚洲精品成人片在线观看| 国产成人无码综合亚洲日韩不卡| 欧美日韩在线观看一区二区三区| 中文字幕永久视频| 青青草原国产av福利网站| 熟妇丰满人妻| 国产成人8x视频一区二区| 幺女国产一级毛片| www.亚洲色图.com|