999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OpenGL與Perlin噪聲的3D地形仿真①

2022-02-15 06:40:26黃澤華鐵治欣
計算機系統應用 2022年1期
關鍵詞:效果方法

黃澤華,鐵治欣,2,陳 強

1(浙江理工大學 信息學院,杭州 310018)

2(浙江理工大學科技與藝術學院,紹興 312369)

自然環境的展現在許多應用中是必不可少的,如地理信息系統[1],飛行模擬或視頻游戲等.地形是這些室外環境的關鍵部分,其表示方式已在文獻中得到廣泛分析[2,3].一些研究試圖提取真實數據[4],但結果受到真實世界的限制,無法總是能夠獲得所有真實數據來表示它們.因此自動地形生成非常重要,仍是一個活躍的研究領域.利用Mandelbrot[5],Prusinkiewicz 等人[6]提出的分形維數,出現了許多研究,這些研究主要使用過程建模來解決其創建過程的自動化[7].這種建模方法已被用于表示許多與地形有關的特征,包括道路、樹木、村莊、城市景觀[8–10]等,甚至用于表示大氣現象[11].根據Smelik 等人[12]的工作,過程建模最初是基于細分過程,其中高程圖是迭代創建的,為了創建高程,在每次迭代中添加了受控量的隨機性.基于過程建模的第一個細分算法稱為中點偏移方法[13,14],其中每次迭代都會生成一個新點,該新點的高程是通過其鄰居高程的平均值獲得的,并添加了隨每次迭代而減小的隨機位移.許多其他研究,主要是基于噪聲發生器,如Perlin 方法[15],其中高程圖是通過湍流函數獲得的.Perlin 噪聲很快,而且會創建均勻且隨機的地形,通常需要進行大量的后處理才能添加有趣的特征.例如Parberry[16]提出的一項工作,它使用Perlin 噪聲的一種變體——值噪聲,根據從地理信息系統(geographic information system,GIS)數據中提取的高程數據的空間分析來生成典型的程序地形.基于噪聲發生器的方法的優點在于,由于每個點都可以獨立于其鄰域進行計算,因此計算成本較低.

在國內,張潤花等[17]利用隨機中點位移法繪制地形,但由于算法隨機性,使網格細分的范圍難以選擇,容易產生地形的失真現象;李玉娟等[18]利用基于數字高程模型(digital elevation model,DEM)的方法,但該方法數據量較大,繪制效率較低;馬海鳳[19]對 GeoMip-Mapping 算法進行改進,利用LOD 算法繪制地形,在效率上有了提高,但未考慮動態地形的情況;鄭顧平等[20]利用WebGL 標準進行動態地形繪制,是一種基于Web 技術下動態調用OpenGL 等圖形庫進行地形繪制,但只是實現了幾何剪切圖算法.

綜合對上述論文的研究,本文利用改進的Perlin噪聲算法生成高程圖,導入OpenCV 庫對圖像信息進行讀取,采用網格生成算法生成模型數據,地形模型以及貼圖數據,在OpenGL 環境下生成仿真地形圖像,解決了隨機中點位移法構建地形中產生的失真及仿真效果較差的問題.并且優化了光照系統,在保持其隨機性,低成本計算的同時,使繪制出的地形網格圖細節更為豐富,成像效果更為真實.

1 Perlin 噪聲介紹

圖形噪聲,是計算機圖形學中一類偽隨機算法,經常用于模擬自然界中的各種紋理材質,如云[21]、波浪[22]、水面[23]、湍流[24]、雪花[25]、場景渲染[26,27]等.通過偽隨機算法計算出的偽隨機數是屬于[0,1]均勻分布的隨機數序列,并不真正的隨機,但具有類似于隨機數的統計特征.Perlin[15]在1985年的SIGGRAPH 大會上首次提出Perlin 函數.后又在2001年,提出了Simplex 噪聲算法來減小計算復雜度.目前已經被廣泛應用于計算機仿真領域及三維游戲制作中.Perilin 噪聲是一種基于晶格的梯度噪聲,隨機數的創建過程包括定義晶格結構,輸入多維點坐標,使用緩和曲線來計算他們的權重和3 個過程.以Perlin 噪聲為基礎,后續利用分形,湍流等手段,可以生成多種不同有趣的噪聲圖.

