国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

三維模型輕量化技術(shù)

2021-06-02 09:55:42陳龍郭軍張建中
工礦自動化 2021年5期
關(guān)鍵詞:二進(jìn)制輕量化頂點

陳龍, 郭軍, 張建中

(煤炭科學(xué)研究總院 礦山大數(shù)據(jù)研究院, 北京 100013)

收稿日期:2021-02-24;修回日期:2021-04-26;責(zé)任編輯:盛男,鄭海霞。

基金項目:北京市科技計劃應(yīng)用技術(shù)協(xié)同創(chuàng)新資助項目(Z201100004520015);中國煤炭科工集團(tuán)有限公司科技創(chuàng)新創(chuàng)業(yè)資金專項資助項目(2019-2-ZD002)。

作者簡介:陳龍(1987—),男,山西山陰人,工程師,碩士,主要從事三維地理信息系統(tǒng)研發(fā)工作,E-mail:chenlong@ccteg-bigdata.com。

引用格式:陳龍,郭軍,張建中.三維模型輕量化技術(shù)[J].工礦自動化,2021,47(5):116-120.

CHEN Long,GUO Jun,ZHANG Jianzhong.3D model lightweight technology[J].Industry and Mine Automation,2021,47(5):116-120.

0 引言

隨著WebGL技術(shù)的出現(xiàn),用戶無需安裝任何插件就可在瀏覽器端直接打開三維可視化系統(tǒng),提高了用戶體驗[1]。Cesium是一款基于WebGL技術(shù)實現(xiàn)的三維渲染引擎,在HTML5標(biāo)準(zhǔn)的瀏覽器和移動端運(yùn)行[2],有詳細(xì)的API文檔和活躍的社區(qū)支持,可實現(xiàn)2D、2.5D、3D形式的地圖展示。通過Cesium將煤礦空間地理信息進(jìn)行可視化表達(dá),為煤礦“一張圖”、管控一體化、煤礦數(shù)字孿生等應(yīng)用提供了保障[3]。

隨著三維模型數(shù)據(jù)量的增大,模型加載速度降低且瀏覽不流暢,因此需要對三維模型進(jìn)行輕量化處理,但是Cesium并沒有提供三維模型輕量化工具[4]。本文在分析Cesium的模型格式3DTiles的基礎(chǔ)上,從批渲染、帶寬節(jié)省和數(shù)據(jù)量降低3個方面提出了一種三維模型輕量化技術(shù),可達(dá)到三維模型高效加載且瀏覽流暢的目的。

1 3DTiles格式

3DTiles是散列文件的合集,記錄了模型屬性數(shù)據(jù)、邏輯關(guān)系等,是一種對數(shù)據(jù)的組織方式[5]。3DTiles在glTF基礎(chǔ)上加入了 多細(xì)節(jié)層次(Level of Detail,LOD)結(jié)構(gòu),如圖1所示。

圖1 3DTiles結(jié)構(gòu)Fig.1 3DTile structure

3DTiles包括tileset.json文件和Data文件。Data文件里面包括多個三維瓦片文件集Tile_0_0,Tile_0_1,…,每個瓦片文件集包括1個json文件和Tiles,Tiles里面包含多個Tile文件。

1.1 tileset.json

tileset.json文件是3DTiles的入口文件,用來描述整個三維瓦片文件集,記錄邏輯信息及其他元數(shù)據(jù)[6]。tileset.json文件中的屬性content記錄了瓦片文件集的相對路徑,通過該屬性可進(jìn)行數(shù)據(jù)查找。

1.2 Tile

Tile是一個二進(jìn)制的瓦片數(shù)據(jù),包括Batched 3D Model (b3dm)、Instanced 3D Model (i3dm)、Point Cloud(pnts)、Composite(cmpt) 4種格式,可用于不同場景。

Tile文件結(jié)構(gòu)如圖2所示。

圖2 Tile文件結(jié)構(gòu)Fig.2 Tile file structure

