【读论文】PhySG

论文地址

使用SDF表示形状
使用球面高斯来近似光照和镜面 BRDF

对标方法和现有方法的缺点

这篇文章主要对标的是现有的神经渲染方法,如NeRF (Neural Radiance Fields) 和 IDR (Implicit Differentiable Renderer) 等。现有方法的缺点包括:

  1. 不分解外观:许多神经渲染方法(如NeRF)只能重建场景的辐射场,不能将外观分解为光照和材料,从而无法实现基于物理的外观操作,如材料编辑或重光照。
  2. 需要RGBD输入或变光照条件:一些多视图逆渲染方法需要RGBD输入或变光照条件,这对实际操作提出了较高的要求。

解决的问题

这篇文章提出的PhySG方法旨在解决以下问题:

  1. 在静态光照下进行多视图逆渲染:在不需要扫描几何信息的情况下,仅通过多视图RGB图像在静态自然光照条件下重建几何、材料和光照。
  2. 实现基于物理的外观编辑和重光照:通过物理渲染方程,可以实现对材料和光照的物理意义上的编辑和重光照。

创新点

  1. 基于符号距离函数的几何建模:使用符号距离函数(SDF)来表示几何,通过MLP参数化,实现了高效的几何表示和优化。
  2. 使用球面高斯函数:利用球面高斯函数(Spherical Gaussians, SG)近似和高效地评估渲染方程,从而在复杂反射率条件下实现高效计算。
  3. 端到端可微渲染管道:包括一个完全可微的渲染器,能够从多视图图像中端到端地优化几何、材料和光照。

实验结果

实验结果表明,PhySG在合成数据和真实数据上都能有效地重建几何、材料和光照,并实现了高质量的视角合成、材料编辑和重光照。具体的定量评估包括:

  1. 图像质量指标:在合成数据上,LPIPS、SSIM和PSNR指标均表现良好,说明该方法能够有效重建视角和材料。
  2. 几何恢复:在几何恢复方面,PhySG的表面法线误差和Chamfer L1距离与基准方法相比表现出色。

模型的输入输出

模型的输入为多视图的RGB图像,输出为几何信息(以SDF表示)、材料BRDF(包括空间可变的漫反射率和共享的单色各向同性镜面反射成分)和环境光照图(由球面高斯函数混合表示)。

模型结构

PhySG的模型结构包括:

  1. 几何建模:采用符号距离函数(SDF)表示几何,并通过MLP参数化。
  2. 外观建模:包括环境光照图和BRDF,BRDF由空间可变的漫反射率和单色各向同性镜面反射成分构成,均通过MLP实现。
  3. 前向渲染:通过球面高斯函数近似渲染方程,实现颜色的计算,并通过图像重建损失来优化几何和材料参数【3:18†source】。

Method

Geometry Modeling

在这部分中,文章介绍了PhySG方法中几何建模的细节。具体步骤如下:

1. 使用符号距离函数(SDF)表示几何

符号距离函数(Signed Distance Functions, SDF)已经在很多工作中被成功使用来表示几何形状。在PhySG中,SDF被用于表示几何形状,因为它支持通过球面追踪进行射线投射,是可微分的,并且自动满足形状和表面法线之间的约束关系。具体地说,表面法线正是SDF的梯度。

2. 使用多层感知机(MLP)参数化SDF

为了高效地表示和优化几何形状,PhySG采用多层感知机(MLP)来参数化SDF。具体地,给定一个3D点x,SDF表示为S(x; Θ),其中Θ是MLP的权重。MLP包含8个宽度为512的非线性层,并在第4层使用跳跃连接。为了让MLP能够表示高频几何细节,采用了位置编码(positional encoding)对3D点的位置进行编码,使用了6个频率成分。

3. 球面追踪

为了渲染一个相机光线的像素颜色,首先需要通过球面追踪找到该光线与SDF表示的表面的交点。具体地,从光线与物体边界框的交点开始,沿着光线通过球面追踪进行迭代,每一步的步长为当前位置的符号距离值。然后,使用自动微分计算交点位置x处的表面法线n = ∇xS。

4. 反向传播和优化

为了优化几何形状,需要通过表面位置x和表面法线n的梯度将损失反向传播到SDF参数Θ上。表面法线n的梯度通过自动微分计算,表面位置x的梯度则使用隐式微分方法进行计算。然而,球面追踪算法本身并不需要是可微分的,这使得其非常高效。

