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

基于GPU的自適應曲面細分方法與流程

文檔序號:12722816閱讀:485來源:國知局
基于GPU的自適應曲面細分方法與流程

本發(fā)明屬于計算機圖形學領域,涉及一種基于GPU的自適應曲面細分方法。



背景技術:

隨著現(xiàn)代工業(yè)的發(fā)展,計算機輔助與制造發(fā)展迅速,其技術水平的發(fā)展已成為一個國家現(xiàn)代化水平的重要標志。其中計算機輔助幾何設計(Computer Aided Geometric Design簡稱為CAGD)是對外形方面的幾何信息的計算機表示,現(xiàn)在已經(jīng)是計算機應用學科的一個重要分支。

由于計算機離散化表示數(shù)據(jù),計算機不能直接生成曲線,當然更不能直接生成曲面。我們在計算機屏幕上看到的曲線、曲面實際上是由無數(shù)個多邊形構成的。當然多邊形越多,那么曲面就會展現(xiàn)的更為真實。要得到精細的效果,需要提供包含大量控制點的實體模型,稱之為高模模型,但這給模型設計帶來了大量的工作量,提高了人力成本。

曲面細分技術,是一種化繁為簡的手段,在模型已有的表面上細分出頂點,逐步逼近理想曲面。1978年Edwin Catmull和Jim Clark提出經(jīng)典的Catmull-Clark曲面細分算法,由于該算法的遞歸特性不適用于GPU編程,基于三角形的Loop細分算法也不適用GPU編程。近些年一大批適用于GPU編程的曲面細分算法被提出,比如:2008年CHARLES LOOP和SCOTT SCHAEFER兩人于2008年提出了一種近似Catmull-Clark細分面的算法、同年Tamy Boubekeur提出的Phong細分算法。由于細分曲面的頂點和面數(shù)以指數(shù)速度增長,繪制速度會隨細分深度增加而迅速降低,所以在GPU技術出現(xiàn)之前細分曲面技術難以實用,直到由ATI公司基于GPU開發(fā)應用了曲面細分之后,曲面細分技術得以在工業(yè)設計、計算機動畫和雕塑曲面等的設計加工中被廣泛應用和研究。

現(xiàn)存的細分方法,隨著細分的進行,頂點和邊的數(shù)量會急劇增加,所以對龐大復雜的網(wǎng)格模型進行細分時,將耗費大量的存儲資源和運算資源。同時對后續(xù)的顯示、傳輸或者數(shù)控加工編程增加負擔。而實際情況是,在細分迭代數(shù)次后,某些區(qū)域(如較平坦部分或者初始控制網(wǎng)格較稠密的部分)其控制網(wǎng)格已較好地逼近極限細分曲面,而在另外一些區(qū)域(如曲率變化較大的部分)其控制網(wǎng)格還比較粗糙,需要繼續(xù)細分。為了減少不必要的計算資源的浪費,自適應的曲面細分算法就很重要了。根據(jù)給定的局部細分準則,對整個控制網(wǎng)格上進行局部細分,力求以規(guī)模較小的網(wǎng)格來表示精度較高的細分曲面,這對于擴大細分曲面的應用具有重要的工程意義。

基于以上背景,基于GPU的自適應曲面細分方法提出了一種自適應策略,將有效的解決曲面光滑度和數(shù)據(jù)量之間的矛盾,使得在保證曲面細分顯示效果的前提下提高渲染幀率。采取了兩種基于三角形面片的細分模式:PN三角形和Phong細分進行驗證,實驗證明,基于GPU的自適應曲面細分方法具有很好的現(xiàn)實和理論意義。



技術實現(xiàn)要素:

發(fā)明目的:以有效的解決曲面光滑度和數(shù)據(jù)量之間的矛盾,使得在提高顯示效果的前提下提高渲染幀率。

本發(fā)明包括:至少支持Directx11的GPU。

基于GPU的自適應曲面細分方法;其特征在于,在計算機中是依次按以下步驟實現(xiàn)的:

步驟(1),Directx11初始化

具體包括:

1、設置輸入布局,添加POSITION和NORMAL兩個頂點語義。

2、設置常量緩沖區(qū),與GPU中HLSL常量緩沖區(qū)對應

步驟(2),讀取網(wǎng)格模型數(shù)據(jù)與初始化頂點緩存:

在Directx11中集成了曲面細分管線,在GPU中實現(xiàn)PN三角形細分策略時,對于每一個三角形面片,由三個控制點生成一個有10個控制點的3階貝塞爾三角形。在GPU中實現(xiàn)Phong細分算法時,對于每一個三角形面片,需要知道每個頂點的法向量。在自定義頂點結構中定義頂點的相關屬性,PN三角形細分策略與Phong細分策略頂點格式相同,都包含一個坐標信息和法向量信息。

步驟(3),創(chuàng)建頂點布局:

在自定義頂點結構中定義頂點的相關屬性,PN三角形細分策略與Phong細分策略頂點格式相同,都包含一個坐標信息和法向量信息。

步驟(4),網(wǎng)格渲染:

為了能啟用Directx11的細分階段,設置Input Assembler的圖元拓撲類型,使其接收的是控制面片的結構,用IASetPrimitiveTopology設置D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,使得GPU以面片的方式讀取頂點緩存。

步驟(5),自適應曲面細分:

準備好頂點緩沖后,在GPU中實現(xiàn)曲面細分算法,GPU以D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST組裝方式對輸入的頂點緩沖進行讀取。在Directx11中,曲面細分階段分為三個管線,分別為Hull著色階段,Tessellator階段以及Domain著色階段。其中,Hull著色階段由兩部分構成,分別對應兩個不同的hlsl程序,分別為Hull著色階段和patch靜態(tài)函數(shù)。在patch靜態(tài)函數(shù)中決定了曲面片的細分程度,從而告知Tessellator階段要細分出多少頂點。

第一步:在patch靜態(tài)函數(shù)中,進行自適應曲面細分算法的實現(xiàn)。自適應策略包括:背部剔除、距離自適應、垂直面自適應及面片大小自適應。計算出面片的細分因子后,需要進行裂縫消除。

背部剔除:

在進行計算細分因子之前,先做背部剔除測試,對于沒有通過背部剔除測試的面片,只需要把該面片的每一條邊的曲面細分因子置為0,那么渲染管線將不再渲染該面片。對于一個給定的三角形面片,對于每一條邊,計算公式如下:

其中edgedot為點積結果,Nj,Nk表示三角形面片中任意兩個頂點的組合,V為視向量。對于左手坐標系,若該結果為負值,說明該面片的這條邊為背向。當一個面片的三條邊都為背向時說明該面片為背向。

距離自適應:

基于距離自適應的細分因子計算公式如下:

Factor1=1-(Dis-minDis)/disFrange

其中,Dis表示視點與面片邊中點的距離,minDis表示使用最大細分因子的最小距離。disFrange表示近平面與遠平面之間的距離,F(xiàn)actor1為使用距離自適應策略得到的調節(jié)因子這兩個參數(shù)大小用戶可以設定,對于不同的物體模型,取值不同。最終可以得到的Factor1的值位于[0,1]之間。

得到調節(jié)因子后,使用線性差值公式:

x1=1+Factor*(x-1)

其中,x1為使用距離自適應策略調解后的細分因子大小,x為初始細分因子大小。垂直面自適應:

一個面片如果與視線方向保持近似垂直時,由于3D場景在2D屏幕上顯示時需要進行投影,對于這樣的面片進行細分視覺效果變化不大,因此適當減小細分因子。對于每一個面片處理如下:

其中edgedot為點積結果,Nj,Nk表示三角形面片中任意兩個頂點的組合,V為視向量。其中edgedot為歸一化后的兩個向量之間的乘積。

根據(jù)公式:

Factor2=1-|edgedot|

同樣使用線性插值公式:

x2=1+Factor2*(x1-1)

其中,F(xiàn)actor2為使用垂直面自適應策略得到的調節(jié)因子。x2為經(jīng)過垂直面自適應策略調解后得到的細分因子大小,x1使用距離自適應策略調解后的細分因子大小面片大小自適應:

對于模型中的面片首先根據(jù)面片的每一條邊進行細分因子的動態(tài)計算。對于一個給定的面片,計算公式如下:

其中,P1,P2表示三角形面片的任意兩點。D表示用戶給定的距離大小。Factor3為求得的調節(jié)因子。

得到調節(jié)因子Factor3后,同樣使用線性差值公式:

x3=1+Factor3*(x2-1)

其中,x3為面片大小自適應策略調解后的細分因子大小,x2為經(jīng)過垂直面自適應策略調解后得到的細分因子大小

裂縫消除:

對于相鄰三角形的相鄰邊,設置該邊的細分因子為相鄰三角形中最大的細分因子。

三角形ABC,與三角形ACD相鄰,AC為共享邊,XAC表示邊AC的細分因子大小。為三角形ABC中AC邊的細分因子大小,為三角形ACD邊AC邊的細分因子大小。

第二步:hull著色程序,對每個輸出控制點執(zhí)行一次,設置細分domain為三角形,輸出控制點的數(shù)量為3,并指定patch函數(shù)為第二步中的patch函數(shù)。

第三步:domain著色程序,在該程序中分別實現(xiàn)了PN三角形細分策略及Phong細分策略。

使用PN三角形細分策略時,對于給定u,v,w,u+v+w=1,使用三階貝塞爾三角形公式:

求出細分得到的頂點的三維坐標。

使用二階貝塞爾三角形公式得到各個頂點的法向量。公式如下:

對于給定的uvw坐標,求出頂點的法向量。

使用Phong細分模式時,三角形面片的控制點為:pl,pm和pn,各個頂點對應的法向量分別為nl,nm和nn。對于給定的uvw坐標,使用以下公式:

其中,

p(u,v,w)=pl*u+pm*v+pn*w

令q=p(u,v,w),那么:

πl(p(u,v,w))=πl(q)=q-((q-pl)Tnl)nl

πm(p(u,v,w))=πm(q)=q-((q-pm)Tnm)nm

πn(p(u,v,w))=πn(q)=q-((q-pn)Tnn)nn

T表示轉置;

即可求出細分得到的頂點的三維坐標。

本發(fā)明使用Directxll編程工具,基于距離自適應、垂直面自適應、面片大小自適應及背部剔除四種自適應策略,實現(xiàn)了曲面細分的自適應方法。對于每個面片,基于四種策略做細分因子的計算,因此可以動態(tài)的根據(jù)不同的三角形面片的特征調整每個三角形面片的細分因子大小。從而有效的解決了曲面光滑度與數(shù)據(jù)量之間的矛盾。

附圖說明

圖1為物體模型的網(wǎng)格圖

圖2為模型在細分因子為9是的網(wǎng)格圖

圖3為模型結果俯視圖

圖4為模型在細分因子為9時的渲染結果俯視圖

圖5為模型在細分因子為9時的使用面片大小自適應策略的渲染結果俯視圖

圖6為模型在細分因子為9時的使用距離自適應策略的渲染結果俯視圖

圖7為模型在細分因子為9時的使用垂直面自適應策略的渲染結果俯視圖

圖8為模型在細分因子為9時的使用面片大小自適應策略的渲染結果圖

圖9為模型在細分因子為9時的使用距離自適應策略的渲染結果圖

圖10為模型在細分因子為9時的使用垂直面自適應策略的渲染結果圖

圖11為模型在細分因子為9時的使用背部剔除測試的渲染結果圖

圖12為為模型在細分因子為9時,未使用自適應策略渲染結果圖

圖13為基于GPU的自適應曲面細分方法的總體流程圖

圖14為在計算細分因子時使用自適應策略流程圖

圖15為相同邊由于不同大小的細分因子導致的裂縫的效果圖

圖16為使用裂縫消除策略后的效果圖

具體實施方式

下面結合附圖對本發(fā)明做進一步的說明。

圖13,14是本發(fā)明的流程圖,在計算機中按如下步驟進行:

1、基于GPU的自適應曲面細分方法;其特征在于,在計算機中是依次按以下步驟實現(xiàn)的:

步驟(1),Directx11初始化

具體包括:

3、設置輸入布局,添加POSITION和NORMAL兩個頂點語義。

4、設置常量緩沖區(qū),與GPU中HLSL常量緩沖區(qū)對應

步驟(2),讀取網(wǎng)格模型數(shù)據(jù)與初始化頂點緩存:

在Directx11中集成了曲面細分管線,在GPU中實現(xiàn)PN三角形細分策略時,對于每一個三角形面片,由三個控制點生成一個有10個控制點的3階貝塞爾三角形。在GPU中實現(xiàn)Phong細分算法時,對于每一個三角形面片,需要知道每個頂點的法向量。在自定義頂點結構中定義頂點的相關屬性,PN三角形細分策略與Phong細分策略頂點格式相同,都包含一個坐標信息和法向量信息。

步驟(3),創(chuàng)建頂點布局:

在自定義頂點結構中定義頂點的相關屬性,PN三角形細分策略與Phong細分策略頂點格式相同,都包含一個坐標信息和法向量信息。

步驟(4),網(wǎng)格渲染:

為了能啟用Directx11的細分階段,設置Input Assembler的圖元拓撲類型,使其接收的是控制面片的結構,用IASetPrimitiveTopology設置D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,使得GPU以面片的方式讀取頂點緩存。

步驟(5),自適應曲面細分:

準備好頂點緩沖后,在GPU中實現(xiàn)曲面細分算法,GPU以D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST組裝方式對輸入的頂點緩沖進行讀取。在Directx11中,曲面細分階段分為三個管線,分別為Hull著色階段,Tessellator階段以及Domain著色階段。其中,Hull著色階段由兩部分構成,分別對應兩個不同的hlsl程序,分別為Hull著色階段和patch靜態(tài)函數(shù)。在patch靜態(tài)函數(shù)中決定了曲面片的細分程度,從而告知Tessellator階段要細分出多少頂點。

第一步:在patch靜態(tài)函數(shù)中,進行自適應曲面細分算法的實現(xiàn)。自適應策略包括:背部剔除、距離自適應、垂直面自適應及面片大小自適應。計算出面片的細分因子后,需要進行裂縫消除。

背部剔除:

在進行計算細分因子之前,先做背部剔除測試,對于沒有通過背部剔除測試的面片,只需要把該面片的每一條邊的曲面細分因子置為0,那么渲染管線將不再渲染該面片。對于一個給定的三角形面片,對于每一條邊,計算公式如下:

其中edgedot為點積結果,Nj,Nk表示三角形面片中任意兩個頂點的組合,V為視向量。對于左手坐標系,若該結果為負值,說明該面片的這條邊為背向。當一個面片的三條邊都為背向時說明該面片為背向。

距離自適應:

基于距離自適應的細分因子計算公式如下:

Factor1=1-(Dis-minDis)/disFrange

其中,Dis表示視點與面片邊中點的距離,minDis表示使用最大細分因子的最小距離。disFrange表示近平面與遠平面之間的距離,F(xiàn)actor1為使用距離自適應策略得到的調節(jié)因子這兩個參數(shù)大小用戶可以設定,對于不同的物體模型,取值不同。最終可以得到的Factor1的值位于[0,1]之間。

得到調節(jié)因子后,使用線性差值公式:

x1=1+Factor*(x-1)

其中,x1為使用距離自適應策略調解后的細分因子大小,x為初始細分因子大小。垂直面自適應:

一個面片如果與視線方向保持近似垂直時,由于3D場景在2D屏幕上顯示時需要進行投影,對于這樣的面片進行細分視覺效果變化不大,因此適當減小細分因子。對于每一個面片處理如下:

其中edgedot為點積結果,Nj,Nk表示三角形面片中任意兩個頂點的組合,V為視向量。其中edgedot為歸一化后的兩個向量之間的乘積。

根據(jù)公式:

Factor2=1-|edgedot|

同樣使用線性插值公式:

x2=1+Factor2*(x1-1)

其中,F(xiàn)actor2為使用垂直面自適應策略得到的調節(jié)因子。x2為經(jīng)過垂直面自適應策略調解后得到的細分因子大小,x1使用距離自適應策略調解后的細分因子大小面片大小自適應:

對于模型中的面片首先根據(jù)面片的每一條邊進行細分因子的動態(tài)計算。對于一個給定的面片,計算公式如下:

其中,P1,P2表示三角形面片的任意兩點。D表示用戶給定的距離大小。Factor3為求得的調節(jié)因子。

