吳剛
摘要:在充分認(rèn)識體素的基本概念和基于體素地形表達(dá)的特點上,結(jié)合UE4分析了體素地形對于三維地形的構(gòu)建帶來的影響及體素地形構(gòu)建過程中的優(yōu)化分析。通過對體素建模過程中出現(xiàn)的一些問題,提出相應(yīng)的解決方案。
關(guān)鍵詞:體素;虛擬地形;Unreal Engine;三維建模
中圖分類號:TB文獻(xiàn)標(biāo)識碼:Adoi:10.19311/j.cnki.1672-3198.2019.10.079
三維地形可視化是對現(xiàn)實世界中的自然地理環(huán)境的表達(dá)和模擬,以期望用計算機(jī)的方式來表達(dá)和模擬現(xiàn)實世界,即現(xiàn)在常說的虛擬現(xiàn)實。構(gòu)建和表達(dá)地形的方式多種多樣,可以通過使用一些工具來完成建模,如Unity Engine、UE4、Cry Engine等。三維地形的實現(xiàn)方式各有不同,從其模型構(gòu)建的本質(zhì)上可分為兩類:基于多邊形的面模型和基于體素的體模型。大多數(shù)的三維地形采用的是基于多邊形的面模型來建模,如三角形網(wǎng)格模型。對于一些簡單的地形環(huán)境,使用面模型來建模往往可以達(dá)到比較好的可視化效果,并且基于面模型的三維可視化技術(shù)比較成熟,有許多的優(yōu)化手段和解決方案,如LOD層次細(xì)節(jié)模型。面模型可視化方法在表現(xiàn)洞穴,拱橋和垂壁等復(fù)雜地形的時候,有很大的缺陷,如效率低、表現(xiàn)不好,并且難以實現(xiàn)地形體數(shù)據(jù)的表達(dá)和實時編輯,尤其在地理空間變化的模擬上(如侵蝕現(xiàn)象),表現(xiàn)效果不佳。
基于體素的體模型在地形可視化方向的應(yīng)用晚于面模型,基于其在復(fù)雜地理空間中的較好表現(xiàn)效果,和其在游戲場景中有著重要的作用,現(xiàn)在越來越多的引起人們的關(guān)注。三維游戲世界場景廣泛使用三角形網(wǎng)格模型(3D triangle mesh)構(gòu)建,包括地形、建筑、植被以及其他靜態(tài)物件。一些以自然環(huán)境為主的游戲,如大部分RPG、MOBA類型游戲,會使用到高度場(height field)去表示地形;一些室內(nèi)游戲,如FPS、TPS、ACT等,會使用構(gòu)造實體幾何(construct solid geometry,CSG)技術(shù)去構(gòu)建基本的室內(nèi)環(huán)境(也可以稱為BSP/binary space partitioning 筆刷)。以上這些制作方式各有優(yōu)缺點,面模型是合乎當(dāng)代硬件的游戲世界表示方式,也是較自由的建模方式,并有成熟的數(shù)字創(chuàng)作工具如3ds Max和Maya。面模型建模的缺點有建模成本高、只有表面表示方式,無法判斷是否在其內(nèi)部,并且不容易修改,不容易做連續(xù)或離散級數(shù)的細(xì)致程度(level of detail,LOD)等。這時隨著開放世界類型游戲的出現(xiàn),體素(voxel)開始越來越被人們所熟知。
1體素的概念和特點
Wikipedia給出Voxel的定義為“Voxel(體素,更準(zhǔn)確地說是測定體積的像素)是一個體積像素,用來表示三維空間中規(guī)則格網(wǎng)的值。類似于二維空間中用來表示二維圖像數(shù)據(jù)的像素?!泵總€體素使用一個比特來進(jìn)行存儲,表示該空間是實心還是空心,這種二元體素(Binary Voxel)雖然是最簡單的體素形式,但它還可以存儲其他屬性。例如在《我的世界》中的體素會存儲空間中的材質(zhì)(泥土、石頭、水等)。體素地形庫(DatabaseBlock)是體素管理的基本單位,所有的體素是在體素地形庫中生成。構(gòu)建地形需要的體素數(shù)據(jù)為地形的繪制、地形的AO、地形的碰撞、地表的植被、地形的修改。
2地形系統(tǒng)的構(gòu)建及改進(jìn)
2.1根據(jù)需求構(gòu)建地形系統(tǒng)
首先定義可視范圍,對可視范圍內(nèi)的地形進(jìn)行渲染,以體素地形庫(DatabaseBlock)為單位,管理地形。然后每幀查詢可視范圍內(nèi)的DatabaseBlock,如果發(fā)現(xiàn)DatabaseBlock對應(yīng)的Mesh不存在(即沒有被渲染),則從體素地形庫中獲取DatabaseBlock中對應(yīng)的體素數(shù)據(jù),根據(jù)體素數(shù)據(jù)構(gòu)建渲染模型(RenderMesh)進(jìn)行渲染,再構(gòu)建碰撞模型(CollisionMesh),用于進(jìn)行碰撞檢測,同時根據(jù)體素可以生成植被等渲染信息。當(dāng)?shù)匦螏熘械捏w素數(shù)據(jù)發(fā)生修改的時候,需要體素地形庫通知地形系統(tǒng),重新獲取體素數(shù)據(jù),進(jìn)行模型的構(gòu)建和渲染。
2.2當(dāng)前體素地形存在的問題
系統(tǒng)運(yùn)行時會出現(xiàn)運(yùn)行時卡頓,地形范圍不能太大,地形的AO不能影響地形上其他的模型(Mesh)等。
2.3出現(xiàn)的問題類型
(1)DrawCall數(shù)量太多。
由于針對每個RenderBlock進(jìn)行Mesh的提取,每個類型的體素都對應(yīng)一個或者多個不同類型的材質(zhì)(最多為6個),復(fù)雜的體素類型導(dǎo)致了超多的材質(zhì),從而使得DrawCall數(shù)量暴增。
可簡化為公式:
每個體素需要六種材質(zhì) * 體素的類型數(shù)(200)= 總共需求的材質(zhì)種類(1200)
(2)三角形數(shù)量過多。
由于體素地形的特殊性,提取mesh是按照簡單立方體表面提取算法來提取的,將導(dǎo)致有大量冗余的三角形產(chǎn)生,可以刪除冗余的三角形,簡化渲染模型。如對于大面積的水域,使用兩個三角形就可以繪制。
(3)視錐剔除效率低下。
選取DatabaseBlock為大小作為渲染Mesh的單位,單位過大。渲染采用的是外包盒的方式渲染,由于整體的包圍盒比較大,進(jìn)行視錐剔除的效率偏低。本來可以不用提交渲染的Mesh,也不能被剔除。
(4)沒有進(jìn)行遮擋剔除。
對地形系統(tǒng)中,一個很重要的優(yōu)化手段就是遮擋剔除,即被遮擋的Mesh,不應(yīng)該被提交渲染。
(5)地形上物體不會受到AO的影響。
由于計算完地形的AO值后,直接通過地形的頂點信息傳入Shader中,計算光照信息的時候只是對地形產(chǎn)生影響,不會對地形上其它的物體產(chǎn)生影響。比如NPC從洞外進(jìn)入山洞里不會變暗。
(6)植被的管理以及渲染效率低下。
由于存在大量的樹木,直接對樹木進(jìn)行渲染,將會導(dǎo)致渲染效率低下,應(yīng)該使用實例化的方式進(jìn)行渲染,并且要考慮遮擋剔除等。
(7)其它一些問題。
碰撞檢測效率不高,物理碰撞的Mesh沒有優(yōu)化,導(dǎo)致物理引擎中碰撞效率不高。頂點數(shù)據(jù)格式過大,導(dǎo)致帶寬需求變大,同時CacheMiss的概率也響應(yīng)增大。對Block線性遍歷,遍歷Block的復(fù)雜度為O(n),可以使用加速結(jié)構(gòu)提高Block的遍歷效率。
2.4針對上述問題提出的優(yōu)化方案如下
(1)減少材質(zhì)的數(shù)量,使用TextureArray,保證盡可能少的Material。
(2)使用冗余三角形的刪除算法,減少三角形的個數(shù)。
(3)使用緊湊的頂點坐標(biāo)格式,減少帶寬的依賴以及CacheMiss的概率。
(4)視錐剔除時,使得測試目標(biāo)變小,提高視錐剔除的效率。
(5)使用遮擋剔除,減少提交渲染物體的數(shù)量。
(6)使用3DTexture存儲AO值,渲染其它物體的時候,AO值參與計算。
(7)使用實例化的方式渲染樹木等靜態(tài)物體,使用二叉樹進(jìn)行管理,并使用遮擋測試進(jìn)行優(yōu)化。
(8)使用Octree管理地形,提高渲染節(jié)點的遍歷效率,并使用合并Mesh的方法進(jìn)行優(yōu)化。
(9)使用地形的LOD提高渲染的效率。
3結(jié)語
通過上述提出的優(yōu)化方案,可以有效的解決系統(tǒng)運(yùn)行卡頓,地形范圍過小以及AO影響等問題。三維模型的構(gòu)建使用傳統(tǒng)的基于多邊形的方式,在地形復(fù)雜性和靈活性的表達(dá)上,具有很大的限制;基于體素的地形制作方式,帶來了各種創(chuàng)新的方式,提高三維世界場景品質(zhì)的同時,節(jié)省了成本?,F(xiàn)在虛擬現(xiàn)實技術(shù)的成功,很大一部分來源于三維虛擬世界的高度逼真,讓人沉浸其中。而基于體素建模的應(yīng)用可以很好的滿足高品質(zhì)場景的要求。隨著體素建模技術(shù)的發(fā)展與成熟,留給我們的既是機(jī)遇也是挑戰(zhàn)。
參考文獻(xiàn)
[1]蔣秉川.基于體素模型的戰(zhàn)場環(huán)境建模與可視化研究[D].鄭州:解放軍信息工程大學(xué),2013.
[2]蔣秉川,游雄,夏青.一種基于體素的三維地形可視化方法研究[J].測繪通報,2013,(03):46-49.
[3]蔣秉川,萬剛,范承嘯,夏青.戰(zhàn)場環(huán)境體素模型適應(yīng)性分析及體要素分類方法研究[J].系統(tǒng)仿真學(xué)報,2017,29(02):241-247.
[4]Wikipedia[EB/OL].http://en.wikipedia.org/wiki/Voxel,2012.