5. 具体实施细节

  • SDF表示:通过MLP参数化的符号距离函数S(x; Θ)。
  • MLP结构:8层宽度为512的非线性层,第4层有跳跃连接,使用位置编码增强高频细节的表示能力。
  • 球面追踪:从光线与物体边界框的交点开始,沿着光线前进,每步的步长为当前位置的符号距离值。
  • 梯度计算:表面法线n的梯度通过自动微分计算,表面位置x的梯度使用隐式微分方法。

Appearance Modeling

在这部分中,文章介绍了PhySG方法中的外观建模部分。

1. 模型介绍

为了符合渲染方程的物理一致性,PhySG使用两个可优化的组件来建模单一材料的镜面物体:

  • 环境光照图(Environment Map)
  • 双向反射分布函数(BRDF),包括空间可变的漫反射率(Diffuse Albedo)和共享的单色各向同性镜面反射成分(Specular Component)。

需要注意的是,该方法并不建模自遮挡或间接光照。

2. 使用球面高斯函数(SG)近似渲染方程

渲染方程中的半球积分通常没有闭式表达,需要昂贵的蒙特卡洛方法进行数值求解。然而,在光滑材料和远距离直接光照的设定下,可以利用球面高斯函数(SG)高效地近似渲染方程。

球面高斯函数的形式为:
G(ν;ξ,λ,μ)=μeλ(νξ1)G(\nu; \xi, \lambda, \mu) = \mu e^{\lambda (\nu \cdot \xi - 1)}
其中,νS2\nu \in S^2 是函数输入,ξS2\xi \in S^2 是波瓣轴,λR+\lambda \in \mathbb{R}^+ 是波瓣锐度,μRn\mu \in \mathbb{R}^n 是波瓣幅度。

2.1 环境光照图

环境光照图被表示为M个球面高斯函数的混合:
Li(ωi)=k=1MG(ωi;ξk,λk,μk)L_i(\omega_i) = \sum_{k=1}^{M} G(\omega_i; \xi_k, \lambda_k, \mu_k)
其中,ωi\omega_i 是入射光方向。

2.2 漫反射率

漫反射率被表示为一个MLP,将表面点xx映射为颜色向量aa,即 a(x;Φ)a(x; \Phi)。位置编码也被用于拟合高频纹理细节。具体实现为一个包含4个宽度为512的非线性层的MLP,并使用10个频率对位置xx进行编码。

2.3 镜面反射率

共享的镜面反射率使用简化的Disney BRDF模型:
fs(ωo,ωi)=M(ωo,ωi)D(h)f_s(\omega_o, \omega_i) = M(\omega_o, \omega_i)D(h)
其中,h=ωo+ωiωo+ωi2h = \frac{\omega_o + \omega_i}{\|\omega_o + \omega_i\|_2}MM表示菲涅尔效应和遮挡效应,DD是法线分布函数,表示为一个单一的球面高斯函数:
D(h)=G(h;ξ,λ,μ)D(h) = G(h; \xi, \lambda, \mu)

在各向同性镜面BRDF假设下,ξ\xi与表面法线对齐,即 ξ=n\xi = n,单色假设则使得μ\mu中的三个数相同。

3. 近似渲染方程

在点xx处,带有表面法线nn并沿方向ωo\omega_o观察的点,其镜面BRDF fsf_s 可以表示为:
fs(ωo,ωi;x)=G(h;n,λ4(hωo),Mxμ)f_s(\omega_o, \omega_i; x) = G(h; n, \frac{\lambda}{4(h \cdot \omega_o)}, M_x\mu)

结合上文的SG表示,渲染方程的其他部分ωin\omega_i \cdot n 也近似为一个SG:
ωinG(ωi;0.0315,n,32.7080)31.7003\omega_i \cdot n \approx G(\omega_i; 0.0315, n, 32.7080) - 31.7003

最终,SG乘积的积分可通过闭式求解计算得到,从而得到观察颜色Lo(ωo;x)L_o(\omega_o; x)

4. 可优化参数

