从稀疏的静态图像合成任意3D透视物体和场景的新视图是许多VR和AR应用的基础。近年来,神经辐射场(NeuralRadianceFields,NeRF)的神经网络渲染研究通过神经网络编码实现了真实的3D透视场景渲染。但是NeRF需要极端的采样要求和大量的神经网络运算,导致渲染速度非常慢,严重制约了其在实际场景中的应用,尤其是实时交互场景。例如,在高端GPU上使用NeRF渲染一张800X800像素的图像大约需要30秒。最近,来自加州大学伯克利分校和其他机构的研究人员使用称为PlenOctrees的数据结构为NeRF引入了一种新的数据表示,从而实现了实时NeRF渲染。其渲染速度比原来的NeRF快了3000多倍,图像质量与NeRF不相上下。另外,使用PlenOctrees结构也可以有效减少NeRF的训练时间。论文地址:https://arxiv.org/pdf/2103.14024.pdf项目地址:https://alexyu.net/plenoctrees/方法NeRF方法中,相机光线从特定角度穿过场景,生成一组采样的3DPoints,这些点的空间位置和视角通过神经网络映射成对应的密度和颜色。然后使用经典的体积渲染技术将这些颜色和密度累积到2D图像中。这需要将沿射线的每个样本馈入神经网络以获得密度和颜色。这种方法效率很低,因为大多数样本都是在自由空间中采样的,对整体颜色没有贡献。因此,本文提出使用稀疏的八叉树结构来避免过采样。此外,该方法还预先计算了每个体素的值,以避免重复输入网络。图1算法框架图算法框架如图1所示。本研究提出了一种称为PlenOctree的数据结构,将训练好的NeRF预采样转换为PlenOctree数据结构。具体来说,该方法使用八叉树结构来组合建模所需的密度值和球谐函数(SH)。存储在树的叶节点中。球面谐波以一个角度代替RGB值,允许从任何角度恢复独立的颜色信息。此外,为了更直接地实现PlenOctree转换,本研究提出了一种改进的NeRF模型(NeRF-SH)来生成球谐表示,从而避免向网络输入不同的视点数据。这些信息可以直接存储在PlenOctree的叶子节点上。同时,通过微调八叉树结构可以进一步提高图像质量。NeRF-SH模型NeRF-SH模型如图1(a)所示。其基本优化过程和渲染过程与NeRF相同,但NeRF-SH模型不直接输出RGB颜色,而是输出球谐函数k。颜色c是通过在相应光线方向(θ,φ)上的球谐函数k基上的加权求和来计算的。转换公式如下:其中d为视角,k为网络输出的球谐函数SH。使用SH基础消除了对视图方向进行采样的需要,从而减少了训练时间。在NeRF-SH的训练过程中,研究还引入了稀疏先验约束来提高Octree结构的存储效率。整个提取过程大约需要15分钟。PlenOctree结构PlenOctree结构如图1(b)所示。NeRF-SH模型训练好后,转化为稀疏的Octree结构进行实时渲染。转换过程分为以下三个步骤:1)在高层次上,网络在网格上进行评估,仅保留密度值,以及2)体素通过阈值进行过滤。3)对每个剩余体素内的随机点进行采样和平均,得到SH函数,该函数存储在八叉树叶中。树的值在渲染过程中是完全可微的,直接在原始训练图像上微调可以进一步提高图像质量。PlenOctree结构的优化速度约为每秒300万条射线,而NeRF约为每秒9000条射线。与NeRF相比,该方法的优化速度有明显提升,因此可以提前结束NeRF-SH的训练构建PlenOctree结构,而不会降低模型的性能。实验结果的渲染效果如图2所示,与NeRF相比,该方法渲染出的图像细节更好,更接近真实图像,渲染速度提升3000多倍。图2是渲染效果。图3是几种方法训练时间的对比结果。可以看出NeRF模型和NeRF-SH模型所需的训练时间很接近。而PlenOctree结构转换和微调需要大约1小时的训练时间。但是结合NeRF-SH和PlenOctree可以让模型在短短4.5小时内达到NeRF约16小时的训练质量。图3算法收敛时间虽然渲染速度和性能都得到了提升,但是使用Octree结构也会占用更多的内存资源。