2 3D 地形仿真的總體設計

本文主要通過Perlin 噪聲生成隨機高程圖,以讀取高程圖單通道顏色值映射為地形高程圖為主要思路,形成三維地形網格圖.在構建三維地形網格圖時,選擇以TRIANGLES 方式[28]繪制,因此對于頂點數組的構造方式決定了程序處理的快慢.假設地圖大小為n×m,以全頂點繪制需要構建(n–1)(m–1)×6 個頂點,而以索引方式來構建,僅需n×m個頂點,減小了約83%的內存占用率,提高了運行效率.在仿真視覺成效方面,對不同高度的位置采用不同的貼圖進行覆蓋.在貼圖交界處,以模糊函數進行疊加計算,使過渡效果更加平滑.光照效果往往能提高整體的視覺體驗,在最終成像結果中加入光照系統,以提升對整體細節的優化.總結各項工作,形成總體流程圖如圖1所示.

圖1 總體流程圖

3 3D 地形仿真的生成

將3D 地形生成仿真分為高程圖的生成與改進、數據集生成、貼圖策略設計與光照系統設計幾個部分.

3.1 基于柏林噪聲的高程圖生成

假設要生成一個N×N的高程圖,首先使用式(1)與式(2)初始化索引表P與隨機矩陣G.式(1)中隨機數賦值為0 到N之間無重復任意值,式(2)中隨機矩陣用于對晶格進行賦值.基于隨機矩陣的做法,與Perlin 于2002年的改進算法[29]相比,在計算量方面有所增加,但能夠提高生成噪聲圖像的隨機性.

其中,ij(j=0,1,2,···,N-1)是0 到N–1 之間無重復隨機整數.

其中,

Jp,q=Random()%2N/N-1,p=0,1,2,···,N-1,q=0,1,2

如圖2所示,假設輸入點S(x,y,z),通過該點可計算得到S1,S2,···,S8,共8 個晶格值.首先通過輸入點x值,計算bx0,bx1,rx0,rx1.其中,bx0=int(x)%N,bx1=(int(x)%N+1)%N,rx0=(x-int(x))%N,rx1=(x-int(x))%N-1.同理可得,by0,by1,ry0,ry1,bz0,bz1,rz0,rz1.

圖2 晶格圖示

結合索引表和隨機矩陣,計算出晶格各點的權重值.

以Perlin 光滑函數[29]為權重函數(4),以rx0,ry0,rz0為參數,計算得到ωx,ωy,ωz.通過線性插值函數(5)及晶格點的權重值(3),得到兩個晶格點的線性插值,如S1與S2的線性插值a0,如式(6)所示.同理可以得到插值b0,a1,b1,如式(7)–式(9)所示.最終再對4 個插值a0,b0,a1,b1再進行二次插值,可得三維Perlin 噪聲函數,如式(10)所示.

以要生成N×N的高程圖中的每個像素點的坐標為x,y坐標值,以當前系統時間為z坐標值,利用Perlin 噪聲函數(10),計算圖片中每個像素點對應的高度值,可得基礎高程圖,如圖3所示,其中取N=1024.

圖3 Perlin 基礎高程圖

3.2 高程圖改進

經過經典Perlin 噪聲算法得到的高程圖沖突效果較差,可以利用分形(Fbm)與湍流(Turbulence)算法進行改進.分形布朗運動算法主要對不同頻率和振幅的噪聲函數進行疊加,如式(11)所示.

其中,A表示每一次噪聲疊加的權值,F表示疊加噪聲的比例,A與F的初始值為1.i為循環次數,表示多張高程圖的疊加效果,通過測試,令i為4 可取得較好的效果.L和G表示每次迭代中修改A和F值的乘系數,分別賦值為2 與1/2,使每次疊加的噪聲權值和大小不同.最終得到高程圖如圖4所示.

