一種鳥類軀干模型的羽毛實時動態(tài)生成方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于三維動畫領(lǐng)域,尤其一種三維動畫中鳥類軀干模型上羽毛的自動無穿插覆蓋和實時動態(tài)生成方法。
【背景技術(shù)】
[0002]三維動畫技術(shù),是近年來隨著計算機(jī)軟硬件技術(shù)的發(fā)展而產(chǎn)生的一種新興技術(shù),可以方便快捷地制作出滿足導(dǎo)演需求的三維動畫或影視特效鏡頭。
[0003]三維動畫片的制作原理一般為:首先,利用三維動畫制作工具(比如3ds Max、Maya或Houdini)在計算機(jī)中建立一個虛擬的世界;然后,在這個虛擬的三維世界中添加場景和三維卡通角色等三維模型;最后,設(shè)定模型的動畫曲線、虛擬攝影機(jī)的運(yùn)動軌跡和其它動畫參數(shù),渲染得到動畫。
[0004]由于三維動畫技術(shù)具備可精確模擬真實景象、幾乎沒有創(chuàng)作限制等特點(diǎn),目前被廣泛應(yīng)用于娛樂、教育、軍事等諸多領(lǐng)域。
[0005]盡管現(xiàn)有三維軟件都提供了大量功能和豐富插件,但用于繪制鳥類軀干羽毛并實現(xiàn)隨身體動畫而變化的卻很少,或者偏于理論而非實際應(yīng)用。主要原因是,鳥軀干上的羽毛分布雖然貌似隨機(jī),但并非完全隨機(jī),因為不同毛囊之間存在著最小間距,以免羽毛之間的穿插,另外,羽干的方向也要緊貼軀干表面,而鳥的軀干本身會因為動畫而形變,因此在現(xiàn)有技術(shù)中,并不存在一個完整的技術(shù)方案用于解決鳥類軀干模型上的羽毛動態(tài)生成問題。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明提供了一種鳥類軀干模型的羽毛實時動態(tài)生成方法,能夠?qū)崿F(xiàn)羽毛之間的無穿插覆蓋,并能夠根據(jù)鳥類模型的動畫變形進(jìn)行實時動態(tài)生成。
[0007]為了達(dá)到上述目的,本發(fā)明的技術(shù)方案為:一種鳥類軀干模型的羽毛實時動態(tài)生成方法,包括如下步驟:
[0008]步驟1,針對鳥類軀干的多邊形模型,進(jìn)行UV映射,獲得構(gòu)成該模型的每個多邊形在第O幀時各頂點(diǎn)I?η在世界坐標(biāo)系中的三維坐標(biāo)Dltl?D η(ι、法線矢量Nltl?Nntl、切線矢量Tltl?T n0,并在各頂點(diǎn)I?η處分別構(gòu)建頂點(diǎn)局部坐標(biāo)系Cltl?C η0,參考真實鳥類的羽毛走向,在各頂點(diǎn)處設(shè)定位于頂點(diǎn)局部坐標(biāo)系中的羽毛中羽桿走向矢量民?En,其中η為多邊形頂點(diǎn)數(shù)。
[0009]步驟2,生成一個粒子系統(tǒng),其粒子總數(shù)為鳥類軀干模型上所需覆蓋的羽毛總數(shù),為每個粒子設(shè)定排斥力并約束在多邊形模型面上,排斥力的作用距離為r,r為羽毛的寬度,讓該粒子系統(tǒng)自動演化,直到各粒子都處于靜止的狀態(tài),將靜止?fàn)顟B(tài)時的各粒子在世界坐標(biāo)系中的三維坐標(biāo)作為羽毛中毛囊的位置,根據(jù)步驟I中的各頂點(diǎn)三維坐標(biāo)Dltl?Dntl,計算出毛囊在所處多邊形的質(zhì)心坐標(biāo)系中的質(zhì)心坐標(biāo)(U1, U2,......,Un);其中U1^Un依次為該毛囊相對于其所處多邊形中頂點(diǎn)I?η的坐標(biāo)值。
[0010]步驟3,針對每個毛囊處的羽毛,根據(jù)真實鳥類各類型羽毛所占總羽毛量的百分比,隨機(jī)設(shè)定該處羽毛類型。
[0011]在鳥類軀干模型的動畫中,針對其中的每一幀均執(zhí)行如下步驟4?步驟6直至動畫完成:
[0012]步驟4,獲得當(dāng)前幀k時軀干動畫變形后各頂點(diǎn)I?η的三維坐標(biāo)Dlk?D 、法線矢量Nlk?N 和切線矢量T lk?T ^并在各頂點(diǎn)處構(gòu)建頂點(diǎn)局部坐標(biāo)系Clk?C nk,計算出頂點(diǎn)局部坐標(biāo)系Clk?Cnk至世界坐標(biāo)系的變化矩陣M lk?Mnk;獲得當(dāng)前幀k時,頂點(diǎn)i處羽毛中羽桿走向矢量Ei相對于世界坐標(biāo)系中的表達(dá)形式F ik= MikEi,其中I彡i彡η。
[0013]步驟5,獲得當(dāng)前幀k時,在軀干動畫變形后,毛囊所在多邊形的法線矢量Lk;根據(jù)步驟2中毛囊的質(zhì)心坐標(biāo),計算出該毛囊處羽毛中羽桿走向矢量Vk= u !F1^u2F2k+-..+UnFnk和毛囊的三維坐標(biāo)Pk= u ^fu2D2k+…+UnDnk,毛囊出羽桿走向矢量以及毛囊的三維坐標(biāo)均是位于世界坐標(biāo)系中。
[0014]針對每個毛囊,以羽桿走向矢量Vk所在方向為Y軸,以羽桿走向矢量Vk和法線矢量N的叉乘為X軸,以X軸矢量與Y軸矢量的叉積為Z軸,以Pk為坐標(biāo)原點(diǎn),建立該毛囊處羽毛局部坐標(biāo)系Wk。
[0015]步驟6,在每個毛囊對應(yīng)的當(dāng)前幀k時的羽毛局部坐標(biāo)系Wk中的XY平面上,根據(jù)羽毛的長度與寬度,生成羽毛參考NURBS面片,依據(jù)羽毛類型在該羽毛參考NURBS面片進(jìn)行羽毛的生成,NURBS為非均勻有理B樣條曲線。
[0016]進(jìn)一步地,步驟3中,鳥類軀干上羽毛類型具體包括各類型羽毛所占總羽毛量的百分比,則設(shè)定一個[0,1]的總區(qū)間,依據(jù)各種羽毛類型所占的百分比,將該總區(qū)間分為多個分區(qū)間,每個分區(qū)間對應(yīng)一種羽毛類型;在總區(qū)間中生成與粒子系統(tǒng)中粒子數(shù)目相同數(shù)量的隨機(jī)數(shù),并將隨機(jī)數(shù)賦予給每個粒子,則每個粒子以其對應(yīng)的隨機(jī)數(shù)所處分區(qū)間來確定其羽毛類型。
[0017]進(jìn)一步地,步驟6中,設(shè)定羽毛的長度為1,寬度為r,在每個毛囊處羽毛局部坐標(biāo)系的x-y平面上,由以下9個坐標(biāo)值確定的點(diǎn):[-r/2,0], [0,0], [r/2,0], [_r/2,1/2], [O, I/2], [r/2, 1/2], [-r/2, I], [0,I], [r/2, I]生成該處羽毛參考NURBS面片,根據(jù)需要利用晶格變形將羽毛參考NURBS面片進(jìn)行彎曲,在該羽毛參考NURBS面片上插值進(jìn)行羽毛的生成。
[0018]有益效果:
[0019]1、本發(fā)明所提供的羽毛動態(tài)生成方法,由于采用粒子系統(tǒng)進(jìn)行毛囊的生成,充分考慮到羽毛的寬度設(shè)定了排斥力,通過粒子系統(tǒng)動態(tài)演化后靜止時的位置確定毛囊位置,能夠?qū)崿F(xiàn)覆蓋時相鄰羽毛之間無穿插,且粒子分布和運(yùn)動具有隨機(jī)性,能夠?qū)崿F(xiàn)逼真的羽毛分布。
[0020]2、本發(fā)明僅通過設(shè)定多邊形各頂點(diǎn)處羽毛中羽桿走向即可得到位于多邊形上各毛囊處的羽毛走向,能夠?qū)崟r生成動態(tài)的羽毛。
[0021]3、本發(fā)明以概率分布的方式設(shè)定鳥類軀干上的羽毛類型,并生成隨機(jī)數(shù)來確定單個粒子上羽毛的類型,充分符合鳥類羽毛生成規(guī)律。
[0022]4、本發(fā)明所建立的羽平面為非均勻有理B樣條曲線NURBS平面,可根據(jù)需要進(jìn)行晶格變形,充分符合鳥類羽毛有所彎曲的特征,使羽枝不是全部在同一平面上。
【附圖說明】
[0023]圖1為本方法流程圖。
【具體實施方式】
[0024]下面結(jié)合附圖并舉實施例,對本發(fā)明進(jìn)行詳細(xì)描述。
[0025]本發(fā)明提供了一種三維動畫中鳥類軀干模型上羽毛的實時動態(tài)生成方法,其流程圖如圖1所示,主要包括如下步驟:
[0026]步驟1,針對鳥類軀干的多邊形模型,進(jìn)行UV映射,獲得構(gòu)成該模型的每個多邊形在第O幀時各頂點(diǎn)I?η在世界坐標(biāo)系中的三維坐標(biāo)Dltl?D η(ι、法線矢量Nltl?N n(l和切線矢量Tltl?T n0,并在各頂點(diǎn)I?η處分別構(gòu)建頂點(diǎn)局部坐標(biāo)系Cltl?C η0,參考真實鳥類的羽毛走向,在各頂點(diǎn)處設(shè)定位于頂點(diǎn)局部坐標(biāo)系中的羽毛中羽桿走向矢量民?En,其中η為多邊形頂點(diǎn)數(shù)。
[0027]世界坐標(biāo)系是三維動畫制作工具中的默認(rèn)坐標(biāo)系,由三個互相垂直并相交的坐標(biāo)軸X、Y、Z組成,默認(rèn)情況下,X軸正向為屏幕水平向右,Y軸正向為垂直向上,Z軸正向為垂直屏幕平面指向使用者,坐標(biāo)原點(diǎn)在屏幕左下角。
[0028]頂點(diǎn)局部坐標(biāo)系是由三個互相垂直并相交的坐標(biāo)軸X、Y、Z組成,Y軸為多邊形模型上該頂點(diǎn)處的法線矢量,X軸為切線矢量Ti, Z為X軸矢量與Y軸矢量的叉積,坐標(biāo)原點(diǎn)位于該頂點(diǎn)處,頂點(diǎn)局部坐標(biāo)系隨模型動畫變形而變化。
[0029]各頂點(diǎn)的切線矢量,是根據(jù)各頂點(diǎn)在UV映射后獲得的UV坐標(biāo)值和其在世界坐標(biāo)系中的二維坐標(biāo)計算獲得。
[0030]步驟2,生成一個粒子系統(tǒng),其粒子總數(shù)為鳥類軀干模型上所需覆蓋的羽毛總數(shù),為每個粒子設(shè)定排斥力并約束在多邊形模型面上,排斥力的作用距離為r,r為羽毛的寬度,讓該粒子系統(tǒng)自動演化,直到各粒子都處于靜止的狀態(tài),將此時各粒子在世界坐標(biāo)系中的三維坐標(biāo)作為羽毛中毛囊位置,根據(jù)步驟!中的各頂點(diǎn)三維坐標(biāo)Dltl?Dntl,計算出毛囊在所處多邊形的質(zhì)心坐標(biāo)系中的質(zhì)心坐標(biāo)(U1, U2,......,un);其中U1^Un依次為該毛囊相對于其所處多邊形中頂點(diǎn)I?η的坐標(biāo)值。
[0031]粒子系統(tǒng)為三維計算機(jī)圖形學(xué)中利用大量幾何物體模擬一些模糊現(xiàn)象的技術(shù),例如煙、霧、雪或云等。本發(fā)明將粒子系統(tǒng)用于毛囊生成上,即每個粒子處生成一個毛囊,一個毛囊處生成一根羽毛。具體實施時,可采用三維動畫制作工具M(jìn)aya中的粒子模塊來做。
[0032]質(zhì)心坐標(biāo)系(Generalized Ba