Java教程

【笔记】Ref-Nerf

本文主要是介绍【笔记】Ref-Nerf,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Ref-NeRF

介绍

NeRF在镜面反射上,有着许多artifacts,有两个原因。一个是,用外向辐射作为视角,不好插值;另一个是,NeRF会用各向同相的内部光源来假装镜面反射,结果是半透明或雾状的artifacts。

Ref-NeRF用反射光作为输入,因为表面的取向不影响它,因此MLP能在上面更好地插值。

一个问题是,反射光需要找法向量,而NeRF生成的geometry不够好,上面的法向量噪声过多。Ref-NeRF在volume density上加了一个新的正则化器,激励volume density集中在表面上,同时获得更好的法向量。

Structured View-Dependent Apperance

反射光

用入射光和法向量求反射光(入射光其实是发射的)

\[\mathbf{\omega_r} = 2(\mathbf{\omega_o}\cdot \mathbf{n})\mathbf{n} -\mathbf{\omega_o} \]

Integrated Directional Encoding

在现实中,辐射不能仅仅用反射方向来表示,考虑到粗糙和光滑材质的区别,引入了Integrated Directional Encoding (IDE) 让MLP能表示材质的粗糙度。

首先,不用sin函数做encoding了,改用一系列球谐函数,保证了球面上的不变性。

接下来,用encode反射向量分布的方法,让MLP可以推理材质粗糙度,并引入参数\(\kappa\)表征粗糙度。

漫反射和镜面反射颜色

通过解耦漫反射和镜面反射的组成,进一步简化外向辐射的函数。根据定义,漫反射颜色只与位置有关,将真实颜色拆解为

\[\mathbf{c} = \gamma (\mathbf{c}_d+\mathbf{s}\odot \mathbf{c}_s) \]

其中\(\mathbf{c}_d\)是漫反射颜色,\(\mathbf{s}\)是spatial MLP输出颜色,\(\mathbf{c}_s\)是directional MLP输出颜色。

额外的自由度

将spatial MLP的输出b,作为directional MLP的输入,让它更好地表征位置变化带来的影响。

准确的法向量

好的反射向量,依赖于好的法向量,然而NeRF出来的volume density很凌乱,而且NeRF会用内部各向同性的光源来假装反射光,这是一个局部最优解。

为了解决第一个问题,即法向量噪声多的问题,Ref-NeRF使用预测的法向量来计算反射方向,从spatial MLP中得到一个三维向量,正则化以后作为预测的法向量。MLP预测的法向量比梯度算出来的更光滑,因为梯度算子在MLP的插值卷积核上是一个高通滤波器的作用。

为了解决第二个问题,使用正则函数来惩罚雾状表面,从而避免NeRF用藏在半透明面后的内部发光源来解释镜面反射。

这篇关于【笔记】Ref-Nerf的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!