综上,外观建模组件中的可优化参数包括:

  • 环境光照图的参数 {ξk,λk,μk}k=1M\{\xi_k, \lambda_k, \mu_k\}_{k=1}^{M}
  • 镜面BRDF的参数 {λ,μ}\{\lambda, \mu\}
  • 空间可变的漫反射率的参数 Φ\Phi

球谐函数简介
球面高斯简介
SG Series Part 2: Spherical Gaussians 101

渲染方程(Rendering Equation)

渲染方程是计算表面点在特定观察方向上反射光强的核心公式。它基于能量守恒的物理法则,由Kajiya等人提出。对于一个具有表面法线nn的表面点xx,渲染方程可以表示为:

Lo(ωo;x)=ΩLi(ωi;x)fr(ωo,ωi;x)(ωin)dωiL_o(\omega_o; x) = \int_\Omega L_i(\omega_i; x) f_r(\omega_o, \omega_i; x) (\omega_i \cdot n) d\omega_i

其中:

  • Lo(ωo;x)L_o(\omega_o; x) 是在观察方向ωo\omega_o上,从点xx出射的光强。
  • Li(ωi;x)L_i(\omega_i; x) 是在入射方向ωi\omega_i上,到达点xx的入射光强。
  • fr(ωo,ωi;x)f_r(\omega_o, \omega_i; x) 是双向反射分布函数(BRDF),表示点xx在入射方向ωi\omega_i和出射方向ωo\omega_o上的反射系数。包含漫反射 a(x;Φ)a(x; \Phi) 和镜面反射
  • ωin\omega_i \cdot n 是入射光方向ωi\omega_i与表面法线nn的点积,用来计算入射光对表面法线的贡献。
  • Ω\Omega 是半球区域,定义了所有可能的入射方向ωi\omega_i

渲染方程的物理意义

渲染方程表示了点xx处的出射光强是由所有可能的入射方向上的入射光强、该点的BRDF以及入射方向与表面法线的夹角综合计算得到的。

渲染方程的求解

由于渲染方程中的积分通常没有闭式解,需要使用数值方法进行求解,如蒙特卡洛方法。然而,这些方法计算量大,效率低。因此,PhySG方法采用球面高斯函数(SG)来近似求解渲染方程,从而实现高效计算。

使用球面高斯函数近似渲染方程

为了高效地评估渲染方程,PhySG使用球面高斯函数(SG)进行近似。SG的形式为:

G(ν;ξ,λ,μ)=μeλ(νξ1)G(\nu; \xi, \lambda, \mu) = \mu e^{\lambda (\nu \cdot \xi - 1)}

通过将环境光照图和BRDF表示为球面高斯函数的混合,渲染方程中的积分可以通过SG乘积的积分在闭式表达下高效计算。

具体步骤如下:

  1. 环境光照图的SG表示:将环境光照图表示为多个SG的混合。
  2. BRDF的SG表示:将BRDF表示为单一的SG,并对入射光方向和表面法线的点积进行近似。
  3. SG积分:利用SG的闭式求解公式计算出射光强。

入射光强(LiL_i)和出射光强(LoL_o)通常用RGB三通道来表示,每个通道代表红、绿、蓝三种颜色的光强度。这种表示方法能够捕捉颜色信息,并且与我们日常所见的图像表示方式一致。具体到渲染方程的求解,RGB表示法使得计算结果能够直接用于生成彩色图像。

详细说明

渲染方程中的RGB表示

在渲染方程中,Li(ωi;x)L_i(\omega_i; x)Lo(ωo;x)L_o(\omega_o; x) 都可以分为红、绿、蓝三个通道分别计算:

Lo(ωo;x)=ΩLi(ωi;x)fr(ωo,ωi;x)(ωin)dωiL_o(\omega_o; x) = \int_\Omega L_i(\omega_i; x) f_r(\omega_o, \omega_i; x) (\omega_i \cdot n) d\omega_i

对于每个颜色通道(R、G、B),上述积分式分别计算一次。因此,对于RGB表示的光强,渲染方程可以扩展为:

