欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于場景繪制的圖形處理方法

文檔序號:6376929閱讀:312來源:國知局
專利名稱:用于場景繪制的圖形處理方法
技術(shù)領(lǐng)域
本發(fā)明涉及圖形、圖像處理領(lǐng)域,特別涉及基于圖形處理器的大規(guī)模場景的繪制。
背景技術(shù)
大規(guī)模復(fù)雜三維場景的實(shí)時(shí)繪制是計(jì)算機(jī)圖形學(xué)領(lǐng)域和虛擬現(xiàn)實(shí)領(lǐng)域的一個(gè)具有挑戰(zhàn)性的問題。其中的困難除了的場景中三維幾何模型的幾何復(fù)雜度過高外,還有由于場景中包含了大量模型所帶來的小批次調(diào)用問題(The small batch problem)。Liu等人提出了基于圖形處理器的動(dòng)態(tài)四分?jǐn)?shù)據(jù)流方法(DQS)(參考F. Liu,ff. Hua, and H. J. Bao, Gpu-based dynamic quad stream for forest rendering, ScienceChina-Information Sciences, vol. 53,pp. 1539-1545, Aug2010)。DQS米用分級的層 次深度圖像表示植物模型。在預(yù)處理階段,預(yù)先從多個(gè)角度生成一組的廣告牌圖像來近似表示植物模型。在場景繪制階段,把這些圖像數(shù)據(jù)做成數(shù)據(jù)流傳送給GPU (GPU數(shù)據(jù)流方法),以圖像邊緣投影到屏幕視口上的長度作為度量依據(jù),利用可編程GPU的幾何著色器(Geometryshader)漸進(jìn)地產(chǎn)生新片元(Primitive)來細(xì)分模型的圖像,實(shí)現(xiàn)視點(diǎn)相關(guān)的森林場景漫游。該方法是把圖像表示法與GPU數(shù)據(jù)流方法相結(jié)合,能夠以很快的速度繪制大規(guī)模的場景。然而使用圖像方式表示的模型幾何信息少,無法計(jì)算每個(gè)葉片每個(gè)頂點(diǎn)的光照,真實(shí)度不聞。Deng等人在提出了多分辨率葉子簡化森林繪制算法(MRF)(參考Q. Deng,X.Zhang, G. Yang, and M. Jaeger, Multiresolution foliage for forest rendering,Computer Animation and Virtual Worlds, vol. 21,pp. 1-23,2010)。MRF 米用純?nèi)S網(wǎng)格模型的方式在GPU中對樹木葉片進(jìn)行簡化。在場景繪制時(shí),模型的葉片根據(jù)距離視點(diǎn)的遠(yuǎn)近實(shí)時(shí)地進(jìn)行合并與還原。模型的層次細(xì)節(jié)(Level ofdetails, L0D)是連續(xù)平滑過渡的,沒有不同級別LOD模型間切換時(shí)的跳躍現(xiàn)象。使用該方法簡化后的植物模型適合于進(jìn)行復(fù)雜的光照陰影計(jì)算。但是沒有考慮到處理葉片紋理,在繪制大規(guī)模場景時(shí),需要讀入整個(gè)模型數(shù)據(jù)進(jìn)行繪制,不適合于網(wǎng)絡(luò)環(huán)境中的應(yīng)用。Gumbau等人提出了基于視線相關(guān)的剪枝繪制方法(VDP)(參考J. Gumbau,M.Chover, I. Remolar, and C.RebolIo, View-dependent pruning for real-timerendering of trees, Computers&Graphics, vol. 35, pp. 364-374, Apr2011) VDP 繪制前,先將植物模型的樹冠部分成小組,在植物模型周圍預(yù)先設(shè)置的一些觀察點(diǎn),每個(gè)組的可見性在各個(gè)觀察點(diǎn)的可見性,在實(shí)時(shí)繪制階段,計(jì)算當(dāng)前視點(diǎn)下每個(gè)小組的可見度,根據(jù)可見度,裁剪掉被認(rèn)為是遮擋住的小組。以剪枝的方式來減少繪制時(shí)模型的幾何復(fù)雜度,同時(shí)保持植物模型的整體外觀。但是該方種方法不能有效地處理實(shí)時(shí)陰影效果,因?yàn)樵谏申幱百N圖階段,該方法需要在光源視錐內(nèi)再進(jìn)行一次計(jì)算,帶來額外的負(fù)擔(dān)。Bao等人提出了一種森林場景的真實(shí)感繪制方法(RRS)(參考G.Bao,H.Li,X.Zhang, ff. Dong.Large-scale forest rendering :real_time, realistic, andprogressive, Computers&Graphics, pp. 140-151, 2012),該方法米用幾何壓縮和 LOD 陰影圖計(jì)算方式能實(shí)時(shí)繪制場景的動(dòng)態(tài)陰影,并使用實(shí)例化方法來避免小批次調(diào)用問題,從而繪制大規(guī)模場景。但是,該方法不能處理半透明模型,并且由于相鄰的模型LOD之間是離散的,在漫游時(shí)會(huì)有明顯的跳躍感。所謂小批次處理問題是由Wloka在游戲開發(fā)者大會(huì)上提出的。Wloka指出在Direct3D中,每繪制一個(gè)批次需要發(fā)起一個(gè)圖形繪制命令(Draw Call),而一個(gè)主頻為IGHz 的 CPU 每秒鐘只能繪制 10000 到 40000 的批次(參考ffloka,M. ,2003. Batch, batch,batch What does it really mean Presentation at Game Developers Conference2003)。假設(shè)在現(xiàn)在的新CPU上,每秒能發(fā)起100000到400000次的圖形繪制命令(速度快10倍),若要達(dá)到20FPS(Frames Per Second),那每幀調(diào)用的圖形繪制命令是5000到20000次。即使繪制一個(gè)三維幾何模型只使用一個(gè)圖形繪制命令,那也只能繪制5000到20000個(gè)模型,這還是不考慮三維幾何模型的幾何復(fù)雜度的理論情況。Carucci等人總結(jié)了早期時(shí)人們?yōu)榱丝朔∨握{(diào)用問題所采用的方法(Carucci, F. , andStudios, L. 2005. GPU Gems 2 Chapter 3. Inside Geometry Instancing. Addison-Wesley Professional)。最常用的方法是,在這每巾貞繪制時(shí),由CPU進(jìn)行三維幾何模型的視錐裁剪和LOD模型選擇計(jì)算,然后將選擇好的三維幾何模型組織成幾個(gè)大的頂點(diǎn)數(shù)組對象,連同頂點(diǎn)變換矩陣一起傳遞給GPU,最后在GPU中完成實(shí)例化繪制。這種方法大大地減少了圖形繪制命令的調(diào)用,但是仍然需要CPU來完成視錐裁剪和LOD模型選擇操作。Shopf等人在2008年提出了一種實(shí)例化繪制方法(參考=Shopf,J.,Barczak, J. , OAT, C. , and Tatarchuk, N. 2008. March of the froblins !simulation andrendering massive crowdsof intelligent and detailed creatures on gpu. In ACMSIGGRAPH2008classes, ACM, New York, NY, USA, SIGGRAPH' 08,52-101)。該方法第一次實(shí)現(xiàn)了完全在GPU上進(jìn)行的三維幾何模型的視錐裁剪、LOD模型選擇和繪制操作,無需CPU交互。然而,這種方法不是為現(xiàn)代的GPU設(shè)計(jì)的,這種方法的主要缺陷是程序設(shè)計(jì)復(fù)雜,區(qū)分3級LOD模型需要5遍繪制。近年來,GPU硬件的性能越來越強(qiáng),可編程性也不斷提高,特別是NVidia Fermi架構(gòu)的GPU和OpenGL 4的出現(xiàn),使得設(shè)計(jì)一種性能更高,算法更直觀的實(shí)例化繪制方法成為可能。由于樹木模型是復(fù)雜場景中的典型代表,它們本身結(jié)構(gòu)是十分復(fù)雜,這給場景的實(shí)時(shí)和高真實(shí)感的繪制帶來了很大的資源消耗。

發(fā)明內(nèi)容
(一)要解決的技術(shù)問題本發(fā)明的目的在于解決廣泛應(yīng)用于數(shù)字娛樂、虛擬視景仿真、城市園林規(guī)劃設(shè)計(jì)和數(shù)字農(nóng)林業(yè)等領(lǐng)域的大規(guī)模復(fù)雜場景的真實(shí)感快速繪制的技術(shù)問題。(二)技術(shù)方案為了解決上述技術(shù)問題,本發(fā)明提供了一種用于場景繪制的圖形處理方法,所述方法包括如下步驟構(gòu)建復(fù)雜場景數(shù)據(jù);繪制場景的陰影貼圖;繪制視點(diǎn)視錐內(nèi)的場景;所述場景數(shù)據(jù)包括模型文件,場景配置文件和紋理材質(zhì)文件;所述繪制場景的陰影貼圖包括第一遍層次細(xì)節(jié)裁剪選擇繪制、第二遍異步查詢繪制以及使用一個(gè)繪制循環(huán)繪制陰影貼圖;所述繪制視點(diǎn)視錐內(nèi)的場景包括多遍循環(huán)繪制、細(xì)小線狀幾何模型的半透明繪制、細(xì)小線狀模型實(shí)例化繪制、半透明對象組成場景的半透明混合、動(dòng)態(tài)連續(xù)層次細(xì)節(jié)繪制以及寬屏幕視口尺寸設(shè)置。優(yōu)選地,所述層次細(xì)節(jié)裁剪選擇繪制包含頂點(diǎn)著色器和幾何著色器。所述頂點(diǎn)著色器用于完成三維幾何模型的視錐裁剪功能,根據(jù)每個(gè)三維幾何模型的位置點(diǎn)和該點(diǎn)上三維幾何模型的包圍盒信息,來判斷位于該點(diǎn)的模型是否是在視錐內(nèi);所述幾何著色器完成視錐內(nèi)層次細(xì)節(jié)模型的級別選擇功能。優(yōu)選地,所述第二遍異步查詢繪制將所述第一遍層次細(xì)節(jié)裁剪選擇繪制得到的三維幾何模型的位置點(diǎn)信息作為輸入。所述使用一個(gè)繪制循環(huán)繪制陰影貼圖是指依次在每個(gè)光源視錐里進(jìn)行第一遍層次細(xì)節(jié)裁剪選擇繪制和第二遍異步查詢繪制來生成所述每個(gè)子視錐對應(yīng)的陰影圖。優(yōu)選地,對于所述多遍循環(huán)繪制,如果需要繪制的三維幾何模型的層次細(xì)節(jié)級別多于N時(shí),通過設(shè)置層次細(xì)節(jié)距離控制參數(shù),首先在第一次繪制循環(huán)中先繪制前N級相鄰的層次細(xì)節(jié)模型,然后依次在下一次繪制循環(huán)中繪制下一組相鄰的N級層次細(xì)節(jié)模型直至所 有層次細(xì)節(jié)級別的三維幾何模型都繪制好,其中N為頂點(diǎn)流的級數(shù)且為自然數(shù)。對繪制對象中細(xì)小線狀的部分,采用半透明線段表示,使得帶有不同透明度的線段可以準(zhǔn)確表示粗細(xì)不同的圓柱狀幾何模型形狀;對繪制對象中半透明的部件,采用半透明多邊形表示。在場景漫游時(shí)相鄰兩級層次細(xì)節(jié)進(jìn)行連續(xù)層次細(xì)節(jié)模型的實(shí)時(shí)繪制,實(shí)現(xiàn)場景漫游時(shí)對象不同層次細(xì)節(jié)模型的連續(xù)、實(shí)時(shí)的平滑過渡。對于所述寬屏幕視口尺寸設(shè)置,首先計(jì)算環(huán)幕的長寬像素的比例,將其設(shè)置為程序視口的比例,并將繪制視口的寬度只設(shè)置為圖形界面庫的最大寬度值,然后在該視口下進(jìn)行實(shí)時(shí)的繪制。(三)有益效果本發(fā)明所提出的方法,克服了現(xiàn)有技術(shù)中圖形處理器中頂點(diǎn)流數(shù)量的限制,能夠繪制任意多級的LOD模型,能夠?qū)崟r(shí)繪制包含數(shù)十萬個(gè)(甚至上百萬個(gè))以上復(fù)雜三維幾何模型的場景,并帶有實(shí)時(shí)陰影效果。


圖I為根據(jù)本發(fā)明的用于場景繪制的圖形處理方法的流程圖;圖2為圖I的細(xì)化說明示意圖;圖3為根據(jù)本發(fā)明的出視點(diǎn)視錐內(nèi)化繪制方法的流程圖;圖4為根據(jù)本發(fā)明在同一個(gè)沒有葉子遮擋的冬季森林場景中,直接使用方法RRS進(jìn)行繪制的結(jié)果;圖5為圖4右上角的放大圖;圖6為根據(jù)本發(fā)明的在一個(gè)葉子稀少的冬季森林場景中,使用方法RRS進(jìn)行繪制白勺結(jié)果;圖7為圖6右上部分的放大圖;圖8為根據(jù)本發(fā)明所提供的方法把樹木模型變?yōu)閮刹糠值氖疽鈭D;圖9為根據(jù)本發(fā)明的K種樹木模型合并成一個(gè)模型;圖10為根據(jù)本發(fā)明的帶有透明度的樹木細(xì)枝繪制效果;圖11為圖10上部細(xì)節(jié)的放大圖12為圖10所示場景的不排序的例子;圖13為圖12上部細(xì)節(jié)的放大圖;圖14為根據(jù)本發(fā)明的帶有透明度的樹木細(xì)枝繪制效果;圖15為根據(jù)本發(fā)明的帶有樹木葉片的半透明細(xì)枝的高空俯視繪制效果;圖16為根據(jù)本發(fā)明的帶有葉片的樹木的半透明細(xì)枝的林間漫游效果圖繪制效果;圖17為根據(jù)本發(fā)明的為環(huán)幕渲染的夏季場景圖像的平面圖;圖18為圖17的左半部分的細(xì)節(jié)圖;圖19為圖17的右半部分的細(xì)節(jié)圖; 圖20為夏季場景的環(huán)幕展示效果圖;圖21為根據(jù)本發(fā)明的環(huán)幕渲染的冬季場景圖像的平面圖;圖22為圖21的左半部分的細(xì)節(jié)圖;圖23為圖21的右半部分的細(xì)節(jié)圖;圖24為冬季場景的環(huán)幕展示效果圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對本發(fā)明作進(jìn)一步的詳細(xì)說明。本發(fā)明所提供的方法包括如下三個(gè)步驟步驟I :復(fù)雜場景數(shù)據(jù)的構(gòu)建;步驟2 :繪制場景的陰影深度紋理即陰影貼圖;步驟3 :繪制視點(diǎn)視錐內(nèi)的場景。圖I為根據(jù)本發(fā)明的用于場景繪制的圖形處理方法的流程圖,展示了步驟2和步驟3。圖2為圖I的細(xì)化說明。下面結(jié)合附圖對各個(gè)步驟進(jìn)行詳細(xì)說明。步驟I :復(fù)雜場景數(shù)據(jù)的構(gòu)建。由于樹木是復(fù)雜場景中的典型代表,它們本身結(jié)構(gòu)是十分復(fù)雜,這給場景的實(shí)時(shí)和高真實(shí)感的繪制帶來了很大的困難,因此本發(fā)明采用樹木的三維幾何模型為對象來說明本發(fā)明所提出的方法。通過各種建模方法獲取復(fù)雜度較高真實(shí)感較強(qiáng)的樹木三維幾何模型,提取每一個(gè)三維幾何模型的L級LOD模型序列模型。使用傳統(tǒng)遞進(jìn)簡化方法對于建筑、雕塑等表面比較平滑的模型的簡化非常有效。整個(gè)簡化過程被紀(jì)錄下來用于構(gòu)造多分辨率模型。但是對于樹木這種拓?fù)浣Y(jié)構(gòu)復(fù)雜而且樹葉紛繁雜亂的模型,傳統(tǒng)的遞進(jìn)簡化方法的效果并不好。對樹木模型這類非連通復(fù)雜對象的遞進(jìn)簡化方法,按照局部空間占有度,定義新的簡單的局部幾何對象替代原來復(fù)雜的幾何對象,遞歸這個(gè)替代過程直到生成最簡單的模型來表示。本發(fā)明所采用的遞進(jìn)簡化方法先將一個(gè)點(diǎn)集的空間占有度定義為以下四個(gè)點(diǎn)組成的四面體的體積第一個(gè)點(diǎn)和第二個(gè)點(diǎn)分別為該集合直徑的兩個(gè)端點(diǎn),第三個(gè)點(diǎn)為該集合中到二者距離之和的最大者,而第四個(gè)點(diǎn)為該集合中到三者距離之和的最大者。最大占有度的四邊形為這四個(gè)點(diǎn)按照第1、3、2、4的順序來連接。該遞進(jìn)簡化方法也保持紋理坐標(biāo)的簡化與幾何信息的簡化一致,紋理坐標(biāo)保持的基本原則是紋理圖像長的方向與集合直徑方向一致。對于樹木模型中的樹葉紋理,在遞進(jìn)簡化的時(shí)候,把原來樹葉的復(fù)雜的網(wǎng)格模型用定向四邊形包圍盒代替。其紋理坐標(biāo)以(0,0),(1,0), (1,1), (0,1)代替。四邊形頂點(diǎn)的序號以這個(gè)四邊形的法向量為軸的方向構(gòu)成右手系為正方向進(jìn)行紋理映射。若對樹葉進(jìn)一步簡化,則相鄰的兩個(gè)四邊形合并為一個(gè)大的四邊形,重新計(jì)算這個(gè)面的法向量,再以右手規(guī)則確定頂點(diǎn)序號順序和紋理坐標(biāo)。對于樹木葉片的簡化,通過定義一個(gè)二次曲面函數(shù)來得到葉子的網(wǎng)格模型。通過指定葉脈函數(shù)的參數(shù)本發(fā)明可以構(gòu)造葉序模型。然后把生成的多分辨率序列模型輸出為標(biāo)準(zhǔn)三維數(shù)據(jù)格式的文件。構(gòu)建場景配置文件和紋理材質(zhì)文件。生成多分辨率模型以后,選擇具體三維幾何模型來構(gòu)建多分辨率模型列表(MR模型序列)。本發(fā)明使用的模型選擇規(guī)則是依據(jù)該模型的復(fù)雜度離開視點(diǎn)的距離來確定的。模型的復(fù)雜度以模型所含有的多邊形個(gè)數(shù)來定義。多邊形的個(gè)數(shù)與它離視點(diǎn)的距離成函數(shù)關(guān)系。這個(gè)函數(shù)關(guān)系是線性函數(shù)或非線性函數(shù)(包括分段函數(shù))。對于分段函數(shù),就將距離分為N段,距離的分段點(diǎn)分別為彡d0 ^ Cl1 ^ ^ dN,則N+1個(gè)分段點(diǎn)把非負(fù)距離空間劃分成N個(gè)區(qū)間,各個(gè)區(qū)間的模型的多邊形個(gè)數(shù)分別為{!^…^...,且 Ii1彡n2彡…彡nN彡0,其中Ii1為復(fù)雜度最高的幾何模型,ni+1 = sXn^l ^ i ^ Ν,Ο < s< I。參數(shù)s是一個(gè)壓縮系數(shù),表示模型的簡化率,可以由用戶自主定義。把生成的多分辨率序列模型導(dǎo)出為標(biāo)準(zhǔn)三維數(shù)據(jù)格式的文件。這里所說的標(biāo)準(zhǔn)三維幾何模型數(shù)據(jù)的文件的內(nèi)容包含三維幾何模型各個(gè)頂點(diǎn)的三維坐標(biāo)、頂點(diǎn)之間的連接關(guān)系即面信息、紋理坐標(biāo)、材質(zhì)文件名稱和材質(zhì)信息。文件的組織結(jié)構(gòu)為頂點(diǎn)坐標(biāo)、法向量、紋理坐標(biāo)和面的信息構(gòu)成一個(gè)組,每組指定一個(gè)材質(zhì)信息。每一個(gè)面需指定頂點(diǎn)序號,也同時(shí)指定法向量序號或紋理坐標(biāo)序號或者兩者都指定。每個(gè)文件由一個(gè)組或者多個(gè)組構(gòu)成。每個(gè)文件指定一個(gè)材質(zhì)文件。三維數(shù)據(jù)文件的編碼為這些列表的記錄,而頂點(diǎn)信息和面片信息的編碼紀(jì)錄順序與模型簡化過程有關(guān)。這個(gè)關(guān)系體現(xiàn)在頂點(diǎn)坐標(biāo)的排序?yàn)檫f進(jìn)減化過程中點(diǎn)被簡化的逆順序,對應(yīng)的法向量坐標(biāo)和紋理坐標(biāo)使用遵守順序。面的排序依靠頂點(diǎn)排列順序,一個(gè)面的更多頂點(diǎn)在排序中如果靠前,自己的排序也在所有面的排序中靠前。在具體編碼的時(shí)候,面順序與頂點(diǎn)順序的混合,其中頂點(diǎn)信息包括坐標(biāo)、法向量坐標(biāo)和紋理坐標(biāo)。面順序是主體,而頂點(diǎn)順序依賴面順序,要求每一個(gè)面的頂點(diǎn)都排在其前邊,而且盡量靠近自己。除了模型文件,還需要構(gòu)建場景配置文件和紋理材質(zhì)文件。場景配置文件需要描述每個(gè)場景的布局,包括每個(gè)三維幾何模型的縮放、位置、旋轉(zhuǎn)角度。紋理材質(zhì)文件包括每個(gè)組的紋理的環(huán)境光、漫射光、反射光、透明度、紋理圖像等材質(zhì)屬性。此外,每個(gè)場景再配置一個(gè)地形模型,含高程圖和紋理文件或者輸入一張地形圖像作為地形模型。以地形圖像作為地形模型時(shí),其高度信息以圖像的亮度值進(jìn)行縮放后得到。步驟2 :繪制場景的陰影深度紋理即陰影貼圖。在繪制陰影時(shí),采用平行視錐陰影貼圖(Parallel Split Shadow Mapping)方法(參考Fan Zhang, Hanqiu Sun, LeileiXu, Lee Kit Lun, Parallel-split shadow mapsfor large-scale virtual environments, Proceedings of the 2006ACM Internationalconference on Virtual reality continuum and its applications,June 14—April 17,2006,Hong Kong, China)來生成陰影,該算法首先按照某種規(guī)則將視點(diǎn)視錐平行的分割成多個(gè)部分,再對每個(gè)部分使用相同尺寸的深度紋理生成陰影圖,使得屏幕采樣率與陰影圖的采樣率一致,從而達(dá)到了很好的反鋸齒效果。該算法在大規(guī)模場景的陰影生成中應(yīng)用十分廣泛。在每一個(gè)子視錐的陰影圖繪制是采用實(shí)例化繪制方式進(jìn)行兩遍繪制,繪制時(shí)將多分辨率模型序列組織成頂點(diǎn)數(shù)組對象輸入到顯存,加快繪制速度。陰影深度紋理采用多分辨率的方式,離視點(diǎn)最近的深度紋理每幀都更新并且尺寸最大,離視點(diǎn)越遠(yuǎn)更新頻率越低尺寸也隨之減小,采用多渲染對象(Multiple Render Targets)方式同時(shí)生成各個(gè)視錐中的深度紋理圖。本發(fā)明依次要進(jìn)行LOD裁剪選擇繪制和異步查詢繪制,包括如下步驟步驟21 :第一遍LOD裁剪選擇繪制。第一遍LOD裁剪選擇繪制通過調(diào)用OpenGL的命令glEnable(GL_RASTERIZER_DISCARD),不進(jìn)行圖形流水線的光柵化步驟,從而不產(chǎn)生任何的顏色輸出。它將此次繪制計(jì)算得到的各級LOD位置數(shù)據(jù)記錄到緩沖區(qū)對象(BufferObjects)中,用于進(jìn)行第二遍的異步查詢繪制。LOD裁剪選擇繪制包含一個(gè)頂點(diǎn)著色器和 一個(gè)幾何著色器。頂點(diǎn)著色器完成三維幾何模型的視錐裁剪功能,根據(jù)每個(gè)三維幾何模型的位置點(diǎn)和該點(diǎn)上三維幾何模型的包圍盒信息,來判斷位于該點(diǎn)的模型是否是在視錐內(nèi)。所有三維幾何模型的位置點(diǎn)和包圍盒信息以頂點(diǎn)數(shù)組對象(Vertex Array Objects)的形式傳輸入到GPU中。OpenGL是以狀態(tài)機(jī)的方式工作,狀態(tài)的改變會(huì)帶來性能的下降,為了盡可能多地減少OpenGL的狀態(tài)變化,本發(fā)明把使用同一種紋理和材質(zhì)的三角面片組織成一個(gè)頂點(diǎn)數(shù)組對象進(jìn)行統(tǒng)一繪制。頂點(diǎn)著色器并行地計(jì)算每個(gè)位置點(diǎn)的一個(gè)布爾型的變量flag,根據(jù)位于該點(diǎn)模型的包圍盒,計(jì)算其包圍盒的八個(gè)頂點(diǎn)在視口坐標(biāo)系下的坐標(biāo)值,若這八個(gè)頂點(diǎn)在視口坐標(biāo)系下的投影均不在視口范圍內(nèi),則該模型被裁減掉,flag標(biāo)記為假(False),表示該位置點(diǎn)的三維幾何模型不在當(dāng)前視錐內(nèi),不進(jìn)行繪制。否則,標(biāo)記flag為真(True),表示該位置的三維幾何模型在當(dāng)前視錐范圍之內(nèi),需要進(jìn)行繪制。標(biāo)記好flag的值傳遞給幾何著色器。幾何著色器完成視錐內(nèi)LOD模型的級別選擇功能。從OpenGL 3. O開始提供變換反饋(Transform Feedback)特性,該特性可以記錄幾何著色器輸出的幾何元素,并把記錄的結(jié)果(就是模型的位置信息)傳給綁定的緩沖區(qū),用于第二遍的異步查詢繪制。這樣,若模型在視錐內(nèi),幾何著色器就將該點(diǎn)的位置輸出到緩沖區(qū)里,若模型不在視錐內(nèi),幾何著色器不把該點(diǎn)的位置輸出到緩沖區(qū)里。OpenGL 4中的變換反饋特性有了新的功能,它可以將幾何著色器生成的幾何圖元輸出到不同的頂點(diǎn)流里(在目前很多高性能顯卡上,OpenGL最多只支持4個(gè)頂點(diǎn)流的輸出)。本發(fā)明利用這個(gè)新提供的功能,通過當(dāng)前保存的視點(diǎn)變換矩陣計(jì)算該位置點(diǎn)到當(dāng)前視點(diǎn)的距離d。d與做比較,確定d所屬的第k個(gè)區(qū)間(l<k<N),最后將該位置點(diǎn)輸出到對應(yīng)的第k個(gè)頂點(diǎn)流里。本發(fā)明預(yù)先設(shè)置了緩沖區(qū)對象(BufferObjects)來記錄頂點(diǎn)流中的數(shù)據(jù),并使用它和異步查詢繪制進(jìn)行數(shù)據(jù)傳輸,在異步查詢繪制中直接使用。步驟22 :第二遍異步查詢繪制。第二遍異步查詢繪制,要將第一遍LOD裁剪選擇繪制得到的三維幾何模型的位置點(diǎn)信息(綁定的緩沖區(qū)對象)作為輸入。模型的每一級LOD的數(shù)量visibleTrees通過OpenGL的異步查詢命令(Asynchronous Query)來獲得。若查詢的返回結(jié)果visibleTrees大于零,則遍歷三維幾何模型的每個(gè)組,使用中的實(shí)例數(shù)組繪制(Instanced Arrays)對使用相同紋理和材質(zhì)的組進(jìn)行繪制。在像素著色器中,根據(jù)生成的陰影貼圖對每個(gè)像素著色,以此來得到實(shí)時(shí)的陰影效果。若visibleTrees的查詢結(jié)果為O,說明在視點(diǎn)視錐內(nèi)沒有這種的LOD模型,就不進(jìn)行繪制。步驟23 :僅使用一個(gè)繪制循環(huán)繪制陰影貼圖。依次在每個(gè)光源視錐里進(jìn)行步驟21和步驟22來生成每個(gè)子視錐對應(yīng)的陰影圖,這樣依然能保持原來陰影圖的LOD生成方式。當(dāng)模型的LOD級別大于4級時(shí),本發(fā)明采用了不同的繪制策略,通過控制選擇LOD距離,把第三級LOD以后的模型換成最簡單的模型,這樣可以不增加LOD裁剪選擇繪制和異步查詢繪制,同時(shí)又減少了繪制陰影時(shí)的幾何量。步驟3 :繪制視點(diǎn)視錐內(nèi)的場景。采用實(shí)例化繪制方式進(jìn)行兩遍繪制并結(jié)合循環(huán)繪制方法,同時(shí)由第二步生成的陰影貼圖,在像素著色器中以基于陰影貼圖的方法來生成動(dòng)態(tài)實(shí)時(shí)的陰影效果。多細(xì)節(jié)繪制包含細(xì)的線狀幾何模型的半透明繪制、細(xì)的線狀模型實(shí)例化繪制、半透明對象組成場景的半透明混合(Alpha混合)技術(shù)以及動(dòng)態(tài)連續(xù)LOD繪制。最后根據(jù)環(huán)幕的長寬比例尺寸對 視口大小進(jìn)行設(shè)置,把結(jié)果送到環(huán)幕上進(jìn)行展示。步驟3包括以下步驟步驟31:多遍循環(huán)繪制。目前OpenGL 4只能支持有限的N個(gè)頂點(diǎn)流,對目前很多高性能的GPU,例如NVidia GTX 470和560Ti最多只支持4個(gè)頂點(diǎn)流的輸出。因此在一次繪制循環(huán)中只能區(qū)分4級LOD模型。使用越多的模型LOD級別會(huì)有更好的平滑過渡的效果,因此本發(fā)明設(shè)計(jì)了一種循環(huán)繪制的方式來克服需要繪制的模型的LOD級別數(shù)L大于N的情形。本發(fā)明從第一級LOD模型開始,以N個(gè)最相鄰的模型為一組,結(jié)合區(qū)分這N個(gè)級別的距離判斷參數(shù)進(jìn)行繪制,當(dāng)繪制完畢后再進(jìn)入下一個(gè)繪制循環(huán),繪制下一組模型,直至所有的模型繪制完畢,總共的繪制循環(huán)次數(shù)為[L/N],這里[L/N]表示L除以N的商向上取整。步驟32 :細(xì)的線狀幾何模型的半透明繪制。復(fù)雜場景中,細(xì)的線狀幾何模型往往小于單個(gè)像素,半透明線段的繪制有利于保持細(xì)節(jié),因?yàn)榇藭r(shí)多邊形的光柵化繪制會(huì)浪費(fèi)在亞像素(Sub-pixel)的計(jì)算上。在復(fù)雜森林場景中,樹木的細(xì)枝是典型的細(xì)的線狀幾何模型,常常會(huì)變得小于單個(gè)像素,本發(fā)明使用細(xì)枝來描述細(xì)的線狀幾何模型的半透明繪制。樹木模型也需要線模型和網(wǎng)格模型的混合表示。當(dāng)樹的側(cè)枝在屏幕上的投影寬度小于一個(gè)像素時(shí),就用線段來表示,并依據(jù)該寬度確定線的透明度,使得模型中的每段細(xì)枝帶有不同的透明度α (0< α < I),透明度等于投影寬度所占用像素的個(gè)數(shù)。通常越遠(yuǎn)處細(xì)枝的透明度越高(α值越小)。半透明細(xì)枝按α : l-α的比例與背景進(jìn)行混合,實(shí)現(xiàn)半透明效果。在漫游時(shí),各級LOD間的半透明細(xì)枝以及背景處的樹木側(cè)枝產(chǎn)生漸入漸出的效果。附圖4說明細(xì)枝半透明繪制的必要性。本發(fā)明優(yōu)選為預(yù)先生成了樹木模型帶有透明度的各級LOD模型ITreeModelij =(Trunkij, TinBranchij) 11彡i彡K,I彡j彡L},K為樹種個(gè)數(shù),L為LOD級別數(shù)。每個(gè)模型TreeModelij由兩個(gè)Wavefrontobj模型格式(· ob j格式)的文件組成。其中一個(gè)模型文件是不透明的枝干組成的多邊形網(wǎng)格模型Trunkij (Trunk),另一個(gè)模型文件是帶有不同透明度的細(xì)枝組成的線狀模型ThinBranchij(Thinbranch),通常j越大,模型中各個(gè)細(xì)枝線段的α值越小。對于場景中所有的線狀模型Thinbranch,本發(fā)明所采用的半透明繪制方法如下(I)讀入線狀模型Thinbranch,以線段的形式把Thinbranch中所有的頂點(diǎn)組成一個(gè)大的頂點(diǎn)緩沖區(qū)對象(Vertex buffer object/VBO)vertexThinbranch。vertexThinbranch中的每個(gè)點(diǎn)Pi包含7個(gè)分量局部坐標(biāo)系中的頂點(diǎn)位置(x,y,z),法向量(a,b,c)和由該點(diǎn)所組成的線段的透明度α。(P2i,P2i+1)組成一條線段,其中i = 0,1,2···。(2)為了得到幀緩存里正確的顏色信息,本發(fā)明先繪制地面和天空,然后繪制不透明多邊形網(wǎng)格模型Trunk,最后繪制帶有透明度的細(xì)枝。本發(fā)明把視錐內(nèi)的細(xì)枝模型Thinbranch在CPU中使用快速排序算法按到視點(diǎn)的距離由遠(yuǎn)及近進(jìn)行排序,然后按照排好的順序由遠(yuǎn)及近進(jìn)行繪制。(3)在Thinbranch的頂點(diǎn)著 色器里計(jì)算每個(gè)點(diǎn)的裁剪坐標(biāo)(Clip coordinate),計(jì)算法向量和光源到該點(diǎn)的入射向量,連同該點(diǎn)的裁剪坐標(biāo)和α值傳遞給片元著色器。在片元著色器中采用Phong光照模型計(jì)算該像素的顏色,并根據(jù)傳入的透明度α值設(shè)置該像素點(diǎn)的α值。步驟33 :細(xì)的線狀模型實(shí)例化繪制。本發(fā)明以樹木為典型對象而描述細(xì)的線狀模型實(shí)例化繪制方法。(I)本發(fā)明采用把所有K種模型TreeModelij的同一級LOD合并成一個(gè)模型(TreePatch)的方式減弱此類錯(cuò)誤。所有K種模型的第j級LOD均合并到TreePatchj (I ^ j ^ L)中,TreePatchj包含不透明的枝干模型TrunkPatchj和帶有不同透明度的細(xì)枝模型ThinbranchPatchj。(2)對ThinbranchPatchj本發(fā)明從遠(yuǎn)到近每次只區(qū)分出I級LOD的位置點(diǎn),依次繪制第L級到第I級的LOD模型。在每一次繪制循環(huán)時(shí),幾何著色器只輸出I級LOD模型的位置點(diǎn)。步驟34 :半透明對象組成場景的半透明混合(Alpha混合)技術(shù)。目前的實(shí)例化(實(shí)例化繪制是指對一個(gè)幾何體繪制多個(gè)實(shí)例,每個(gè)實(shí)例在位置,方向和大小上有差異)技術(shù)不支持半透明對象,本發(fā)明方法能夠彌補(bǔ)這個(gè)不足,從而實(shí)現(xiàn)半透明對象組成場景的半透明混合(Alpha混合)技術(shù)。對象繪制順序是一個(gè)技術(shù)關(guān)鍵。如果沒有到視點(diǎn)的距離由遠(yuǎn)到近的排序,后繪制的更遠(yuǎn)的對象因?yàn)闊o法通過深度測試而不能全部繪制出來。本發(fā)明使用快速排序算法在CPU中將instanceBO中每一個(gè)對象出現(xiàn)的順序按其到視點(diǎn)的距離由遠(yuǎn)到近排序,進(jìn)一步糾正位置排順錯(cuò)誤而引起的半透明混合錯(cuò)誤,保證Alpha混合的正確性,實(shí)現(xiàn)半透明的硬件實(shí)例化繪制。步驟35 :動(dòng)態(tài)連續(xù)LOD繪制。由于模型的LOD是離散的,在場景漫游時(shí)相鄰兩級LOD模型在切換時(shí)難免會(huì)產(chǎn)生跳變現(xiàn)象。雖然通過增加LOD級別可以減弱跳變,但是因此會(huì)帶來數(shù)據(jù)存儲(chǔ)量和人工工作量的增加。本發(fā)明利用OpenGU目前使用OpenGL 4)的曲面細(xì)分可編程功能分別對模型的每一個(gè)分組(例如樹木的枝干和樹冠屬于不同的分組)進(jìn)行連續(xù)層次細(xì)節(jié)模型的實(shí)時(shí)繪制。本發(fā)明使用曲面細(xì)分功能對不同的線段進(jìn)行不同等級的細(xì)分,在幾何著色器中改變幾何圖元的拓?fù)浣Y(jié)構(gòu)。這樣可以對枝干的線狀骨架模型進(jìn)行不同程度的細(xì)分,然后轉(zhuǎn)換成三角網(wǎng)格模型。對于樹冠模型實(shí)現(xiàn)多邊形葉子模型與廣告牌模型之間漸進(jìn)的相互轉(zhuǎn)換。從而實(shí)現(xiàn)場景漫游時(shí)相鄰兩級層次細(xì)節(jié)模型的連續(xù)、實(shí)時(shí)的平滑過渡。步驟36 :寬屏幕視口尺寸設(shè)置。首先計(jì)算環(huán)幕的長寬像素的比例,將其設(shè)置為程序視口的比例,并將繪制視口的寬度只設(shè)置為圖形界面庫的最大寬度值;然后在該視口下進(jìn)行實(shí)時(shí)的繪制,通過渲染到紋理(Render to texture)的方式將視口場景渲染到巾貞緩沖區(qū)對象(Frame buffer object)中去,根據(jù)不同的投影儀在邊界上的顏色差異,使用MeanValue Coordinates 方法(Z. Farbman, G. Hoffer, Y. Lipman, D. Cohen-Or, D. Lischinski,Coordinates for instant image cloning. In:SIGGRAPH,09 ACM SIGGRAPH 2009papers,pp. 1-9.)對幀緩沖區(qū)對象中的像素值進(jìn)行快速圖像融合,最后將融合結(jié)果輸出到投影儀,在環(huán)幕上進(jìn)行展示,以增強(qiáng)身臨其境的感覺。下面是根據(jù)本發(fā)明所提供的方法的實(shí)驗(yàn)結(jié)果。在所有實(shí)驗(yàn)中,均采用C++語言和OpenGL 4. 2圖形函數(shù)庫實(shí)現(xiàn)本發(fā)明所描述的方法。所有實(shí)驗(yàn)都是在一臺(tái)Core i7 2.67GHz的CPU、3GB內(nèi)存、NVidia GTX560顯示芯片、操作系統(tǒng)為Windows 7的PC機(jī)上完成的。應(yīng)該理解,本發(fā)明并不局限于上面的實(shí)施例。在一個(gè)大規(guī)模復(fù)雜場景A里,其中場景中的總共包含有1,039, 358個(gè)復(fù)雜的樹木模型;視錐中的樹木數(shù)量有56,220棵;視錐內(nèi)有一千一百多萬個(gè)多邊形;場景中的模型種類為5種;場景中的每種模型有8級L0D。繪制的窗口分辨率為1920X1082。通過比較是·否在視線視錐內(nèi)進(jìn)行實(shí)例化繪制和是否在光線視錐內(nèi)進(jìn)行實(shí)例化繪制,每種策略的每幀中·圖形繪制命令的數(shù)量和FPS如表I所示。表I為場景A有100萬棵樹,視錐內(nèi)有3. 8萬棵樹的大場景中,每種策略的每幀中圖形繪制命令的數(shù)量和FPS的比較。表I
權(quán)利要求
1.一種用于場景繪制的圖形處理方法,所述方法包括構(gòu)建復(fù)雜場景數(shù)據(jù);繪制場景的陰影貼圖;繪制視點(diǎn)視錐內(nèi)的場景; 所述場景數(shù)據(jù)包括模型文件,場景配置文件和紋理材質(zhì)文件; 所述繪制場景的陰影貼圖包括第一遍層次細(xì)節(jié)裁剪選擇繪制、第二遍異步查詢繪制以及使用一個(gè)繪制循環(huán)繪制陰影貼圖; 所述繪制視點(diǎn)視錐內(nèi)的場景包括多遍循環(huán)繪制、細(xì)小線狀幾何模型的半透明繪制、細(xì)小線狀模型實(shí)例化繪制、半透明對象組成場景的半透明混合、動(dòng)態(tài)連續(xù)層次細(xì)節(jié)繪制以及寬屏幕視口尺寸設(shè)置。
2.如權(quán)利要求I所述的方法,其特征在于,所述第一遍層次細(xì)節(jié)裁剪選擇繪制包含頂點(diǎn)著色器和幾何著色器;所述頂點(diǎn)著色器用于完成三維幾何模型的視錐裁剪功能,根據(jù)每個(gè)三維幾何模型的位置點(diǎn)和該點(diǎn)上三維幾何模型的包圍盒信息,來判斷位于該點(diǎn)的模型是否是在視錐內(nèi);所述幾何著色器完成視錐內(nèi)層次細(xì)節(jié)模型的級別選擇功能。
3.如權(quán)利要求I所述的方法,其特征在于,所述第二遍異步查詢繪制將所述第一遍層次細(xì)節(jié)裁剪選擇繪制得到的三維幾何模型的位置點(diǎn)信息作為輸入。
4.如權(quán)利要求I所述的方法,其特征在于,所述使用一個(gè)繪制循環(huán)繪制陰影貼圖是指依次在每個(gè)光源視錐里進(jìn)行第一遍層次細(xì)節(jié)裁剪選擇繪制和第二遍異步查詢繪制來生成所述每個(gè)子視錐對應(yīng)的陰影圖。
5.如權(quán)利要求I所述的方法,其特征在于,所述多遍循環(huán)繪制包括如果需要繪制的三維幾何模型的層次細(xì)節(jié)級別多于N時(shí),通過設(shè)置層次細(xì)節(jié)距離控制參數(shù),首先在第一次繪制循環(huán)中先繪制前N級相鄰的層次細(xì)節(jié)模型,然后依次在下一次繪制循環(huán)中繪制下一組相鄰的N級層次細(xì)節(jié)模型直至所有層次細(xì)節(jié)級別的三維幾何模型都繪制好,其中N為頂點(diǎn)流的級數(shù)且為自然數(shù)。
6.如權(quán)利要求I所述的方法,其特征在于,采用半透明線段表示繪制對象中細(xì)小線狀的部分;采用半透明多邊形表示對繪制對象中半透明的部件。
7.如權(quán)利要求I所述的方法,其特征在于,在場景漫游時(shí),使用曲面細(xì)分功能,相鄰兩級層次細(xì)節(jié)進(jìn)行連續(xù)層次細(xì)節(jié)模型的實(shí)時(shí)繪制,實(shí)現(xiàn)場景漫游時(shí)對象不同層次細(xì)節(jié)模型的連續(xù)、實(shí)時(shí)的平滑過渡。
8.如權(quán)利要求I所述的方法,其特征在于,所述寬屏幕視口尺寸設(shè)置包括計(jì)算環(huán)幕的長寬像素的比例,將所述環(huán)幕設(shè)置為程序視口的比例,并將繪制視口的寬度只設(shè)置為圖形界面庫的最大寬度值,然后在該視口下進(jìn)行實(shí)時(shí)的繪制,通過渲染到紋理的方式將視口場景渲染到幀緩沖區(qū)對象中,并根據(jù)不同的投影儀在邊界上的顏色差異,對所述幀緩沖區(qū)對象中的像素進(jìn)行圖像融合,最后將融合結(jié)果輸出到所述投影儀,在所述環(huán)幕上進(jìn)行展示。
全文摘要
本發(fā)明公開了一種用于場景繪制的圖形處理方法,該方法包括構(gòu)建復(fù)雜場景數(shù)據(jù)、繪制場景的陰影貼圖和繪制視點(diǎn)視錐內(nèi)的場景。該方法通過半透明線段表示細(xì)小的對象,繪制效果保持了豐富的細(xì)節(jié)信息;通過多遍繪制的方式,避免了小批次數(shù)據(jù)問題,提高了繪制效率;通過模型合并、幾何著色器的單級層次細(xì)節(jié)(LOD)模型輸出以及模型位置點(diǎn)排序,使用帶有不同透明度的線段模型來表示不同粗細(xì)柱狀幾何體,從而保證Alpha混合的正確性,實(shí)現(xiàn)半透明繪制,保持更多細(xì)節(jié)。
文檔編號G06T15/60GK102903146SQ201210340220
公開日2013年1月30日 申請日期2012年9月13日 優(yōu)先權(quán)日2012年9月13日
發(fā)明者張曉鵬, 鮑冠伯, 李紅軍 申請人:中國科學(xué)院自動(dòng)化研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
年辖:市辖区| 收藏| 樟树市| 沙河市| 雅安市| 阿拉尔市| 景德镇市| 库车县| 尚义县| 辽中县| 嘉黎县| 崇礼县| 西乡县| 东安县| 涞源县| 南江县| 榕江县| 庆元县| 霍林郭勒市| 黄浦区| 文水县| 大安市| 石阡县| 吴川市| 修武县| 淳化县| 建湖县| 平利县| 榆中县| 富裕县| 昌乐县| 蒲江县| 台中县| 高密市| 达州市| 商南县| 武穴市| 黄骅市| 桐城市| 壶关县| 台北市|