1. 项目概述:在Unreal里做横断面分析,到底卡在哪
先直说结论:SuperMap Hi-Fi 3D SDK for Unreal 这套东西,本质是把SuperMap成熟的三维GIS能力搬进Unreal引擎,让游戏引擎里能跑真GIS数据——不是单纯看个模型,而是能做量算、分析、空间查询这些活儿。但横断面分析这个功能,第一眼在SDK的文档和Demo里找起来并不直观,很多人打开插件面板后经常一脸懵,因为Unreal的交互逻辑和SuperMap传统的桌面端差别很大。
我做这个项目时第一反应也是:横断面分析在桌面GIS里是个基础功能,画条线、切个剖面、导出断面图,几个点击完事。但放到Unreal里,事情变得有意思了——你需要面对的是实时的三维场景、动态加载的切片缓存、还有Unreal的坐标系统和SuperMap的空间参考系之间的换算。整个过程跑通之后,我最直观的感受是:这个功能的价值不在于“能切一刀看剖面”,而在于让规划设计、道路选线、管线工程这些场景能在实景三维环境里直接做决策。
这篇博文适合谁看?如果你手头正好有SuperMap iDesktop制作的三维场景数据,想把它接进Unreal项目里做横断面分析或者类似的剖面工具,那这篇可以直接照着操作。如果你只是听说过S3M格式、想了解SuperMap和Unreal的协作方式,也可以当一篇踩坑记录来读——里面有不少调试思路和数据结构层面的理解,比单纯看官方文档要实在得多。
项目最终我跑通的形态是这样的:在Unreal中加载SuperMap发布的三维切片图层(包括倾斜摄影模型、地形、影像),通过Hi-Fi 3D SDK插件激活横断面分析工具,在场景里绘制一条剖面线,系统基于地形和模型表面高程自动生成剖面曲线和断面数据,并支持导出或进一步量算。整个过程涉及数据制作、SDK接入、交互设计、性能和精度调优四条线,我一条一条拆开讲。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 方案选型:为什么横断面分析必须走“切片+服务”这条路
2.1 先在桌面端把数据做好,还是直接在Unreal里加载原始数据?
很多人第一次尝试时会有一个天真的想法:既然Hi-Fi 3D SDK支持加载多种数据源,那直接在Unreal里丢一个TIF地形或者OSGB倾斜摄影模型进去,然后用SDK的分析功能去切,不就行了?
实测下来这个想法会让你卡很久。问题出在两个层面:性能和数据结构。
先说性能。Unreal对大规模三维GIS数据的直接加载能力非常有限,尤其是倾斜摄影模型,动不动就是几十GB的OSGB文件,直接拖进Unreal,即使是高性能工作站也会在场景刷新时出现明显掉帧。而SuperMap的三维切片缓存(S3M格式)是将数据按LOD分层、按空间分块组织好的,GPU友好度高得多。横断面分析需要在地形和模型表面实时提取高程信息,如果数据本身没有按空间索引组织好,每次提取都要从海量三角形里暴力查找,卡顿是必然的。
再说数据结构。SuperMap的三维切片缓存保留了属性信息和空间拓扑关系,横断面分析需要的“地表高程”“模型表面高程”“交点在空间中的精确位置”这些信息都有对应的数据结构支撑。而原始的OSGB、TIF这些格式,本质上只是几何+纹理,没有分析层面的语义组织,SDK拿到手也没法直接做横断面。
所以方案选型的结论是:数据必须先在SuperMap iDesktop里预处理,生成三维切片缓存,再在Unreal里通过Hi-Fi 3D SDK加载。这个流程不能跳步,后面我会把每一步写清楚。
2.2 为什么必须用iDesktop预处理生成S3M,而不是用Unreal现有地形系统
还有一个很容易被忽略的点:Unreal自带的地形系统(Landscape)确实能做地形编辑和材质渲染,但它是为游戏场景设计的,坐标精度、数据精度、坐标参考系都跟GIS不搭。SuperMap的数据用的是地理坐标系(经纬度)或投影坐标系(平面坐标),Unreal用的是以厘米为单位的局部坐标系,两者之间相差一个巨大的转换量。
如果你试图把GIS数据直接导成Unreal的Landscape,会遇到两个问题。第一是精度损失。GIS数据边界范围大,动辄几公里到几十公里,而Unreal的浮点精度在距离