LoR(ωo;x)=ΩLiR(ωi;x)frR(ωo,ωi;x)(ωin)dωiL_o^R(\omega_o; x) = \int_\Omega L_i^R(\omega_i; x) f_r^R(\omega_o, \omega_i; x) (\omega_i \cdot n) d\omega_i
LoG(ωo;x)=ΩLiG(ωi;x)frG(ωo,ωi;x)(ωin)dωiL_o^G(\omega_o; x) = \int_\Omega L_i^G(\omega_i; x) f_r^G(\omega_o, \omega_i; x) (\omega_i \cdot n) d\omega_i
LoB(ωo;x)=ΩLiB(ωi;x)frB(ωo,ωi;x)(ωin)dωiL_o^B(\omega_o; x) = \int_\Omega L_i^B(\omega_i; x) f_r^B(\omega_o, \omega_i; x) (\omega_i \cdot n) d\omega_i

在这些公式中,LiR,LiG,LiBL_i^R, L_i^G, L_i^B 分别表示入射光在红、绿、蓝通道的光强,同样,LoR,LoG,LoBL_o^R, L_o^G, L_o^B 分别表示出射光在红、绿、蓝通道的光强。

计算步骤

  1. 光照建模:入射光强 LiL_i 的RGB值可以通过光源的颜色和强度来确定。
  2. 反射计算:BRDF frf_r 对每个通道分别计算反射率。
  3. 积分计算:对于每个通道,独立计算渲染方程的积分结果。
  4. 颜色合成:将三个通道的计算结果组合,得到最终的出射光颜色。

在PhySG中的实现

PhySG利用球面高斯函数(SG)来近似渲染方程,在计算每个SG的积分时,也需要分别计算每个颜色通道的结果。具体来说,环境光照图和BRDF在每个通道上都有独立的SG表示,并且积分结果在每个通道上分别求得,最后组合成RGB图像。

Forward Rendering

在这一部分,文章详细介绍了PhySG方法中的前向渲染步骤。

1. 通过球面追踪找到交点

首先,使用球面追踪算法找到相机光线与几何形状(SDF表示)的交点。具体步骤为:

  • 从光线与物体边界框的交点开始,沿着光线方向前进。
  • 每一步的步长为当前位置的符号距离值。
  • 当步长足够小时,确定交点位置 xx

2. 计算表面法线

在交点位置 xx 处,使用自动微分计算该点的表面法线 nn。具体为:
n=xSn = \nabla_x S
其中,SS 是符号距离函数,x\nabla_x 表示对 xx 求梯度。

3. 计算漫反射率

在交点位置 xx 处,通过一个MLP计算空间可变的漫反射率 a(x;Φ)a(x; \Phi)

4. 评估渲染方程

使用表面法线 nn、环境光照图 {ξk,λk,μk}k=1M\{ \xi_k, \lambda_k, \mu_k \}_{k=1}^{M}、漫反射率 aa、镜面BRDF参数 {λ,μ}\{\lambda, \mu\} 和观察方向 dd 评估渲染方程。具体步骤为:

  • 将环境光照图和镜面BRDF表示为球面高斯函数(SG)。
  • 计算点 xx 处的颜色 Lo(ωo;x)L_o(\omega_o; x)

5. 渲染颜色

通过以上步骤,最终得到相机光线的颜色值,从而完成图像的前向渲染。

全流程总结

为了实现前向渲染,PhySG的具体流程如下:

  1. 使用球面追踪找到光线与几何形状的交点。
  2. 计算交点处的表面法线。
  3. 通过MLP计算交点处的漫反射率。
  4. 使用SG近似渲染方程,计算交点处的颜色。
  5. 渲染出最终图像的像素颜色。

可微性

该渲染管道是完全可微的,其输出(渲染颜色)对所有可优化参数(几何、光照、材料)的梯度均可计算。具体表现为:

  • 渲染颜色对表面法线 nn、环境光照图参数 {ξk,λk,μk}k=1M\{ \xi_k, \lambda_k, \mu_k \}_{k=1}^{M}、漫反射率 aa、镜面BRDF参数 {λ,μ}\{\lambda, \mu\} 的梯度通过SG渲染器计算。
  • 漫反射率 aa 作为MLP的输出,通过链式法则对位置 xx 和 MLP参数 Φ\Phi 计算梯度。
  • 几何模型的梯度通过交点位置 xx 和表面法线 nn 对SDF参数 Θ\Theta 计算梯度。

Initialization

在这一部分,文章详细介绍了PhySG方法的初始化过程。

1. SDF权重的初始化

符号距离函数(SDF)的权重 Θ\Theta 使用一种方法进行初始化,使得初始形状大致为一个球体。这个方法参考了相关文献 [12]。

