随着实景三维中国建设的推进,地方层面主要需要完成城市级和地形级实景三维建设工作,如何规范地方层面“实景三维”建设的内容、程序、技术方法和成果,保证各类成果质量是当前很多地方都正在实践和探索的内容。 随着数据采集、三维数据生产加工平台及三维GIS平台技术的改进,质检与转换手段也逐步得到改进和发展,本文主要基于FME平台对实景三维单体建筑MESH模型的质检与转换进行探索。
随着实景三维中国建设的推进,地方层面主要需要完成城市级和地形级实景三维建设工作,如何规范地方层面“实景三维”建设的内容、程序、技术方法和成果,保证各类成果质量是当前很多地方都正在实践和探索的内容。
随着数据采集、三维数据生产加工平台及三维GIS平台技术的改进,质检与转换手段也逐步得到改进和发展,本文主要基于FME平台对实景三维单体建筑MESH模型的质检与转换进行探索。
1.1.1 3DS Max数据转换到FME支持的格式
本次的测试软硬件环境见下图:
图1 计算机软硬件环境
序号 |
相关软件 |
技术指标 |
1 |
数据库 |
PostgreSQL、Oracle |
2 |
操作系统 |
Windows 10 |
3 |
GIS软件 |
SuperMap iDesktopX 11i 、ArcGIS Pro 3.0.2、FME Desktop 2022.2(Build 22795)等 |
本次测试数据主要为建筑单体模型,格式为3DSMax,由于FME不能直接支持3DSmax软件的.max格式,首先需要进行格式转换。
图2 3DS Max数据截图
目前超图有3DSMax直接转换UDB的插件,可以访问进行下载。
图3 SuperMap的MAX插件
可以支持2014、2016、2018、2020多个版本的3DSMax软件,如下图:
图4 SuperMap的MAX插件安装截图
然而测试电脑装的是3DS Max软件是2021版本,为此只能通过其他办法来实现转换。
图5 本次测试的3DS MAX版本
右键可以看到3ds Max能够导出的格式,其中FME可以支持FBX、OBJ、3DS、dwg等格式。
图6 3ds Max能够导出的格式
通过百度找到了max导出其他文件的脚本配合FME的“SystemCaller”转换器器调用该脚本实现自动导出为其他格式,这种方法可以通用于任何支持该脚本的3DS MAX软件版本,且可以调用其他支持脚本的类似生产软件,脚本如下:
图7 3ds Max脚本
示例的是导出OBJ格式,如果需要导出其他格式修改第11行“using:ObjExp”为其他格式即可。
图8 FME转换模板
运行后FME会自动打开3DS Max软件,然后调用脚本自动完成逐个OBJ文件导出。
图9 自动导出OBJ文件
共测试5个max文件,共计926个单体,导出59562张贴图,共花费24分9秒,具体测试情况见下表:
序号 |
Max文件名 |
单体数量(个) |
导出贴图数量(张) |
耗费时间 |
1 |
bui01-200 |
200 |
15,991 |
5分13秒 |
2 |
bui201-400 |
200 |
11,352 |
5分10秒 |
3 |
Bui401-500 |
200 |
14,271 |
6分25秒 |
4 |
Bui501-800 |
200 |
12,733 |
5分26秒 |
5 |
Bui801-926 |
126 |
5,215 |
1分55秒 |
合计 |
926 |
59,562 |
24分9秒 |
上表时间是统计每个文件夹内文件生成时间计算的,实际FME模板运行了30分钟,部分时间是因为每次打开max文件时弹出了缺失DLL窗口,目前不知道该窗口如何通过脚本跳过(估计是需要找生产人员要DLL拷贝到对应目录),所以需要人工点击“打开”才会自动转换下一个Max文件,否则会一直等待,耽误时间,如下图:
图10 每次脚本自动打开文件时弹出的窗口
1.1.2 OBJ单体转到SuperMap和ArcGIS数据库格式
首先我们通过FME测试从OBJ到国产GIS软件SuperMap的格式转换,当然如果3DS Max版本是超图插件支持的版本,可以用于直接转换到UDB格式。
1.1.2.1 SuperMap格式
这里我们做了个自定义转换器,主要用于转换SuperMap的两种格式,分别为SuperMap Geodatabase (UDB)文件型数据库和SuperMap Geodatabase (SDX)空间数据库,并且通过自定义转换器的分组设置支持FME的并行处理(2019后FME并行处理功能进行了重制,目前测试的FME2022版本该功能也是进一步优化了),从而调用计算机多个CPU核心和进程,多进程进行同步数据处理,提高转换和数据处理效率,自定义转换器见下图:
图11 用于并行转换超图格式的自定义转换器
测试用的是单进程,且目前MYFME调用的SuperMap的API接口会占用很大内存,为此,不能一次性转换过多数据,我们通过自定义转换器设置每多少个要素一个分组进行写出,减小对于内存的占用,从而保证926个obj能够顺利写出到UDB文件中。
此外注意:超图的数据集(图层)名称不能以数字开头且不能包含”-”符号,故需要对于数字开头的图层加个字母,比如CD,“-”可以替换为“一”。而SDE基于Orcale的限制其表名也不能太长,也需要进行超长的截取。
图12 转换到超图格式的FME模板截图
FME读写ArcGIS的GDB和SDE格式,需要本机有相应ArcGIS环境和许可,这里我们FME2022是64位的软件,需要安装一个ArcGIS Pro并申请相应的试用许可,如果是ArcGIS Desktop则需要安装一个BackgroundGP插件。
图13 转换到ArcGIS格式的FME模板截图
常见的三维模型数据质量检查内容:
1)包括文件命名、要素模型命名、数据格式、数据组织方式、Max文件命名、贴图命名等;纹理贴图的尺寸及格式是否正确,纹理尺寸要求长宽值需要为2的N次幂,长宽不需相等,最大不超过2048*2048,纹理长宽比差异不宜过大,如512×32。纹理格式为TIF、JPG、TGA等。
a.对照外业照片检查立面结构及贴图:包括模型表达是否完整、正确,模型的综合与取舍是否合理等。
1.2.1 MESH模型三维相交检查
首先我们制作一个简单的重叠测试数据,原始数据如下图:
图14 原始数据
我们可以使用“Offsetter”转换器平移一段距离生成重叠的数据,如下图:
图15 制作好的重叠测试数据
1.2.2 FME实现过程
测试使用的FME2022最新版本,新版的“Clipper”转换器能够支持三维的一些裁剪操作了,模板如下:
图16 FME2022三维裁剪
带缓存的运行,9.8秒后生成了两种不同的结果,分别是直接裁剪后的mesh重叠结果,如下图:
图17 裁剪后重叠的MESH结果
也可以先将MESH转为框架线,然后裁剪的结果如下图:
图18 通过模型提取的框架线
图19 裁剪后重叠的多线结果
直接读取926个obj文件进行裁剪查重叠大约用时21分17秒。
图20 处理926个obj后的结果
为了进一步提高效率,我们可以把三维模型提取成投影面、基底面、框架线等二三维线面要素,并把相应三维信息通过blob的字段存储到属性中。
图21 原始模型和提取的框架线
图22 原始模型、投影面和基底面
投影面因为是正射投影,会比基底面MESH模型最底下的一圈大,但投影面的Z值是模型最小高度的Z值,而基底面的高程是根据底面实际节点的高程生成的。
图23 把相应三维信息通过blob的字段存储到属性中
先将所有OBJ转换到GDB二维图层,同时生成了基底面、投影面和框架线,用时约6分5秒。
图24 转换模板截图
三维相交其二维投影面肯定也相交,故我们只需要先找到二维相交的面并赋值分组ID,然后再通过GeometryReplacer还原三维图形,之后再分组裁剪查找重叠,可以发现相对于上面直接OBJ读取裁剪的效率还是快很多的,只需29秒即可完成检查。
图25 FME模板和生成的结果
最后,由于文章展示篇幅有限,其他的质检项后面再继续补充。