三维模型轻量化技术

陈龙, 郭军, 张建中

(煤炭科学研究总院 矿山大数据研究院, 北京 100013)

摘要针对三维模型数据量增大时加载速度降低且浏览不流畅的问题,在分析Cesium模型格式3DTiles的基础上,提出了一种三维模型轻量化技术。将模型中的纹理图片依据材质和模型网格进行合并,实现正确纹理贴图,降低了DrawCall调用次数;将纹理和顶点进行压缩,降低了纹理图片文件大小;采用Mipmap生成不同分辨率的纹理图片,有利于网络传输;使用LOD和三角面简化技术,逐级降低模型的顶点和三角面数量;根据模型复杂程度,自适应选择八叉树深度,按需加载模型的某一部分,从而降低GPU的渲染数据量,提高三维场景流畅性。基于Cesium平台对三维模型轻量化处理前后的帧速率进行测试,结果表明,三维模型经轻量化处理后帧速率有所提高,达到了三维模型高效加载且浏览流畅的目的。

关键词煤矿空间地理信息; 三维模型; 模型轻量化; 三维渲染引擎; Cesium; 3DTiles

收稿日期:2021-02-24;修回日期:2021-04-26;责任编辑:盛男,郑海霞。

基金项目:北京市科技计划应用技术协同创新资助项目(Z201100004520015);中国煤炭科工集团有限公司科技创新创业资金专项资助项目(2019-2-ZD002)。

作者简介:陈龙(1987—),男,山西山阴人,工程师,硕士,主要从事三维地理信息系统研发工作,E-mail:chenlong@ccteg-bigdata.com。