得到調節(jié)因子Factor3后,同樣使用線性差值公式:

x3=1+Factor3*(x2-1)

其中,x3為面片大小自適應策略調解后的細分因子大小,x2為經(jīng)過垂直面自適應策略調解后得到的細分因子大小

裂縫消除:

對于相鄰三角形的相鄰邊,設置該邊的細分因子為相鄰三角形中最大的細分因子。

三角形ABC,與三角形ACD相鄰,AC為共享邊,XAC表示邊AC的細分因子大小。為三角形ABC中AC邊的細分因子大小,為三角形ACD邊AC邊的細分因子大小。

第二步:hull著色程序,對每個輸出控制點執(zhí)行一次,設置細分domain為三角形,輸出控制點的數(shù)量為3,并指定patch函數(shù)為第二步中的patch函數(shù)。

第三步:domain著色程序,在該程序中分別實現(xiàn)了PN三角形細分策略及Phong細分策略。

使用PN三角形細分策略時,對于給定u,v,w,u+v+w=1,使用三階貝塞爾三角形公式:

求出細分得到的頂點的三維坐標。

使用二階貝塞爾三角形公式得到各個頂點的法向量。公式如下:

對于給定的uvw坐標,求出頂點的法向量。

使用Phong細分模式時,三角形面片的控制點為:pl,pm和pn,各個頂點對應的法向量分別為nl,nm和nn。對于給定的uvw坐標,使用以下公式:

其中,

p(u,v,w)=pl*u+pm*v+pn*w

令q=p(u,v,w),那么:

πl(p(u,v,w))=πl(q)=q-((q-pl)Tnl)nl

πm(p(u,v,w))=πm(q)=q-((q-pm)Tnm)nm

πn(p(u,v,w))=πn(q)=q-((q-pn)Tnn)nn

T表示轉置;

即可求出細分得到的頂點的三維坐標。

經(jīng)過以上步驟后,實現(xiàn)了基于GPU的自適應曲面細分方法,圖2展示了物體模型在進行曲面細分后的顯示效果,與圖1相比,可以看出在原有的控制點的基礎上,新生成了大量的新的控制點。圖4與圖3相比,細分后的結果面片更加光滑。圖7中展示了使用垂直面自適應策略時的俯視圖,因為是俯視圖,所以該面近似與視線方向垂直,因此結果圖與圖4結果類似。圖8,9及10分別展示了使用不同自適應策略后的渲染效果。圖15為產(chǎn)生裂縫示意圖,圖16為消除裂縫示意圖。如果所示,左側三角形細分每個邊的細分因子都為4,右側三角形每條邊的細分因子都為3,所以在共享邊上產(chǎn)生了裂縫,使用裂縫消除算法解決該問題,右側三角形的共享邊細分因子取4,其他邊保持不變,如圖16 所示,消除了裂縫。為驗證自適應算法的有效性,本文對各個自適應策略分別做了實驗,并從客觀指標幀率(FPS)對其驗證,幀率越高表示繪制場景需要的資源更少,幀率的提升反映了自適應曲面細分的有效性(實驗機器的配置:NVIDIA Quadro K600圖形卡),結果如下:

背部消隱測試

表1

距離自適應測試

表2

表3

垂直面自適應

表4

面片大小自適應

表5

從表1-5可以看出,隨著細分因子的增大,繪制的面片的增加,使用自適應策略后,能大幅度提升幀率。此外,結合圖8,9,10,11及12可以看出,在渲染效果幾乎相同的情況下,使用自適應曲面細分方法能大幅度提升幀率。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宁夏| 县级市| 乌拉特后旗| 绥宁县| 简阳市| 团风县| 新乡市| 新郑市| 铁力市| 淅川县| 海丰县| 咸丰县| 巨野县| 常州市| 赞皇县| 长顺县| 遂平县| 四子王旗| 全南县| 峨山| 高陵县| 白沙| 昌宁县| 清丰县| 红河县| 三河市| 阿城市| 新化县| 九龙城区| 商河县| 商水县| 泊头市| 疏附县| 英吉沙县| 云霄县| 方山县| 武陟县| 广宁县| 金昌市| 方正县| 两当县|