简介
2023 年 11 月的时候,Cesium官方发布了
Reality Tiler
,它取代了当时的摄影测量瓦片工具,成为
Cesium ion
和自托管产品中包含的3D瓦片的一部分。
官方构建Reality Tiler时,强调了
可扩展性
、
瓦片性能
和
运行时效率
。今天,我们深入探讨于
2024年7月
发布的
Reality Tiler v2
。
我们将介绍Reality Tiler的完整重构,从头开始重建瓦片管道,带来了瓦片时间、瓦片质量和运行时性能的显著提升。我们将仔细研究内存和运行时性能指标,最后讨论进一步改进和下一步的优化。
在深入探讨之前,请注意
Reality Tiler
主要用于
摄影测量模型
或从
LiDAR
扫描重建的模型,可能规模巨大。这些模型通常由显式几何(例如
三角网格
)和
颜色纹理
信息组成。
为什么要重构?
Reality Tiler的第一个版本通过对整个输入模型进行迭代简化和细分来操作。
Reality Tiler v1 流程:简化、细分和图块生成。
尽管瓦片器使用了
外核技术
以确保我们不会耗尽内存,但它有两个缺点。
首先,
数据访问模式
不连贯。在生成瓦片或简化模型时,所需的一系列操作的数据未合并到连续的内存块中,导致频繁的缓存未命中,并需要在磁盘和RAM之间进行不必要的分页。这些类型的访问模式可能会显著减慢处理速度。
这种方法的第二个缺点是它在整个过程中创建了
固定数量
的
细节层次(LODs)
。对于相对均匀的模型,这是一个合理的方法,但有些模型并不均匀。实际上,许多模型具有高细节区域和低细节区域。
例如,模型的某些部分可能具有比其他部分高得多的三角形密度或使用更高分辨率的纹理。固定数量的LOD可能会创建不平衡的瓦片集,其中一些瓦片包含过多信息,而其他瓦片包含过少信息。在运行时,这会转化为不一致的性能:过多的大瓦片会导致帧率降低,过多的小瓦片可能导致过多的网络请求和缓慢的流式传输。
Reality Tiler v1 创建了统一的图块集。请注意树是如何平衡的,但有些图块比其他图块大
从全局到局部
我们考虑了几种策略来解决Reality Tiler v1的缺点,但最终决定彻底颠覆整个过程。
我们不再采用全局方法(即在生成瓦片和执行简化时对整个模型进行操作),而是采用局部方法,一次只处理模型的一部分。
更具体地说,Reality Tiler v2将模型拆分为叶子瓦片,并通过迭代合并和简化瓦片来构建瓦片集,直到只剩下一个根瓦片。
由于各个瓦片相对较小且在内存中大多是连续的,数据访问更加连贯,因此整体过程显著加快。
Reality Tiler v2 流程:细分、合并、简化和图块生成。
使用Reality Tiler v2时,我们确保每个叶子瓦片的大小大致相同(就几何和纹理内容而言,而非世界空间中的范围)。
这意味着,对于具有密集几何或纹理数据的输入模型的某些部分,可能会进行更深的瓦片,而树上更高的瓦片大小大致相同。
Reality Tiler v2 创建统一的瓦片。请注意树是如何不平衡的,但每个瓦片的大小是相同的。
结果
通过转向这种新的局部瓦片方法,我们在瓦片性能和内存使用方面看到了显著的改进。以下是几个数据集的结果。(所有测试均在具有
256GB RAM
、64核CPU和4TB NVMe驱动器的机器上运行。)
Reality Tiler 瓦片时间比较
Reality Tiler 内存使用比较
可以看到,
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 版本发布以来,我们已经取得了长足的进步,对于未来的增强功能,我们仍然有许多想法。