圖4 Fbm 高程圖

在利用Fmb 進行改進的基礎上,運用式(14)進行Turbulence 計算,Turbulence 對噪聲函數取絕對值,使噪聲值等于0 處發生突變,產生湍流紋理,最終得到高程圖如圖5所示.

圖5 Turbulence 高程圖

其中,字符含義與式(11)一致.

為驗證算法的有效性,在相同條件下,與相曉嘉等[30]提出的基于Perlin 噪聲的高分辨率地形仿真方法(PNB_HRTDS 方法)進行比較,結果如圖6、圖7、表1所示.圖6與圖7分別是本文方法與PNB_HRTDS 方法生成的大小為1024×1024的地形仿真圖.兩圖相比,可以看出:PNB_HRTDS 方法生成的地形仿真圖的效果過于平整,山體表面褶皺缺少,山體之間的細節不夠充分.由表1可知,在不同大小高程圖中,本文方法的高程值的均值有較大提升,且標準差較大,說明高程圖中沖突效果明顯,山體的表現效果有所提升.

表1 生成數據對比

圖6 本文方法地形仿真效果圖

圖7 PNB_HRTDS 方法地形仿真效果圖

假設要生成n×n大小的高程圖,兩種算法均需申請大小為n的float 類型數組作為索引表P與大小為6n的float 類型數組作為隨機矩陣G,即需要 7n個float 類型的存貯空間,所以兩種算法的空間復雜度為均 O (n).對于n×n大小的高程圖中的每一點,PNB_HRTDS 方法均需要調用Perlin 噪聲函數一次,生成該點的高程,所以其時間復雜度為O (n2) ;本文方法生成一個點的高程需要調用4 次Perlin 噪聲函數,所以其時間復雜度也為O (n2),但實驗生成時間要比PNB_HRTDS 方法慢一點.

3.3 數據集生成

3.3.1 網格數據生成

通過OpenCV 庫,對前述所生成的高程圖以單通道模式進行讀取,存入圖像信息矩陣A中.以像素點顏色值映射為高度值,生成方式如圖8所示.

在圖8中,Width、Height 表示高程圖的寬度與高度,vertices 表示網格數組,I、J、K表示寬高度與數組的遞增索引,Aij表示高程圖中讀出的高度值,此外還加入了 verticeScale、yScale,用于控制地圖大小的縮放比例與地圖高度的縮放比例.

在網格數組的基礎上,可以使用索引的方式,優化網格數據結構,加快運行效率,建立與頂點數據對應的索引數組 indices,如圖9所示,字符含義與圖8一致.

圖8 網格數據生成

圖9 索引數據生成

3.3.2 法線數據生成與優化

OpneGL 以TRIANGLES 方式繪制圖形,三角形是繪制的最小圖元,故可基于三角形的數據,計算垂直于該平面的垂直向量.一般情況下通過三角圖元的各頂點位置信息單獨計算,如劉鵬程等[31]進行的隧道仿真系統的研究與開發,使用glNormal3fv () 函數進行法線計算.在本文的計算方法中,由于網格數組的優化,同一頂點復用,會產生單個頂點包含多個垂直向量問題.本文以多次二分平均算法優化該問題,使垂直單位向量變化更加平滑.

如圖10(a) 所示,存在兩個三角圖元ABD 與ACD,A、D 兩點處是索引情況下的復用點.虛線AF是ABD 圖元中頂點A的法線,虛線AE是ACD 圖元中A 點的法線.此處以A 點為例,由于A 點是復用頂點,只能存在唯一法線.在不復用情況下,每一頂點都屬于唯一圖元,如圖10(b)所示,圖元中任意處的法線都與頂點一致.使用多次二分平均法處理后,使用AE 與AF的平分線AG 作為A 點的法線,作為解決沖突的手段.在頂點被多次復用的情況下,進行多次二分即可.在法線修正后,如圖10(c)所示,A 點的法線由AF 替換為AG,從而AB 線段中的位置,也會依據比例進行調整,如AB中點H,法線的方向指向A 點與B 點法線方向的折中方向.

