Potree: Rendering Large Point
Clouds in Web Browsers
【译】Google & Jizhongbo
摘要
本论文介绍了 Potree,一种基于网络的大点云的渲染器。它允许用户在标准
网络浏览器中实时查看来自诸如 LIDAR 或摄影测量等来源的数十亿个点的数据
集。
在网络浏览器中点云可视化的一个主要优点是它允许用户与客户或公众共
享他们的数据集,而不需要预先安装第三方应用程序和传输大量的数据。对大点
云的重点和各种测量工具也允许用户使用 Potree 来查看、分析和验证原始点云
数据,而不需要耗费时间和可能成本高的网格划分步骤。
在 web 浏览器中数十亿点的流式传输和渲染,而不需要预先加载大量数据,
是通过以不同分辨率存储原始数据的子样本的分层结构来实现的。低分辨率存储
在根节点中,并且随着每个级别,分辨率逐渐增加。该结构允许 Potree 剔除视
锥体外的点云的区域,并且以较低的细节水平渲染远处的区域。
结果是一个开源点云查看器,它能够在 Web 浏览器中实时渲染高达 5970 亿
点的点云数据集,压缩后大约 1.6 太字节。
-1-
1 简介
1.1 动机
点云是由点而不是更广泛使用的三角形模型组成的三维模型。它们最常见的
是通过各种扫描方法(例如激光扫描和摄影测量)扫描真实世界的结果。使用案
例包括生成三维地图和地球仪(例如 Google Maps, Cesium),跟踪建筑进度或城
市、森林或其他类型的景观的变化,游戏和电影的三维资产生成,或以捕获运动
和姿势(例如,Kinect)。在许多使用情况下,点云被视为原始数据,然后通过将
其转换为三角形模型或二维图像来进行细化。
为了向客户或感兴趣的受众展示这些模型,传统上需要传输大量数据并安装
第三方应用程序以查看它们。有时,数据必须通过邮件发送硬盘来传输,因为它
们需要大量的空间。
随着 WebGL 的发布,通过 Web 浏览器的 3D 内容分发已经变得越来越流行。
它已经发展成为所有主流浏览器,台式机甚至移动设备本地支持的标准。WebGL
现在允许开发人员、艺术家、公司、研究人员和其他人与广大的受众分享他们的
内容,而不需要安装额外的软件。许多服务,如 Sketchfab [61],已经出现,允许
用户上传、共享和查看内容,而不需了解底层的 WebGL 机制。
-2-
在大多数情况下,内容相对较小的完整的数据集很适合内存,可以在合理的
时间量下载并实时呈现。但是,某些类型的内容超出了这些要求,数据可能不适
合内存,或下载完整的数据需要几分钟甚至几个小时。
本论文的目标是开发一个能够流化和渲染点云数据集数十亿点的查看器,而
不需要首先传输整个数据集或安装第三方查看器。
1.2 问题定义
诸如激光扫描仪或摄影测量的 3D 扫描技术产生大量的数据,通常超过数亿
或数十亿点。由于点数据的性质,需要大量的点来精确地表示甚至很简单的模型。
例如,平坦墙面可以由单个四边形和纹理表示,但是可能需要数千或数百万个有
色点来达到相同的细节量。
虽然许多用例将密集点云模型转换为更紧凑的纹理三角形网格,但这并不总
是希望的或可能的。低分辨率三角形网格的生成伴随着信息的丢失,由于对于复
杂对象或表面的低扫描密度,可能不总是可行的,并且其可能是非常耗时和昂贵
的。除此之外,经常有必要能够验证从点云到三维三角网格、二维地图或任何其
他最终产品的转换的结果。
点云数据的主要挑战之一是处理和呈现不适合存储器的数据集。这些类型的
数据集需要使用外核算法。外核算法一次只加载和处理小块数据。一旦块已经被
处理,或者它不再需要,它被从存储器中移除以用于下一个块。
作为点云数据维度的一个例子,美国地质调查局(USGS)目前正在对整个
美国进行全国扫描。假设海拔质量水平为 2,有效点密度为每平方米 3 点,预期
约 27 万亿个点[63] [62]。这转换为大约 540 太字节的未压缩存储。
除了处理和渲染巨大的数据集,使它们随时可用是另一个大的挑战。测量者
可能想与他们的客户共享数据或者宣传他们过去的项目;考古学家、艺术家或科
学家可能想与公众分享他们的数据集,以使别人对他们的工作感兴趣;而其他人
可能希望能够快速分析点云,而不首先复制或下载大量数据。访问越容易,观众
越多。很少有用户会只为看看一个数据集的乐趣而升级他们的硬件。如果需要的
是半大型下载和第三方查看器,则更多用户将感兴趣。本论文的目的之一是通过
使过程像访问网页一样容易,最大限度地增加观众。
-3-
为了能够在 Web 浏览器中实时查看完整的数据集及其所有细节,本硕士论
文基于 Scheiblauer 引入的可修改的嵌套八叉树(MNO)结构[54]。这种结构使得
可以剔除视锥体外的点,并以较低的细节水平渲染远处区域。
1.3 贡献
本论文的主要贡献是采用经过验证的点云渲染方法到不太灵活和资源有限、
但广泛可用的运行时环境:标准的 Web 浏览器。
这种采用包括对网络传输速率的修改,其比从磁盘加载数据低两个数量级,
以及以有用的方式或更高质量显示数据的渲染模式,对性能的影响较小。
改善慢连接行为的贡献是新的文件格式,二维高度轮廓的逐步加载和渲染,
以及逐点自适应点大小,其将每个点的大小调整到细节的水平,作为附加点被流
式传输随着时间的推移。
改进渲染结果的贡献是泊松碟采样方法,其产生更均匀间隔的子集,减少来
自重叠点的遮挡的内插法以及用于高质量分割的自适应混合深度。
以下列表提供了个人贡献的简短描述:
通过缓慢连接改善行为的贡献:
1.具有层次结构分区的新文件格式,允许 Potree 按需加载大点云层次结构。
大数据集的多分辨率层次结构可以由数百万个节点组成。该大小的层次可以是数
百兆字节的大小,如果它们被存储在单个文件中,则显著增加初始加载时间。
2.快速和渐进的高度剖面查询方法。甚至包含数百万或数十亿点的轮廓也会
被快速显示,因为只有最重要的点被加载和渲染。
3.自适应点大小模式,可将点大小调整到详细程度。这种适应允许隐藏不同
层次的细节之间的密度差异。作为副作用,这种方法可以使点云看起来像一个封
闭的表面,只有最接近的缩放级别,没有任何过度绘制。与 Scanopy 的点尺寸启
发式的区别在于,Potree 的自适应点尺寸模式将点的大小逐点调整到细节级别,
而 Scanopy 的点尺寸启发式基于节点中点密度的估计来逐节点地调整大小。
改善渲染结果的提案:
1.快速泊松碟采样方法,创建比网格方法更自然的子集。泊松碟样本是均匀
点集,每个点之间具有最小距离。
-4-
2.产生类似于 Voronoi 图的最近似相似渲染的内插 splat 模式。此方法实现为
单通道着色器,其修改片段深度以便将点渲染为抛物面而不是屏幕对齐的正方形。
它提供了方形或圆形分割的性能和高质量分割方法的质量之间的折衷。
3.自适应混合深度用于高质量分割(高斯分布)。混合深度指定点混合在一
起的范围,以创建更平滑和抗锯齿的结果。由于在较低细节水平的点之间的距离
增加,常数值不适用于多分辨率渲染系统中的任意缩放级别。自适应混合深度可
将混合深度调整为点的世界空间大小。如果与自适应点大小组合,它将混合深度
设置为等于点之间的间距。
更一般地,本论文贡献了一个最先进的、高性能、高质量渲染模式的 WebGL
点云渲染系统和各种有用的工具。此外,实现了各种现有技术的方法,例如
Eye-Dome Lighting,其计算照明而不需要法线,GPU 上的快速点拾取,剪辑框和
注记。
1.4 工作结构
第 2 章概述了相关工作,包括大点云的其他观察者,以及与点云的高质量渲
染相关的工作。在第 3 章中给出了所采用的可修改嵌套八叉树模型的描述,此结
构的构建以及在渲染过程中如何遍历它。第 4 章描述了如何渲染点云。 这包括
颜色和点大小的计算,以及高质量渲染模式和 Eye-Dome 照明着色器,它可以计
算照明和轮廓,而不需要法线。 第 5 章介绍了 Javascript 和 WebGL 的实现细节,
并描述了 Potree 中的一些功能。性能评估,第三方对 Potree 的应用,以及我们
自己的一些结果显示在第 6 章中。第 7 章给出了未来任务的结论和非穷尽列表。
2 相关工作
2.1 渲染大规模点云
处理大量的点,通常不适合内存,需要流入、处理和渲染整个数据的一小部
分的核心算法。大多数方法采用分层空间分区结构的变体,也称为多分辨率结构,
例如 kd 树、八叉树或四叉树,并用表示不同分辨率的原始模型的数据填充所有
-5-
节点。这些方法中的一些在分层结构内重新分布原始点数据,而其他方法仅将原
始数据存储在叶节点中,并将内部节点中的下采样平均值存储。
Rusinkiewicz 和 Levoy [52]的 QSplat 渲染系统是第一个能够渲染数亿点的多分
辨率系统。QSplat 方法从输入点云或网格中创建边界球层次结构,可以遍历以创
建逐渐更精细的模型渲染。每个叶节点表示单个点样本,而内部节点表示包围它
们各自子树的边界球。通过遍历分层结构直到遇到叶子,或者直到达到期望的细
节水平,即当屏幕投影的边界球足够小时,完成渲染。每当在子树中的遍历被暂
停时,绘制表示当前边界球或节点的顶点的点划线。QSplats 使用一个总是沿其
最长轴拆分的二叉树。
Gobbetti 和 Marton [20]开发了 GPU 友好的多分辨率结构,分层点云(LPC),
显著降低了 CPU 端的遍历成本,并利用 GPU 并行渲染数千个几何原语的熟练程
度。 LPC 结构存储分层结构的每个节点中的点云的子样本。遍历的成本被降低,
因为仅需要遍历到覆盖更大区域的子样本之一,而不是覆盖小区域的各个点。子
样本是静态的,发送到 GPU 一次,并且随后由 GPU 渲染,GPU 特别好地平行地
渲染数千个多边形或点。LPC 使用总是沿其最长轴分裂的二叉树。
Wimmer 和 Scheiblauer [75]引入了嵌套的八叉树,这是一个类似于 LPC 的结
构,它在其节点中存储原始数据的子样本,但它接受任意点数据集作为输入,而
LPC 假设输入被均匀采样。
每个节点中的子样本是借助于一个内接的八叉树构建的。这些内切的八叉被
称为内八叉,它们被内接的节点是外八叉的一部分,因此名称为嵌套的八分。外
部八叉树用于确定可见性,内部八叉树用于创建子样本。
进一步的研究导致不仅适合渲染的结构,而且还适用于大规模点云的修改。
Wand et al [70]提出了一种八叉树结构,其在叶节点中分布原始数据集,并在内
部节点中简化多分辨率表示。简化的多分辨率表示可以包括子树中的代表点的选
择或子树中的点的平均。在前一种情况下,将创建重复项,而在后一种情况下,
将创建新的点。
新插入的点总是向下行进到叶节点并且沿着路径更新多分辨率表示。类似地,
当点被删除时,它从相应的叶中被去除,并且多分辨率表示,直到根为止被更新。
Wand et al 还描述了在根的边界框外的新添加的点的情况。在这种情况下,
-6-
将创建一个具有两倍大小的新节点,并且当前根将成为此新节点的子节点。此过
程在点的方向上重复,直到八叉树包含新点。
用于编辑点云的另一种结构是 Scheiblauer 和 Wimmer 的可修改的嵌套八叉
树(MNO)[56]。除了适合于插入和删除操作的八叉树结构之外,它们还引入了
选择八叉树,其允许用户使用体积刷选择点。MNO 基于嵌套的八叉树,但是为
了提高插入和删除操作的性能,内部八叉树已经被网格替换。在 MNO 中,通过
接受落入节点的内接网格的单元中的点来创建点样本。引入选择八叉树,以便用
户可以使用体积笔刷选择点,而不会忽略在选择期间不可见的较高细节节点中的
点。基本音量刷工具仅能够在选择期间选择核心中的点。然而,选择八叉树记住
卷的哪些部分是选择的一部分,并且将确保相应的点被标记为选择,如果稍后加
载它们。
2.2 基于 Web 的大规模点云和体素渲染
本节介绍基于网络的点云渲染器,它们也旨在渲染大型数据集。
Entwine[26] 、Greyhound 和 Plasio [44]是 Howard Butler、Connor Manning
和 Uday Verma 的点云渲染堆栈的一部分。Entwine 是一个索引库,它负责为点云
的高效流化构建优化的数据结构。节点中的子样本通过保持最接近内嵌网格中的
单元格中心的点来获得。 Greyhound 是 HTTP 请求时将索引数据流式传输到客户
端的 HTTP 服务器。Plasio 是一个基于 WebGL 的点云渲染器,可以渲染 las 或 laz
格式的点云,或从灰狗服务器传输点云。他们还创建了一个 zipzip 的 Javascript
端口,以便能够直接在浏览器中解压缩 laz 文件。
PointCloudViz 服务器和相应的 Web 客户端[45]是 Mirage Technologies [35]的
商业服务,并且是其免费桌面 LIDAR 查看器的补充。他们的系统使用多分辨率结
构来有效地进行流和渲染。值得注意的功能包括定向拼接、照明、不同的材料,
如 RGB、强度和分类,以及通过滑块改变高度和强度的颜色渐变。
ShareLIDAR [59]是一个具有托管服务的多分辨率点云渲染器。不可取的功能
包括通过法线的照明、正交顶视图,截面(高度轮廓)工具和点大小的调整以减
少孔。缺点是它在不覆盖整个数据集的较小图块中加载数据,这导致大的空白空
间,同时用户等待数据流入。
-7-
udWeb Demo [66]是基于 Web 浏览器的欧几里德无限细节/ Geoverse 技术的
演示。元素被呈现为块而不是点,这导致了 Euclideon 使用基于体素的呈现方法
而不是点云的假设。这允许在数据集中关闭孔而不引起重叠,这两者在点云渲染
中是常见的。块最初非常大,给出数据的粗略表示,并且在新数据流入时缩小大
小。
2.3 基于桌面的大规模点云和体素渲染
Scanopy [54]是 TU Wien 的计算机图形部门的一个项目,也是能够渲染并编
辑具有数十亿分的点云的第一个点云渲染器之一。 Potree 起源于用 Scanopy 开
发的基于网络的结构和算法版本。
Arena4D by Veesus [67]包括一个桌面渲染器和一个点服务器,允许流点云。
它能够渲染大量的点云数据集,并包括用于选择和编辑点云的各种工具。
Geoverse [19]是 Euclideon 的点云查看器,它以其无限细节技术的营销而闻
名,并支持在太字节范围内呈现数据集。虽然它被广告为点云渲染器,但是其渲
染的性质可以指示它实际上是一个体素渲染器。
PointCloudViz 是 Mirage Technologies 的免费点云查看器[35]。它包括诸如生
成数字高程模型(DEM),叠加地理参考图像和测量等功能。
Voxel Quest [68]是 GavanWoolery 的一个项目,能够创建和渲染大型程序体
素环境。作者在其一生中尝试了不同的渲染技术,包括在有符号距离场上的光线
投射和作为点原始图像的光栅化体素,有效地将体素数据集视为点云。
2.4 基于点的高质量渲染
与多边形网格不同,点云不包含连通性信息,并且表示表面上的一组点而不
是封闭的表面。点通常在屏幕上呈现为矩形、圆形或单个像素。这些原语在 GPU
上快速渲染,但是结果遭受诸如重叠点之间的遮挡和混叠伪像的问题。高质量渲
染方法提供了提高点云渲染的质量的方法,而不需要将它们转换为网格。
Hermels [24]介绍了 Surfels,表面元素的简称,后来 Pfister 等人提出了一种
渲染原语 [41]。在基于点的渲染的上下文中,Surfel 是三维空间中的定向盘或椭
圆。Surfel 的定向椭圆有助于避免相邻样本之间的孔。
-8-