2. 漫反射率的初始化

空间可变的漫反射率 a(x;Φ)a(x; \Phi) 被初始化为在物体边界框内所有位置处大约为0.5。

3. 镜面BRDF的初始化

镜面反射率(BRDF)的初始参数设置如下:

  • 初始波瓣锐度 λ\lambda 从区间 [95, 125] 中随机抽取。
  • 初始镜面反射率 μ\mu 从区间 [0.18, 0.26] 中随机抽取。

4. 环境光照图的初始化

环境光照图的球面高斯函数(SG)波瓣被初始化为均匀分布在单位球面上,使用球面斐波那契点阵(spherical Fibonacci lattice)进行分布。每个波瓣的颜色初始化为单色,并且随机初始化的波瓣幅度被缩放,使得初始渲染的像素强度大约为0.5。

5. 输入图像的缩放

由于不同拍摄条件下的图像曝光可能会有显著差异,所有物体的输入图像都会乘以相同的常数进行缩放,使得所有缩放后的图像的中值强度为0.5。这种缩放方法可以避免在训练过程中,漫反射率MLP陷入预测全零或全一的状态。

初始化的作用

这种初始化策略有助于:

  • 避免训练初期的数值问题,如漫反射率MLP陷入全零或全一预测。
  • 确保所有可优化参数从合理的初始值开始,使得优化过程更加稳定和高效。

Related Work

符号距离函数 (SDF) 如何表示几何形状

SDF 表示几何形状的原理

符号距离函数 (Signed Distance Function, SDF) 是一种用于表示几何形状的隐式表征方法。它的基本原理如下:

  • 对于一个给定的点 pp ,SDF 值 S(p)S(p) 表示该点到最近的表面的有符号距离。
  • 如果 pp 位于表面上, S(p)=0S(p) = 0
  • 如果 pp 位于物体内部, S(p)<0S(p) < 0
  • 如果 pp 位于物体外部, S(p)>0S(p) > 0

这种表示方法的优势在于,它不仅能够描述表面的位置,还能提供关于点与表面之间距离的信息,从而有助于几何运算,如碰撞检测和距离计算。

如何用SDF表示集合形状

SDF 可以表示复杂的几何形状,包括平滑的曲面和尖锐的边缘。通过以下方式可以表示和操作集合形状:

  1. 基本几何形状:简单的几何形状,如球、立方体、圆柱体等,可以通过简单的数学表达式表示其 SDF 值。例如,半径为 rr 的球的 SDF 可以表示为:
    Ssphere(p)=pcr S_{\text{sphere}}(p) = \|p - c\| - r
    其中 cc 是球心位置。

  2. 布尔运算:SDF 支持几何形状的布尔运算,如并集、交集和差集。例如,两个几何形状的 SDF S1S_1S2S_2 的并集可以表示为:
    Sunion(p)=min(S1(p),S2(p)) S_{\text{union}}(p) = \min(S_1(p), S_2(p))
    交集可以表示为:
    Sintersection(p)=max(S1(p),S2(p)) S_{\text{intersection}}(p) = \max(S_1(p), S_2(p))
    差集可以表示为:
    Sdifference(p)=max(S1(p),S2(p)) S_{\text{difference}}(p) = \max(S_1(p), -S_2(p))

通过这些基本操作,可以构建出复杂的几何形状。

用 MLP 参数化 SDF

MLP 概述

多层感知机 (Multilayer Perceptron, MLP) 是一种前馈神经网络,由输入层、一个或多个隐藏层和输出层组成。每层由若干神经元组成,神经元之间通过带权重的连接相连。通过非线性激活函数,MLP 能够逼近任意复杂的函数。

MLP 参数化 SDF 的方法

在 SDF 表示中,MLP 被用来参数化几何形状,以实现对复杂形状的灵活和高效表示。具体步骤如下:

  1. 输入编码:将 3D 空间中的点 pp 作为输入。为了增强网络的表达能力,特别是对高频细节的表示能力,可以对输入进行位置编码 (Positional Encoding),如使用傅里叶变换将原始坐标扩展到高维空间。

  2. MLP 结构

    • 输入层接收编码后的点 pp
    • 隐藏层通常包含多个非线性激活函数(如 ReLU)后的全连接层。这些层的数量和每层的神经元数量可以根据具体应用进行调整。
    • 输出层产生该点的 SDF 值 S(p)S(p)
  3. 训练

    • 通过采样点及其对应的 SDF 值构建训练数据集。
    • 使用标准的反向传播算法和优化器(如 Adam)来调整网络的权重,使得网络输出的 SDF 值逼近真实值。