圖10 法線優化

根據本文提出優化方案,與劉鵬程等[31]方案中使用glNormal3fv () 函數進行法線計算進行對比,圖11(a)為本文方案,圖11(b)為常規方案.從圖中可知,在使用光照計算后,在最小圖元的交界處的左右兩側產生亮度的跳躍性變化.而本文優化方案下,不僅保持了光線的漫反射效果,并且在山體光線的呈現上有更加圓滑的效果.

圖11 法線優化效果對比

3.4 貼圖策略設計

數據集構建完成后,可以依照網格數組來生成三維地形的網格模型.但單純的模型只能反映山體的地形結構,不能模擬真實的仿真效果.因此可以通過三維紋理貼圖方法增強仿真效果.三維紋理貼圖指將二維紋理圖像張貼到三維模型的表面上,從而得到逼真的三維圖形的過程.然而,對于復雜三維模型的紋理貼圖還沒有找到直接貼圖的方法[32].通常情況下會使用一種適合場景的紋理進行貼圖,如圖12所示,但效果會顯得較為單一.本文依據對空間高度的劃分,使用雪、巖石、草坪3 種圖像進行分層采樣.將高度以一定比例劃分為3 個區域,在該區域內,使用對應的圖像進行貼圖:如圖13所示,在紅色框標示區域,不同層次交界處有較強的截斷感.可以使用平滑函數在不同層次之間增加漸變層進行優化,使效果更為平滑:如圖14所示,紅色框標示區域內,漸變層的仿真效果更為真實,整個山體的層次更加自然.

圖12 單紋理貼圖

圖13 多紋理貼圖

圖14 采用分層采樣策略的多紋理貼圖

3.5 光照系統設計

現實世界的光照是極其復雜的,而且會受到諸多因素的影響,這是我們有限的計算能力所無法模擬的.因此本文對光照使用馮氏光照模型(Phong lighting model)[33]對整體進行光照添加.馮氏光照模型的主要結構由3 個分量組成:環境(ambient)、漫反射(diffuse)和鏡面(specular)光照.環境分量主要取決于物體的顏色,以一定亮度百分比進行模擬.漫反射與鏡面光照是產生光線效果的關鍵,設計如圖15展示.在漫反射中,如圖15(a)所示,是法向量,是光源方向向量,將兩向量化為單位向量之后,進行點乘運算,得到0~1 之間的數值A,為了防止光線從后背穿過,則取A與0 之間的最大值,該值表示漫反射的強弱程度,越接近1,則越接近物體原來的顏色.在鏡面反射中,如圖15(b)所示,是法向量,是光源方向向量,是經過平面反射之后的射線,為視線的方向向量.將與化為單位向量之后,進行點乘運算,得到0~1 之間的數值B,其含義與A一致.最終將物體色值的較低百分比如10%,及A、B與色值的乘積相加,得到物體最終在某一視角中應該呈現的顏色.

圖15 漫反射及鏡面反射光照示意圖

4 實驗結果與分析

本文方法實現的硬件環境為:Intel(R) Core(TM)i7-7700HQ CPU @ 2.80 GHz,16.00 GB 內存,NVIDIA GeForce GTX 1050 Ti 顯卡,Win10 64 位操作系統,Microsoft Visual Studio15 編譯器.本文在通過Perlin 噪音生成高程圖的基礎上,構造了網格數組,優化了法線計算.實驗程序的運行結果如圖14、圖16所示.從圖14中觀察到,在不同的高緯度,有良好的漸變效果,雪,巖石,草坪之間過渡的比較自然.圖16為光源置于圖片右側較高處,模擬自然界陽光的照射情況,可以看到山體背陽面有明顯的陰影效果,向陽面有明顯的光照效果,呈現出更貼近現實的仿真效果,沒有過于尖凸的現象出現,而且山體表面褶皺也表現較好.

