使用预计算和baking,同时使用显式表征存储特征,将渲染计算压缩到pixel-level,以略微损失图像质量为代价,将渲染速度提升至原始NeRF的1000倍。
NSVF的显隐式表征带来了不错的加速效果,但是仍然需要point-level的evaluation。AutoInt自动计算沿光线的积分来减少MLP的推理次数。NV使用显式的grid来存储特征,将网络推理修改为特征的look-up。基于分解的神经场(Decomposed Radiance Field)使用一组更小的MLP来代替一个大的MLP。这些方法只能带来10x的速度提升,并不能满足实时渲染的需求。
本文的工作,看重的是训练好的网络在实时推理上的效果。所以只是加速推理速度,并不加速训练速度。核心思想是,将训练好的网络中的结果在稀疏体素场中预计算和保存,这样推理的时候只需要经过轻量的解码就能还原出计算信息。本文还使用了Deffered方式,将轻量解码推理次数减少到了ray-level。
在大场景中共享相同数据或者需要通过预过滤来对抗伪影的情形下,多层表示例如八叉树是一种好的选择,但是八叉树所需的非叶节点查询和树遍历可能会产生大量开销。hash可以带来O(1)的查询,但是在渲染期间遍历时,独立查询每个体素的顶点会带来内存获取不连贯。本文选择了折中的方法,即使用体素的形式(内存获取连贯),又尽量让其稀疏化(遍历次数减少)。
$\sigma$和$c_d$与视角无关,$v_s$是4维向量特征(sigmoid到0-1,利于后续压缩)。同样使用体渲染公式:
其中 $MLP_\phi$是很小的网络,用来产生视角相关效果的残差,与累积的漫反射相加。通过这种方式,计算的中间过程就可以被暂存,最终的渲染结果交由小MLP推理,且推理次数是ray-level。本文选择了稀疏的体素场来存储这些中间结果。
体素场分为三个部分: