Motivation: 光线照射到物体表面会发生一定的作用, 然后散射到空气中或进入物体内部进行光学作用. 这就是光能照亮世界的原因!!

反射模型用来描述表面光的散射行为. 通常来说这种行为由多种空间混合的BRDF和BRDF混合描述. 表面反射模型可以来源于很多数据:

  • 测量数据. 这是最精确的, 也是最复杂的, 现实世界的表面反射分布属性在实验中经过充分测量, 然后以表格形式或者基函数集合的形式来使用
  • 现象学模型: 定性的描述某些表面属性, 例如”粗糙度”, 这种BSDF最容易使用, 因为基于直观理解.
  • 模拟. 有时我们可以获取表面组合的底层信息. 例如我们知道颜料是由悬浮在某种媒介中的一些彩色颗粒组成, 某种特定的织物由某某些已知反射属性的某些纤维组成; 这种情况下基于微几何的建模可以模拟产生反射数据. 这个模拟可以渲染时完成, 也可以提前处理好, 然后生成一系列基函数来用于渲染.
  • 物理(波)光学: 某些反射模型从对光的精细建模推导而出, 将光作为波来处理, 计算麦克斯韦方程组的解, 并计算基于已知表面属性的散射行为. 这些模型计算费时, 并且有的时候并不会比基于集合光学的方法更准确
  • 几何光学: 类似模拟的方法, 如果表面的底层散射和集合信息已知, 有的时候可以直接得到闭合的反射模型的解. 几何光学是的光和表面的交互可追踪.

我们首先来讲解一下大致的渲染流程:

对于每条射线, 找到场景中和物体相交的最近点, 并且获取相交点的表面着色信息(法向量, 反射率, 粗糙度, BSDF信息等, 这通常包含在材质中). 最后, 利用相交点的表面信息和到达相交点的辐射亮度进行样本积分决定最终的定点着色.

我们首先需要了解一些基本术语. 表面反射可以分为四种类型:

  • 漫反射 diffuse, 例如黑板, 无光油漆
  • 光泽镜面 glossy specular, 例如塑料\颜料
  • 理想镜面 perfect specular, 例如镜子, 玻璃
  • 复古反射 retro-reflective, 例如月球, 丝绒

除此之外, 反射具有各项同性和各向异性:

  • 各项同性 isotropic, 大多数物体
  • 各向异性, anisotropic, 例如粉刷金属, 光盘, 多种类型衣服

几何设定

反射计算通常在反射坐标系中进行, 该坐标系包含两个相切的向量和相交点的法向量.

"采样重建"

Fig.1: 反射坐标系

着色坐标系统也可以表达为球面座标\((\theta, \phi)\)

"采样重建"

Fig.1: 反射坐标系

镜面反射和透射 (Specular Reflection And Transmission)

理想光滑表面的光学行为用物理和几何光学都比较容易建模. 对于给定\(\omega_i\)方向, 所有的光线都在一个方向\(\omega_o\)进行散射. 在球面坐标系中, 反射方向是:
$$\begin{cases}
\theta_i = \theta_o \\
\phi_o = \phi_i + \pi
\end{cases}$$

对于投射:
$$\begin{cases}
\theta_t = Snell(\theta_o) \\
\phi_o = \phi_i + \pi
\end{cases}$$

透射中的Snell定律基于相交表面两边介质的折射率.折射率描述的是光在某种介质中的传播速度和真空中传播速度的比值.我们用\(\eta\)表示折射率,则Snell定律为:
$$ \eta_i sin \theta_i = \eta_t sin \theta_t$$

通常,折射率随着光的波长而改变,也就是说,入射光在两种不同介质中间通常会散射到不同的方向.这就是色散效应.不过一般来说会忽略这种效应.

菲涅尔反射率(Fresnel Reflectance)

