分析NeRF模型中颜色计算公式中的参数
一、文献
[2003.08934] NeRF:将场景表示为用于视图合成的神经辐射场https://arxiv.org/abs/2003.08934?utm_source=chatgpt.com
二、疑问
在NeRF文章中有个关于计算颜色C的公式如下所示,对于里面的参数 t / r(t) / c(r(t),d)这三个参数各自有什么区别?
三、解答
1)T的参数为什么为 t
T是传输率,是从t_near到 t 的透明度因子的一个积分,原文章给出了一个这样的公式:
从公式中我们可以看到其实T的参数虽然是 t ,但是实际上通过 t 就可以确定r(t),那么r(t)表示的是什么意思呢?原文献中也给出了公式:
其中o是射线的中心,d是射线的方向,而t是采样点距离射线中心的距离,那么r(t)就表示在d方向上与射线中心o距离t的采样点,如图大黑点所示,其中射线采样点为图片上的小黑点
所以结合公式和图来看,T实际上也是有方向的,而方向就是射线方向,只是因为仅仅通过改变t就可以改变r(s)从而改变T,所以T的参数只需要设置为t,而不是r(t)
2)ρ的参数为什么是r(t)
σ是密度,指的是在这条射线上的与中心点o距离t的采样点的密度,所以是r(t),与T实际上是一个“参数”,但是T可以直接通过t就可以决定r(t)(T(t)的公式),但是σ没有,所以σ的参数是r(t)而不是t
3)c的参数为什么是(r(t),d)
r(t)=o+td,为什么c的参数还有一个d,我们可以通过代码来看:
这段代码表示,不论是自动生成射线还是手动输入射线,都会生成多条射线,每条射线包括射线中心和射线方向
这段代码表示如果使用视角方向,那么视线方向就会保留刚刚生成的射线方向;如果使用静态相机,那么就会生成新的射线方向,并保存为新的射线中心和射线方向,最终射线方向保留位射线方向,而旧的射线方向被保存为实现方法,如图所示,其中P为采样点
所以此时会有两个方向,而静态相机就是射线方向(r(t)中的d),viewdir就是视角方向(d),这样只需要改变视角方向就可以获得P点的颜色信息,而为什么视角方向会对颜色造成影响呢?
以这张图中的船体的红色为例,a和b分别是对同一个采样点的颜色提取,但是视角不一样,可以看出他们的颜色也是不一样的,其中c就是该采样点的360度观测方向上的颜色,可以更直观的看到从不同的视角进行观测,得到的颜色是不一样的。
所以对于c而言,必须采用的参数为(r(t),d)而不能仅仅是r(t),当不采用视角方向和静态相机的时候,两个d是一样的,都是射线方向