(1) header。header格式見表1。header占28 byte,包括7個屬性數(shù)據(jù)。header主要對Tile文件進(jìn)行了描述,且記錄了Tile的類型、版本號、文件大小、FeatureTable的json長度、FeatureTable二進(jìn)制數(shù)據(jù)長度、BatchTable的json長度、BatchTable二進(jìn)制數(shù)據(jù)長度。

表1 header格式Table 1 Format of header

(2) FeatureTable。FeatureTable記錄整個瓦片渲染的相關(guān)數(shù)據(jù),由FeatureTableJson和FeatureTableBinary組成。FeatureTableJson是元數(shù)據(jù)的角色,以json方式記錄模型的個數(shù)、坐標(biāo)中心等。FeatureTableBinary記錄二進(jìn)制本體數(shù)據(jù)。

(3) BatchTable。BatchTable記錄每個模型的屬性數(shù)據(jù)及擴(kuò)展數(shù)據(jù),由BatchTableJson和BatchTableBinary組成。BatchTableJson記錄屬性的描述信息、字節(jié)偏移長度、數(shù)據(jù)類型等。BatchTableBinary記錄二進(jìn)制本體數(shù)據(jù),根據(jù)BatchTableJson記錄的信息可在二進(jìn)制本體數(shù)據(jù)中進(jìn)行定位。

(4) glb。內(nèi)嵌的glb符合glTF數(shù)據(jù)格式規(guī)范,所有的幾何信息、紋理信息、可編程管線等均存儲在glb中。

2 輕量化關(guān)鍵技術(shù)

影響三維場景渲染性能的因素有CPU、GPU和帶寬。CPU性能降低的原因包括使用過多的DrawCall、復(fù)雜的腳本或物理模擬。如果GPU中使用了過多的頂點及逐頂點計算,會造成GPU資源浪費(fèi)。三維模型是由幾何信息、材質(zhì)、貼圖組成,為了減小模型文件大小,要求模型中使用的貼圖尺寸不能過大,將紋理圖片和幾何信息進(jìn)行壓縮,從而可降低三維模型的文件大小,利于網(wǎng)絡(luò)傳輸。

2.1 批渲染

圖形渲染的原理是CPU向GPU發(fā)送渲染命令,GPU接收并執(zhí)行相應(yīng)的渲染命令。DrawCall是CPU通過調(diào)用DirectX或OpenGL的圖形編程接口來命令GPU進(jìn)行渲染操作,CPU每一次提交命令給GPU,都需要做大量工作[7]。在渲染每個不同材質(zhì)的物體時,均需要調(diào)用相應(yīng)的API。當(dāng)DrawCall過多,CPU就會產(chǎn)生很多額外開銷用于準(zhǔn)備工作,花費(fèi)大量時間將命令提交給GPU,造成CPU負(fù)載增加,GPU資源浪費(fèi)。采用批渲染將渲染狀態(tài)(如材質(zhì)、貼圖、可編程管線、幾何信息等)一致的物體合成1個大物體,放在1個DrawCall中,在1次渲染任務(wù)中進(jìn)行繪制,GPU不用多次切換渲染狀態(tài)[7],提高了渲染效率。

(1) 材質(zhì)共享。將模型中使用的紋理圖片通過算法進(jìn)行合并,重新計算并記錄紋理坐標(biāo),將多張小紋理圖片合并成1張大紋理圖片。使用了同一張紋理圖片,就可以使用同一種材質(zhì),然后使用不同的采樣坐標(biāo)對紋理圖片采樣[8],就能實現(xiàn)正確的紋理貼圖。CPU無需多次調(diào)用圖形API,在1個DrawCall中就可以加載合并后的大紋理圖片。多張小紋理圖片合并成1張大紋理圖片的效果如圖3所示。

圖3 紋理圖片合并Fig.3 Texture image merge