通过这种方法,MLP 可以学习并表示复杂的几何形状。由于 SDF 本身的性质,这种表示能够自然而高效地支持几何计算和优化。

示例

假设我们有一个点 pp 经过位置编码后输入 MLP,MLP 的每一层都包含非线性激活函数,最终输出为 SDF 值 S(p)S(p)
S(p)=MLP(PositionalEncoding(p)) S(p) = \text{MLP}(\text{PositionalEncoding}(p))
在训练过程中,通过最小化预测值和真实 SDF 值之间的损失来优化 MLP 的权重,使得网络能够精确表示目标几何形状。

以上解释了符号距离函数如何表示几何形状,以及如何使用多层感知机参数化符号距离函数,从而实现对复杂几何形状的高效表示和优化。

位置编码的原理

位置编码 (Positional Encoding) 是在处理具有位置依赖关系的数据时,为了增强模型的表达能力而引入的一种方法。其基本原理是将输入数据的位置信息编码成更高维的特征,以便神经网络能够更好地捕捉数据中的位置信息和高频细节。位置编码常用于自然语言处理、图像处理和3D重建等领域。

位置编码通过引入一些基于位置的特征,将输入数据从原始空间映射到一个更高维的空间,使得模型能够更好地学习和表示数据中的位置相关信息。这种编码可以是显式的,也可以是隐式的。

常见的位置编码

1. 正弦和余弦位置编码 (Sine and Cosine Positional Encoding)

这是Transformer模型中最常用的位置编码方法,由Vaswani等人在其论文《Attention is All You Need》中提出。具体公式如下:
PE(pos,2i)=sin(pos100002i/d) PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right)
PE(pos,2i+1)=cos(pos100002i/d) PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)
其中,pospos表示数据位置,ii表示维度索引,dd表示每个数据的编码维度。
根据这个公式为每个pos位置的数据生成维度为d的编码。
i值很小的时候,三角函数周期小,是低频分量,PE变化快可以反映全局位置的变化
i值很大的时候,三角函数周期大,是高频分量,PE变化较慢,反映更细粒度的位置信息
这种方法的优点是生成的编码具有周期性和不同频率的特性,有助于模型捕捉不同尺度的位置信息。

2. 学习的位置编码 (Learned Positional Encoding)

与正弦和余弦位置编码不同,学习的位置编码通过将位置编码作为需要学习的参数进行优化。这种方法的编码方式更为灵活,但需要额外的参数学习。具体做法是为每个位置分配一个可训练的向量,并在训练过程中学习这些向量的最佳表示。

3. Fourier 位置编码

Fourier 位置编码通过将输入点的位置进行傅里叶变换,映射到一个高维的特征空间中。具体地,这种方法将原始坐标进行傅里叶基的投影,以获得高频和低频成分:5
PE(p)=[sin(2πBp),cos(2πBp)] PE(p) = \left[\sin(2\pi \mathbf{B}p), \cos(2\pi \mathbf{B}p)\right]
其中,pp是输入的坐标,B\mathbf{B}是一个预定义的频率矩阵。

4. 相对位置编码 (Relative Positional Encoding)

相对位置编码主要用于序列数据中,特别是在自然语言处理任务中。相对位置编码表示的是序列中元素之间的相对位置,而不是绝对位置。它通过捕捉元素之间的相对距离信息,使得模型能够更好地理解序列中的依赖关系。

5. 笛卡尔位置编码 (Cartesian Positional Encoding)

在图像处理任务中,笛卡尔位置编码通过将图像中的像素位置进行编码。例如,给定一个二维位置 (x,y)(x, y),可以将其映射为高维特征向量:
PE(x,y)=[sin(x100002i/d),cos(x100002i/d),sin(y100002i/d),cos(y100002i/d)] PE(x, y) = \left[\sin\left(\frac{x}{10000^{2i/d}}\right), \cos\left(\frac{x}{10000^{2i/d}}\right), \sin\left(\frac{y}{10000^{2i/d}}\right), \cos\left(\frac{y}{10000^{2i/d}}\right)\right]
这种方法可以用于卷积神经网络和其他图像处理模型中,以增强位置信息的捕捉能力。

