不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎

做了这么多年三维电子沙盘,被问得最多的一个问题是:你们为什么不用 UE 或 Unity?现成的引擎不香吗?

说实话,香。但不适合我们。

这篇文章不讲高深的图形学算法,也不贴代码,就从产品和业务视角,聊聊我们为什么要从零自研一套三维 GIS 渲染引擎,以及 AI3DGIS 3.0 这套引擎到底是怎么搭起来的。

一、先说说为什么不能直接用 UE/Unity

UE(虚幻引擎)和 Unity 是游戏行业的两大神器,画面效果拉满,生态成熟,很多三维可视化项目都基于它们做二次开发。但在我们这个领域,用商业游戏引擎有三个绕不过去的坑:

第一,授权和供应链风险。 UE 和 Unity 都是国外商业引擎,授权条款说变就变,价格说涨就涨。更关键的是,我们的客户很多要求全栈自主可控------ 操作系统要国产、CPU 要国产、渲染引擎也要国产。用国外引擎,这一条直接就过不了。

第二,GIS 能力不是游戏引擎的强项。 游戏引擎擅长的是 "精心设计的场景"------ 美术做好的模型、调好的光照、烘焙好的贴图。但 GIS 场景是 "全球级的真实世界":卫星影像、高程数据、矢量地图、倾斜摄影模型,动辄几十 GB 上百 GB,还要支持无级缩放、全球漫游。游戏引擎加载这种数据,要么卡成 PPT,要么需要做大量定制改造,改到最后还不如自己写。

第三,极端环境适配难。 我们的系统要跑在国产操作系统(麒麟、统信)、国产 GPU、各种尺寸的触控大屏上,还要支持完全离线部署。游戏引擎对这些环境的适配非常薄弱,很多底层接口根本不开放,出了问题只能等官方更新。

所以结论很简单:不是 UE/Unity 不好,而是它们解决的问题和我们要解决的问题,根本不是一回事。

二、自研引擎的整体架构:四层搭起来

AI3DGIS 3.0 的渲染引擎从零开始写,整体分了四层,每一层只干一件事:

第一层:数据层 ------ 把真实世界 "搬" 进电脑

这一层负责处理所有原始地理数据:全球卫星影像、DEM 高程数据、矢量电子地图、无人机倾斜摄影模型、BIM 建筑模型。核心工作是两件事:切片流式加载

切片就是把一张巨大的卫星影像切成很多小块,像地图 App 那样,放大看高清、缩小看缩略。流式加载就是用户看到哪里加载哪里,不需要把整个地球的数据都读进内存。这一层做好了,全球漫游才不会卡。

第二层:渲染层 ------ 把数据画到屏幕上

这是引擎的核心。基于图形 API(OpenGL/Vulkan),把数据层送来的纹理、网格、地形、模型,按照正确的空间位置画出来。包括地形渲染、影像贴图、模型绘制、光照计算、大气效果(雾、体积光、辉光)等。

我们没有用任何第三方渲染中间件,从绘制调用到着色器全部自己写。好处是完全可控,想优化哪里优化哪里;坏处是前期踩坑无数,这个后面说。

第三层:交互层 ------ 让人能 "操作" 这个数字世界

包括视角控制(平移、缩放、旋转、倾斜)、拾取(点选某个模型或坐标)、手势操作(单指平移、双指缩放旋转)、标绘交互(在三维场景里画军标、注记、路线)。

这一层看起来简单,实际上细节极多。比如在球面上画一条线,怎么保证它贴地不飘?旋转视角时标绘符号怎么保持正确朝向?这些都需要大量的空间几何计算。

第四层:应用层 ------ 把能力封装成业务功能

这一层面向具体业务场景:态势标绘、路径规划、通视分析、剖面分析、时序推演、多端协同。把底层的渲染和交互能力,组合成用户能用的功能模块。

四层之间通过明确的接口解耦,底层改了不影响上层,上层加功能也不用动底层。这是我们踩了很多坑之后才定下来的架构。

三、自研路上踩过的三个大坑

说几个印象最深的,不懂技术也能看懂的那种。

坑一:全球级地形渲染,一放大就糊。

