跳转至

六 实时高质量着色 Real-Time Physically-based Materials

本课程为闫令琪老师的 GAMES202-高质量实时渲染

此为个人的课堂笔记,如有疏漏,请多指正

基于物理的渲染 Physically-based Rendering (PBR):渲染中所有内容都是基于物理的,因此 PBR 的概念涵括材质、光照、相机、光线传输等等,而不仅仅只限于材质Materials

基于物理渲染的材质 Physically-based Rendering Materials:在业界的用词习惯中,常常用 PBR 的缩写来指代 PBR Materials,而不是它上面那个最原始的含义

在实时渲染中,由于需要牺牲质量来保证速度,很多所谓的 Physically-based ​的情况并不再是真的基于物理的,而是各种近似假设。例如对于材质表面,常用的 微表面模型 (microfacet models) ​迪士尼标准BRDF (Disney principled BRDFs) ​都不是真的基于物理的

1 基于物理的材质 PBR Materials

1)微表面模型 Microfacet Model

学习此部分内容的前置知识:微表面模型 Microfacet Model,详细内容参考 GAMES101-材质与外观(微表面模型)。在这一小节中会在此基础上对微表面模型进行更进一步的分析

Microfacet Model ​是一种基于物理的局部光照模型,它假设物体的表面是凹凸不平的,宏观的表面由许多微小的平面(即微表面)构成,光线在每个微平面上发生理想镜面反射或折射

微表面模型 Microfacet Model
微表面模型 Microfacet Model

微表面模型的 BRDF 如下:

微表面模型的 BRDF
微表面模型的 BRDF

菲涅尔项描述的是在不同的观察角度下表面反射的光线比率,几何函数描述微平面自我遮挡的属性,而法线分布函数估算在给定粗糙程度下的微平面朝向与半角向量一致的数量

(1)菲涅尔项 Fresnel Term

Fresnel term ​描述了景物表面反射光线的比例依赖于光线的入射角和偏振这一现象

微表面模型的 BRDF 的 菲涅尔项\(F\) 如下:

菲涅尔项F
菲涅尔项F

从 菲涅尔项\(F\) 可以看出,当入射光线和法线基本垂直时,上述的 \(cos\theta_t\) 的值接近于0,光线就越接近于全反射。也即视角越接近于“掠视角 grazing angle”时,光线越接近于全反射:

不同观察角度下的桌面反射程度
不同观察角度下的桌面反射程度

不过由于介质不同,根据上式推导,反射能量随入射光线和法线之间的角度的变化趋势也是不同的。对于绝缘体 Dielectric ​来说是一个指数增长的趋势,而导体 Conductor ​则会因为偏振的原因(布鲁斯特角)趋势有所不同:

绝缘体(左)、导体(右)反射率随与法线夹角增大的变化曲线
绝缘体(左)、导体(右)反射率随与法线夹角增大的变化曲线

不过,由于上述菲涅尔项F十分“正确”,导致其计算过程特别复杂,往往会使用 Schlick's Approximation(石里克近似)来近似计算菲涅尔项:

\[ \mathbf{F}(\omega_i,h)=\mathbf{R}_0+(1-\mathbf{R}_0)(1-(\omega_i\cdot h))^5 \]

其中,\(R_0=(\frac{\eta_1-\eta_2}{\eta_1+\eta_2})^2\),其相当于光线垂直入射表面时的反射系数。石里克近似本质上就是对基础反射率做一个非线性插值

需要注意的是,由于上述提到的导体 Conductor 的菲涅尔项的趋势和常用的绝缘体 Dielectric 的菲涅尔项趋势很不一样,使用石里克近似就会出现很大的偏差。Lazániy 和 Szirmay-Kalos 的文章 Fresnel term approximations for metals 以及 Hoffman 的文章 Fresnel Equations Considered Harmful 讨论了这个问题的解决方案

(2)法线分布函数 Normal Distribution Function

Normal Distribution Function 决定了有多大比例的微表面法线朝向半程向量\(h\),它是定义在半球面上的三维随机变量服从分布的概率密度函数

分布的方差越小、越集中,则描述的材质越接近于 Glossy ​的材质;分布的方差越大、越分散,则描述的材质越接近于 Diffuse 材质:

Glossy 和 Diffuse 材质的表面法线分布情况
Glossy 和 Diffuse 材质的表面法线分布情况

目前常用的用于描述法线分布函数的模型有 Beckmann 法线分布函数,GGX 法线分布函数等

a)Beckmann Model

Beckmann 法线分布函数由定义在坡度空间 (slope space) ​上的正态分布导出,因此十分类似于高斯函数:

\[ D(h)=\frac{e^{-\frac{tan^2\theta_h}{\alpha^2}}}{\pi\alpha^2cos^4\theta_h} \]

其中,\(\alpha\) 是表面的粗糙程度(其值越大则越粗糙,对应着高斯函数中的方差越大),\(\theta_h\) 是微表面法线和宏观表面法线之间的夹角

注:将正态分布定义在坡度空间上,可以保证计算时的 \(\theta_h\) 一定在 90° 范围内,而不会出现面朝下的微表面。具体内容在此不进行详细阐述

坡度空间
坡度空间
b)GGX Model

GGX 法线分布函数又称 Trowbridge-Reitz 法线分布函数:

\[ D_{GGX}(h)=\frac{\alpha^2}{\pi cos^4\theta_h(\alpha^2+tan^2\theta_h)^2} \]

GGX 相对于 Beckmann 的一个关键特征是:长尾 (long tail),即当随机变量的取值偏离其数学期望时,相应的概率下降得更慢一些:

Beckmann 分布和 GGX 分布曲线图
Beckmann 分布和 GGX 分布曲线图

这种“长尾”可以带来十分优秀的性质:1)对于高光和高光的衔接处,法线的变化幅度较缓,从而形成一圈“光晕”;2)并且对于非高光处,能量衰减也放缓,从而被照亮的区域会更大:

Beckmann 分布和 GGX 分布的光照结果比较
Beckmann 分布和 GGX 分布的光照结果比较
c)GTR Model

WDAS 的 Brent Burley 对 GGX 模型进行了拓展,得到了一个更为“长尾”的模型 GTR (Generalized-Trowbridge-Reitz):

\[ D_{GTR}(h)=\frac{c}{(\alpha^2cos^2\theta_h+sin^2\theta_h)^{\gamma}} \]

其中,\(c\) 是数据归一化常数;当 \(\gamma=2\) 时,\(c=\frac{\alpha^2}{\pi}\),此时 GTR 退化为 GGX

而当 \(\gamma\) 的取值比2更大时,GTR 就越接近 Beckmann Model:

GTR 分布
GTR 分布

(3)阴影遮蔽项​ ​Shadowing-Masking Term

Shadowing-Masking Term ​又称 Geometry Term(几何项),是光能由于微表面之间相互遮挡而衰减的系数。从光源出发到达着色点的路径被微表面遮挡被称为 Shadowing,从摄像机出发到达着色点的路径被微表面遮挡被称为 Masking

Shadowing 现象(左)和Masking 现象(右)
Shadowing 现象(左)和Masking 现象(右)

当光线入射方向或观察方向几乎垂直于物体表面时,微表面之间差不多没有相互遮挡,阴影遮蔽项接近于1;

当光线入射方向或观察方向几乎平行于物体表面,即接近于掠射 (grazing angle) 时,微表面之间相互遮挡的程度很大,阴影遮蔽项接近于0

阴影遮蔽项\(G\) 的作用在于:由于实际情况下会存在的微表面遮挡,光线入射方向或观察方向与物体表面不垂直时需要进行一个 darken 的操作,避免因为缺少这一项而呈现不真实的“过亮”的现象。例如下图(已经考虑了 阴影遮蔽项\(G\))如果不考虑 阴影遮蔽项\(G\),那么下面 法线\(n\) 与 入射方向\(i\) 或者 出射方向\(o\) 的点乘中必有一项接近于0,导致整个 BRDF 的值极大,从表现上来看就是球的边缘(处于掠视的位置)将会出现过亮的全白曝光:

缺少 阴影遮蔽项G 会导致 边缘过亮
缺少 阴影遮蔽项G 会导致 边缘过亮

对于 阴影遮蔽项\(G\) 的一个常用模型是 Smith shadowing-masking term,它将 Shadowing 和 Masking 进行了拆分考虑:

Smith shadowing-masking term
Smith shadowing-masking term

(4)Kulla-Conty Approximation