圖16 本文方法地形仿真效果圖

5 結束語

本文的工作主要是提出了一種基于OpenGL 與Perlin噪聲算法來生成不同的隨機地形的方法.在Perlin 噪聲函數的基礎上,以分形布朗運動為原型,對噪聲進行疊加,再對沖突部分進行湍流的計算,最終得到的高程圖沒有跳躍性與突變型,顯示了良好的效果.此外,該方法保持了Perlin 噪聲的隨機性質,每次運行都會產生不同的高程圖.通過解析高程圖來獲得點位的高度信息,并且導入頂點數組中,并以索引的方式減少了數據冗余和加快了渲染效率.最后通過多次二分平均算法來計算法線,結合貼圖策略及光照系統完成了3D 地形仿真的整體內容.實驗結果表明,該方法能夠創建完整的3D 地形,并且呈現出良好的仿真效果.本文方法同樣適應于火焰,云朵等的仿真生成.

猜你喜歡
效果方法
按摩效果確有理論依據
學習方法
迅速制造慢門虛化效果
抓住“瞬間性”效果
中華詩詞(2018年11期)2018-03-26 06:41:34
模擬百種唇妝效果
Coco薇(2016年8期)2016-10-09 02:11:50
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
3D—DSA與3D—CTA成像在顱內動脈瘤早期診斷中的應用效果比較
主站蜘蛛池模板: 亚洲男人的天堂在线观看| 国产成人精品一区二区免费看京| 五月婷婷欧美| 尤物精品国产福利网站| 强乱中文字幕在线播放不卡| 亚洲福利一区二区三区| 国产激爽大片在线播放| 午夜高清国产拍精品| 日韩久草视频| 亚洲精品中文字幕午夜| 成·人免费午夜无码视频在线观看 | 一级毛片免费观看久| 欧美成人精品一级在线观看| 久久久久亚洲精品无码网站| 爽爽影院十八禁在线观看| 亚洲区欧美区| 91最新精品视频发布页| 在线播放国产99re| 毛片免费在线视频| 制服丝袜 91视频| 亚洲成人网在线播放| 欧美在线观看不卡| 情侣午夜国产在线一区无码| 国产精品亚洲片在线va| 国产一区在线视频观看| 免费不卡视频| 国产对白刺激真实精品91| 欧美h在线观看| 国产精品第| 91色在线观看| 久久精品这里只有国产中文精品| 成人免费一区二区三区| 亚洲精品在线影院| 最新日韩AV网址在线观看| 天堂成人在线视频| 中文字幕在线看| 国产在线观看精品| 国产主播在线一区| 久久久久免费精品国产| 国产精品手机视频一区二区| 狠狠操夜夜爽| 波多野结衣国产精品| 亚洲婷婷六月| 欧美一级在线| 精品国产91爱| 国产在线观看91精品| 国产97公开成人免费视频| 无码内射在线| 国产美女精品在线| 欧美中文字幕一区| 毛片在线播放网址| 野花国产精品入口| 欧美日韩中文国产va另类| 精品少妇人妻无码久久| 国产综合日韩另类一区二区| 国产H片无码不卡在线视频| 人妻丰满熟妇啪啪| 99热国产这里只有精品无卡顿"| 欧美日韩91| 国产精品开放后亚洲| 在线免费无码视频| 中文字幕在线观| 免费jizz在线播放| 久久毛片免费基地| 色婷婷成人网| 2021国产精品自产拍在线| 国产激情第一页| 区国产精品搜索视频| 欧美翘臀一区二区三区| 欧美成人精品一级在线观看| 色老头综合网| 日韩区欧美区| 精品视频一区二区观看| 蜜桃臀无码内射一区二区三区| 中文字幕在线欧美| 99re在线免费视频| 91在线无码精品秘九色APP| 国产欧美日韩综合在线第一| 欧美自慰一级看片免费| 免费国产在线精品一区| 尤物特级无码毛片免费| 国产成人精品第一区二区|