引用格式:陈龙,郭军,张建中.三维模型轻量化技术[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技术的出现,用户无需安装任何插件就可在浏览器端直接打开三维可视化系统,提高了用户体验[1]。Cesium是一款基于WebGL技术实现的三维渲染引擎,在HTML5标准的浏览器和移动端运行[2],有详细的API文档和活跃的社区支持,可实现2D、2.5D、3D形式的地图展示。通过Cesium将煤矿空间地理信息进行可视化表达,为煤矿“一张图”、管控一体化、煤矿数字孪生等应用提供了保障[3]

随着三维模型数据量的增大,模型加载速度降低且浏览不流畅,因此需要对三维模型进行轻量化处理,但是Cesium并没有提供三维模型轻量化工具[4]。本文在分析Cesium的模型格式3DTiles的基础上,从批渲染、带宽节省和数据量降低3个方面提出了一种三维模型轻量化技术,可达到三维模型高效加载且浏览流畅的目的。

1 3DTiles格式

3DTiles是散列文件的合集,记录了模型属性数据、逻辑关系等,是一种对数据的组织方式[5]。3DTiles在glTF基础上加入了 多细节层次(Level of Detail,LOD)结构,如图1所示。

图1 3DTiles结构
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的入口文件,用来描述整个三维瓦片文件集,记录逻辑信息及其他元数据[6]。tileset.json文件中的属性content记录了瓦片文件集的相对路径,通过该属性可进行数据查找。

1.2 Tile

Tile是一个二进制的瓦片数据,包括Batched 3D Model (b3dm)、Instanced 3D Model (i3dm)、Point Cloud(pnts)、Composite(cmpt) 4种格式,可用于不同场景。

Tile文件结构如图2所示。

图2 Tile文件结构
Fig.2 Tile file structure

(1) header。header格式见表1。header占28 byte,包括7个属性数据。header主要对Tile文件进行了描述,且记录了Tile的类型、版本号、文件大小、FeatureTable的json长度、FeatureTable二进制数据长度、BatchTable的json长度、BatchTable二进制数据长度。

表1 header格式
Table 1 Format of header

名称类型长度/bytemagicunsigned char4versionuint324byteLengthuint324FeatureTableJsonByteLengthuint324FeatureTableBinaryByteLengthuint324BatchTableJsonByteLengthuint324BatchTableBinaryByteLengthuint324

(2) FeatureTable。FeatureTable记录整个瓦片渲染的相关数据,由FeatureTableJson和FeatureTableBinary组成。FeatureTableJson是元数据的角色,以json方式记录模型的个数、坐标中心等。FeatureTableBinary记录二进制本体数据。

(3) BatchTable。BatchTable记录每个模型的属性数据及扩展数据,由BatchTableJson和BatchTableBinary组成。BatchTableJson记录属性的描述信息、字节偏移长度、数据类型等。BatchTableBinary记录二进制本体数据,根据BatchTableJson记录的信息可在二进制本体数据中进行定位。

(4) glb。内嵌的glb符合glTF数据格式规范,所有的几何信息、纹理信息、可编程管线等均存储在glb中。

2 轻量化关键技术

影响三维场景渲染性能的因素有CPU、GPU和带宽。CPU性能降低的原因包括使用过多的DrawCall、复杂的脚本或物理模拟。如果GPU中使用了过多的顶点及逐顶点计算,会造成GPU资源浪费。三维模型是由几何信息、材质、贴图组成,为了减小模型文件大小,要求模型中使用的贴图尺寸不能过大,将纹理图片和几何信息进行压缩,从而可降低三维模型的文件大小,利于网络传输。

2.1 批渲染

图形渲染的原理是CPU向GPU发送渲染命令,GPU接收并执行相应的渲染命令。DrawCall是CPU通过调用DirectX或OpenGL的图形编程接口来命令GPU进行渲染操作,CPU每一次提交命令给GPU,都需要做大量工作[7]。在渲染每个不同材质的物体时,均需要调用相应的API。当DrawCall过多,CPU就会产生很多额外开销用于准备工作,花费大量时间将命令提交给GPU,造成CPU负载增加,GPU资源浪费。采用批渲染将渲染状态(如材质、贴图、可编程管线、几何信息等)一致的物体合成1个大物体,放在1个DrawCall中,在1次渲染任务中进行绘制,GPU不用多次切换渲染状态[7],提高了渲染效率。

(1) 材质共享。将模型中使用的纹理图片通过算法进行合并,重新计算并记录纹理坐标,将多张小纹理图片合并成1张大纹理图片。使用了同一张纹理图片,就可以使用同一种材质,然后使用不同的采样坐标对纹理图片采样[8],就能实现正确的纹理贴图。CPU无需多次调用图形API,在1个DrawCall中就可以加载合并后的大纹理图片。多张小纹理图片合并成1张大纹理图片的效果如图3所示。

图3 纹理图片合并
Fig.3 Texture image merge

(2) 模型网格合并。对于使用了同一种材质的纹理,它们之间仅模型的几何信息不同,如顶点、索引、法线、纹理坐标等。如果将这些数据在允许的数量范围内进行合并,将合并后的顶点缓存对象提交给GPU,就可以在1个渲染批次完成三维模型渲染。

2.2 带宽节省

影响浏览器加载三维模型速度的重要因素是带宽。对网络传输数据进行压缩,最大限度地节省带宽,提高三维视觉体验。

(1) 纹理压缩。Crunch是一个开源的压缩算法,其解压速度很快。该算法可大幅降低纹理的存储大小,降低显存及数据请求时间,压缩经过合并的纹理,将压缩后的纹理通过二进制方式写入Tile的glb中,在使用的时候进行解压,提升数据解析及加载渲染的效率。

(2) 顶点压缩。使用Draco对模型几何网格的连接信息和几何信息分别进行编码,之后进行压缩,将压缩后的信息通过二进制方式写入Tile的glb中,加载模型时,通过解析压缩信息,得到正确的模型几何信息。使用Draco压缩算法可节省约80%的存储空间[9]

(3) 多级渐远纹理(Mipmap)。因为模型数据要生成多级LOD模型,如果每一级都使用同一高精度纹理,会产生纹理浪费。对合并后的大纹理图片进行重采样,逐级生成低精度的Mipmap层级,保证在每一级使用不同精度的纹理图片,最大限度降低显卡显存占用率[10-11]。利用Mipmap将合并的纹理图片转换成不同分辨率的纹理图片,如图4所示。

图4 多级纹理图片
Fig.4 Multi-level texture image

2.3 数据量降低

GPU的渲染能力与模型的顶点数量有关,顶点数量庞大,GPU负载增加。在不影响视觉体验的情况下,减少模型的顶点数量,可减轻GPU负载压力。

(1) LOD。在三维场景中,如果相机位置较远,肉眼难以区分模型的细节部分,采用LOD技术逐级减少模型的顶点数量,从而减少GPU的渲染数据量,提高三维场景流畅性[12]。为同一个对象准备多个包含不同细节程度的模型,并将模型赋值给LOD的不同等级,将不同细节程度的模型组织好父子关系,并设置相机参考值,Cesium在加载模型时,会自动根据相机位置来判断加载哪个等级的模型[13]

(2) 三角面简化。采取边折叠算法生成连续的细节层次,该算法的优势在于移除不必要的硬边及纹理衔接,避免边界平滑和纹理分离[14]。通过对边折叠算法进行改进,可设置三角面简化的比例,在允许范围内尽量保持简化模型一致。不同三角面简化比例模型如图5所示。可看出原始模型表面光滑,具有很多细节,三角面数量较多;三角面简化50%后的模型细节有所简化;三角面简化80%后的模型三角面数量已大量减少。

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

在最大程度保持模型外观的基础上,通过逐级简化来减少顶点数量。如果模型在距离相机较远的位置,使用三角面简化80%的模型;若模型在距离相机较近的位置,使用三角面简化50%的模型;若模型在距离相机很近的位置,使用原始模型,这样可以缓解GPU压力。

(3) 数据空间结构组织。3DTiles在三维模型中支持自适应空间细分,包括kd树、四叉树、八叉树等空间数据结构。每种空间数据结构具有不同的使用场景,本文采用八叉树算法[15-16]对模型数据进行分块。根据模型复杂程度,自适应设置八叉树深度。按需加载模型的某一部分并进行渲染,从而提高场景流畅度。

3 应用效果

使用CPU I7-8750、内存为16 GB、显卡 NVIDIA GTX1060、显示器刷新率为60 Hz的电脑,基于Cesium平台对三维模型轻量化处理前后的帧速率进行测试,结果见表2。可看出三维模型轻量化后的帧速率有所提高,达到了提高加载速度、使浏览更加流畅的目的。

表2 三维模型轻量化前后帧速率对比
Table 2 Frame rate comparison before and
after 3D model lightweight

轻量化技术轻量化前帧速率/(帧·s-1)轻量化后帧速率/(帧·s-1)帧速率提高比例/%材质共享253020模型网格合并252916纹理压缩25264顶点压缩25264Mipmap253124LOD253540三角面简化252812数据空间结构组织253228

4 结语

在分析Cesium的模型格式3DTiles的基础上,提出了三维模型轻量化技术。将模型中的纹理图片依据材质和模型网格进行合并,实现正确纹理贴图,降低了DrawCall调用次数;将纹理和顶点进行压缩,降低了纹理图片文件大小;采用Mipmap生成不同分辨率的纹理图片,有利于网络传输;使用LOD和三角面简化技术,逐级降低模型的顶点和三角面数量;根据模型复杂程度,自适应选择八叉树深度,按需加载模型的某一部分,从而降低GPU的渲染数据量,提高三维场景流畅性。基于Cesium平台对三维模型轻量化处理前后的帧速率进行测试,结果表明,三维模型经轻量化处理后帧速率有所提高。

参考文献(References):

[1] 李梅,姜展,姜龙飞,等.三维可视化技术在智慧矿山领域的研究进展[J].煤炭科学技术,2021,49(2):153-162.

LI Mei,JIANG Zhan,JIANG Longfei,et al.Research progress on 3D visualization technology for intelligent mine[J].Coal Science and Technology,2021,49(2):153-162.

[2] 牛艺博.基于WebGL的地理信息三维可视化技术研究[D].兰州:兰州交通大学,2015.

NIU Yibo.Research on technologies of geographic information 3D visualization based on WebGL[D].Lanzhou:Lanzhou Jiaotong University,2015.

[3] 赵旭坤,张能,李威.基于WebGIS的矿区二三维地图联动技术研究[J].工程建设与设计,2019(4):279-280.

ZHAO Xukun,ZHANG Neng,LI Wei.Research on linkage technology of 2D and 3D map in mining area based on WebGIS[J].Construction & Design for Engineering,2019(4):279-280.

[4] 张建中.基于Web3D技术的煤矿BIM模型集成及可视化研究[J].煤炭工程,2020,52(7):161-168.

ZHANG Jianzhong.Integration and visualization of coal mine BIM model based on Web3D[J].Coal Engineering,2020,52(7):161-168.

[5] 孟天杭.基于Cesium的三维瓦片构建技术研究[J].科学技术创新,2021(1):119-121.

MENG Tianhang.Research on Cesium-based 3D tile construction technology[J].Science and Technology Innovation,2021(1):119-121.

[6] 曹浩泽.3D Tiles定义解析与生产规范设计[D].武汉:武汉大学,2018.

CAO Haoze.Analysis for 3D Tiles definition and design for production standard[D].Wuhan:Wuhan University,2018.

[7] STRING K.对DrawCall的理解[EB/OL].(2017-06-19)[2021-02-23].https://blog.csdn.net/srk19960903/article/details/73457321.

STRING K.Understanding of Drawcall[EB/OL].(2017-06-19)[2021-02-23].https://blog.csdn.net/srk19960903/article/details/73457321.

[8] 戴雪峰,熊汉江,龚健雅.一种三维城市模型多纹理自动合并方法[J].武汉大学学报(信息科学版),2015,40(3):347-352.

DAI Xuefeng,XIONG Hanjiang,GONG Jianya.A multi-texture automatic merging approach for the 3D city models[J].Geomatics and Information Science of Wuhan University,2015,40(3):347-352.

[9] 艾达,卢洪颖,杨玉蓉,等.三维点云数据压缩技术研究综述[J].西安邮电大学学报,2021,26(1):90-96.

AI Da,LU Hongying,YANG Yurong,et al.A brief overview 3D point cloud data compression technology[J].Journal of Xi'an University of Posts and Telecommunications,2021,26(1):90-96.

[10] 谢丰,姜弢.Mipmap应用于纹理绘制的新算法及实现[J].应用科技,2008(4):57-60.

XIE Feng,JIANG Tao.New algorithm and realization of Mipmap for texture rendring [J].Applied Science and Technology,2008(4):57-60.

[11] 徐莹.改进的基于MipMap算法的真实感纹理绘贴图渲染技术[J].绵阳师范学院学报,2013,32(5):67-70.

XU Ying.An improved texture rendering technique based on MipMap algorithm[J].Journal of Mianyang Normal University,2013,32(5):67-70.

[12] 王文凯,黄昆学,李梦,等.倾斜摄影测量数据轻量化处理技术研究[J].测绘通报,2020(9):123-126.

WANG Wenkai,HUANG Kunxue,LI Meng,et al.Research on lightweight processing technology for tilt photogrammetry data[J].Bulletin of Surveying and Mapping,2020(9):123-126.

[13] 熊英.基于Cesium 3D Tiles技术的模型分级加载研究[J].人民珠江,2019,40(8):117-122.

XIONG Ying.Research on models loading with LOD based on Cesium 3D Tiles[J].Pearl River,2019,40(8):117-122.

[14] 王宝.三维网格的鲁棒编码与传输[D].北京:北京工业大学,2004.

WANG Bao.Robust coding and transmission of 3D meshes[D].Beijing:Beijing University of Technology,2004.

[15] 周韶泽,李岩,张永辉,等.八叉树PagedLOD大规模三维模型可视化研究[J].大连交通大学学报,2020,41(2):33-37.

ZHOU Shaoze,LI Yan,ZHANG Yonghui,et al.Research of a large-scale 3D model visualization method based on Octree and PagedLOD[J].Journal of Dalian Jiaotong University,2020,41(2):33-37.

[16] 汪玲玲.一种插件式3DWebGIS的八叉树空间索引的研究与实现[D].淮南:安徽理工大学,2019.

WANG Lingling.Research and implementation of Octree spatial index based on plug-in 3D WebGis[D].Huainan:AnHui University of Science and Technology,2019.

3D model lightweight technology

CHEN Long, GUO Jun, ZHANG Jianzhong

(Research Institute of Mine Big Data, China Coal Research Institute, Beijing 100013, China)

Abstract:When the data volume of the 3D model increases, the model loading speed decreases and the browsing is not smooth. In order to solve the above problems, a 3D model lightweight technology based on the analysis of Cesium's model format 3DTiles is proposed. The texture images in the model are merged according to the material and the model mesh to achieve correct texture mapping and reduce the number of DrawCall calls. The texture and vertices are compressed to reduce the file size of the texture image. Mipmap is used to generate texture images of different resolutions, which is helpful for network transmission. LOD and triangle simplification technology are used to reduce the number of vertices and triangles of the model gradually. According to the complexity of the model, the depth of the octree is adaptively selected to load a certain part of the model on demand so as to reduce the amount of GPU rendering data and improve the smoothness of the 3D scene. Based on the Cesium platform, the frame rate before and after the lightweight processing of the 3D model is tested. The results show that the frame rate is increased after the lightweight processing of the 3D model, which achieves the purpose of efficient loading of the 3D model and smooth browsing.

Key words:coal mine spatial geographic information; 3D model; model lightweight; 3D rendering engine; Cesium; 3DTiles

文章编号1671-251X(2021)05-0116-05

DOI:10.13272/j.issn.1671-251x.17723

扫码移动阅读

中图分类号:TD67

文献标志码:A