即使综合考虑了 菲涅尔项\(F\)、法线分布函数\(D\) 和 阴影遮蔽项\(G\),上述微表面模型仍然无法精准描述实际情况下的微表面,而是会产生能量损失的问题,表面越粗糙则能量损失越多(下图为白炉测试,检测出了能量损失的情况):

微表面模型的能量损失问题
微表面模型的能量损失问题

造成整个问题的原因在于:虽然 阴影遮蔽项\(G\) 考虑了光线被微表面遮蔽造成的能量损失,但是没有考虑完全,忽略了光线在微表面之间经多次散射后又射出的情况

Kulla-Conty Approximation 就是通过一种经验式的补全来将这部分损失的能量加回去,具体文章参考 Revisiting Physically Based Shading at Imageworks

a)Kulla-Conty Approximation 的具体推导过程

对于原始的渲染方程:

\[ L_o(p,\omega_o)=\int_{\Omega^+}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)cos\theta_i V(\omega_i) \mathrm{d}\omega_i \]

第一步:此处需要考虑的是 BRDF 的积分,其他部分不在考虑范围内,即只需要考虑 \(\int_{\Omega+}f_{micro}(p,\omega_i,\omega_o)cos\theta_i\mathrm{d}\omega_i\) 的部分,其中 \(f_{micro}\) 就是微表面模型的 BRDF项。在不考虑 菲涅尔项\(F\) 时(也即假设光线一定是全反射而不会发生折射,此时 \(F=1\))可以将该部分称为在 \(\omega_o\) 方向 上的反照率 (albedo),简写为 \(E\)。此处,将 方向\(\omega\) 拆分为其用 \(\phi\)\(\theta\) 两个角的表示来对上式进行展开,然后根据 \(\mathrm{d}\omega=sin\theta\mathrm{d}\theta\mathrm{d}\phi\) 以及进行换元操作可以得到如下对于 \(E\) 的计算公式:

\[ E(\mu_o)=\int_0^{2\pi} \int_0^1 f(\mu_o,\mu_i,\phi)\mu_i \mathrm{d}\mu_i\mathrm{d}\phi \]

其中,\(\mu=sin\theta\)

因此在 方向\(\omega_o\) 也就是 方向\(\mu_o\) 上,反照率为 \(E(\mu_o)\),表明了在该方向上损失的能量比例是 \(1-E(\mu_o)\)

第二步:将所有方向上的反照率平均起来,得到 平均反照率\(E_{avg}\) (假设 菲涅尔项\(F\) 为1时该表面有多少比例的能量最终会被反射出来)如下:

\[ E_{avg}=\frac{\int_0^1E(\mu)\mu \mathrm{d}\mu}{\int_0^1\mu \mathrm{d}\mu}=2 \int_0^1E(\mu)\mu\mathrm{d}\mu \]

因此总的平均能量损失比例就是 \(1-E_{avg}\),对于真实的物理情况,这其中只包括被物体真正吸收而损失的能量比例,即 \(1-E_{avg}=被物体真正吸收的能量比例\),但是使用微表面模型计算时没有考虑到光线在微表面之间经多次散射后又射出的情况,这就导致了计算 平均反照率\(E_{avg}\) 时这部分能量比例丢失了,使得 \(1-E_{avg}\) 多了一项,即 \(1-E_{avg}=被物体真正吸收的能量比例+应该经多次散射后又出射的能量比例\)

第三步:单独计算 菲涅尔项\(F\) 的平均值 \(F_{avg}\)

\[ F_{avg}=\frac{\int_0^1F(\mu)\mu \mathrm{d}\mu}{\int_0^1\mu \mathrm{d}\mu}=2 \int_0^1F(\mu)\mu\mathrm{d}\mu \]

