一種基于gpu模擬過程式動(dòng)畫的實(shí)現(xiàn)方法
【專利摘要】本發(fā)明公開了一種基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,主要包括:定義待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息;基于定義所得待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息進(jìn)行分類,對(duì)不同類別分別進(jìn)行插值計(jì)算,得到與相應(yīng)風(fēng)場(chǎng)信息對(duì)應(yīng)的四元數(shù);基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行處理,形成待模擬對(duì)象的運(yùn)動(dòng)動(dòng)畫。本發(fā)明所述基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,可以克服現(xiàn)有技術(shù)中模擬效果差、運(yùn)動(dòng)模式表達(dá)難度大和計(jì)算機(jī)圖形處理量大等缺陷,以實(shí)現(xiàn)模擬效果好、運(yùn)動(dòng)模式表達(dá)難度小和計(jì)算機(jī)圖像處理量小的優(yōu)點(diǎn)。
【專利說明】—種基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及圖像處理【技術(shù)領(lǐng)域】,具體地,涉及一種基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]自然現(xiàn)象的模擬是計(jì)算機(jī)領(lǐng)域的一個(gè)重要研究課題,在自然界中這隨風(fēng)擺動(dòng)的是一種很常見的現(xiàn)象,要想精確的模擬這種搖曳的效果具有相當(dāng)?shù)膹?fù)雜性,大多數(shù)樹木有無數(shù)個(gè)樹枝和樹葉組成,而搖曳具有層次性,每個(gè)樹枝的不僅自身運(yùn)動(dòng),還要隨著父樹枝運(yùn)動(dòng)而運(yùn)動(dòng),這樣的運(yùn)動(dòng)模式很難用幾何變形來表達(dá)。
[0003]為了解決這種現(xiàn)象的模擬,就需要計(jì)算機(jī)圖形處理相當(dāng)復(fù)雜的運(yùn)算。
[0004]在實(shí)現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在模擬效果差、運(yùn)動(dòng)模式表達(dá)難度大和計(jì)算機(jī)圖形處理量大等缺陷。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的在于,針對(duì)上述問題,提出一種基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,以實(shí)現(xiàn)模擬效果好、運(yùn)動(dòng)模式表達(dá)難度小和計(jì)算機(jī)圖像處理量小的優(yōu)點(diǎn)。
[0006]為實(shí)現(xiàn)上述目 的,本發(fā)明采用的技術(shù)方案是:一種基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,主要包括:
a、定義待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息;
b、基于定義所得待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息進(jìn)行分類,對(duì)不同類別分別進(jìn)行插值計(jì)算,得到與相應(yīng)風(fēng)場(chǎng)信息對(duì)應(yīng)的四元數(shù);
C、基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行處理,形成待模擬對(duì)象的運(yùn)動(dòng)動(dòng)畫。
[0007]進(jìn)一步地,在步驟a中,所述定義待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息的操作,具體包括:
由于形成待模擬對(duì)象搖曳的效果時(shí)必須有外力,該外力之源一般采用流體力學(xué)的方法來模擬風(fēng),把風(fēng)力定義為對(duì)地形的二維力場(chǎng),風(fēng)場(chǎng)能夠在頂點(diǎn)著色器中通過一個(gè)二維紋理來進(jìn)行采樣獲得,這種方法完全在GPU上模擬風(fēng)場(chǎng);
該模擬風(fēng)場(chǎng)定義了流體的速度和方向,采用數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)該模擬風(fēng)場(chǎng);在該模擬風(fēng)場(chǎng)中,全局風(fēng)向和風(fēng)速能夠和風(fēng)元一起存儲(chǔ),風(fēng)元被定義為分析函數(shù):
V= G(X,t);
其中,X是一個(gè)風(fēng)元中表示位置的二維向量,V是在給定位置的一個(gè)風(fēng)向量,時(shí)間t隨著時(shí)間的變化,能夠計(jì)算出每一個(gè)點(diǎn)的風(fēng)向和風(fēng)速。
[0008]進(jìn)一步地,在步驟a中,所述待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息,包括:
待模擬對(duì)象位于迎風(fēng)向的振幅、振動(dòng)頻率和偏移角度;
待模擬對(duì)象位于背風(fēng)向的振幅、振動(dòng)頻率和偏移角度; 待模擬對(duì)象垂直于風(fēng)向的振幅、振動(dòng)頻率和偏移角度。
[0009]進(jìn)一步地,在步驟b中,所述對(duì)不同類別分別進(jìn)行插值計(jì)算,通過參數(shù)傳入到LerpO函數(shù)里,GPU會(huì)對(duì)這個(gè)函數(shù)插值計(jì)算處理,得到與相應(yīng)風(fēng)場(chǎng)信息對(duì)應(yīng)的四元數(shù)的操作,具體包括:
當(dāng)待模擬對(duì)象位于迎風(fēng)向和背風(fēng)向時(shí),分別將待模擬對(duì)象位于迎風(fēng)向的風(fēng)場(chǎng)信息和待模擬對(duì)象位于背風(fēng)向的風(fēng)場(chǎng)信息進(jìn)行插值計(jì)算,得到四元數(shù)O ;所述待模擬對(duì)象位于迎風(fēng)向的風(fēng)場(chǎng)信息和待模擬對(duì)象位于背風(fēng)向的風(fēng)場(chǎng)信息,均包括振幅、振動(dòng)頻率和偏移角度;
當(dāng)待模擬對(duì)象垂直于背風(fēng)向時(shí),將待模擬對(duì)象垂直于風(fēng)向的風(fēng)場(chǎng)信息進(jìn)行插值計(jì)算,得到四元數(shù)I;所述待模擬對(duì)象垂直于風(fēng)向的風(fēng)場(chǎng)信息包括振幅、振動(dòng)頻率和偏移角度。
[0010]進(jìn)一步地,在步驟c中,所述基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行處理,形成待模擬對(duì)象的運(yùn)動(dòng)動(dòng)畫的操作,具體包括:
將基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行二次插值計(jì)算,得到待模擬對(duì)象旋轉(zhuǎn)的四元數(shù);
對(duì)待模擬對(duì)象旋轉(zhuǎn)的四元數(shù)所影響的頂點(diǎn),進(jìn)行矩陣變換處理,形成待模擬對(duì)象的運(yùn)動(dòng)。該矩陣變換的過程和骨骼變換的相同,具體的矩陣變換其實(shí)是為了實(shí)現(xiàn)坐標(biāo)的統(tǒng)一而進(jìn)行的變換,即從樹枝靜止時(shí)自身坐標(biāo)矩陣轉(zhuǎn)化為相對(duì)于樹干的世界坐標(biāo)變換,然后在轉(zhuǎn)化為改樹枝的世界矩陣。而這些頂點(diǎn)的位置就隨著最后每個(gè)枝條的運(yùn)動(dòng)情況來實(shí)現(xiàn)運(yùn)動(dòng)的。
[0011]進(jìn)一步地,所述待模擬對(duì)象,包括樹木、花草。
[0012]本發(fā)明各實(shí)施例的基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,由于主要包括:定義待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息;基于定義所得待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息進(jìn)行分類,對(duì)不同類別分別進(jìn)行插值計(jì)算,得到與相應(yīng)風(fēng)場(chǎng)信息對(duì)應(yīng)的四元數(shù);基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行處理,形成待模擬對(duì)象的運(yùn)動(dòng)動(dòng)畫;可以模擬樹木、花草實(shí)時(shí)搖曳的過程;從而可以克服現(xiàn)有技術(shù)中模擬效果差、運(yùn)動(dòng)模式表達(dá)難度大和計(jì)算機(jī)圖形處理量大的缺陷,以實(shí)現(xiàn)模擬效果好、運(yùn)動(dòng)模式表達(dá)難度小和計(jì)算機(jī)圖像處理量小的優(yōu)點(diǎn)。
[0013]本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。
[0014]下面通過附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
【專利附圖】
【附圖說明】
[0015]附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實(shí)施例一起用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中:
圖1為本發(fā)明基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法中未使用枝葉的動(dòng)畫圖;
圖2為本發(fā)明基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法中使用過枝葉的動(dòng)畫圖;
圖3為本發(fā)明基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法中美術(shù)制作樹模型的命名規(guī)則2的動(dòng)畫圖;
圖4為本發(fā)明基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法中美術(shù)制作樹模型的命名規(guī)則2的動(dòng)畫圖;圖5為本發(fā)明基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法中振幅調(diào)到最大的樹枝的運(yùn)動(dòng)(樹干也歸為樹枝)
圖6為本發(fā)明基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法中振幅調(diào)到最小的樹枝的運(yùn)動(dòng)(樹干也歸為樹枝)
圖7 (a)為本發(fā)明基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法中在無風(fēng)狀態(tài)下樹枝的偏移角度為O的動(dòng)畫圖;
圖7(b)為本發(fā)明基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法中樹枝的偏移角度為I的時(shí)候,得到最大偏移角度的動(dòng)畫圖;
圖7 (c)為本發(fā)明基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法中樹枝的偏移角度為-1的時(shí)候,得到最小偏移角度的動(dòng)畫圖;
圖8為本發(fā)明基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法的流程示意圖。
【具體實(shí)施方式】
[0016]以下結(jié)合附圖對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行說明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí)施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
[0017]隨著時(shí)代的發(fā)展,GPU的性能也在不斷的提高,依據(jù)GPU具有高并行結(jié)構(gòu)的特點(diǎn),所有在處理圖形數(shù)據(jù)和復(fù)雜計(jì)算擁有比CPU更高的效率。
[0018]為了解決現(xiàn)有技 術(shù)中存在的缺陷,根據(jù)本發(fā)明實(shí)施例,如圖1-圖8所示,提供了一種基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,具體是一種模擬樹木、花草實(shí)時(shí)搖曳的過程式動(dòng)畫實(shí)現(xiàn)的方法。該基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,利用了 GPU頂點(diǎn)著色器中引入過程式動(dòng)畫就是為了充分發(fā)掘GPU的創(chuàng)建和繪制的能力,來模擬可視化擁有大量植物的較大的開放環(huán)境,這種模擬到虛擬的場(chǎng)景中形成逼真的樹木搖曳的效果,不僅可以增加場(chǎng)景的生動(dòng)性,更能增強(qiáng)用戶的代入感。
[0019]本實(shí)施例的基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,主要包括:
a、定義待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息;
在步驟a中,定義待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息的操作,具體包括:
由于形成待模擬對(duì)象搖曳的效果時(shí)必須有外力,該外力之源一般采用流體力學(xué)的方法來模擬風(fēng),把風(fēng)力定義為對(duì)地形的二維力場(chǎng),風(fēng)場(chǎng)能夠在頂點(diǎn)著色器中通過一個(gè)二維紋理來進(jìn)行采樣獲得,這種方法完全在GPU上模擬風(fēng)場(chǎng);該待模擬對(duì)象,包括樹木、花草;
該模擬風(fēng)場(chǎng)定義了流體的速度和方向,采用數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)該模擬風(fēng)場(chǎng);在該模擬風(fēng)場(chǎng)中,全局風(fēng)向和風(fēng)速能夠和風(fēng)元一起存儲(chǔ),風(fēng)元被定義為分析函數(shù):
V= G(X,t);
其中,X是一個(gè)風(fēng)元中表示位置的二維向量,V是在給定位置的一個(gè)風(fēng)向量,時(shí)間t隨著時(shí)間的變化,能夠計(jì)算出每一個(gè)點(diǎn)的風(fēng)向和風(fēng)速;
在步驟a中,待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息,包括:
待模擬對(duì)象位于迎風(fēng)向的振幅、振動(dòng)頻率和偏移角度;
待模擬對(duì)象位于背風(fēng)向的振幅、振動(dòng)頻率和偏移角度;
待模擬對(duì)象垂直于風(fēng)向的振幅、振動(dòng)頻率和偏移角度;
b、基于定義所得待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息進(jìn)行分類,對(duì)不同類別分別進(jìn)行插值計(jì)算,得到與相應(yīng)風(fēng)場(chǎng)信息對(duì)應(yīng)的四元數(shù);
在步驟b中,對(duì)不同類別分別進(jìn)行插值計(jì)算,通過參數(shù)傳入到LerpO函數(shù)里,GPU會(huì)對(duì)這個(gè)函數(shù)插值計(jì)算處理,得到與相應(yīng)風(fēng)場(chǎng)信息對(duì)應(yīng)的四元數(shù)的操作,具體包括:
當(dāng)待模擬對(duì)象位于迎風(fēng)向和背風(fēng)向時(shí),分別將待模擬對(duì)象位于迎風(fēng)向的風(fēng)場(chǎng)信息和待模擬對(duì)象位于背風(fēng)向的風(fēng)場(chǎng)信息進(jìn)行插值計(jì)算,得到四元數(shù)O ;待模擬對(duì)象位于迎風(fēng)向的風(fēng)場(chǎng)信息和待模擬對(duì)象位于背風(fēng)向的風(fēng)場(chǎng)信息,均包括振幅、振動(dòng)頻率和偏移角度;
當(dāng)待模擬對(duì)象垂直于風(fēng)向時(shí),將待模擬對(duì)象垂直于風(fēng)向的風(fēng)場(chǎng)信息進(jìn)行插值計(jì)算,得到四元數(shù)I ;待模擬對(duì)象垂直于風(fēng)向的風(fēng)場(chǎng)信息包括振幅、振動(dòng)頻率和偏移角度;
C、基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行處理,形成待模擬對(duì)象的運(yùn)動(dòng)動(dòng)畫;
在步驟c中,基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行處理,形成待模擬對(duì)象的運(yùn)動(dòng)動(dòng)畫的操作,具體包括:
將基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行二次插值計(jì)算,得到待模擬對(duì)象旋轉(zhuǎn)的四元數(shù);
對(duì)待模擬對(duì)象旋轉(zhuǎn)的四元數(shù)所影響的頂點(diǎn),進(jìn)行矩陣變換處理,形成待模擬對(duì)象的運(yùn)動(dòng)。
[0020]上述實(shí)施例的基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,主要基于GPU生成游戲場(chǎng)景樹木和花草來模擬現(xiàn)實(shí)世界“風(fēng)吹草動(dòng)” “樹欲靜而風(fēng)不止”真實(shí)的現(xiàn)象。自然界中樹木運(yùn)動(dòng)的非常復(fù)雜的,為了保證模擬算法的高效性又要實(shí)現(xiàn)游戲中的場(chǎng)景中動(dòng)態(tài)效果的高質(zhì)量。本發(fā)明的技術(shù)方案,采用了下列方案來實(shí)現(xiàn):
首先,形成樹木搖曳的效果,必須有外力,外力之源一般采用流體力學(xué)的方法來模擬風(fēng),首先我們把風(fēng)力定義為對(duì)地形的二維力場(chǎng),風(fēng)場(chǎng)可以在頂點(diǎn)著色器中通過一個(gè)二維紋理來進(jìn)行采樣獲得,這種方法完全在GPU上模擬風(fēng)場(chǎng)。這個(gè)場(chǎng)定義了流體速度和方向,我們把這個(gè)場(chǎng)用一個(gè)數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ),全局風(fēng)向和風(fēng)速可以和風(fēng)元一起存儲(chǔ),風(fēng)元被定義為分析函數(shù):
V= G(X,t);
其中,X是一個(gè)風(fēng)元中表示位置的二維向量,V是在給定位置的一個(gè)風(fēng)向量,時(shí)間t隨著時(shí)間的變化,我們可以計(jì)算出每一個(gè)點(diǎn)的風(fēng)向和風(fēng)速。
[0021]其次,對(duì)于樹木的層次結(jié)構(gòu)以及樹枝的在程序中的命名,樹干則是作為這個(gè)層次的根,每一根樹枝都被表示為一個(gè)簡(jiǎn)單的剛體段并可以繞這它的父枝的連接點(diǎn)進(jìn)行轉(zhuǎn)動(dòng)。為了建模和繪制的效率和最終的畫面效果取的一個(gè)良好的平衡,我們采用一種混合式網(wǎng)格模型和圖像相結(jié)合的方法。
[0022]我們將空間上相鄰的多個(gè)葉片及連接它們的小樹枝合并,以Billboard (公告板)技術(shù)表現(xiàn),這種方法能顯著的減少模型的面數(shù),根據(jù)樹葉在枝條上植物學(xué)的分布情況在樹干上插入帶有紋理貼圖的面片。這樣能大大減少計(jì)算量。這種模型的好處能用非常簡(jiǎn)單的模型的數(shù)據(jù)生成具有相當(dāng)真實(shí)的感樹木繪制效果,同時(shí)還能高效率的實(shí)現(xiàn)一定的動(dòng)態(tài)模擬。如上圖1和2,未使用枝葉和使用過后的枝葉。
[0023]我們把樹的主干用網(wǎng)格模型來表示,樹皮和樹葉用紋理貼圖來顯示,而且在模型內(nèi)部建立了隨著攝像機(jī)的遠(yuǎn)近模型的細(xì)節(jié)層次的不同變換。首先美術(shù)制作樹模型的命名規(guī)則如圖3和圖4。
[0024]圖3和圖4是一顆典型的樹的層次結(jié)構(gòu),0,1,2,3,4,5,6,7,8代表枝干的數(shù)字編號(hào),編號(hào)規(guī)則從根開始,從下往上,從父到子開始遍歷,樹的層次最大深度為3。如果需要每段樹枝都可以單獨(dú)運(yùn)動(dòng),則每段樹枝都需要單獨(dú)命名,每段樹枝或者葉子除了本身渲染網(wǎng)格的命名外,還需要新建立一個(gè)代表其形狀的直線,同樣需要特別的命名。
[0025]樹枝的命名規(guī)則:
樹枝渲染網(wǎng)格的命為Branch_M,其中M代表數(shù)字編號(hào),層次拓?fù)渚W(wǎng)格命名為Branch_M|BranchP_N,其中M代表編號(hào),N代表該樹枝的父節(jié)點(diǎn),如沒有則為-1。
[0026]樹葉的命名規(guī)則:
樹葉渲染網(wǎng)格命名為L(zhǎng)eaf_M,其中M代表數(shù)字編號(hào),層次拓?fù)渚W(wǎng)格命名為L(zhǎng)eaf_M|Parent_N,其中M代表數(shù)字編號(hào),N代表該葉子的第3層次的父樹枝的數(shù)字ID,沒有則為-1。
[0027]按照以上規(guī)則,我們可以給圖3和圖4中的樹命名:
O號(hào)樹枝渲染網(wǎng)格命名:Branch_0 ;
O號(hào)樹枝直線拓?fù)渚W(wǎng)格命名(即兩點(diǎn)代表的線段):Branch_0|BranchP_-l ;
I號(hào)樹枝渲染網(wǎng)格命名:Branch_l ;
I號(hào)樹枝拓?fù)渚W(wǎng)格命名(即兩點(diǎn)代表的線段)Branch_l I BranchP_0 ;
2號(hào)樹枝渲染網(wǎng)格命名:Branch_2 ;
2號(hào)樹枝拓?fù)渚W(wǎng)格命名(即兩點(diǎn)代表的線段)Branch_2 I BranchP_0 ;
3號(hào)樹枝渲染網(wǎng)格命名:Branch_3 ;
3號(hào)樹枝拓?fù)渚W(wǎng)格命名(即兩點(diǎn)代表的線段)Branch_3 I BranchP_0 ;
3號(hào)樹枝渲染網(wǎng)格命名:Branch_8 ;
3號(hào)樹枝拓?fù)渚W(wǎng)格命名(即兩點(diǎn)代表的線段)Branch_8 I BranchP_3 ;
01號(hào)葉子渲染網(wǎng)格命名:Leaf_01(若需要公告板,即命名為L(zhǎng)eaf_011 Billboard);
01號(hào)葉子的拓?fù)渚W(wǎng)格命名(即兩點(diǎn)代表的線段):Leaf_01 |Parent_3 ;
02號(hào)葉子渲染網(wǎng)格命名:Leaf_02(若需要公告板,即命名為L(zhǎng)eaf_02 I Billboard);
02號(hào)葉子的拓?fù)渚W(wǎng)格命名(即兩點(diǎn)代表的線段):Leaf_02|Parent_0 ;
03號(hào)葉子渲染網(wǎng)格命名:Leaf_03(若需要公告板,即命名為L(zhǎng)eaf_03 I Billboard);
03號(hào)葉子的拓?fù)渚W(wǎng)格命名(即兩點(diǎn)代表的線段):Leaf_03|Parent_0。
[0028]再次,樹模型命名規(guī)則完成后,我們需要在加載樹模型時(shí)計(jì)算樹動(dòng)畫需要的參數(shù),我們把一顆樹分成branches和leafs,分別代表樹枝(樹根也是樹枝)和樹葉,我們首先需要計(jì)算樹枝和樹葉的父子拓?fù)浣Y(jié)構(gòu),即從根開始,每個(gè)樹枝它包含的子樹枝的編號(hào),以及每個(gè)樹枝它的父樹枝的編號(hào),我們把樹枝編號(hào)存為一個(gè)列表。
[0029]樹葉因?yàn)槭亲畹讓樱运鼪]有子樹葉,我們只需要把樹葉的存為一個(gè)列表。
[0030]如果樹葉是公告板形式的,我們把樹葉存為公告板的一個(gè)列表。
[0031]然后根據(jù)美術(shù)制作資源時(shí)的直線拓?fù)浣Y(jié)構(gòu),我們需要計(jì)算樹動(dòng)畫的相關(guān)參數(shù),樹枝的相關(guān)參數(shù)包括:樹枝的長(zhǎng)度,樹枝的層級(jí)偏移(即該樹枝和父樹枝的交點(diǎn)占父樹枝的長(zhǎng)度權(quán)重比),樹枝影響樹枝的序列,變換矩陣。
[0032]樹葉的相關(guān)參數(shù)包括:公告板樹枝的中心旋轉(zhuǎn)點(diǎn)的位置,樹葉層級(jí)偏移,樹枝影響樹枝的序列。
[0033]本發(fā)明的過程式動(dòng)畫是風(fēng)和樹枝之間共同作用的結(jié)果,樹枝的振幅、振動(dòng)頻率、角度偏移,來生成旋轉(zhuǎn)的參數(shù)。
[0034]振幅是物體離開平衡位置的最大距離,它描述了物體振動(dòng)幅度的大小和振動(dòng)的強(qiáng)弱。每種情況我們都會(huì)設(shè)置振幅、頻率、偏移角的參數(shù),通過對(duì)這些參數(shù)的混合插值,得到新的振幅、頻率,偏移角度。我們通過設(shè)置不同的振幅,如圖5和6。讓樹枝模擬不同風(fēng)的強(qiáng)度下樹枝的彎曲程度。
[0035]頻率是一秒鐘內(nèi)振動(dòng)質(zhì)點(diǎn)完成全振動(dòng)的次數(shù)叫振動(dòng)的頻率。頻率越大,振動(dòng)的越快。在該實(shí)例中如果風(fēng)過于激烈會(huì)使樹枝不停的左右擺動(dòng),通過這種模擬,可以得到更真實(shí)模擬風(fēng)的激烈程度。
[0036]角度偏移:樹枝在偏離無風(fēng)狀態(tài)下的朝向。
[0037]我們可以將樹枝和樹干之間的空間關(guān)系分為3類:
⑴樹枝位于風(fēng)的迎風(fēng)面;
⑵樹枝位于風(fēng)的背風(fēng)面;
⑶樹枝垂直于風(fēng)的方向;
這3類都會(huì)設(shè)置振幅、頻率、偏移角度參數(shù),我們對(duì)這些參數(shù)混合插值,得到一個(gè)新的振幅,頻率和偏移角 度。
[0038]我們會(huì)根據(jù)權(quán)重值對(duì)迎風(fēng)和背風(fēng)插值,具體的權(quán)重插值是樹枝的朝向和風(fēng)場(chǎng)的方向夾角的余弦(設(shè)兩個(gè)朝向的夾角為a那么權(quán)重值weight=cos (a)),具體的振幅和偏移角度插值如下:
混合振幅O=Lerp (迎風(fēng)的振幅,背風(fēng)的振幅,weight)(其中weight= cos (a));混合偏移角度O=Lerp (迎風(fēng)的偏移角度,背風(fēng)的偏移角度,weight)(其中weight=cos(a));
根據(jù)weight的權(quán)重正負(fù),決定是采用迎風(fēng)和背風(fēng)的頻率。
[0039]即混合頻率0= weight〉?迎風(fēng)的頻率:背風(fēng)的頻率 然而當(dāng)風(fēng)向垂直于樹枝的情況我們也計(jì)算。
[0040]混合振幅1=垂直于風(fēng)的樹枝的振幅;
混合偏移角度1=垂直于風(fēng)的樹枝的偏移角度;
混合頻率=垂直于風(fēng)的樹枝的頻率;
如果要進(jìn)一步模擬樹是隨著風(fēng)向朝著一定方向雜亂的運(yùn)動(dòng)我們就要將混合頻率O和混合頻率I產(chǎn)生兩個(gè)旋轉(zhuǎn)的四元數(shù),對(duì)兩個(gè)四元數(shù)QuatO,Quatl插值,其中插值的權(quán)重值為weight= cos (a)。
[0041]QuatO=rotate (風(fēng)向,偏移角度0+振幅O*頻率O*周相函數(shù)的余弦); Quatl=rotate(樹枝朝向,偏移角度1+振幅I*頻率I*周相函數(shù)的余弦);
其中周相函數(shù)是擾動(dòng)函數(shù)產(chǎn)生局部的隨機(jī)性。
[0042]我們?cè)诙xQuat3對(duì)之前的兩個(gè)四元數(shù)插值計(jì)算得到樹枝旋轉(zhuǎn)的四元數(shù);這也是我們的二次插值計(jì)算:
Quat3= Lerp (QuatO,QuatI,weight)(其中 weight= cos (a));
同理,我們可以得到所有樹枝旋轉(zhuǎn)的四元數(shù)。[0043]根據(jù)上面我們所述的樹枝和樹葉的拓?fù)浣Y(jié)構(gòu),我們可以計(jì)算出樹枝上的某一個(gè)頂點(diǎn)受那些樹枝影響,即:哪些四元數(shù)影響頂點(diǎn),結(jié)合樹枝的層級(jí)偏移(即該樹枝和父樹枝的交點(diǎn)占父樹枝的長(zhǎng)度權(quán)重比,然后根據(jù)頂點(diǎn)受那些樹枝的影響序列以及權(quán)重,從而根據(jù)骨骼矩陣的原理,對(duì)頂點(diǎn)做多次的旋轉(zhuǎn)變換相加的到新的頂點(diǎn)位置。這些矩陣的旋轉(zhuǎn)驅(qū)動(dòng)了頂點(diǎn)的運(yùn)動(dòng),進(jìn)而也驅(qū)動(dòng)了樹枝的運(yùn)動(dòng)。
[0044]綜上所述,本發(fā)明上述各實(shí)施例的基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,至少可以達(dá)到以下有益效果:
⑴在風(fēng)場(chǎng)中樹的過程式動(dòng)畫的生成,通過在頂點(diǎn)著色器中合成動(dòng)畫釋放了 GPU能量,它更好的整合了基于GPU風(fēng)場(chǎng)流體模擬的可能,繞過了其他的方法需要風(fēng)場(chǎng)信息都會(huì)主存的做法;
⑵使用這種技術(shù)可以模擬各種視覺現(xiàn)象,生成各種逼真的樹的運(yùn)動(dòng);
⑶模擬步驟高度的并行化,很容易被應(yīng)用到不同的多處理環(huán)境中。
[0045]最后應(yīng)說明的是:以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,對(duì)于本領(lǐng)域的技術(shù)人員來說,其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,其特征在于,主要包括: a、定義待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息; b、基于定義所得待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息進(jìn)行分類,對(duì)不同類別分別進(jìn)行插值計(jì)算,得到與相應(yīng)風(fēng)場(chǎng)信息對(duì)應(yīng)的四元數(shù); C、基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行處理,形成待模擬對(duì)象的運(yùn)動(dòng)動(dòng)畫。
2.根據(jù)權(quán)利要求1所述的基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,其特征在于,在步驟a中,所述定義待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息的操作,具體包括: 由于形成待模擬對(duì)象搖曳的效果時(shí)必須有外力,該外力之源一般采用流體力學(xué)的方法來模擬風(fēng),把風(fēng)力定義為對(duì)地形的二維力場(chǎng),風(fēng)場(chǎng)能夠在頂點(diǎn)著色器中通過一個(gè)二維紋理來進(jìn)行采樣獲得,這種方法完全在GPU上模擬風(fēng)場(chǎng); 該模擬風(fēng)場(chǎng)定義了流體的速度和方向,采用數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)該模擬風(fēng)場(chǎng);在該模擬風(fēng)場(chǎng)中,全局風(fēng)向和風(fēng)速能夠和風(fēng)元一起存儲(chǔ),風(fēng)元被定義為分析函數(shù):
V= G (X,t); 其中,X是一個(gè)風(fēng)元中表示位置的二維向量,V是在給定位置的一個(gè)風(fēng)向量,時(shí)間t隨著時(shí)間的變化,能夠計(jì)算出每一個(gè)點(diǎn)的風(fēng)向和風(fēng)速。
3.根據(jù)權(quán)利要求1或2所述的基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,其特征在于,在步驟a中,所述待模擬對(duì)象所在環(huán)境的風(fēng)場(chǎng)信息,包括: 待模擬對(duì)象位于迎風(fēng)向的振幅、振動(dòng)頻率和偏移角度; 待模擬對(duì)象位于背風(fēng)向的振幅、振動(dòng)頻率和偏移角度; 待模擬對(duì)象垂直于風(fēng)向的振幅、振動(dòng)頻率和偏移角度。
4.根據(jù)權(quán)利要求3所述的基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,其特征在于,在步驟b中,所述對(duì)不同類別分別進(jìn)行插值函數(shù)計(jì)算,通過參數(shù)傳入到LerpO函數(shù)里,GPU會(huì)對(duì)這個(gè)函數(shù)插值計(jì)算處理,得到與相應(yīng)風(fēng)場(chǎng)信息對(duì)應(yīng)的四元數(shù)的操作,具體包括: 當(dāng)待模擬對(duì)象位于迎風(fēng)向和背風(fēng)向時(shí),分別將待模擬對(duì)象位于迎風(fēng)向的風(fēng)場(chǎng)信息和待模擬對(duì)象位于背風(fēng)向的風(fēng)場(chǎng)信息進(jìn)行插值計(jì)算,得到四元數(shù)O ;所述待模擬對(duì)象位于迎風(fēng)向的風(fēng)場(chǎng)信息和待模擬對(duì)象位于背風(fēng)向的風(fēng)場(chǎng)信息,均包括振幅、振動(dòng)頻率和偏移角度; 當(dāng)待模擬對(duì)象垂直于風(fēng)向時(shí),將待模擬對(duì)象垂直于風(fēng)向的風(fēng)場(chǎng)信息進(jìn)行插值計(jì)算,得到四元數(shù)I ;所述待模擬對(duì)象垂直于風(fēng)向的風(fēng)場(chǎng)信息包括振幅、振動(dòng)頻率和偏移角度。
5.根據(jù)權(quán)利要求4所述的基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,其特征在于,在步驟c中,所述基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行處理,形成待模擬對(duì)象的運(yùn)動(dòng)動(dòng)畫的操作,具體包括: 將基于風(fēng)場(chǎng)信息的不同類別插值計(jì)算得到的多個(gè)四元數(shù)進(jìn)行二次插值計(jì)算,得到待模擬對(duì)象旋轉(zhuǎn)的四元數(shù); 對(duì)待模擬對(duì)象旋轉(zhuǎn)的四元數(shù)所影響的頂點(diǎn),進(jìn)行矩陣變換處理,形成待模擬對(duì)象的運(yùn)動(dòng)。
6.根據(jù)權(quán)利要求1或2所述的基于GPU模擬過程式動(dòng)畫的實(shí)現(xiàn)方法,其特征在于,所述待模擬對(duì)象,包括樹木、花草。
【文檔編號(hào)】G06T13/00GK104008561SQ201410255818
【公開日】2014年8月27日 申請(qǐng)日期:2014年6月11日 優(yōu)先權(quán)日:2014年6月11日
【發(fā)明者】張翼 申請(qǐng)人:無錫梵天信息技術(shù)股份有限公司