(2) 模型網(wǎng)格合并。對于使用了同一種材質(zhì)的紋理,它們之間僅模型的幾何信息不同,如頂點、索引、法線、紋理坐標(biāo)等。如果將這些數(shù)據(jù)在允許的數(shù)量范圍內(nèi)進(jìn)行合并,將合并后的頂點緩存對象提交給GPU,就可以在1個渲染批次完成三維模型渲染。

2.2 帶寬節(jié)省

影響瀏覽器加載三維模型速度的重要因素是帶寬。對網(wǎng)絡(luò)傳輸數(shù)據(jù)進(jìn)行壓縮,最大限度地節(jié)省帶寬,提高三維視覺體驗。

(1) 紋理壓縮。Crunch是一個開源的壓縮算法,其解壓速度很快。該算法可大幅降低紋理的存儲大小,降低顯存及數(shù)據(jù)請求時間,壓縮經(jīng)過合并的紋理,將壓縮后的紋理通過二進(jìn)制方式寫入Tile的glb中,在使用的時候進(jìn)行解壓,提升數(shù)據(jù)解析及加載渲染的效率。

(2) 頂點壓縮。使用Draco對模型幾何網(wǎng)格的連接信息和幾何信息分別進(jìn)行編碼,之后進(jìn)行壓縮,將壓縮后的信息通過二進(jìn)制方式寫入Tile的glb中,加載模型時,通過解析壓縮信息,得到正確的模型幾何信息。使用Draco壓縮算法可節(jié)省約80%的存儲空間[9]。

(3) 多級漸遠(yuǎn)紋理(Mipmap)。因為模型數(shù)據(jù)要生成多級LOD模型,如果每一級都使用同一高精度紋理,會產(chǎn)生紋理浪費(fèi)。對合并后的大紋理圖片進(jìn)行重采樣,逐級生成低精度的Mipmap層級,保證在每一級使用不同精度的紋理圖片,最大限度降低顯卡顯存占用率[10-11]。利用Mipmap將合并的紋理圖片轉(zhuǎn)換成不同分辨率的紋理圖片,如圖4所示。

圖4 多級紋理圖片F(xiàn)ig.4 Multi-level texture image

2.3 數(shù)據(jù)量降低

GPU的渲染能力與模型的頂點數(shù)量有關(guān),頂點數(shù)量龐大,GPU負(fù)載增加。在不影響視覺體驗的情況下,減少模型的頂點數(shù)量,可減輕GPU負(fù)載壓力。

(1) LOD。在三維場景中,如果相機(jī)位置較遠(yuǎn),肉眼難以區(qū)分模型的細(xì)節(jié)部分,采用LOD技術(shù)逐級減少模型的頂點數(shù)量,從而減少GPU的渲染數(shù)據(jù)量,提高三維場景流暢性[12]。為同一個對象準(zhǔn)備多個包含不同細(xì)節(jié)程度的模型,并將模型賦值給LOD的不同等級,將不同細(xì)節(jié)程度的模型組織好父子關(guān)系,并設(shè)置相機(jī)參考值,Cesium在加載模型時,會自動根據(jù)相機(jī)位置來判斷加載哪個等級的模型[13]。

(2) 三角面簡化。采取邊折疊算法生成連續(xù)的細(xì)節(jié)層次,該算法的優(yōu)勢在于移除不必要的硬邊及紋理銜接,避免邊界平滑和紋理分離[14]。通過對邊折疊算法進(jìn)行改進(jìn),可設(shè)置三角面簡化的比例,在允許范圍內(nèi)盡量保持簡化模型一致。不同三角面簡化比例模型如圖5所示。可看出原始模型表面光滑,具有很多細(xì)節(jié),三角面數(shù)量較多;三角面簡化50%后的模型細(xì)節(jié)有所簡化;三角面簡化80%后的模型三角面數(shù)量已大量減少。

圖5 不同三角面簡化比例模型Fig.5 Simplified scale model of different triangles