考虑到这样一个基本事实:在微表面成功反射(而不是被折射吸收)但是被微表面遮挡的光线,就会进行下一次的反射,并最终彻底反射出微表面或者被吸收。因此,可以利用 菲涅尔项\(F\) 来迭代计算每一次反射出来的能量比例(注意区分:菲涅尔项\(F\) 表示的是有多少比例的能量会发生反射,而 平均反照率\(E_{avg}\) 表示的是发生反射的能量有多少比例能最终反射出表面

于是,当光线入射到表面时:

  • 只考虑初次反射,能被直接看到的能量比例:\(F_{avg}E_{avg}\);该值表示入射的所有能量乘上一个 菲涅尔项\(F\) 得到发生反射的能量的比例,再考虑其中能够反射出当前表面的比例,即再乘上一个平均反照率 \(E_{avg}\)
  • 考虑在微表面之间散射1次后,这一次散射能看到的能量比例:\(F_{avg}(1-E_{avg})·F_{avg}E_{avg}\);其中 \(F_{avg}(1-E_{avg})\) 表示前一次反射中发生反射的能量的比例 \(F_{avg}\) 中有多少暂时没有反射出表面 \(1-E_{avg}\),也即本次散射的所有入射能量;然后本次散射的所有入射能量 \(F_{avg}(1-E_{avg})\) 首先乘上一个 菲涅尔项\(F\) 得到其中发生反射的能量的比例,再考虑其中能够反射出当前表面的比例 \(E_{avg}\),最终得到 \(F_{avg}(1-E_{avg})·F_{avg}E_{avg}\)
  • 考虑在微表面之间散射2次后,这一次散射能看到的能量比例 \(F_{avg}(1-E_{avg})·F_{avg}(1-E_{avg})·F_{avg}E_{avg}\)
  • ……
  • 在微表面之间散射n次后,第n次散射能看到的能量比例 \(F_{avg}^k(1-E_{avg})^k·F_{avg}E_{avg}\)
  • 所以,那些经多次散射后应该射出的能量总损失的能量的比例 \(f_{add}\) 为: $$ f_{add}=\frac{\sum_{i=1}^\infty F_{avg}^k(1-E_{avg})^k·F_{avg}E_{avg}}{1-E_{avg}}=\frac{F_{avg}^2E_{avg}}{1-F_{avg}(1-E_{avg})} $$

最后,便可以得到补偿多次散射能量 \(f_{add}\) 后的 BRDF:\(f_r= f_{micro}+f_{add}·f_{ms}\)

其中,\(f_{micro}\) 是原本的微表面模型定义的 BRDF,\(f_{ms}\) 是需要补偿的能量的补偿系数。对于 \(f_{ms}\) 的值应该如何计算,Kulla 和 Conty 提出了如下计算公式:

\[ f_{ms}(\mu_o,\mu_i)=\frac{[1-E(\mu_o)][1-E(\mu_i)]}{\pi(1-E_{avg})} \]

这个公式可以被如下证明过程证明其正确性:

补偿系数的证明过程
补偿系数的证明过程

因此,对于补偿多次散射能量 \(f_{add}\) 后的 BRDF:\(f_r= f_{micro}+f_{add}·f_{ms}\),其中的 平均反照率\(E_{avg}\)、补偿系数\(f_{ms}\) 和 菲涅尔项均值\(F_{avg}\) 都可以在开始绘制前预计算,在解渲染方程时直接调用相应的数值

(注:某个视角方向的反照率 \(E(\mu_o)\) 可以提前对 观测方向\(\mu_o\) 和 粗糙度roughness 进行二维预打表计算,而 平均反照率\(E_{avg}\) 的预计算就只需要对 粗糙度roughness 进行一维预打表)

使用 Kulla-Conty Approximation 最终的实现效果如下,很好地解决了能量损失的问题:

Kulla-Conty Approximation 解决能量损失问题
Kulla-Conty Approximation 解决能量损失问题
b)除 Kulla-Conty Approximation 以外的能量补偿方式

首先需要明确的一点是:Kulla-Conty Approximation 方式仍然是一种 Hack,它并不是真正去模拟微表面中的光线散射情况,而只是通过数学推导,利用能量补偿系数来将 BRDF项 计算时缺失的能量补回去。但是其是基于基本的物理事实进行推导的,保持了能量守恒

而工业界常用的一种所谓“能量补偿”的方式是直接在微表面模型的 BRDF ​后面加上一个 Diffuse 的 BRDF,虽然也可以实现效果,但是这是一种纯粹的暴力近似,能量不守恒,在物理上并不成立:

\[ f_r= f_{micro}+f_{diffuse} \]

比如它就会导致在一些不应该发光的位置由于加上了 Diffuse 的 BRDF 而不正常发光

2)迪士尼标准 BRDF 模型 Disney principled BRDFs

(1)微表面模型 Microfacet Model 的缺陷