除了反射和透射的方向,我们还需要计算入射光反射和透射的比例.对于精确的物理建模,反射和透射的比例依赖于方向.菲涅尔方程组描述了从表面反射的光的数量.他们是麦克斯韦方程组在光滑表面的解.
菲涅尔方程组输入折射率和入射光的角度, 输出入射光两种不同偏振状态的反射率.不过通常认为光是无偏的.这种假设下,菲涅尔反射率就是平行偏振和垂直偏振的平方平均值.
物体表面属性可以用材质表达,材质可以分为以下三种;

  • 绝缘体, 他们的折射率是实数.例如玻璃,水,空气
  • 导体, 他们的折射率是复数形式,
  • 半导体

导体和绝缘体都可以用相同的菲涅尔方程组求解.但是由于绝缘体的折射率是实数的,所以形式上更加简单.

镜面反射公式

现在推导镜面反射公式. 由于镜面反射只在一个方向有值,所以其他方向的积分都不存在
$$L_o(\omega_o) = \int f_r(\omega_o, \omega_i) L_i(\omega_i) |cos \theta_i| d\omega_i \\
= F_r(\omega_r)L_i(\omega_r)$$
其中\(\omega_r = R(\omega_o, \vec{n})\)表示反射方向, \(F_r(w)\)表示反射光的比例.注意到这里\(\cos\theta_i\)消失了,为什么呢?因为其本身就是输入光的角度引起的损耗,而\(F_r\)中已经包含了角度的损耗.
我们的目的是知道\(f_r\).上式的BRDF可以使用狄拉克分布来构造.回顾之前提到的狄拉克函数的一个属性:
$$ \int f(x) \delta(x-x_0)dx = f(x_0)$$
很容易就可以通过\(\delta\)函数求得正确的BSDF:
$$f_r(\omega_o,\omega_i) = \delta(\omega_i - \omega_r) \frac{F_r(\omega_i)}{cos\theta_r}$$

镜面透射公式

假设\(\eta_i\)和\(\eta_o\)是输入光和输出光的媒介折射率.用\(\tau\)表示入射能量的透射比例,则根据菲涅尔等式可知道\(\tau = 1 - F_r(\omega_i)\)
最终我们得到:
$$L_o = \tau L_i \frac{\eta_o^2}{\eta_i^2}$$
类似镜面反射,我们可以得到镜面透射的BTDF:
$$f_r(\omega_o, \omega_i) = \frac{\eta_o^2}{\eta_i^2} (1 - F_r(\omega_i)) \frac{\delta(\omega_i - T(\omega_o, \vec{n}))}{|cos\theta_i|}$$

朗伯反射 Lambertian Reflection

最简单的BRDF之一就是朗伯反射,他模拟完美漫反射表面,将入射光线均匀在所有方向散射.现实生活中这种表面几乎不存在,但是对于很多表面例如无光油漆,他是非常好的近似.
朗伯反射非常简单,其只有一个参数\(R\),即表面反射率, 对应BRDf是\(R / \pi\)

微表面模型

许多粗糙表面的几何光学建模都是基于微表面模型.其对微表面的朝向进行统计学描述.

"采样重建"

Fig.2: 微表面模型

由于视网膜的光感受器和相机中的像素都是有限面积探测器,因此通常将大量的宏观(远大于入射光波长)表面粗糙度投射到单个探测元素上,从而生成基于多个微表面的聚合亮度.

"采样重建"
Fig.3: 微表面聚合亮度

事实上微表面的漫反射是基于月球的观察的得到的.当满月的时候,首先月亮整体是漫反射的,但是月亮的边缘也是很明亮的,而不是朗伯模型计算的那样接近于0.

"采样重建"
Fig.4: 满月.注意边缘并不是接近于黑色,而是也比较明亮

这说明朗伯模型并不适用于描述月球这类物体的反射.究其原因在于朗伯模型没有粗糙度的概念,对于光滑的漫反射表面模拟比较好,但是对于粗糙漫反射模拟就很差.而粗糙度会造成边缘的亮度增加,使得整体外观更加光滑,