在最大程度保持模型外觀的基礎(chǔ)上,通過逐級簡化來減少頂點數(shù)量。如果模型在距離相機(jī)較遠(yuǎn)的位置,使用三角面簡化80%的模型;若模型在距離相機(jī)較近的位置,使用三角面簡化50%的模型;若模型在距離相機(jī)很近的位置,使用原始模型,這樣可以緩解GPU壓力。

(3) 數(shù)據(jù)空間結(jié)構(gòu)組織。3DTiles在三維模型中支持自適應(yīng)空間細(xì)分,包括kd樹、四叉樹、八叉樹等空間數(shù)據(jù)結(jié)構(gòu)。每種空間數(shù)據(jù)結(jié)構(gòu)具有不同的使用場景,本文采用八叉樹算法[15-16]對模型數(shù)據(jù)進(jìn)行分塊。根據(jù)模型復(fù)雜程度,自適應(yīng)設(shè)置八叉樹深度。按需加載模型的某一部分并進(jìn)行渲染,從而提高場景流暢度。

3 應(yīng)用效果

使用CPU I7-8750、內(nèi)存為16 GB、顯卡 NVIDIA GTX1060、顯示器刷新率為60 Hz的電腦,基于Cesium平臺對三維模型輕量化處理前后的幀速率進(jìn)行測試,結(jié)果見表2??煽闯鋈S模型輕量化后的幀速率有所提高,達(dá)到了提高加載速度、使瀏覽更加流暢的目的。

表2 三維模型輕量化前后幀速率對比Table 2 Frame rate comparison before and after 3D model lightweight

4 結(jié)語

在分析Cesium的模型格式3DTiles的基礎(chǔ)上,提出了三維模型輕量化技術(shù)。將模型中的紋理圖片依據(jù)材質(zhì)和模型網(wǎng)格進(jìn)行合并,實現(xiàn)正確紋理貼圖,降低了DrawCall調(diào)用次數(shù);將紋理和頂點進(jìn)行壓縮,降低了紋理圖片文件大??;采用Mipmap生成不同分辨率的紋理圖片,有利于網(wǎng)絡(luò)傳輸;使用LOD和三角面簡化技術(shù),逐級降低模型的頂點和三角面數(shù)量;根據(jù)模型復(fù)雜程度,自適應(yīng)選擇八叉樹深度,按需加載模型的某一部分,從而降低GPU的渲染數(shù)據(jù)量,提高三維場景流暢性?;贑esium平臺對三維模型輕量化處理前后的幀速率進(jìn)行測試,結(jié)果表明,三維模型經(jīng)輕量化處理后幀速率有所提高。

猜你喜歡
二進(jìn)制輕量化頂點
汽車輕量化集成制造專題主編
過非等腰銳角三角形頂點和垂心的圓的性質(zhì)及應(yīng)用(下)
用二進(jìn)制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
有趣的進(jìn)度
二進(jìn)制在競賽題中的應(yīng)用
一種輕量化自卸半掛車結(jié)構(gòu)設(shè)計
智富時代(2019年2期)2019-04-18 07:44:42
關(guān)于頂點染色的一個猜想
瞄準(zhǔn)掛車輕量化 鑼響掛車正式掛牌成立
專用汽車(2016年1期)2016-03-01 04:13:19
用戶:輕量化掛車的使用體驗
專用汽車(2015年4期)2015-03-01 04:09:07
一個生成組合的新算法
文昌市| 武汉市| 常德市| 商河县| 彭水| 乐山市| 巩义市| 清水河县| 久治县| 宜阳县| 扎鲁特旗| 平果县| 娱乐| 建宁县| 通城县| 山阳县| 通化市| 曲沃县| 绩溪县| 泸溪县| 喜德县| 安岳县| 始兴县| 鄱阳县| 涡阳县| 正定县| 哈巴河县| 武穴市| 阿鲁科尔沁旗| 绥芬河市| 马鞍山市| 澳门| 石门县| 册亨县| 万安县| 格尔木市| 启东市| 犍为县| 紫金县| 蒲江县| 兴文县|