引入迪士尼标准BRDF模型 Disney principled BRDFs 的主要原因在于微表面模型 Microfacet Model 存在一些缺陷:

  1. 微表面模型对于真实情况下的一些材质难以表现。例如刷了一层清漆的木板表面(多层材质),它既要有清漆的高光反射又有被清漆覆盖的木板的漫反射,这个用微表面模型很难实现
  2. 微表面模型不方便直观使用,对艺术家不友好(没有可视化的调参选项)

因此 Disney principled BRDFs 从基本设计上就要求是一个艺术家友好的,但是并不需要在物理上是正确的,它只是对物理现象的近似拟合。需要注意的是,虽然 Disney principled BRDFs 本质上已经不是“基于物理的”了,但是由于其实现效果仍然看起来很“基于物理的”,所以在实时渲染中还是将其认为是 PBR Materials

(2)Disney principled BRDFs 的一些重要设计原则

  1. 使用一些直观的而非物理的变量作为参数
  2. 使用的参数数量尽可能少(参数空间越大,越会造成冗余,即某些参数组合的效果可以用其它参数组合也表现出来)
  3. 参数的合理范围应该是从0到1
  4. 在必要时,即使参数的取值超出了 [0,1] 范围,也能得到有意义的结果
  5. 所有的参数组合应该尽可能的稳健和合理
Disney principled BRDFs
Disney principled BRDFs

注:上述的“表面软光泽”由于找不到准确的翻译,我自行翻译的,可能有误

具体的 Disney principled BRDFs 的实现和计算公式可以参考这篇博客:高质量实时渲染:基于物理的BRDF材质 | YangWC's Blog

(3)Disney principled BRDFs 的优缺点

Disney principled BRDFs 的优势:

  1. 十分易于理解和控制
  2. 用一个模型就可以描述很多类型的材质

Disney principled BRDFs 的缺陷:

  1. 源代码实现十分的复杂(不过是开源的)
  2. 并不是真的“基于物理的”,但是是物理拟合的,所以在实时渲染的实际应用中问题不大
  3. 参数空间特别大(不过也正是因此其表现能力很强)

2 着色技术

1)在多边形光源的照明下着色微表面模型:Linearly Transformed Cosines 算法

在真实世界中,面光源是更为常见的光源类型。对于图形渲染来说,实现面光源的着色光照能够极大地增强渲染真实感。根据多边形光源着色物体表面,需要在多边形覆盖的区域中对定义在球面上的 BRDF 计算定积分,但是直接计算定积分相当困难

Linearly Transformed Cosines (LTC) ​算法通过转换多边形光源微表面模型的散射波瓣到统一的余弦上(相对于任意光源与任意 BRDF 更容易做积分),在不考虑可见性的情况下快速地求解出绘制方程的解析解。因此 LTC 算法并不仅限于微表面模型的计算,而是对于这类连续性的散射波瓣都可以应用

2)LTC 算法的核心思想

在给定了观察方向 \(\omega_o\) 后,对于任何 BRDF 的散射波瓣 \(F(\omega_i)\),都可以在余弦函数描述的波瓣 \(cos\omega_i'\) 的基础上通过一个线性变换 \(M\) 得到,反之可以用逆变换 \(M^{-1}\) 得到。因此,为了得到 BRDF 的余弦函数描述的散射波瓣,则需要对所有光线入射方向 \(\omega_i\) 进行线性变换 \(M^{-1}\) 得到 \(\omega_i'\),对光源积分域 \(P\) 进行线性变换 \(M^{-1}\) 得到 \(P'\)

面光源的光照着色积分
面光源的光照着色积分

将上述变换代入到渲染方程后的具体过程如下:

LTC 算法
LTC 算法

于是,在实时渲染计算时,LTC 算法的核心思想是:

  1. 首先预计算一系列不同观察方向和粗糙度下 Microfacet BRDF 转换到余弦波瓣的线性变换 \(M^{-1}\)
  2. 然后在着色时查表,根据线性变换 \(M^{-1}\) 转换光线入射方向立体角积分微元 \(\mathrm{d}\omega_i\) (雅可比矩阵)和多边形光源积分域 \(P\)
  3. 最后对转换为余弦波瓣的 BRDF 计算定积分

具体的对于线性变换矩阵 \(M\) 的获得以及对转换后的定积分的计算过程可以参考以下这两篇文章:《GAMES202:高质量实时渲染》4 实时高质量着色:Microfacet Model、LTC(Linearly Transformed Cosines)、非真实感渲染(NPR) - 知乎 (zhihu.com)

高质量实时渲染:基于物理的BRDF材质 | YangWC's Blog

3 非真实感渲染(风格化渲染)Non-Photorealistic Rendering (NPR)

对比于真实感渲染模拟景物在真实环境中的光照效果(关注重点为光照、阴影、材质等等),生成犹如照片的图像,非真实感渲染 Non-Photorealistic Rendering ​模拟艺术式的绘制风格,生成风格化的图像

在实时渲染中,NPR 的目标是快速而可靠地生成风格化的结果,通常使用一些轻量级的解决方法,在着色器中进行一些简单而巧妙的处理

NPR 一般的研究思路是从真实感渲染出发,进行合理地抽象强调重要的部分,得到风格化的结果:

  1. 卡通风格 NPR 通常描边以强调物体的轮廓 (outline),使用分界明显的色块,而不是平滑过渡的颜色
  2. 素描风格 NPR 则通过不同疏密的线条纹理来生成结果

NPR 有几个非技术实现上的关键点需要注意:

  1. NPR 的实现仍然是基于 真实感渲染PR 的结果的,因此若 真实感渲染PR 的部分没有实现正确,最后实现的 非真实感渲染NPR 也得不到良好的结果
  2. NPR 最困难的点并不在于最后的实现,而在于如何将艺术效果“翻译”成图形学的某些技术,如何去找到哪些图形学技术能实现特定艺术效果

1)描边

