專利名稱:一種基于可編程gpu的骨骼動畫處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機圖形領(lǐng)域,特別是一種骨骼蒙皮動畫的處理方法。
背景技術(shù):
骨骼蒙皮動畫也叫做骨骼動畫。使用骨骼動畫技術(shù)。可以塑造出各種各樣,栩栩如生的動畫角色。其中,人體的骨骼動畫運用得最為廣泛。一般來說,骨骼動畫由兩部分來表示。一部分是形成層次的一系列的骨骼,通常稱為骨架,另一部分是蒙在骨架上的皮膚。在骨骼動畫渲染時,求每一個與骨骼節(jié)點綁定的頂點在下一時刻的位置都要進行一次坐標(biāo)變換,這需要大量的矩陣和乘法運算。在可編程硬件出現(xiàn)之前,這些工作都是由CPU來完成。CPU需要承擔(dān)實時應(yīng)用中大部分的運算,如場景管理,物理計算等等,這樣就會造成CPU與GPU之間的負荷不平衡,當(dāng)系統(tǒng)負荷變大時,CPU就成為提高系統(tǒng)性能的瓶頸,因此很難實現(xiàn)實時動畫。隨著圖形硬件性能的提高,GPU的可編程性和計算性能越來越高。GPU全稱是GraphicProcessing Unit,即圖形處理單兀,GPU作為圖形渲染的最重要硬件,隨著其處理能力的不斷提高和可編程性的不斷完善,如何讓GPU代替CPU完成更多的工作以平衡兩者的協(xié)作已經(jīng)成為計算機動畫領(lǐng)域的研究熱點之一。GPU使顯卡減少了對CPU的依賴,并能處理部分原本CPU的工作,尤其是在處理3D圖形時。如果將一些計算從CPU轉(zhuǎn)移至可編程GPU中,從而將CPU解放出來用于諸如場景管理、光照以及物理等計算,可以實現(xiàn)更加豐富多彩的效果。目前將工作從CPU轉(zhuǎn)移至GPU已經(jīng)是一種技術(shù)趨勢,因此如何將可編程GPU引入到骨骼動畫技術(shù)之中是一個值得研究的課題,可以預(yù)見在骨骼動畫領(lǐng)域,GPU具有良好的應(yīng)用前景。
發(fā)明內(nèi)容
本發(fā)明意在提供一種基于可編程GPU的骨骼動畫處理方法,將骨骼動畫不同部分的計算任務(wù)放到GPU中進行,使部分或者全部的計算量從CPU轉(zhuǎn)移到GPU,從而將CPU從繁重的頂點變換、骨骼更新的計算中解脫出來。本發(fā)明揭示了一種基于可編程GPU的骨骼動畫處理方法,步驟一在CPU中將頂點綁定到其所對應(yīng)的骨骼;步驟二 在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定;步驟三在CPU中更新骨架并將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,然后將更新后的骨骼矩陣與頂點信息傳送到GPU中;步驟四在GPU中利用傳入的骨骼矩陣對頂點信息進行更新。本發(fā)明揭示了另一種基于可編程GPU的骨骼動畫處理方法,包括步驟一在CPU中將頂點綁定到對應(yīng)的骨骼;步驟二 在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定;步驟三在CPU中計算得到起始骨架和結(jié)束骨架,將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,并將計算結(jié)果傳送到GPU中;步驟四在GPU中對起始骨骼矩陣和結(jié)束骨骼矩陣進行插值運算,得到當(dāng)前時間點的骨骼矩陣,并利用該矩陣對頂點信息進行更新。本發(fā)明還揭示了一種基于可編程GPU的骨骼動畫處理方法,包括步驟一在CPU中將頂點綁定到對應(yīng)的骨骼;步驟二 在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定;步驟三在CPU中計算得到所有動畫的骨架,將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,并將這些計算結(jié)果制作成紋理,傳送到GPU中;步驟四GPU采樣數(shù)據(jù)紋理,并用采樣的結(jié)果對頂點信息進行更新。
圖1實施例1的基于GPU的骨骼動畫框架圖;圖2實施例1的處理方法的流程圖;圖3實施例2的處理方法流程圖;圖4實施例3的處理方法的流程圖。
具體實施例方式由于CPU與GPU構(gòu)造的不同,決定了他們計算與數(shù)據(jù)存儲方式的不同。所以,基于(PU的算法并不能夠簡單的復(fù)制用于GPU中,必須先要對其進行分析與簡化。骨骼動畫中的數(shù)據(jù)計算主要包括以下四方面(I)骨骼與頂點的對應(yīng)關(guān)系;(2)骨骼的偏移矩陣與骨架的對應(yīng)關(guān)系;(3)骨架的更新;(4)頂點的更新。使用GPU進行計算與使用CPU進行計算有很大的不同。GPU在頂點處理階段處理的每一個點,都使用同樣的算法進行計算,對于像素處理階段的每一個像素也是如此。并且在GPU中每個頂點或者像素的計算是相互獨立的,當(dāng)前的計算結(jié)果不能用于下 個頂點或者像素,而且頂點與頂點之間,像素與像素之間,計算結(jié)果不能被共享。由此可見,GPU較適合用于大規(guī)模并行計算,而不適合用來做邏輯性和復(fù)雜性很高的算法運算。因此,要將骨骼動畫的某些運算交付給GPU來執(zhí)行,這些運算必須保持算法簡單,且適用于大量數(shù)據(jù)。所以在設(shè)計基于GPU的算法時應(yīng)盡量保證程序的簡潔。在了解了 GPU的計算特性之后,下面將對這四種計算分別進行分析(I)骨骼與頂點的對應(yīng)關(guān)系骨骼與頂點的創(chuàng)建是分開的,但在創(chuàng)建的過程中,我們要將骨骼與頂點綁定在一起。這樣當(dāng)我們改變骨骼時,頂點才會跟著一起移動。(2)骨骼的偏移矩陣與骨架的對應(yīng)關(guān)系骨骼的偏移矩陣規(guī)定了綁定在某個骨骼中頂點的偏移量,它與骨架一起控制了頂點在空間中的位置。(3)骨架的更新骨骼矩陣的改變會對它的兄弟骨骼和子骨骼產(chǎn)生影響,所以要對相應(yīng)的骨骼進行更新,即骨架的更新。(4)頂點的更新
在整個骨架的位置改變后,附著在骨架上的頂點當(dāng)然也需要改變,這樣才能使模型動起來。被改變的頂點信息有頂點的位置及頂點的法向量。從以上分析可以發(fā)現(xiàn)骨骼與頂點的對應(yīng)關(guān)系需要保留計算結(jié)果以用于下一步的計算,并且由于涉及到很多的查找計算,所以算法相對比較復(fù)雜。骨骼的偏移矩陣與骨架的對應(yīng)關(guān)系同樣需要保留計算結(jié)果用于下一步的計算,同樣因為涉及到很多的查找計算,所以算法也相對比較復(fù)雜。骨架更新的計算結(jié)果也需要保留并且由于骨架采樣是樹形存儲結(jié)構(gòu),一般使用遞歸的方法進行更新。算法比較復(fù)雜,也并不適合在GPU中計算。但是,因為骨骼動畫是許多不同骨架的演化結(jié)果.所以仍有辦法在GPU中生成新的骨架。頂點更新的結(jié)果可以直接輸出到屏幕上而無需保留,所以頂點更新是骨骼動畫中最適合GPU計算的一部分。在過去的骨骼動畫中,所有的計算都在CPU中進行,計算得到的所有結(jié)果都放到頂點緩存中,然后送入GPU,最后繪制在屏幕上。由于本發(fā)明的方法將頂點更新甚至骨架更新的一部分計算放到GPU中去處理,因此不僅要將原始的頂點數(shù)據(jù)送入GPU中,而且還要將所有用于頂點更新的數(shù)據(jù)信息一同傳給GPU。由于CPU與GPU之間進行數(shù)據(jù)傳遞并不像CPU從內(nèi)存中調(diào)用數(shù)據(jù)那樣方便,二者之間的數(shù)據(jù)傳遞相對來說是比較費時的,特別是在傳遞大段數(shù)據(jù)的時候更是如此。所以在算法設(shè)計中應(yīng)盡量減少兩者之間數(shù)據(jù)傳遞的頻率,并且傳遞的數(shù)據(jù)量不要太大。CPU與GPU之閬數(shù)據(jù)的傳遞方法有兩種(I)直接傳遞,該方法在傳遞數(shù)據(jù)時消耗比較大。傳遞后的數(shù)據(jù)放在GPU的內(nèi)存中,在GPU計算過程中調(diào)用比較方便;(2)利用數(shù)據(jù)紋理進行傳遞,該方法在數(shù)據(jù)傳遞時消耗比較小。但傳遞后的數(shù)據(jù)存放在GPU的紋理內(nèi)存中,為了獲取所需的數(shù)據(jù),我們需要計算出數(shù)據(jù)在紋理中的位置,并對相應(yīng)位置的紋理進行采樣。實施例1 :該實施例將邏輯較為復(fù)雜的骨架更新等工作放在CPU中進行計算,將邏輯較為簡單的頂點更新放在GPU中進行計算,充分利用了 CPU與GPU的資源,框架圖如圖1所示。但是由于骨骼更新的工作在CPU中進行,所以在每次渲染的時候都需要將更新后的矩陣傳入GPU中去。如圖2所示,步驟如下第一步在CPU中將頂點綁定到其所對應(yīng)的骨骼;第二步在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定;第三步在CPU中更新骨架并將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,然后將更新后的骨骼矩陣與頂點信息傳送到GPU中;第四步在GPU中利用傳入的骨骼矩陣對頂點信息進行更新。實施例2 該實施例是頂點動畫與骨骼動畫的結(jié)合,用一組起始位置的骨骼矩陣和一組結(jié)束位置的骨骼矩陣來表示一段動畫,即對始末位置骨骼矩陣進行線性插值得到中間動畫姿勢。該實施例所展示的方法在初始化的時候完成起始位置骨骼矩陣和結(jié)束位置骨骼矩陣的計算工作,然后將所有與骨骼動畫相關(guān)的計算都放入GPU中完成。該實施例所展示的方法的優(yōu)點在于減少了 CPU與GPU之間的通訊,缺點在于僅使用GPU進行計算,浪費了 CPU的資源,加重了 GPU的負擔(dān)。
如圖3所示,步驟如下第一步在CPU中將頂點綁定到對應(yīng)的骨骼;第二步在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定;第三步在CPU中計算得到起始骨架和結(jié)束骨架,將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,并將計算結(jié)果傳送到GPU中;第四步在GPU中對起始骨骼矩陣和結(jié)束骨骼矩陣進行插值運算,得到當(dāng)前時間點的骨骼矩陣,并利用該矩陣對頂點信息進行更新。實施例3 該實施例以數(shù)據(jù)紋理作為傳輸方法,通過將骨骼動畫創(chuàng)建到紋理中,再通過紋理采樣的方式來獲取骨骼矩陣。該實施例所展示的方法的優(yōu)點在于減少了 CPU與GPU之間的通訊,缺點在于僅使用GPU進行計算,浪費了 CPU的資源,加重了 GPU的負擔(dān)。但是數(shù)據(jù)紋理作為一種能方便傳輸大量數(shù)據(jù)的方法,為實現(xiàn)骨骼動畫提供了另一種途徑。預(yù)創(chuàng)建骨骼動畫法可以將骨骼動畫數(shù)據(jù)制作成紋理,也可以創(chuàng)建一個紋理的ResourceView將數(shù)據(jù)映射到紋理中去。前者需要事先創(chuàng)建好紋理,而后者需要在初始化的過程中,計算骨骼動畫的信息并映射到紋理的ResourceView中。如圖4所示,步驟如下第一步在CPU中將頂點綁定到對應(yīng)的骨骼;第二步在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定;第三步在CPU中計算得到所有動畫的骨架,將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,并將這些計算結(jié)果制作成紋理,傳送到GPU中;第四步GPU采樣數(shù)據(jù)紋理,并用采樣的結(jié)果對頂點信息進行更新。本發(fā)明展示了幾種基于可編程GPU技術(shù)的骨骼動畫,通過使用不同的可編程GPU技術(shù),將骨骼動畫不同部分的計算任務(wù)放到GPU中進行,使部分或者全部的計算量從CPU轉(zhuǎn)移到GPU,從而將CPU從繁重的頂點變換、甚至骨骼更新的計算中解脫出來。本發(fā)明主張的權(quán)利范圍并不限制于被披露的特定的形式,而是覆蓋所有的改進、等效和其它任何落入本發(fā)明的精神和范圍的內(nèi)容。
權(quán)利要求
1.一種基于可編程GPU的骨骼動畫處理方法,包括 步驟一在CPU中將頂點綁定到其所對應(yīng)的骨骼; 步驟二 在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定; 步驟三在CPU中更新骨架并將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,然后將更新后的骨骼矩陣與頂點信息傳送到GPU中; 步驟四在GPU中利用傳入的骨骼矩陣對頂點信息進行更新。
2.一種基于可編程GPU的骨骼動畫處理方法,包括 步驟一在CPU中將頂點綁定到對應(yīng)的骨骼; 步驟二 在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定; 步驟三在CPU中計算得到起始骨架和結(jié)束骨架,將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,并將計算結(jié)果傳送到GPU中; 步驟四在GPU中對起始骨骼矩陣和結(jié)束骨骼矩陣進行插值運算,得到當(dāng)前時間點的骨骼矩陣,并利用該矩陣對頂點信息進行更新。
3.一種基于可編程GPU的骨骼動畫處理方法,包括 步驟一在CPU中將頂點綁定到對應(yīng)的骨骼; 步驟二 在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定; 步驟三在CPU中計算得到所有動畫的骨架,將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,并將這些計算結(jié)果制作成紋理,傳送到GPU中; 步驟四GPU采樣數(shù)據(jù)紋理,并用采樣的結(jié)果對頂點信息進行更新。
4.一種基于可編程GPU的骨骼動畫處理系統(tǒng),包括 用于在CPU中將頂點綁定到其所對應(yīng)的骨骼的裝置; 用于在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定的裝置; 用于在CPU中更新骨架并將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,然后將更新后的骨骼矩陣與頂點信息傳送到GPU中的裝置; 用于在GPU中利用傳入的骨骼矩陣對頂點信息進行更新的裝置。
5.一種基于可編程GPU的骨骼動畫處理系統(tǒng),包括 用于在CPU中將頂點綁定到對應(yīng)的骨骼的裝置; 用于在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定的裝置; 用于在CPU中計算得到起始骨架和結(jié)束骨架,將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,并將計算結(jié)果傳送到GPU中的裝置; 用于在GPU中對起始骨骼矩陣和結(jié)束骨骼矩陣進行插值運算,得到當(dāng)前時間點的骨骼矩陣,并利用該矩陣對頂點信息進行更新的裝置。
6.一種基于可編程GPU的骨骼動畫處理系統(tǒng),包括 用于在CPU中將頂點綁定到對應(yīng)的骨骼的裝置 用于在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定的裝置; 用于在CPU中計算得到所有動畫的骨架,將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,并將這些計算結(jié)果制作成紋理,傳送到GPU中的裝置; 用于GPU采樣數(shù)據(jù)紋理,并用采樣的結(jié)果對頂點信息進行更新的裝置。
全文摘要
本發(fā)明意在提供一種基于可編程GPU的骨骼動畫處理方法,將骨骼動畫不同部分的計算任務(wù)放到GPU中進行,使部分或者全部的計算量從CPU轉(zhuǎn)移到GPU,從而將CPU從繁重的頂點變換、骨骼更新的計算中解脫出來。一種基于可編程GPU的骨骼動畫處理方法,步驟一在CPU中將頂點綁定到其所對應(yīng)的骨骼;步驟二在CPU中將骨骼的偏移量矩陣與其所對應(yīng)的骨架進行綁定;步驟三在CPU中更新骨架并將更新后的骨架與其所對應(yīng)的偏移量矩陣作矩陣乘法,然后將更新后的骨骼矩陣與頂點信息傳送到GPU中;步驟四在GPU中利用傳入的骨骼矩陣對頂點信息進行更新。
文檔編號G06T13/00GK103021008SQ20121052777
公開日2013年4月3日 申請日期2012年12月11日 優(yōu)先權(quán)日2012年12月11日
發(fā)明者賀景衛(wèi), 李彥, 吳佩, 周文敏, 皮珊珊 申請人:湖南師范大學(xué)