Cesium的新武器!Reality Tiler V2的发布,让三维瓦片的构建性能迈上一个新台阶!

大家好,我是日拱一卒的攻城师不浪,致力于技术与艺术的融合。这是2025年输出的第1/100篇文章。

前言

去年给自己定的100篇的目标,但最终只完成了一半,大多都是Cesium相关。

2025年,我的目标依旧是100篇,不过今年我一定会完成这个目标,而且文章涉及的领域也会更多,包含但不限于Cesium三维可视化AI人工智能等领域。

虽然大家都知道现在外边大环境不好,但作为普通人,我们不能跟着大环境一起颓废,越是在低谷期,越是机会更多的时期,有一个词:厚积薄发,所以当机会来临的时候,我们才能够有足够的底气去把握住!

所以请还未关注我的小伙伴们快来关注我吧,2025让我们一路前行!

好了,鸡汤喝完了,让我们言归正传。

简介

2023 年 11 月的时候,Cesium官方发布了Reality Tiler ,它取代了当时的摄影测量瓦片工具,成为Cesium ion和自托管产品中包含的3D瓦片的一部分。

官方构建Reality Tiler时,强调了可扩展性瓦片性能运行时效率。今天,我们深入探讨于2024年7月发布的Reality Tiler v2

我们将介绍Reality Tiler的完整重构,从头开始重建瓦片管道,带来了瓦片时间、瓦片质量和运行时性能的显著提升。我们将仔细研究内存和运行时性能指标,最后讨论进一步改进和下一步的优化。

在深入探讨之前,请注意Reality Tiler 主要用于摄影测量模型或从LiDAR扫描重建的模型,可能规模巨大。这些模型通常由显式几何(例如三角网格)和颜色纹理信息组成。

为什么要重构?

Reality Tiler的第一个版本通过对整个输入模型进行迭代简化和细分来操作。

尽管瓦片器使用了外核技术以确保我们不会耗尽内存,但它有两个缺点。

首先,数据访问模式不连贯。在生成瓦片或简化模型时,所需的一系列操作的数据未合并到连续的内存块中,导致频繁的缓存未命中,并需要在磁盘和RAM之间进行不必要的分页。这些类型的访问模式可能会显著减慢处理速度。

这种方法的第二个缺点是它在整个过程中创建了固定数量细节层次(LODs)。对于相对均匀的模型,这是一个合理的方法,但有些模型并不均匀。实际上,许多模型具有高细节区域和低细节区域。

例如,模型的某些部分可能具有比其他部分高得多的三角形密度或使用更高分辨率的纹理。固定数量的LOD可能会创建不平衡的瓦片集,其中一些瓦片包含过多信息,而其他瓦片包含过少信息。在运行时,这会转化为不一致的性能:过多的大瓦片会导致帧率降低,过多的小瓦片可能导致过多的网络请求和缓慢的流式传输。

从全局到局部

我们考虑了几种策略来解决Reality Tiler v1的缺点,但最终决定彻底颠覆整个过程。

我们不再采用全局方法(即在生成瓦片和执行简化时对整个模型进行操作),而是采用局部方法,一次只处理模型的一部分。

更具体地说,Reality Tiler v2将模型拆分为叶子瓦片,并通过迭代合并和简化瓦片来构建瓦片集,直到只剩下一个根瓦片。

由于各个瓦片相对较小且在内存中大多是连续的,数据访问更加连贯,因此整体过程显著加快。

使用Reality Tiler v2时,我们确保每个叶子瓦片的大小大致相同(就几何和纹理内容而言,而非世界空间中的范围)。

这意味着,对于具有密集几何或纹理数据的输入模型的某些部分,可能会进行更深的瓦片,而树上更高的瓦片大小大致相同。

结果

通过转向这种新的局部瓦片方法,我们在瓦片性能和内存使用方面看到了显著的改进。以下是几个数据集的结果。(所有测试均在具有256GB RAM、64核CPU和4TB NVMe驱动器的机器上运行。)

Reality Tiler 瓦片时间比较

数据集 三角形数量(百万) 之前的瓦片时间(时:分:秒) 新的瓦片时间(时:分:秒) 瓦片时间减少百分比
Carrick Hill(澳大利亚) 3.3 0:02:37 0:01:11 55%
利物浦(英国) 7.8 0:08:48 0:02:54 67%
布达佩斯(匈牙利) 43.1 0:59:05 0:14:08 76%
墨尔本(澳大利亚) 69.9 3:22:41 0:27:58 86%

Reality Tiler 内存使用比较

数据集 三角形数量(百万) 之前的峰值内存(GB) 新的峰值内存(GB)
Carrick Hill(澳大利亚) 3.3 9.5 3.5
利物浦(英国) 7.8 14.1 4.2
布达佩斯(匈牙利) 43.1 36.8 13.8
墨尔本(澳大利亚) 69.9 54.2 18.5

可以看到,Reality Tiler v2 瓦片时间全面缩短,比 Reality Tiler v1 快约 2-7 倍。

一般来说,输入越大,加速比越大。内存需求趋势也有类似的增长,最大的数据集的峰值内存使用量减少幅度最大(对于较小的数据集,我们看到这些样本的内存使用量略有增加)。

总而言之,这些改进表明 Reality Tiler 的可扩展性得到了显着提高:它能够在更短的时间内处理更多的数据,同时通常使用更少的内存。

由于瓦片不均匀,我们还发现瓦片文件大小的变化有所减少。例如,澳大利亚墨尔本是一个没有统一大小三角形的数据集,因此它特别受益于非均匀瓦片

使用统一大小瓦片的 Reality Tiler v1,墨尔本的平均瓦片大小为 1.28 MB,标准偏差为 706 KB。对于 v2 ,平均分块大小为 395 KB,标准差为 192 KB

未来展望

自 Reality Tiler v1 版本发布以来,我们已经取得了长足的进步,对于未来的增强功能,我们仍然有许多想法。

我们工作任务中的两个最大瓶颈现在是纹理压缩纹理坐标生成。我们未来会持续关注这两方面。

我们还将努力进一步降低峰值内存使用量。尽管网格数据主要是在核心外处理的,但帮助我们对其进行索引的数据结构驻留在内存中。官方计划调整此结构,使其不完全驻留在内存中。

有兴趣的朋友可以登录自己的Cesium ion帐户免费开始体验更新后的Reality Tiler,感受炸裂的性能。

有需要进可视化&Webgis交流群可以加我:brown_7778(备注来意),另外也可接项目合作。

相关推荐
小满zs19 分钟前
React-router v7 第一章(安装)
前端·react.js
程序员小续25 分钟前
前端低代码架构解析:拖拽 UI + 代码扩展是怎么实现的?
前端·javascript·面试
wangpq33 分钟前
微信小程序地图callout气泡图标在ios显示,在安卓机不显示
前端·vue.js
curdcv_po36 分钟前
Vue3 组件通信方式全解析
前端
Auroral15641 分钟前
基于RabbitMQ的异步通知系统设计与实现
前端·后端
栗筝i41 分钟前
Spring 核心技术解析【纯干货版】- XV:Spring 网络模块 Spring-Web 模块精讲
前端·网络·spring
打野赵怀真44 分钟前
H5如何禁止动画闪屏?
前端·javascript
zhangxingchao44 分钟前
关于浮点数的思考
前端
Riesenzahn44 分钟前
你喜欢Sass还是Less?为什么?
前端·javascript