Potree:大规模点云渲染
前言
Potree 是基于 WebGL 的开源大规模点云渲染器,其由维也纳工业大学计算机图形与算法研究中心(Institute of Computer Graphics and Algorithms, TU Wien)开发。官网点击这里:Potree。
根据相关论文以及展示的介绍,其支持 Billion 级别点云数据的渲染,一个复杂场景渲染示例如下图所示:
点云数据中本身仅仅包含多个点数据,对于较小规模的点云数据,只需要依次使用面或者点等方式将其全部渲染出来。但是面对较大数据量的点云,就需要考虑许多随之而来的问题:
- 内存限制:以基于 V8 引擎为例,32 位机器可使用内存约为 0.7 GB,64 位机器可使用内存约为 1.4 GB。而渲染完整的 1 Billion 无 RGB 信息的点云数据就需要超过 22 GB 的内存进行存储(对于 JavaScript 仅有 double 数据,其计算为每个点需要 XYZ 三个点,即存储每个点需要 3 × 8 个 Byte 的内存,1 Billion 点云约为 22.35 GB)。因此,必须将点云数据进行分割,从而按需渲染以减少内存使用量;
- 实时渲染需求:对于点云渲染的应用场景,往往并不仅仅只需要输出渲染后的可视化结果,而是需要满足基于点云渲染后的具体应用需求,例如游戏或者标注工具等。这对于点云渲染带来了实时性的需求,因此必须对巨大规模的点云数据采取一定的处理以减少 CPU 以及 GPU 的计算压力;
- 网络传输速度:B/S 架构下由于点云资源需要通过网络进行传输,如果直接传输完整的点云数据,则在渲染计算开始前,用户需要花费大量的等待时间。这一点对于用户体验而言也同样是必须解决的痛点。
以上所述的问题需要对于点云渲染的各个阶段采取一定的措施,包括:数据预处理、数据加载、渲染计算等,但是归根结底,其本质就在于给出高效的点云数据结构。
数据结构
在正式介绍 Potree 的数据结构之前,首先对于铺垫产生的这一数据结构的前述研究进行一个简单的介绍。
与大多