本文中 PE 的使用

在这篇文章中,Positional Encoding(位置编码)被用于增强多层感知机(MLP)的表达能力,特别是对高频细节的表示能力。具体来说,位置编码通过将输入的3D点进行高频变换,从而增加输入的维度,使得MLP能够更好地学习和表示复杂的几何细节。

Positional Encoding的原理

位置编码的基本思想是将每个输入的3D点 p=(x,y,z)p = (x, y, z) 通过一系列正弦和余弦函数映射到一个高维空间。这个过程可以用以下公式表示:

PE(p)=(p,sin(20πp),cos(20πp),sin(21πp),cos(21πp),,sin(2L1πp),cos(2L1πp)) \text{PE}(p) = \left( p, \sin(2^0 \pi p), \cos(2^0 \pi p), \sin(2^1 \pi p), \cos(2^1 \pi p), \ldots, \sin(2^{L-1} \pi p), \cos(2^{L-1} \pi p) \right)

其中,LL 是频率的数量,决定了映射后的高维空间的维度。对于每个维度 pip_i (如 x,y,zx, y, z),通过正弦和余弦函数将其映射到不同频率的正弦和余弦值上。

为什么使用Positional Encoding

直接将3D点输入到MLP中,MLP可能难以捕捉到高频细节(如复杂的几何特征)。位置编码通过将低维的输入扩展到高维空间,使得MLP可以利用更多的信息,从而更好地学习复杂的函数关系。

Positional Encoding的实现

具体来说,位置编码的实现步骤如下:

  1. 输入3D点:假设输入点为 p=(x,y,z)p = (x, y, z)

  2. 位置编码:将每个坐标通过正弦和余弦函数映射到高维空间。例如,对于一个坐标 xx,位置编码为:
    PE(x)=(x,sin(20πx),cos(20πx),sin(21πx),cos(21πx),,sin(2L1πx),cos(2L1πx)) \text{PE}(x) = \left( x, \sin(2^0 \pi x), \cos(2^0 \pi x), \sin(2^1 \pi x), \cos(2^1 \pi x), \ldots, \sin(2^{L-1} \pi x), \cos(2^{L-1} \pi x) \right)
    yyzz 也进行同样的编码。

  3. 高维输入:将编码后的高维向量输入到MLP中进行处理。

位置编码的效果

位置编码的效果在于:

  • 捕捉高频细节:通过引入高频信息,MLP能够更好地拟合复杂的几何形状。
  • 提高表达能力:增加输入的维度,使得MLP能够处理更加复杂的输入特征。

在论文中的具体实现

根据论文,位置编码的具体实现包括:

  • 使用6个频率成分对3D点的位置进行编码,这样可以捕捉到从低频到高频的各种细节。
  • 将编码后的高维向量作为MLP的输入,使得MLP能够学习并表示复杂的几何形状和细节。

以下是一个简化的实现示例,展示了位置编码如何将3D点映射到高维空间:

import numpy as np

def positional_encoding(p, L):
    pe = [p]
    for i in range(L):
        for j in range(len(p)):
            pe.append(np.sin(2**i * np.pi * p[j]))
            pe.append(np.cos(2**i * np.pi * p[j]))
    return np.concatenate(pe)

# 示例输入点
p = np.array([0.1, 0.2, 0.3])
# 使用6个频率成分进行编码
encoded_p = positional_encoding(p, 6)
print(encoded_p)

球面追踪(sphere tracing)是一种高效的算法,用于在场景中找到射线与表面的交点。

环境光照图(Environment Map)是一种表示场景中光照分布的方式,通常用于渲染中以模拟真实世界中的光照效果。它通常以一种全景图像的形式存储,通过将光源位置和强度映射到一个球面或立方体上,可以在渲染过程中快速查询和计算光照。
在本文中使用多个球面高斯函数混合来表示一个环境光照图。球面高斯函数相当于球面空间的一组基底,可以表示一个球的形状

双向反射分布函数(BRDF)

