目前针对三维场景可视化主要使用 Cesium 开源库,Cesium 主要是支持两种类型三维数据,3D Tiles 和 gltf。
在项目中往往涉及倾斜摄影模型和人工模型(3dsMax精细建模)两种。
针对 倾斜摄影数据 的处理可视化技术比较成熟 ,支持 TB 级的三维场景加载显示;
针对 人工模型数据 往往是转换为 glTF 或者 glb ,在数据量比较小(200MB 以内)时可视化效率还可以,数据量比较大的时候就不行了,所以就考虑在数据量较大时,将 3dsMax 三维模型转化为 3D Tiles 。
本文针对大数据量的 3dsMax 模型介绍 三种 的处理思路。
思路一、从根源解决三维模型的数据量
大数据量的三维模型往往是由较小的三维模型合并而成的。
可以考虑将数据量较大的模型分割为较小的三维模型,或者不合并场景,
然后转化为 glTF 、glb 或者 3D Tiles 后,分别处理可视化。
这种思路实质上并没有建立 LOD ,只是对 Cesium 的一种妥协。
下面介绍三种方法转化为 单文件 的 3D Tiles :
方法(1)优先考虑使用最新版的 FME 转换,转换之后也都是单个文件。
方法(2)使用 KhronosGroup 开源工具
这种方法包括两步,后面也会用到。
第一步、处理 3dsMax 模型,使用 OpenCOLLADA 插件,生成 COLLADA(.dae)格式。
OpenCOLLADA 插件的源码地址是 https://github.com/KhronosGroup/OpenCOLLADA
OpenCOLLADA 插件的下载地址是 https://github.com/KhronosGroup/OpenCOLLADA/releases
该插件支持 3dsMax / Maya 2011 一样版本,支持 Windows 、 Mac 以及 Ubuntu 操作系统。
具体步骤:下载对应版本的插件,安装,然后导出到 *OpenCOLLADA(.DAE)** 格式。
第二步、使用 COLLADA2GLTF 转换工具,将 COLLADA 模型转化为 glTF 模型
COLLADA2GLTF 插件的源码地址是 https://github.com/KhronosGroup/COLLADA2GLTF
COLLADA2GLTF 插件的下载地址是 https://github.com/KhronosGroup/COLLADA2GLTF/releases
该插件支持 glTF 、glb 格式转换,可以运行在 Windows 、Linux 操作系统
具体步骤:下载对应操作系统的工具,解压,然后在工具根目录,运行命令行工具。
命令格式:
COLLADA2GLTF-bin[.exe] [input] [output] [options]
常用参数:
-i 表示输入的 COLLADA 文件
-o 表示输出的 gltf 文件
-b 表示输出 glb 文件
命令示例:
.\COLLADA2GLTF-bin.exe -i G:\wshunli\way\dae\y24.DAE -o G:\wshunli\way\dae\gltf\y24.gltf
方法(3)也可以使用开源工具,直接将 obj 模型转化为 glTF 格式:
可以使用一些开源的工具,尝试了下并不能保证成功率。
下面列举两个:
OBJ2GLTF 工具 https://github.com/AnalyticalGraphicsInc/obj2gltf
objTo3d-tiles 工具 https://github.com/PrincessGod/objTo3d-tiles
该工具同样支持 glTF 、glb 格式转换,因为不是官方工具,不推荐使用。
思路二、使用 SuperMap 平台处理
商业平台技术比较成熟,三维空间分析支持较好。
但是三维场景需要 必须 以 s3m 或者 osgb 格式生成三位缓存,发布为 iServer 服务。
- osgb 格式缓存和 倾斜摄影的 osgb 有点不太一样,尝试转化为 3D Tiles 失败。
- s3m 是超图自己的三维切片缓存格式。
首先使用 SuperMap Max Plugin 插件,将 Max 文件 导入 SuperMap 数据集
该插件仅支持 3dsMax 2010、2012 版本,2014 支持不好。
插件使用可参考文档:基于SuperMap8C(2017)将Max文件制作三维场景
https://pan.baidu.com/s/1dFOkElV
然后在 SuperMap iDesktop 中生成三维缓存。
最后在 iServer 中发布为三维场景服务即可。
该方法是效率比较高的方法,对模型空间位置、姿态的控制也比较精确。
思路三、将大数据量 3dsMax 模型直接转换为 3D Tiles
这种方法推荐先处理 3dsMax 模型,生成 COLLADA(.dae)格式,步骤思路一中有介绍。
主要使用 OpenCOLLADA 插件,注意材质贴图路径。
然后使用 Cesiumlab 工具集,Cesiumlab 是一款专为 Cesium 开源数字地球平台打造的免费数据处理工具集。
目前包含 地形数据处理、影像数据处理、点云数据处理、数据下载、建筑物矢量面处理、倾斜数据处理、三维场景处理等工具。
工具是免费的,但是需要登陆,在模型姿态控制方面不是很精准,索引效率还是不够高,注意输入模型绝对位置。
毕竟是别人的工具,使用起来还是不够放心,下面先记录转换思路后面有时间再实现。
OBJ,3DS 等常用格式数据 LOD 拆分生成 3D Tiles 数据解决思路
1、将原模型通过网格划分拆分为多个模型,拆分难点:单个纹理拆分多个纹理,纹理重组,UV 坐标重新计算。
通过模型的面信息获取每个面用的纹理,抽取所有纹理后,对纹理重新组合成一个新的图片,组合采用二叉树遍历合理利用空间,根据原图的 UV 坐标计算新的 UV 坐标。存储一个新的网格模型。
2、对网格模型进行 LOD 数据处理,处理方式为四叉树原则。主要对步骤 1 处理的模型进行分级,减面和模型四叉树拆分。
3、对每一级得出的数据生成对应的 b3dm 格式的模型数据。
4、将所有模型数据文件遍历生成 tileset.json 文件。
5、用 Cesium Git 项目的分支 3d-tile 检验数据的正确性。
总结结论
3D Tiles 和 glTF 的区别其实不大,其中主要文件 b3dm = glTF(三维模型) + featuretable(属性):
最终本质问题是解决 glTF 模型的组织问题。
参考资料
1、3dMax模型数据转cesium Gltf模型 - CSDN博客
https://blog.csdn.net/u011394175/article/details/78919281
2、Cesium中导入三维模型方法(dae到glft/bgltf) - CSDN博客
https://blog.csdn.net/l491453302/article/details/46766909
评论 (0)