c7w's blog

辐射度量学中的基本概念与物体材质

发布于 # Learning

这篇 blog 对图形学中学到的相关概念进行回顾 :)

Blinn-Phong 着色模型

着色模型是计算机图形学中的一个概念,用于描述如何计算在给定光照条件下,图形物体的颜色着色(Shading)指的是计算图形物体表面各点颜色的过程。它是用于将三维物体渲染成二维图像的重要步骤之一。

着色是具有局部性的(Shading Locality),这是说在着色计算中,每个像素的颜色值只与其周围相对较小区域内的几何形状和光照条件有关。在着色计算的过程中,我们只考虑参与着色计算的这个物体,而没有考虑其他物体,这样是无法表现阴影的。

Blinn-Phong 着色模型是一种基于 Phong 着色模型的改进,是 OpenGL 和 Direct3D 等渲染库的默认着色模型。它使用了半程向量(Halfway Vector)的概念来计算镜面高光(Specular Highlight),比 Phong 模型更加精确地模拟了光的反射和物体表面的光滑程度。具体来说,Blinn-Phong 着色模型使用了以下三个分量来计算最终颜色:

  1. 漫反射分量:表示光线照射到物体表面后被散射的部分,这部分颜色通常与物体表面的颜色相同或类似。
  2. 镜面反射分量:表示光线照射到物体表面后发生镜面反射的部分,通常呈现为白色高光。Blinn-Phong 着色模型使用半程向量来计算这个分量。
  3. 环境光分量:表示在没有直接光照的情况下,物体表面被间接照射的部分,通常呈现为比较暗淡的颜色。这个分量可以理解为整个场景的背景色或环境色。

Blinn-Phong Shading

漫反射 Diffuse Reflection 对于某一个平面的漫反射项,假设某光源的光照强度为 IdI_d,距离着色点的距离为 rr,着色点的漫反射系数为 kdk_dn\vec{n} 表示物体表面的法向量,l\vec{l} 表示从物体表面指向光源的向量。那么漫反射项可以表示为:

Ld=kdIdr2max(0,nl)L_d = k_{d} \frac{I_{d}}{r^2} \max(0, \vec{n} \cdot \vec{l})

高光项 Specular Term 基于如果视线方向 v\vec v 和镜面方向相近,那么半程向量就跟平面法向相近的事实,我们定义半程向量 h:=bisector(v,l)=v+lv+l\vec h := \text{bisector}(\vec v, \vec l) = \frac{v+l}{||v+l||}。然后我们可以定义高光项:

Ls=ksIsr2max(0,nh)pL_s = k_{s} \frac{I_{s}}{r^2} \max(0, \vec{n} \cdot \vec{h})^{p}

其中,IsI_{s} 表示光源的强度,距离着色点的距离为 rrksk_{s} 表示物体表面的镜面反射系数,n\vec{n} 表示物体表面的法向量,h\vec{h} 表示半程向量,pp 表示反射高光的粗糙程度,一般取值在 1110001000 之间。为什么要带有 pp 次方呢?这是因为我们想让产生高光的夹角处于一个相对较小的范围:

p values

环境光照 Ambient Term 环境光照的强度不取决于物体,我们在这里大胆假设每个地方、每个方向的环境光照的大小都相同。也就是说,这一项会填充图中的黑色区域,将图像整体提升某个光照强度。形式化地,可以表示为:

La=kaIaL_a = k_a I_a

最终 Blinn-Phong 着色模型的实现就是上述三项相加。

辐射度量学,BRDF 与渲染方程

辐射度量学

辐射度量学提供了在物理上精准地描述光这个物理量的方法。我们将 Cover 以下概念:

Radiant flux 辐射通量(Radiant flux)是指电磁波或其他形式的辐射能量的总量,通常以单位时间内辐射出的能量总量来度量,单位是瓦特(W)或者流明(lumen, lm)。它是一个物理量,用于描述从光源或辐射源发出的辐射能量的总量。辐射通量不仅包括可见光,还包括其他电磁波,如紫外线、红外线和微波等。

接下来要介绍的物理量

Radiant intensity 辐射强度(Radiant intensity)是指单位立体角内,从辐射源某一方向发出的辐射功率密度,单位是瓦特每立体弧度(W/sr,记为“坎德拉” cd)。它是一个物理量,用于描述辐射源在某个方向上发射光线的强度。数学定义为 I(ω)=dΦdωI(\omega) = \frac{d\Phi}{d\omega},这里 Φ\Phi 是 radiant flux。特别地,若光源均匀辐射,则我们有 I=Φ4πI = \frac{\Phi}{4 \pi}

补充:立体角的定义