BRDF(Bidirectional Reflectance Distribution Function,双向反射分布函数)是描述材料如何反射光线的函数。它定义了入射光线和出射光线在表面上的关系。具体来说,BRDF是一个四维函数,表示给定入射方向和出射方向的光反射比例。

空间可变的漫反射率(Spatially-Varying Diffuse Albedo)

指的是表面上每个点的漫反射光的比例是变化的,即每个点的漫反射特性可能不同。

  • 这种变化通过一个MLP来表示,输入是表面点的位置,输出是该点的漫反射率(颜色)。

选择原因

  • 许多真实世界的物体表面的颜色和反射特性并不是均匀的,而是随着位置变化的。通过使用空间可变的漫反射率,可以更准确地捕捉和模拟这些细节,提高渲染的真实性。

共享的单色各向同性镜面反射成分(Shared Monochrome Isotropic Specular

指的是表面的镜面反射光是单色的(即反射光的颜色不随位置变化)且在所有方向上是均匀的(各向同性)。

  • 共享的意思是这个镜面反射特性在整个表面上是统一的,而不是随位置变化的。

选择原因

  • 镜面反射通常是由物体的材料特性决定的,在许多情况下,物体的镜面反射特性是均匀的,使用单色各向同性镜面反射成分可以简化计算。
  • 各向同性假设能够简化计算,而单色假设则减少了需要优化的参数数量。

BRDF的其他成分

BRDF还可以包括其他成分,例如:

  • 各向异性镜面反射:镜面反射率在不同方向上不同,适用于一些特殊材料,如金属或拉丝表面。
  • 菲涅尔效应:描述光线入射角度对反射率的影响,通常用于模拟金属和玻璃的反射特性。
  • 次表面散射:光线在物体表面下层传播后再反射出来,适用于皮肤、蜡等半透明材料。
  • 自遮挡和阴影:考虑到物体本身对光线的遮挡和阴影效果。

在PhySG方法中,选择空间可变的漫反射率和共享的单色各向同性镜面反射成分是为了在保持计算效率的同时,能够准确地模拟大多数实际场景中的物体表面反射特性。这种组合能够提供足够的灵活性来处理复杂的材料反射,同时简化了计算和优化的复杂性。

漫反射率和颜色

在计算机图形学和光学中,漫反射率(Diffuse Albedo)确实可以体现在颜色上。这里是为什么:

漫反射率的定义

  • 漫反射率是表面在不同方向上均匀反射入射光的能力。它是一个比率,表示表面反射的光强度与入射光强度之间的关系。
  • 漫反射假设光在表面上均匀散射,表面各点的反射方向是随机的,并且没有明显的方向性。

漫反射率和颜色的关系

  • 漫反射率常常表示为颜色,因为颜色是我们感知光的方式。颜色可以看作是反射光谱中不同波长的光反射率的组合。
  • 对于一个物体表面,漫反射率描述了该表面在各个可见光波长下反射的比例。比如,一个红色的物体在红色波长下有较高的反射率,而在蓝色和绿色波长下有较低的反射率。因此,我们看到它是红色的。
  • 在计算机图形学中,漫反射率通常表示为RGB颜色向量,其中每个分量(红、绿、蓝)表示在相应波长下的反射率。

为什么选择漫反射率作为颜色

  • 直观理解:用颜色表示漫反射率,可以直观地描述和理解物体的外观。不同的漫反射率对应不同的颜色,使得物体在视觉上呈现出特定的颜色。
  • 物理真实性:在光照模型中,使用颜色来表示漫反射率可以更真实地模拟光在物体表面的反射行为,从而生成更逼真的图像。
  • 简化计算:通过将漫反射率表示为颜色,可以简化渲染过程中的计算,因为颜色可以直接用于光照模型的计算中。

漫反射率在BRDF中的作用

  • 在BRDF(双向反射分布函数)模型中,漫反射部分通常用漫反射率来描述。漫反射率决定了入射光在表面上均匀反射的强度和颜色,而不依赖于观察方向。
  • 这种描述方式有助于分离不同的反射分量,使得模型能够分别处理漫反射和镜面反射等复杂的光照效果。

总结

漫反射率确实可以体现在颜色上,因为颜色是我们感知物体表面光反射特性的主要方式。在BRDF模型中,使用颜色来表示漫反射率可以简化计算,并且直观地描述物体的外观,从而实现更逼真的渲染效果。

赞赏