早期版本,缩小看全球还行,一放大到城市级,地形就变成了 "乐高方块",锯齿严重。原因是高程数据的精度和纹理分辨率不匹配。后来我们做了多 LOD(细节层次)调度------ 远的地方用低精度,近的地方自动切换高精度,再加上地形平滑算法,才解决这个问题。现在从全球视角放大到某一栋楼,全程流畅不糊。

坑二:倾斜摄影模型太大,加载慢到崩溃。

一个城市的倾斜摄影模型动辄几十 GB,直接加载内存直接爆。我们的方案是做了模型轻量化 + 动态卸载:把原始模型转换成流式格式,边看边加载;离开视野的模型自动卸载释放内存。优化完,同样的硬件,原来加载一个区都卡,现在加载整个城市还能保持流畅。

坑三:国产 GPU 适配,画面全是黑的。

第一次把引擎移植到国产 GPU 上,运行起来一片漆黑,排查了一周才发现是某个着色器语法的兼容性问题。国产 GPU 的驱动和主流显卡有差异,很多 "标准" 写法在上面不工作。后来我们建立了一套跨平台适配层,把不同 GPU 的差异封装在底层,上层代码不用改。现在麒麟 + 统信 + 国产 GPU 的组合,引擎可以稳定运行。

四、自研引擎带来了什么?

三年自研,最大的收获不是 "我们有了一个引擎",而是三个实实在在的能力:

第一,完全自主可控。 从底层渲染到上层应用,每一行代码都是自己的,不依赖任何国外商业引擎。客户问 "你们核心技术是不是自己的",我们可以很肯定地说是。这在很多领域是准入门槛。

第二,极致的性能优化空间。 因为底层完全可控,我们可以针对 GIS 场景做深度优化。比如全球漫游的帧率、大数据量加载速度、内存占用,这些都可以一点点抠。AI3DGIS 3.0 在普通办公电脑上加载全球三维场景,能稳定在 60 帧。

第三,灵活的定制能力。 客户要加一个特殊的分析功能、要适配一种特殊的硬件、要对接一套特殊的数据格式,因为引擎是自己的,改起来很快。如果用 UE/Unity,很多需求根本做不了,或者成本极高。

五、写在最后

从零自研渲染引擎,不是一条容易走的路。前期投入大、踩坑多、见效慢,很多团队走到一半就放弃了,转而用 UE/Unity 做快速开发。

但我们坚持下来了,因为我们相信:在专业领域,核心技术必须攥在自己手里。 别人的引擎再好,也是别人的;授权说收回就收回,生态说封闭就封闭。只有自己的引擎,才能跟着客户的需求一起成长,才能在国产化的大趋势下站得住脚。

AI3DGIS 3.0 不是终点,我们还在持续迭代。下一步是把 AI 能力更深地融入渲染引擎 ------ 让三维场景不只是 "看得见",还能 "看得懂" 和 "算得准"。

这条路很长,但方向是对的。

相关推荐
十三画者1 小时前
【文献分享】ConfRetro:融合3D构象信息的逆合成预测Transformer框架
人工智能·深度学习·数据挖掘·数据分析·transformer·数据可视化
zandy10111 小时前
AI办公工具选哪个?千问办公、百度搭子、WorkBuddy三款高阶智能体深度拆解
人工智能·ai办公工具
mengpp_1234561 小时前
AIoT平台 vs 普通IoT平台 核心区别
人工智能
canonical_entropy1 小时前
可逆不是逆向运行:DeepSeek Harness 架构的数学本质
人工智能·架构·agent
别动我齐刘海2 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
冬奇Lab3 小时前
Code Agent 解剖(05):模型怎么知道有哪些工具可以用?Function Calling 如何实现?
人工智能·开源·agent
ZGIAI3 小时前
ZGI Workflow:让知识检索进入业务流程
人工智能·架构
ZGIAI3 小时前
ZGI 模型网关:统一接入与路由大模型
人工智能·架构
冬奇Lab3 小时前
开源项目第193期:Semantica — 开源版 Palantir for AI Agent,知识图谱 + 确定性推理 + W3C 溯源,让 AI 决策可追溯、可审计、可合规
人工智能·开源·资讯