Irradiance 辐照度(Irradiance)是指单位面积(该平面要与光线垂直)上接收到的辐射功率,通常用瓦特每平方米(W/m²,lux)来表示。辐照度是一个物理量,用于描述辐射源向表面或物体发射的辐射能量在单位面积上的分布情况。数学定义为 E(x)=dΦ(x)dAE(x) = \frac{d\Phi(x)}{dA}

Falloff: not intensity, but irradiance

Radiance 辐射度(Radiance)是每单位立体角每单位投影面积上,由表面反射、发射或接收的能量。辐射度是光线的属性。数学定义上,L(p,ω)=d2Φ(p,ω)dωdAcosθL(p, \omega) = \frac{d^2\Phi(p, \omega)}{d\omega dA \cos \theta}

Radiance

Irradiance 是一个表面 dAcosθdA \cos \theta 接收到的能量,Radiance 是该表面朝着某个 ω\omega 立体角方向辐射出去或接收到的能量,后者具有表明方向的能力。二者关系可以表述为:

E(p)=H2Li(p,ω)cosθ dωE(p) = \int_{H^2} L_i(p, \omega) \cos \theta \ d\omega

这里 H2H^2 表示半球面。

BRDF 双向反射分布函数

BRDF(Bidirectional Reflectance Distribution Function)用于描述光在物体表面反射的方式。它是指在给定入射角和出射角的情况下,物体表面对于入射光线反射光线的能量分布情况

用 BRDF 表示反射

ωi\omega_i 方向到达物体表面的 Radiance 会被转换成能量 EE 进而被物体表面吸收,而物体表面吸收的能量又会转化成分散到 ωo\omega_o 方向的 Radiance。BRDF 表述的就是这两个 Radiance 之间的比例关系。

BRDF 的定义

使用 BRDF 可以用来定义镜面反射和漫反射。此外,BRDF 还可以用来定义物体表面的材质。

渲染方程

于是,借助于 BRDF 的定义,我们考虑真实的光线传播。

反射方程

首先我们来考虑反射方程。从某个点 dAdAωr\omega_r 方向出射的 radiance,可以通过考虑所有 dAdA 到达这个点的 radiance 乘以其对应的 BRDF 占比,然后求和得到。

有了反射方程之后,我们自然而然就可以得出渲染方程

Lo(p,ωo)=Le(p,ωo)+Ω+Li(p,ωi)fr(p,ωi,ωo)(nωi)dωiL_{o}\left(p, \omega_{o}\right)=L_{e}\left(p, \omega_{o}\right)+\int_{\Omega^{+}} L_{i}\left(p, \omega_{i}\right) f_{r}\left(p, \omega_{i}, \omega_{o}\right)\left(n \cdot \omega_{i}\right) \mathrm{d} \omega_{i}

渲染方程是反射方程项加上物体表面相对于 ωo\omega_o 方向的自发光项。

材质与外观 Materials and Appearance

在图形学中,材质可以用 BRDF 来表示。接下来,我们介绍几种典型的材质。

漫反射材料 Diffuse/Lambertian Material

Diffuse Material

我们定义漫反射材料会将任何方向的入射光均匀地分散到所有的出射方向上。其 BRDF 的分布情况由由上图所示。

如果我们假设入射光也是均匀分布在各个角度上的(Li(ωi)=LiL_{i}\left(\omega_{i}\right) = L_i),BRDF 对于各个出射方向也是常数 frf_r,物体表面不会自发光,我们直接套用渲染方程的定义可以得到:

Lo(ωo)=H2frLi(ωi)cosθi dωi=frLiH2cosθi dωi=πfrLi\begin{aligned} L_{o}\left(\omega_{o}\right) &=\int_{H^{2}} f_{r} L_{i}\left(\omega_{i}\right) \cos \theta_{i} \mathrm{~d} \omega_{i} \\ &=f_{r} L_{i} \int_{H^{2}}\cos \theta_{i} \mathrm{~d} \omega_{i} \\ &=\pi f_{r} L_{i} \end{aligned}

这里 dωi=r2sinθ dϕ dθd \omega_i = r^2 \sin\theta \ d\phi \ d\theta。进而我们可以定义:

ρ:=frπ{\rho} := f_{r}{\pi}

这里 ρ\rho 就是我们说的 Albedo Color,称为物体表面的反射率,其取值在 [0,1][0, 1] 之间,表示物体表面对均匀入射光 LiL_i 的反射率 Lo(ωo)Li\frac{L_o(\omega_o)}{L_i}。这里 Albedo 可以是单通道的值,也可以是光谱的连续函数,但一般我们使用三通道 RGB 来表示分别对三种颜色的反射率。

抛光的金属 Glossy Material

Glossy 的材质

理想反射/折射材质

BSDF

Texture Maps

与 Deferred Shading 中 Channel 的关系

Normal Map Example

Specular Roughness and Metallic Map Examples

Ambient Occlusion Example

Ambient Occlusion ON Example

参考资料