描边的前提的轮廓 (outline),而轮廓不仅仅是最外缘的轮廓 (contours),而是包含了以下几个部分:

  1. Boundary / border edge:物体外边界轮廓(不能是多面共享的交接)
  2. Crease:折痕,即多面共享的交接
  3. Material edge:材质交界边缘
  4. Silhouette edge:在物体外边界轮廓上的折痕(必须是多面共享的交接)。S 是 C 的子集
轮廓 outline
轮廓 outline

描边的一些主要实现方法:

  1. 在着色时Shading时进行描边
  2. 使用几何方法进行描边
  3. 对图像后期处理进行描边

(1)在着色时Shading时进行描边

在Shading时设定一个阈值,使那些法线方向与观察方法近乎于垂直的表面(接近“掠视角 gracing angle”)更暗一些。不过,这样得到的描边效果可能粗细不一,因为它们的法线变化速率不一

在着色时时进行描边
在着色时时进行描边

(2)使用几何方法进行描边

在着色前扩大那些法线方向和观察方向相同的模型面片,即让模型的背面比正面更大一些,并在着色时指定背面的颜色是黑色的。于是,绘制出的模型正面就会带有一圈黑边,对应于延伸出的模型背面

使用几何方法进行描边
使用几何方法进行描边

(3)对图像后期处理进行描边

可以直接对未描边的渲染结果寻找轮廓(例如使用索贝尔算子 Sobel operator),然后对这些轮廓进行锐化

对图像后期处理进行描边
对图像后期处理进行描边

也可以在法线图和深度图上进行分析提取出轮廓:

在法线图和深度图上进行分析提取出轮廓
在法线图和深度图上进行分析提取出轮廓

2)色块

可以通过阈值化处理来对渐变的颜色进行分界处理来得到分界明显的色块。这个过程既可以在Shading过程中进行,也可以在渲染生成的图像结果上进行

色块
色块

3)素描风格化

Praun 等人的文章 Real-time hatching 提出了一种生成素描风格图像的方法,用不同疏密的线条来表示模型表面的明暗起伏

算法根据 TAMs (tonal art maps) 进行着色。TAMs 由一系列密度不同的线条纹理组成,而各个不同密度的线条纹理都有各自的 MipMap。在着色时,根据着色点的明暗及位置选取合适的纹理,例如比较暗的地方选取 TAMs 中密度更大的线条纹理,比较远的地方(为了保证密度的均一性)选择 MipMap 中较小的图

TAMs
TAMs
素描风格化
素描风格化

本篇笔记主要参考了以下两篇博客,感谢 WC Yangzhiwei 两位大佬的分享:

高质量实时渲染:基于物理的BRDF材质 | YangWC's Blog

《GAMES202:高质量实时渲染》4 实时高质量着色:Microfacet Model、LTC(Linearly Transformed Cosines)、非真实感渲染(NPR) - 知乎 (zhihu.com)


2023年7月 ziao德