"采样重建"
Fig.6: 粗糙度会影响漫反射的边缘亮度,使得整体更加平整

事实上朗伯模型对于所有基于粗糙度的光学现象朗伯模型都没有办法模拟,例如粗糙物体的高光模糊

"采样重建"
Fig.6: 粗糙度会影响高光模糊

基于此,提出了可以描述表面粗糙度的微表面模型.微表面模型的两个主要部分是微表面的分布和用来描述微表面的光散射行为的BRDF.一般用镜面反射来描述微表面BRDF,但是诸如Oren-Nayar模型也会采样诸如朗伯反射来描述微表面.
计算微表面模型时,必须考虑到微表面的局部光照效果.具体包括三个:

  • 遮罩, masking
  • 阴影, shadow
  • 内交互 interreflection

奥伦纳亚尔漫反射 Oren-Nayar Diffuse Reflection

这是Oren 和Nayar在1994年发明的基于球面高斯分布的V-形微表面的粗糙表面反射模型.该高斯分布有一个单独的参数\(\sigma\)描述, \(\sigma\)表示微表面的朝向角度的标准差. 他们发现现实世界的物体不会展现完美的朗伯反射.具体来说,粗糙表面在光照方向和观察方向接近的时光会更加明亮.从地球上看月亮,光照方向和观察方向基本一致,所以边缘部分会更加明亮.
这种模型并没有闭合性解, 所以他们找到了一个很好的近似:
$$f_r(\omega_i,\omega_o) = \frac{R}{\pi}(A+ B max(0, cos(\phi_i-\phi_o)) sin\alpha tan\beta)$$
该模型具有以下特点:

  • 基于物理建模的漫反射
  • 基于几何光学
  • 解释了粗糙表面的视角依赖的亮度外观变化
  • 考虑到了部分内交互
  • 粗糙度用Torrance-Sparrow模型建模
  • 朗伯模型实际上只是该模型当粗糙度为0的时候的一个特例.

关于该模型的详细推导,请参见[Oren-Nayra]详细推导文章

微表面分布函数

基于镜面反射和透射的微表面反射模型在模拟许多光泽材质例如金属,塑料,毛玻璃等的光散射行为非常有效.首先介绍他的几何属性.回顾上图1, 微表面模型的一个重要特点就是表面法向量的分布 \(D(\omega_h)\).理想的光滑表面的微表面模型可以用delta分布 \(D(\omega_h) = \delta(\omega_h - (0, 0, 1)) \) 来描述.
微表面分布函数必须正则化来确保物理真实,也就是说给定微表面的微分区域,微表面的投影面积必须等于微表面的微分区域面积.
一种广泛使用的微表面分布函数是Beckmann 和 Spizzichino在1963年提出来的基于高斯分布的微表面模型.
$$D(\omega_h) = \frac{e^{-tan^2\theta_h / \alpha^2}}{\pi \alpha^2 cos^4 \theta_h}$$
另外一个有效的微表面分布函数是Trowbridge 和Reitz在1975年提出来的模型.他们都可以用来描述各向异性的粗糙表面.Trow模型具有更高的拖尾区域,意味着对于远离表面法向量的方向会更加缓慢的趋向0, 这个特性和许多现实世界的表面匹配的很好.

遮罩和阴影 Masking And Shadowing

微表面法向量的分布不足以描述微表面模型的全部特性.一个重要的需要考虑的情况是:一些微表面从某个视角观察的时候不可见, 因为他们被其他微表面遮挡了,这既可能是表面挡住了反射光(Masking),也有可能是表面挡住了光源直射光(Shadowing).这些效果由Smith’s遮罩-阴影函数 \(G_1(\omega,\omega_h)\) 来描述,它描述了法向量是\(\omega_h\)的微表面在方向\(omega\)可见的比例.

菲涅尔入射效应(Fresnel Incidence Effects)