PBR总结
前言
上一篇介绍了蒙特卡洛路径追踪,并解决它存在的问题,得到的渲染效果很不错,但还未提及基于物理的BRDF,本篇介绍菲涅尔效应、微表面模型、次表面散射,Cook-Torrance BRDF
次表面散射
在真实世界中许多物体都是半透明的,比如皮肤、玉、蜡等。当光进入到透明/半透明材料时,一部分被反射,一部分被吸收,还有一部分经历透射(进入物体内部)。这些材质经过光源的透射后,物体本身会根据材质的厚度而显示出不同的透光性,光线在这些透射部分也可以互相混合、干涉
次表面散射(Subsurface Scattering):光射入半透明材质后在内部发生散射,最后射出物体并进入视野中产生的现象,是指光从表面进入物体经过内部散射,又通过物体表面的其他点射出的过程,不过当光线透射进入物体内部时会和物体内部的微小粒子发生碰撞并再次产生散射,又因为碰撞会发生能量转换(转换为热能),所以在多次碰撞后光线的能量会消失殆尽,我们把光线在物体内部将能量消耗殆尽且没有透射出物体的情况视为被物体吸收
如图,左边很明显光线射入物体内部后,又射出从物体内部射出,而右边这种模型光线并没有摄入物体内部,只经历了吸收和反射
所有的光和物质相互作用都是两种现象的结果:散射(scattering)和吸收(absorption)
- 散射:发生在当光线遇到任何种类的光学不连续性时,可能存在于具有
不同光学性质的两种物质分界之处
,晶体结构破裂处,密度的变化处等。散射并不改变光的总量,只改变方向
。其中散射又分为反射(reflection)和折射(refraction)
- 吸收:发生在
物质内部
,造成一些光转变成另一种能量并消失。吸收会减少光量,但不影响方向
菲涅尔效应
-
菲涅尔效应:当光入射到折射率不同的两个材质的分界线时,一部分光会被反射,而我们所看到的光线会根据我们的观察角度以不同强度反射的现象。简单来说,
反射的光量取决于介质、法向量n和入射向量L间的夹角
如图,若我们*乎垂直看去该书,几乎没有反射现象,但若*乎*视该书,会发现反射现象十分明显
-
那么菲涅尔效应有什么用呢?它可以真实地模拟现实世界中的反射(除开金属)
微表面理论
-
微表面理论:假设表面是由不同方向的微小细节表面组成。每一个微小的*面都会根据它的法线方向在一个方向上反射光线(Microfacet Theory)。在真实世界中的物体表面往往不是理想镜面,以微观角度上看,绝大部分物体都有粗糙度,若物体有一定的粗糙度,微观表面的法线和宏观表面的法线方向是不同的,且随着粗糙度的增加,微观表面法线的方向会逐渐偏离宏观表面法线
不是所有的表面法线 和半角法线(half normal)相等的微表面都会反射光线,其中有些会被遮挡
-
为什么需要微表面理论?
微表面本身法线的分布可以代表不同粗糙程度的材质
-
微表面模型
为了以数学方式对这种表面粗糙度进行建模,我们便采用微表面模型。在此模型中,将微观表面模拟为由多个微小且*滑的微表面构成,而微观表面法线正是这些微表面上的法线.我们需要求得入射光线L经镜面反射后反射光线在观察方向v上的微表面片段在所有微表面中的占比,这种微表面片段越多,镜面光强度越高。下图中,h为此类微表面片段的真正法线
-
法线分布函数(Normal Distribution Function, NDF)
D(h)描述组成表面一点的所有微表面的法线分布概率。可以这样理解:向 NDF 输入一个朝向 h,NDF 返回朝向h 的微表面数占微表面总数的比例,比如有 8%的微表面朝向是 h,那么就有 8%的微表面可能将光线反射到 v 方向
该函数在接下来的内容会提及
Cook-Torrance BRDF
Cook-Torrance 模型作为图形学中最早的基于物理的 BRDF 模型,由 Cook 和 Torrance 提出, 是 Torrance-Sparrow 模型的一个应用版本。现今,Cook-Torrance 模型已经成为基于物理着色的标准模型之一。Cook-Torrance 模型将物理学中的菲涅尔反射引入了图形学,实现了比较逼真的效果
Cook-Torrance BRDF考虑了次表面散射和微表面模型——对于用微表面模型表示的物体表面,我们认定该表面由多个*滑的镜面组成,这会产生镜面反射现象;光射入半透明材质后在内部发生散射,当光线透射进入物体内部时会和物体内部的微小粒子发生碰撞并再次产生散射,又因为碰撞会发生能量转换(转换为热能),所以在多次碰撞后光线的能量会消失殆尽,我们把光线在物体内部将能量消耗殆尽且没有透射出物体的情况视为被物体吸收
;对于那些透射进入物体内但最终又透射出物体的光线会产生漫反射
现象。因此,Cook-Torrance BRDF考虑微表面模型的镜面反射和漫反射
也就是说,Cook-Torrance BRDF由漫反射和镜面反射组成:\(\large f_r = k_df_{lambert} + k_sf_{cook-torrance}\),其中\(k_d\)表示入射光线折射的能量占比,\(k_s\)表示入射光线反射的能量占比
漫反射BRDF
推导过程:
假设认定散射点的入射光线和反射光线是均匀的
(radiance相同),该点不发光也不吸收光线
(能量守恒),可以推出irradiance也是相同的
那么可以将\(f_rL_i(\omega_i)\)从积分里取出,再对半球进行积分可得\(L_i\)且\(L_i = L_o\),那么可得:$$\large f_r = \frac{1}{\pi}$$
不过目前的\(f_r\)是一个不吸收能量的BRDF,为了达到漫反射的效果,我们可以加个反射率\(\rho\),范围在[0,1],可得:$$\large f_r = \frac{\rho}{\pi}$$
镜面反射BRDF
镜面反射的BRDF是基于微表面模型的,被称作Cook-Torrance microfacet specular shading model。它的表达式如下
其中,\(l\)为入射向量,\(h\)为与微*面做比较用的半程向量,\(v\)为反射向量,\(n\)为宏观表面法线
F:菲涅尔反射函数(Fresnel 函数).在不同的表面角下表面所反射的光线所占的比率
D:法线分布函数(NDF).估算在受到表面粗糙度的影响下,朝向方向与半程向量一致的微*面的数量
G:阴影遮罩函数(Geometry Factor,几何因子)——未被shadow 或 mask的比例.当一个*面相对比较粗糙时,*面表面上的微*面有可能挡住其他的微*面从而减少表面所反射的光线
以上所有函数都使用的是*似实现,,其中D使用Trowbridge-Reitz GGX,F使用Fresnel-Schlick*似(Fresnel-Schlick Approximation),而G使用Smith’s Schlick-GGX
法线分布函数:Trowbridge-Reitz GGX
法线分布函数Trowbridge-Reitz GGX*似地求得和h取向一致的微表面的占比
。它的表达式如下:$$\large D(h) = \frac{\alpha2}{\pi((n·h)2(\alpha^2 - 1) + 1)^2}$$,\(\alpha\)为粗糙度,h为与微*面做比较用的半程向量
当粗糙度很低时,和h取向一致的微表面会集中在一个很小的范围内,因此会生成一个亮斑;而当粗糙度很高时,和h取向一致的微表面分布的范围很大,因此生成的效果会偏暗
几何函数:Schlick-GGX
几何函数Schlick-GGX*似地求得微*面间相互遮蔽的占比
。它的表达式如下:$$\large G(n,v,k) = \frac{n·v}{(n·v)(1-k) + k}, k_{direct} = \frac{(\alpha + 1)^2}{8}或 k_{IBL} = \frac{\alpha^2}{2}$$,\(\alpha\)依旧是粗糙度(粗糙度越高的表面,相互遮盖的概率越高),\(k\)是\(\alpha\)的remapping(重映射),若对象是直接光照则使用\(k_{direct}\),若对象是IBL光照则使用\(k_{IBL}\)
白色说明没有微表面阴影,黑色说明微表面完全被遮盖
菲涅尔方程
菲涅尔方程描述被反射的光线对比光线被折射的部分的占比
,这个占比随观察角度的不同而不同
-
菲涅尔方程的精确表达
-
菲涅尔方程的*似(Schlick’s approximation)
可以看到菲涅尔方程的精确表达非常复杂,但Schlick*似简化了这一表达式且效果相差无几\(R_F(\theta_i) = R_F(0°) + (1 - R_F(0°))(1-\cos \theta_i)^5, R_F(0°) = \frac{n_1 - n_2}{n_1 + n_2}\),其中\(R_F \in [0,1]\)(\(R_F\)为一个RGB向量),\(R_F\)为反射光量,而(\(1-R_F\))为折射光量;\(R_F(0°)\)是介质的一种属性,\(R_F(0°)\)部分常见的有关属性数值如下
Cook-Torrance BRDF方程
所有面纱已经撩开,可得Cook-Torrance BRDF方程:$$\large L_0(p, \omega_0) = {\displaystyle \int (k_d \frac{\rho}{\pi}, k_s\frac{DFG}{4(\omega_0 · n)(\omega_i·n)}L_i(p, \omega_i)n·\omega_i), d\omega_i}$$,其中\(k_d\)表示入射光线折射的能量占比,\(k_s\)表示入射光线反射的能量占比
reference
[理论 - LearnOpenGL CN (learnopengl-cn.github.io)](https://learnopengl-cn.github.io/07 PBR/01 Theory/)
GAMES101:现代计算机图形学入门 – 计算机图形学与混合现实在线*台 (games-cn.org)
https://github.com/QianMo/Game-Programmer-Study-Notes/blob/master/Content/