專利名稱::Gpu加速的輪廓區(qū)毛發(fā)狀圖形繪制方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種通過GPU加速的輪廓區(qū)毛發(fā)狀圖形繪制方法,更具體地說,本發(fā)明涉及一種基于層狀紋理切片技術(shù),利用GPU的可編程功能及其高效處理性能提高輪廓區(qū)域的毛發(fā)狀圖形繪制速度的方法,屬于計(jì)算機(jī)真實(shí)感圖形學(xué)領(lǐng)域。毛發(fā)狀圖形模擬結(jié)果可以用于計(jì)算機(jī)仿真、虛擬現(xiàn)實(shí)、電子游戲等領(lǐng)域。
背景技術(shù):
:1.1毛發(fā)的真實(shí)感繪制毛發(fā)的真實(shí)感繪制一直以來都是計(jì)算機(jī)圖形學(xué)中的研究熱點(diǎn)。至今已出現(xiàn)許多類表示毛發(fā)的方法。其中最直觀的一類方法是采用幾何元素將每根毛發(fā)都表示出來(G.Miller.FromWire-FrametoFurryAnimals[C]//ProceedingsofGraphicsInterface.Mahwah,NJ:LawrenceErlbaumAssociates,1988:138-146;A.LeBlanc,R.TurnerandD.Thalmann.Renderinghairusingpixelblendingandshadowbuffers[J].TheJournalofVisualizationandComputerAnimation,1991,2(1):92-97;Y.WatanabeandY.Suenega.Atrigonalprism-basedmethodforhairimagegeneration[J].IEEEComputerGraphicsandApplication,1992,12(1):47-53;J.BemeyandJ.Redd.StuartLittle:ATaleofFur,Costumes,Performance,andIntegration:BreathingRealLifeIntoaDigitalCharacter[OL].SIGGRAPH2000CourseNote#14)。但是由于物體表面上的毛發(fā)個(gè)體數(shù)量巨大,這些基于幾何的方法很難達(dá)到較高的速度,無法滿足實(shí)時(shí)繪制的要求。不同于這些顯式的幾何方法,Kajiya等(J.T.KajiyaandT丄.Kay.RenderingFurw池ThreeDimensionalTextures[C〗〃ComputerGraphicsProceedings,AnnualConferenceSeries,ACMSIGGRAPH.NewYork:ACMPress,1989:271-280)在1989年提出利用體紋理來表示毛發(fā)的方法,取得了非常逼真的表達(dá)效果。不過由于這種方法采用了光線投射的繪制方式,使得速度很慢。Meyer等(A.MeyerandF.Neyret.InteractiveVolumetricTextures[C〗//ProceedingsofEurographicsWorkshoponRendering'98.Vienna:Springer隱Verlag,1998:157-168)在Kajiya方法的基礎(chǔ)上采用混合繪制多層次紋理切片的方法來表達(dá)體紋理的效果,大大提高了繪制基于Meyer這種層狀紋理切片技術(shù),Lengyel等(J.Lengyel.Real-timefior[C]//ProceedingsofEurographicsWorkshoponRendering'00.Vienna:Springer-Verlag,2000:243-256;J.Lengyel,E.Praun,A.Finkelsteinetal.Real-TimeFuroverArbitrarySurfaces[C]"ProceedingsofACM2001SymposiumonInteractive3DGraphics.NewYork:ACMPress,2001:227-232)實(shí)現(xiàn)了短毛的實(shí)時(shí)繪制。他們將物體的毛絨表面表示為一系列與物體表面平行的網(wǎng)格層,每層網(wǎng)格上映射相應(yīng)的半透明毛發(fā)紋理;對(duì)這些半透明網(wǎng)格層進(jìn)行混合繪制就可以產(chǎn)生短毛效果。Lengyel方法可以實(shí)時(shí)生成逼真的毛發(fā)效果,具有重要的應(yīng)用價(jià)值。在Lengyel方法基礎(chǔ)上,Yang等(楊剛,孫漢秋,王文成,吳恩華,基于GPU的真實(shí)感毛發(fā)繪制[J].軟件學(xué)報(bào),2006,17(3):577-586)針對(duì)層狀紋理切片方法的特點(diǎn),提出了毛發(fā)自陰影的模擬方法,進(jìn)一步增強(qiáng)了毛發(fā)繪制的真實(shí)感。此外,Yang等("采用非均勻紋理層的短毛實(shí)時(shí)繪制",楊剛,孫漢秋,王文成,吳恩華.計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2007,19(4):430-435)還提出了采用非均勻紋理層的毛發(fā)表示技術(shù),提高了毛發(fā)表示的效率和靈活性。但是,在以上采用層狀紋理切片來表示毛發(fā)的方法中,存在著輪廓處毛發(fā)表示效果不佳的問題。Lengyel等(J.Lengyel,E.Praun,A.Finkelsteinetal.Real-TimeFuroverArbitrarySurfaces[C]〃ProceedingsofACM2001SymposiumonInteractive3DGraphics.NewYork:ACMPress,2001:227-232)通過在物體輪廓邊上添加"Fin切片"的方式來克服這個(gè)問題。但Fin切片的生成及其數(shù)據(jù)傳輸卻需要消耗大量的時(shí)間,非常影響繪制效率。本發(fā)明即針對(duì)此問題提出了利用GPU加速輪廓毛發(fā)繪制的方法。該方法同樣適用于在模型輪廓區(qū)域表現(xiàn)與毛發(fā)近似的毛發(fā)狀圖形,如草坪、植被、地毯等。下面將具體介紹層狀紋理切片方法及其存在的問題,并簡(jiǎn)要介紹GPU的可編程功能。1.2基于層狀紋理切片的毛發(fā)表示方法及其問題Lengyel等(J.Lengyel,E.Praun,A.Finkelsteinetal.Real-TimeFuroverArbitrarySurfaces[C]〃ProceedingsofACM2001SymposiumonInteractive3DGraphics.NewYork:ACMPress,2001:227-232)和Yang(楊剛,孫漢秋,王文成,吳恩華,基于GPU的真實(shí)感毛發(fā)繪制[J].軟件學(xué)報(bào),2006,17(3):577-586;"采用非均勻紋理層的短毛實(shí)時(shí)繪制",楊剛,孫漢秋,王文成,吳恩華.計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2007,19(4):430-435)等都采用了層狀紋理切片技術(shù)來表示真實(shí)感短毛。他們將物體的毛絨表面用一系列平行于物體表面的,半透明紋理層來表示。其主要步驟如圖l所示在預(yù)處理階段,采用粒子系統(tǒng)生成一片幾何毛發(fā)(圖la),然后對(duì)這片毛發(fā)進(jìn)行水平方向的采樣生成多層的半透明二維紋理(稱為shell紋理,如圖lb)。在繪制階段,生成多層平行于物體表面的網(wǎng)格面,每層網(wǎng)格面映射相應(yīng)層次的shell紋理,對(duì)這些網(wǎng)格面按照由內(nèi)向外的順序進(jìn)行alpha混合繪制就產(chǎn)生了毛絨絨的效果。每層網(wǎng)格面都是通過將原模型頂點(diǎn)沿法向進(jìn)行偏移而形成的(圖lc)。采用這種層狀紋理切片方法,可以快速繪制出逼真的短毛效果。但是由于紋理網(wǎng)格層之間存在著空隙,當(dāng)視線與網(wǎng)格表面接近平行時(shí)(這種情況一般發(fā)生在物體輪廓線附近),網(wǎng)格層間的空隙就可能會(huì)暴露出來,使人感覺輪廓處毛發(fā)的透明度過高,影響毛發(fā)繪制的真實(shí)感。Lengyel采用在輪廓邊上添加四方形紋理切片(稱為Fin切片)的方式來克服這個(gè)問題。每個(gè)Fin切片都垂直于物體表面,并映射有一簇毛發(fā)的紋理(稱為Fin紋理),從而可以掩蓋紋理網(wǎng)格層間的空隙,達(dá)到良好的繪制效果。但是為了生成Fin切片,需要在繪制前對(duì)物體的每一條邊都進(jìn)行輪廓邊檢測(cè);每條被檢測(cè)處于輪廓區(qū)域的邊都要為其生成相應(yīng)的Fin切片數(shù)據(jù);并將這些Fin切片數(shù)據(jù)從CPU傳送入GPU中進(jìn)行繪制。這個(gè)過程往往會(huì)消耗整個(gè)毛發(fā)繪制流程30%的時(shí)間,非常影響繪制效率。13GPU的可編程功能近年來,圖形處理器(GraphicProcessingUnit,GPU)的體系結(jié)構(gòu)不斷更新,處理能力不斷增強(qiáng)。由于GPU采用了并行處理的構(gòu)架,使得GPU在圖形處理上的計(jì)算速度遠(yuǎn)遠(yuǎn)高于CPU。更重要的是,GPU具有了越來越強(qiáng)大的可編程能力,這使得用戶可以通過編程將相關(guān)運(yùn)算處理轉(zhuǎn)移到GPU中完成。在GPU中,用戶可以進(jìn)行編程控制的有兩個(gè)部分頂點(diǎn)繪制器(Vertexshader)和像素繪制器(Pixelshader)。當(dāng)繪制物體時(shí),物體的幾何頂點(diǎn)數(shù)據(jù)首先被送入頂點(diǎn)繪制器中,用戶可以對(duì)頂點(diǎn)繪制器進(jìn)行編程來執(zhí)行對(duì)物體頂點(diǎn)的各種處理;經(jīng)過頂點(diǎn)繪制器處理的頂點(diǎn)數(shù)據(jù)在光柵化后生成像素?cái)?shù)據(jù)進(jìn)入像素繪制器,用戶可以在這一部分進(jìn)行編程來完成對(duì)像素色彩的處理,以產(chǎn)生預(yù)期的繪制效果。目前,利用GPU的可編程功能將計(jì)算任務(wù)由CPU轉(zhuǎn)移到GPU中來完成已成為一種非常有效的加速策略。Yang等[9]在毛發(fā)繪制過程中已經(jīng)利用了GPU的計(jì)算能力。在其方法中,物體多層網(wǎng)格面的位置是在頂點(diǎn)繪制器中計(jì)算的,而毛發(fā)光照的計(jì)算則是在像素繪制器中編程完成的。本發(fā)明將進(jìn)一步利用GPU的處理能力來完成輪廓邊的檢測(cè)和Fin切片的生成,以提高毛發(fā)繪制的效率。
發(fā)明內(nèi)容本發(fā)明的目的在于解決現(xiàn)有的基于層狀紋理切片技術(shù)的毛發(fā)繪制方法中輪廓毛發(fā)(即Fin切片所表示的毛發(fā))生成效率低,繪制速度慢的問題,提出一種高效的輪廓毛發(fā)繪制方法。該方法同樣適用于采用Fin切片方式來表現(xiàn)的和毛發(fā)近似的毛發(fā)狀圖形。因此,下文中提到的繪制對(duì)象"毛發(fā)"應(yīng)理解為包括了所有繪制技術(shù)和毛發(fā)相同的"毛發(fā)狀圖形",比如,草坪,絨毛等等。本發(fā)明方法利用GPU的可編程功能及其高效處理能力來加速Fin切片的計(jì)算和生成,從而加速輪廓毛發(fā)的繪制。該方法將輪廓邊的檢測(cè)和Fin切片的生成完全轉(zhuǎn)移到GPU中進(jìn)行。這樣一方面充分利用了GPU強(qiáng)大的并行計(jì)算能力,另一方面免去了從CPU到GPU的數(shù)據(jù)傳輸負(fù)擔(dān),從而大大提高了Fin切片的處理速度,提高了真實(shí)感毛發(fā)的繪制效率。物體的輪廓線是指物體表面上與視線相切的邊線,也正是物體前向面和后向面的分界線。物體的輪廓區(qū)域可以定義為在輪廓線周圍一定范圍內(nèi)的區(qū)域。為使用Fin切片,需要在繪制前對(duì)物體模型(由多邊形面片組成)的每條邊進(jìn)行輪廓區(qū)檢測(cè),只有被檢測(cè)處于輪廓區(qū)域的邊才需要為其生成Fin切片。常用的檢測(cè)方法是計(jì)算視線方向K與當(dāng)前邊的法向iV的點(diǎn)積,當(dāng)此點(diǎn)積的絕對(duì)值小于某閾值"時(shí),即認(rèn)為此邊處于輪廓區(qū)域。視線方向F釆用視點(diǎn)五"與此邊中點(diǎn)E",連線所成的向量。此過程用公式可以表示為IK*.iV*I<A其中「=_E戸(1)上式中K哨卩A^分別表示向量F和iV的單位向量。"的取值可由用戶指定。在發(fā)明人的實(shí)驗(yàn)中,"取為0.2即可得到不錯(cuò)的效果。被檢測(cè)屬于輪廓區(qū)的邊就可以為其生成一個(gè)四邊形Fin切片。Fin切片垂直放置在當(dāng)前邊上,其高度為當(dāng)前邊上的毛發(fā)長(zhǎng)度。在Lengyel和Yang的方法中,以上輪廓邊的檢測(cè)及Fin切片的生成都是在CPU中進(jìn)行的。而本發(fā)明中,發(fā)明人通過設(shè)計(jì)適當(dāng)?shù)臄?shù)據(jù)傳輸策略,將輪廓邊的檢測(cè)及Fin切片的生成完全轉(zhuǎn)移到了GPU中的頂點(diǎn)繪制器中來完成;并利用像素繪制器來完成Fin切片的紋理映射和繪制。下面進(jìn)行詳細(xì)介紹。2.1GPU加速的輪廓邊檢測(cè)及Fin切片生成GPU的頂點(diǎn)繪制器雖然可以進(jìn)行靈活的頂點(diǎn)運(yùn)算,但是卻無法直接用來完成輪廓邊的檢測(cè)及Fin切片的生成。這是因?yàn)?1)為了生成Fin切片,需要增加一系列頂點(diǎn)數(shù)據(jù)來表示這些新生成的四邊形面片。但是頂點(diǎn)繪制器尚不具備生成新頂點(diǎn)的功能。(2)頂點(diǎn)繪制器中處理的都是一個(gè)個(gè)孤立的頂點(diǎn),并沒有"邊"的概念,無法進(jìn)行輪廓邊的判斷。為了克服這兩個(gè)問題,發(fā)明人預(yù)先為模型上的每條邊生成一套Fin切片數(shù)據(jù)。如圖2所示,邊e(即v,v》上的Fin切片由四個(gè)頂點(diǎn)K、K、^、^組成,邊e的Fin切片數(shù)據(jù)就由此四個(gè)頂點(diǎn)的數(shù)據(jù)組成。每個(gè)頂點(diǎn)的數(shù)據(jù)除了包含頂點(diǎn)的位置坐標(biāo)和Fin紋理坐標(biāo)外,還要包括兩個(gè)"邊信息"即邊e的法向E"皿自/和邊e的中點(diǎn)位置£"p。,。其中£"。0/可計(jì)算為此邊左右兩個(gè)鄰接面的法向A^和A^的和,即£"。^=^/+W2。設(shè)當(dāng)前模型的總邊數(shù)為MgeM/m,則所有邊的Fin切片數(shù)據(jù)就一共包含ed^iVww^4套頂點(diǎn)的數(shù)據(jù)。在繪制時(shí),發(fā)明人將這^/geiV"/^4套頂點(diǎn)數(shù)據(jù)全部送入頂點(diǎn)繪制器中進(jìn)行處理。在頂點(diǎn)繪制器中,根據(jù)邊的法向量和邊的中點(diǎn)位置這兩個(gè)數(shù)據(jù),就可以通過計(jì)算公式(1)判斷出當(dāng)前頂點(diǎn)所屬的邊是否處于輪廓區(qū)域。若是,則此頂點(diǎn)信息就可以參與隨后的光柵化及繪制計(jì)算;否則就直接將此頂點(diǎn)移到視域之外(投影變換后的視域z坐標(biāo)范圍為[-l,l],所以我們只要將此頂點(diǎn)的z坐標(biāo)設(shè)在[-l,l]之外即可,比如可將頂點(diǎn)位置設(shè)成(0,0,-2))。移到視域外的四邊形片將會(huì)被自動(dòng)裁減掉,不再進(jìn)行光柵化等象素操作。釆用這種策略,實(shí)際上相當(dāng)于在輪廓邊檢測(cè)之前事先生成了所有的四邊形Fin切片,而頂點(diǎn)繪制器的作用只是去掉那些非輪廓邊上的切片,這樣就繞過了第一個(gè)問題;而通過為每個(gè)頂點(diǎn)附加"邊信息"則使我們克服了第二個(gè)問題。如前所述,預(yù)先生成的Fin切片數(shù)據(jù)一共包含ec/geA^^4套頂點(diǎn)的數(shù)據(jù),而且每套頂點(diǎn)數(shù)據(jù)中還包含有額外的"邊信息"。如果在每次繪制時(shí)都要向GPU傳輸這些數(shù)據(jù)的話,將會(huì)占用相當(dāng)?shù)臅r(shí)間。所幸的是,這些Fin切片數(shù)據(jù)都是靜態(tài)的,并不會(huì)發(fā)生變化;所以我們可以利用GPU的VertexBufferObject功能,將這部分靜態(tài)數(shù)據(jù)駐留在顯存中,完全省去了數(shù)據(jù)傳輸?shù)呢?fù)擔(dān)。由此,在本方法中,CPU將不再進(jìn)行任何輪廓邊的判斷工作。我們只需要預(yù)先組織好所有的四邊形切片數(shù)據(jù),并將其存入顯存中。然后在繪制時(shí)完全依靠GPU進(jìn)行處理即可。相比于以往的方法,本發(fā)明方法將輪廓邊的判斷轉(zhuǎn)移到了GPU中進(jìn)行,并免去了Fin切片的實(shí)時(shí)生成及CPU》GPU的數(shù)據(jù)傳輸負(fù)擔(dān),起到了加速的作用。實(shí)施例中的表1對(duì)兩種方法的速度進(jìn)行了統(tǒng)計(jì)。可以看出,在Fin的生成和繪制上,本方法比現(xiàn)有方法在速度上提高了10-15倍。2.2輪廓毛發(fā)的繪制在生成Fin切片后,即可在像素繪制器中對(duì)Fin切片進(jìn)行繪制計(jì)算。Fin切片在繪制時(shí)除了映射Fin紋理外,還要映射一幅記錄毛發(fā)切向量的"切向紋理",以用于毛發(fā)光照的計(jì)算。如圖3所示,圖3a為Fin紋理,圖3b為毛發(fā)切向量的示意圖。切向紋理中每個(gè)點(diǎn)的值記錄著該點(diǎn)處毛發(fā)的切向量。Fin紋理及其切向紋理都是在預(yù)處理階段通過采樣繪制一塊幾何毛發(fā)而生成的。本發(fā)明采用的Fin紋理大小為512*128。在為某塊Fin切片映射Fin紋理時(shí),不需要映射整個(gè)長(zhǎng)條形Fin紋理,只需要根據(jù)此Fin切片的寬度選取Fin紋理的一段進(jìn)行映射即可。注意到圖3中Fin紋理的左右兩端是可以無縫拼接的,這樣可以保證各Fin切片上的毛發(fā)紋理是連續(xù)的。在像素繪制器中進(jìn)行繪制時(shí),首先從Fin紋理中取得毛發(fā)的顏色信息,從切向紋理中取得當(dāng)前像素的毛發(fā)切向。然后根據(jù)式2完成毛發(fā)的繪制。式2是Lengyel等(J.Lengyel,E.Praun,A.Finkelsteinetal.Real-TimeFuroverArbitrarySurfaces[C]〃ProceedingsofACM2001SymposiumonInteractive3DGraphics.NewYork:ACMPress,2001:227-232)采用的針對(duì)毛發(fā)的光照明模型。Fwr丄,"g=+*C/^*(7-(T.l/,+h*<7-(T.及/尸/2(2)式中,r是毛發(fā)的切向,C;,是毛發(fā)的顏色;丄是光線方向,是光線和視線夾角的角分線方向;M和fa是環(huán)境光,散射光和高光的顏色;;^和;w是散射光和高光的指數(shù)。在繪制時(shí),還需要對(duì)Fin切片的透明度乘以一個(gè)調(diào)節(jié)因子cc。ct=7-|K*.iV*|,其中為視線方向,而A^為當(dāng)前邊的法向,K,PA^都是單位向量。當(dāng)Fin切片越接近輪廓線時(shí),其a值越接近1;反之,ct越小。這就使得Fin切片從輪廓線向輪廓區(qū)的邊緣區(qū)域逐漸變淡,減輕了Fin切片與層狀紋理在繪制色彩上的沖突,可以產(chǎn)生更為平滑的繪制效果。圖4中顯示了采用本方法的輪廓毛發(fā)繪制效果。圖l.采用層狀紋理切片技術(shù)的毛發(fā)表示方法的原理簡(jiǎn)圖;圖l(a).—塊示意性的幾何毛發(fā);圖l(b).采樣生成n層shell紋理,n=16;圖l(c).生成多層網(wǎng)格面來表示毛發(fā);圖l(d).在模型網(wǎng)格表面添加四邊形Fin切片;其中,1—原模型網(wǎng)格;2—平移頂點(diǎn)形成外層網(wǎng)格;3—垂直于模型表面的Fin切片;圖2.Fin切片及其相關(guān)數(shù)據(jù)示意圖;圖3.Fin紋理及毛發(fā)切向量示意圖;圖3(a).Fin紋理示意圖;圖3(b).毛發(fā)切向量示意圖;其中,4一點(diǎn)A處的毛發(fā)切向量;5—點(diǎn)B處的毛發(fā)切向量;圖4.采樣樣本毛發(fā)生成毛發(fā)紋理;圖4(a).采用粒子方法生成的樣本毛發(fā)圖4(b).生成的多層毛發(fā)紋理。從左至右分別是第0,4,9,14層毛發(fā)紋理;上排是毛發(fā)紋理的顏色(RGB分量),下排是各自對(duì)應(yīng)的alpha分量;圖5.本發(fā)明實(shí)施例繪制的毛發(fā)效果示意圖;圖5(a).圓環(huán)模型的毛發(fā)繪制效果;圖5(b).兔子模型的毛發(fā)繪制效果;圖5(C).駱駝模型的毛發(fā)繪制效果;其中左列圖為沒有添加Fin的繪制效果(可看到輪廓處毛發(fā)過度透明,往往可以直接看到模型輪廓);中列圖為所繪制的Fin毛發(fā)效果;右列圖為添加Fin后的效果。具體實(shí)施方式下面結(jié)合實(shí)施例對(duì)本發(fā)明方法作進(jìn)一步說明。本實(shí)施例的微機(jī)配置為P43.0GCPU,1G內(nèi)存,GeForce6800GT顯卡,256M顯存。按照下述步驟繪制毛發(fā)物體預(yù)處理階段(1)按照如圖1中所示的方法,生成多層毛發(fā)紋理。具體執(zhí)行時(shí),首先采用粒子系統(tǒng)的方法在一塊正方形區(qū)域上方生成一片樣本毛發(fā)體,然后沿著此正方形的法線方向?qū)@塊毛發(fā)體進(jìn)行分段繪制以產(chǎn)生多層半透明毛發(fā)紋理(稱為shell紋理)。shell紋理含有RGBA四個(gè)分量,RGB是顏色值,A表示不透明度。如圖4(a)就是采用粒子系統(tǒng)方法生成的一塊樣本毛發(fā),對(duì)這塊毛發(fā)采樣可生成16層毛發(fā)紋理,圖4b中只顯示了其中的四層。(2)生成Fin紋理和Fin的"切向紋理"。對(duì)圖4(a)中的樣本毛發(fā)從側(cè)面進(jìn)行采樣就可以生成毛發(fā)的Fin紋理及其"切向紋理"(如圖3中所示)。(3)生成模型表面的紋理坐標(biāo)。為了能夠?qū)⒄叫蔚膕hell紋理映射到模型的表面,需要為模型表面的每個(gè)面片頂點(diǎn)設(shè)置好紋理坐標(biāo)。本發(fā)明采用Lappedtexture方法(E.Praun,A.Finkelstein,andH.Hoppe.Lappedtextures[C]//ProceedingsofSIGGRAPH'2000,ComputerGraphics,AnnualConferenceSeries,2000:465-470)生成模型的紋理坐標(biāo)。從而可以將shell紋理均勻而無縫地映射到模型表面。(4)為模型上的每條邊生成一套Fin切片數(shù)據(jù)。并利用GPU的VertexBufferObject功能,將這部分?jǐn)?shù)據(jù)駐留在顯存中(如2.1節(jié)中所述)。繪制階段(1)采用GPU加速完成輪廓毛發(fā)的繪制。這是本發(fā)明方法所要完成的主要任務(wù)。發(fā)明人根據(jù)預(yù)先生成的Fin切片數(shù)據(jù),采用GPU的頂點(diǎn)繪制器來完成輪廓邊的檢測(cè)及Fin切片的生成(如2.1節(jié)中所述);并在像素繪制器中完成輪廓毛發(fā)的繪制(如2.3節(jié)所述)。(2)混合繪制多層網(wǎng)格面,完成物體表面毛發(fā)的繪制。生成多層平行于物體表面的網(wǎng)格面,每層網(wǎng)格面映射相應(yīng)層次的shell紋理,對(duì)這些網(wǎng)格面按照由內(nèi)向外的順序進(jìn)行alpha混合繪制以生成毛發(fā)效果。每層網(wǎng)格面都是通過將原模型頂點(diǎn)沿法向進(jìn)行偏移而形成的(如圖lc中所示)。在具體實(shí)現(xiàn)時(shí),發(fā)明人采用GPU的頂點(diǎn)繪制器來完成多層網(wǎng)格面頂點(diǎn)偏移位置的計(jì)算,以輔助實(shí)現(xiàn)多層網(wǎng)格面的生成。隨后,在繪制多層網(wǎng)格面時(shí),發(fā)明人采用像素繪制器來完成毛發(fā)光照明的計(jì)算以及多層網(wǎng)格面的alpha混合。詳細(xì)過程可參考文獻(xiàn)(楊剛,費(fèi)廣正,吳恩華.實(shí)時(shí)生成帶斑紋的毛發(fā)[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2004,16(9):1244-1249;楊剛,孫漢秋,王文成,吳恩華,基于GPU的真實(shí)感毛發(fā)繪制[J].軟件學(xué)報(bào),2006,17(3):577-586)。上述過程是繪制物體毛發(fā)的完整過程。本發(fā)明所述方法是針對(duì)此過程中的輪廓邊檢測(cè)及輪廓毛發(fā)的繪制這部分而進(jìn)行加速的。按照上述過程,本實(shí)施例選用三個(gè)模型進(jìn)行了毛發(fā)繪制實(shí)驗(yàn)。表1中對(duì)三個(gè)模型的繪制時(shí)間進(jìn)行了統(tǒng)計(jì),并將本方法與現(xiàn)有方法的繪制效率做了比較。三個(gè)模型的繪制效果如圖5中所示。表l<table>tableseeoriginaldocumentpage12</column></row><table>表1中第3行和第4行中所謂"Fin處理時(shí)間"包括繪制每幀畫面時(shí)對(duì)輪廓邊的檢測(cè)、Fin切片數(shù)據(jù)的傳輸及Fin的繪制等一系列涉及Fin的時(shí)間總和。由這兩行數(shù)據(jù)的對(duì)比可見,采用本發(fā)明方法比采用以往方法的Fin處理速度提高了10-15倍。第5行則給出了使用本發(fā)明方法使毛發(fā)整體繪制效率提高的程度。其計(jì)算方法為(FPSnew-FPS。ld)/FPS。ld。其中FPSnew表示使用本發(fā)明方法時(shí)的整體繪制幀速率,而FPS。ld即為現(xiàn)有方法的幀速率。值得說明的是,相對(duì)于現(xiàn)有技術(shù),本發(fā)明方法的唯一代價(jià)在于增加了顯存的占用量。本發(fā)明方法需要在顯存中駐留所有邊的Fin切片數(shù)據(jù),而以往方法只需要提供輪廓區(qū)域內(nèi)邊的Fin數(shù)據(jù)。表1中第6行統(tǒng)計(jì)了釆用本發(fā)明方法時(shí)Fin切片數(shù)據(jù)所占的顯存空間。設(shè)模型總邊數(shù)為edgdV"m,所有邊的Fin切片數(shù)據(jù)就一共包含eJgeA^^4套頂點(diǎn)的數(shù)據(jù),每套頂點(diǎn)數(shù)據(jù)包括該頂點(diǎn)坐標(biāo)、該頂點(diǎn)的Fin紋理坐標(biāo)、邊的法向以及邊中點(diǎn)的位置坐標(biāo)。位置坐標(biāo)或法向的三個(gè)坐標(biāo)分量需要三個(gè)float型數(shù)據(jù)來存儲(chǔ),紋理坐標(biāo)需要兩個(gè)float型數(shù)據(jù)。則總的空間占用量可計(jì)算為WgeM/w*4*(3*3+2)=WgeA^m*44*4(字節(jié))。從表中可以看出,相對(duì)于目前日益增大的顯存空間來說,這些空間占用量還是可以承受的。因此本發(fā)明方法不存在顯存容量不足導(dǎo)致本方法無法實(shí)施的問題。本發(fā)明提出了一種利用GPU來加速輪廓毛發(fā)繪制的方法。該方法通過為頂點(diǎn)數(shù)據(jù)添加"邊信息"而將輪廓邊的檢測(cè)計(jì)算巧妙地轉(zhuǎn)移到了GPU中進(jìn)行;并通過預(yù)先存儲(chǔ)Fin切片數(shù)據(jù)而繞過了頂點(diǎn)繪制器無法生成新頂點(diǎn)的問題,免去了CPU+GPU的數(shù)據(jù)傳輸負(fù)擔(dān)。該方法加速了輪廓毛發(fā)的處理,有效提高了毛發(fā)的整體繪制效率。值得強(qiáng)調(diào)的是,模型輪廓邊的檢測(cè)是圖形處理中的一個(gè)典型問題,不僅僅繪制輪廓毛發(fā)時(shí)需要輪廓邊的檢測(cè),在對(duì)模型進(jìn)行非真實(shí)感風(fēng)格的繪制(M.Lee,A.K.Michael,etal.Real-TimeNonphotorealisticRendering[C]〃ProceedingsofSIGGRAPH'97,1997:415-420)、陰影生成、遮擋剔除等許多圖形問題中都可能需要進(jìn)行輪廓邊的檢測(cè)。本發(fā)明中利用GPU加速輪廓邊檢測(cè)的方法可以直接推廣應(yīng)用到所有需要輪廓邊檢測(cè)的圖形處理過程中,具有普遍意義。權(quán)利要求1.一種GPU加速的輪廓區(qū)毛發(fā)狀圖形繪制方法,其包含如下步驟a)生成表示輪廓區(qū)域毛發(fā)狀圖形的Fin紋理及相應(yīng)的毛發(fā)狀圖形切向紋理;b)在GPU的頂點(diǎn)繪制器中判斷物體模型的各個(gè)點(diǎn)是否處于輪廓區(qū)域;c)在GPU的像素繪制器中繪制輪廓區(qū)域內(nèi)的各條邊的Fin切片,并生成輪廓區(qū)域的毛發(fā)狀圖形效果。2.如權(quán)利要求1所述的方法,其特征在于,步驟b)所述的判斷物體模型的各個(gè)點(diǎn)是否處于輪廓區(qū)域通過下述方法實(shí)現(xiàn)在CPU中為物體模型每條邊所在的Fin切片的四個(gè)頂點(diǎn)各生成一套頂點(diǎn)數(shù)據(jù),所述的頂點(diǎn)數(shù)據(jù)包含當(dāng)前頂點(diǎn)的位置坐標(biāo)和Fin紋理坐標(biāo),當(dāng)前邊的法向信息、中點(diǎn)位置信息和視點(diǎn)位置信息;將上述頂點(diǎn)數(shù)據(jù)發(fā)送至GPU的頂點(diǎn)繪制器;在頂點(diǎn)繪制器中,判斷當(dāng)前邊的視線方向和法向之間的點(diǎn)積的絕對(duì)值是否小于設(shè)定的閾值,若是,則認(rèn)為當(dāng)前邊所在的點(diǎn)處于輪廓區(qū)域,若否,則認(rèn)為當(dāng)前邊所在的點(diǎn)不處于輪廓區(qū)域;所述的視線方向?yàn)楫?dāng)前邊的中點(diǎn)到視點(diǎn)的矢量。3.如權(quán)利要求2所述的方法,其特征在于利用GPU的VertexBufferObject功能,將所述的頂點(diǎn)數(shù)據(jù)駐留在顯存中。4.如權(quán)利要求l所述的方法,其特征在于,步驟a)所述的Fin紋理及相應(yīng)的毛發(fā)切向紋理通過繪制幾何毛發(fā)而生成。5.如權(quán)利要求2所述的方法,其特征在于,所述的當(dāng)前邊的法向信息為當(dāng)前邊的兩個(gè)鄰接面片的法向的和。6.如權(quán)利要求2所述的方法,其特征在于,所述的設(shè)定的閾值為0.2。7.如權(quán)利要求l所述的方法,其特征在于,所述的GPU采用并行處理的構(gòu)架,并具備可編程功能。8.如權(quán)利要求l所述的方法,其特征在于,所述的GPU的型號(hào)為Geforce6800GT。9.如權(quán)利要求l所述的方法,其特征在于,所述毛發(fā)狀圖形為毛發(fā)或草坪或絨毛。全文摘要本發(fā)明公開了一種GPU加速的輪廓區(qū)毛發(fā)狀圖形繪制方法,屬于計(jì)算機(jī)真實(shí)感圖形學(xué)領(lǐng)域。本發(fā)明方法包括生成表示輪廓區(qū)域毛發(fā)狀圖形的Fin紋理及相應(yīng)的毛發(fā)狀圖形切向紋理;在GPU的頂點(diǎn)繪制器中判斷物體模型的各個(gè)點(diǎn)是否處于輪廓區(qū)域;在GPU的像素繪制器中繪制輪廓區(qū)域內(nèi)的各條邊的Fin切片,并生成輪廓區(qū)域的毛發(fā)狀圖形效果。利用本發(fā)明方法繪制的毛發(fā)狀圖形可用于計(jì)算機(jī)仿真、虛擬現(xiàn)實(shí)、電子游戲等領(lǐng)域。文檔編號(hào)G06T15/10GK101281655SQ20081011300公開日2008年10月8日申請(qǐng)日期2008年5月27日優(yōu)先權(quán)日2008年5月27日發(fā)明者吳恩華,孫漢秋,剛楊,王文成申請(qǐng)人:中國(guó)科學(xué)院軟件研究所