【笔记】【GAMES202】Real-time Physically-Based Materials(Surface models)

Real-time Physically-Based Materials(Surface models)

PBR

PBR与PBR材质

  • PBR

    • 一切基于物理,如材质、光照、相机、light transport等
    • 不仅限于材质,但通常指材质
  • RTR中的PBR

    • 实时渲染的材质种类、准确度等是不如离线的
    • 实时渲染的PB通常并不真的physically based

RTR中的PBR材质

  • Surface
    • 大部分是微表面模型(使用错误,所以不太PBR)与Disney原则的BRDF(美术友好,但也不太PBR)
  • Volumes
    • 大部分关注性能和近似的single/multiple scattering(云、头发、皮肤等)
  • 通常在使用上会使用很多hacks,并且非常关注性能

Microfacet BRDF微表面BRDF

在GAMES101中根据微表面模型提出了以下的BRDF模型吧
$$
f(i,o)=\frac{F(i,h)G(i,o,h)D(h)}{4(n,i)(n,o)}
$$

Fresnel

  • 反射随着grazing angle(掠射角)增加会增多

在物理上需要考虑光线的极化-s极化与p极化

image-20220928111429350

  • 近似-Schlick’s approx
    $$
    R(\theta)=R_0+(1-R_0)(1-\cos\theta)^5
    \R_0=(\frac{n_1-n_2}{n_1+n_2})^2
    $$

Normal Distribution Function

描述微表面的法线分布

  • 法线集中

    • Glossy-specular
  • 法线分散

    • Diffuse
  • 常用的法线分布函数模型

    • Bechmann
    • GGX
    • 其他Detailed Model
Bechmann NDF

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

  • $\alpha$: roughness
  • $\theta_h$ : 半程向量h与法线夹角
  • 近似于用高斯函数来建立模型,alpha描述了标准差,也即光滑程度
  • 分母归一化保证了projected solid angle的积分域为1
  • 定义在slope space(坡度空间)上
    • 高斯函数的surpport(支撑集) 是无限大的,但可以映射到-90~90度的空间
  • image-20220928114334006
  • 描述的是各向同性的结果
GGX(Trowbridge-Reitz)
  • Long tail(拖尾表现更好)
  • 过渡渐变看起来更自然
image-20221001172957712

image-20221001174745586

Extending GGX(GTR)
  • GTR(Generalized Trowbridge-Reitz)
  • 更长的拖尾

image-20221001175309985

Shadowing-Masking Term

  • Geometry term G(几何遮蔽项)
  • 表示微表面自遮挡的数量,表现为入射光线被遮挡产生shadow,反射到眼睛的光线被遮挡为mask
    • Shadowing-light
    • Masking-eye

image-20221001180224677

  • 为什么需要几何遮蔽项
    • 考虑如果没有G项,掠射角的入射和出射会发生什么?
    • 根据Fresnel,在掠射部分的反射会变成1,
    • BRDF分母接近0,最后的结果是在边缘部分接近白色,这是不合理的。
    • image-20221001181331248
Smith Shadowing-masking term

假设法线为一种统计学分布模型,

  • 将shadowing和masking的部分分开考虑
  • 假设$G(i,o,m)\simeq G_1(i,m)G_1(o,m)$

image-20221001182858495

问题

  • 在Multiple Bounces(多次弹射)中产生的能量损失(在粗糙度高时更明显)
image-20221001183353105

(如下图)在仅有的Uniform的全局光照下去照亮物体,对于specular的物体发生的正确反射,导致和背景融为一体。(白炉测试)

Roughness的部分会使反射光更容易被遮挡。因此在实际光线多次发生Bounce的过程中,只考虑一次Bounce,会导致能量损失

image-20221001183951640

  • Accurate methods[Heitz et al. 206]
  • 在实时渲染中较慢
  • Basic idea
    • Being occluded = next bounce happening
    • 被遮挡代表着下一次弹射发生

Kulla-county Approx

https://fpsunflower.github.io/ckulla/data/s2017_pbs_imageworks_slides_v2.pdf

  • 依据经验来补全多次反射的能量

  • 2D BRDF lobe中出射的总能量
    $$
    E(\mu_0)=\int^{2\pi}_0\int^1_0f(\mu_o,\mu_i,\phi)\mu_id\mu_id\phi
    \\mu=\sin\theta
    $$

在上式中注意$\mu d\mu d\phi$ 的部分,换成$\sin\theta$ ,即$\cos\theta\sin\theta d\theta d\phi$ ,也即球面参数化($\theta$, $\phi$)的表达。

  • 丢失的能量
    • 我们可以设计一个 additiional lobe,使得这部分积分为$1-E(\mu_o)$
    • 出射的BRDF lobe和入射方向是不同的
    • 考虑交换性,可以是如下形式$c(1-E(\mu_i))(1-E(\mu_o))$

$$
f_{ms}(\mu_o,\mu_i)=\frac{(1-E(\mu_i))(1-E(\mu_o))}{\pi(1-E_{avg})}
\E_{avg}=2\int_0^1E(\mu)\mu d\mu
$$

  • $E_{avg}$ 的处理
    • 对于复杂的积分,在split sum中,我们的处理方式是——precompute/tabulate预计算或制表
    • $E_{avg}$ 的维度是多少 / $E_{avg}$ 有多少参数
      • 只需考虑$\mu_0$ 和roughness

image-20221001194632992

  • 验证

$$
E_{ms}(\mu_o)=\int^{2\pi}0\int^1_0f{ms}(\mu_o,\mu_i,\phi)\mu_id\mu_id\phi
\=2\pi\int^1_0\frac{(1-E(\mu_i))(1-E(\mu_o))}{\pi(1-E_{avg})}\mu_id\mu_i
\=2\frac{1-E(\mu_o)}{1-E_{avg}}\int_0^1(1-E(\mu_i))\mu_id\mu_i
\=\frac{1-E(\mu_o)}{1-E_{avg}}(1-E_{avg})
\=1-E(\mu_o)
$$

image-20221001194824094

  • 以上的内容基于没有颜色(白色)的BRDF
  • 但如果考虑其他颜色,也就代表着光线能量的吸收,也即能量的减少(损失)
    • 因此我们只需要计算整体的能量损失
  • 定义Average Fresnel平均菲涅尔
    • 忽略入射角每次反射平均反射的能量

$$
F_{avg}=\frac{f_0^1F(\mu)\mu d\mu}{f_0^1\mu d\mu}=2\int_0^1F(\mu)\mu d\mu
$$

而$E_{avg}$ 代表我们能看到的能量(不参与多次bounce)

所以最后的能量可以分类为:

  • 直接看到的能量$F_{avg}E_{avg}$
  • 一次弹射后被看到的能量$F_{avg}(1-E_{avg})F_{avg}E_{avg}$
  • ….
  • k次弹射后被看到的能量$F_{avg}^k(1-E_{avg})^kF_{avg}E_{avg}$

相加起来的级数求和(这一部分直接和没有颜色的BRDF相乘)
$$
\frac{F_{avg}E_{avg}}{1-F_{avg}(1-E_{avg})}
$$

image-20221001200140171

再来解释一遍带颜色的多次弹射的能量损失。

我们之间所做的计算都是基于没有颜色,也就是白色,也就是不吸收能量,所得到的结果。但是,如果物体存在颜色,也即会吸收能量,那么,在multi-bounces的过程中,每次弹射,都会吸收对应的能量,而我们用平均的菲涅尔来定义,这样就能忽略弹射的角度,而把所有的弹射加起来后,把这一部分由于颜色吸收能量带来的损失,和前面的乘起来,就是最后的结果。

Undesirable Hack
  • 将Microfacet BRDF和一个diffuse lobe结合起来(在CV中的材质识别普遍使用)
  • 这是不科学的(Cook-Torrance BRDF就是这么干的)
  • 微表面已经将表面解释成表面的某种分布了,又怎么会加上一部分的理想漫反射呢
    • 物理不正确,且能量不守恒
    • (但也有加上diffuse后保证能量守恒的处理方式,这肯定也是存在的)

Linearly Transformed Cosines(LTC)

image-20221001213010346

线性变换余弦方法——多边形光照下的微表面BRDF着色

  • 解决microfacet model 的shading问题

  • 主要基于GGX法线分布(其他模型也是可以的)

  • 不考虑shadows

  • 多边形光源

  • 想法

    • 任意2D的BRDF lobe可以被线性变换为余弦
    • 光源的形状也可以被变换
    • image-20221001213451716

在cosine lobe上积分变换后的光源是有解析解的

image-20221001213822511

image-20221001213659851

做法

认为多边形光源内部发出的光是uniform的,即Li是相同的,即从任意位置观察的多边形光源的Li是相同的
$$
\omega_i=\frac{M\omega_i’}{||M\omega_i’||}
\L(\omega_o)=L_i\cdot \int_PF(\omega_i)d\omega_i
\=L_i\cdot \int_P\cos(\omega_i’)d\frac{M\omega_i’}{||M\omega_i’||}
\=L_i\cdot \int_{P’}\cos(\omega_i’)Jd \omega_i’
$$

Disney Principled BRDF迪士尼原则的BRDF

  • 微表面模型的缺陷
    • 微表面模型不适合表现真实的物理材质
    • 微表面模型缺少diffuse项
    • 解释不了多层的材质
    • 基于物理的参数艺术上不好用
      • 反射率n-ik(复数)
  • Disney Principled BRDF
    • Art directable, 不要求物理上正确
    • 实时渲染中认为是PBR的
    • 需要使用更直接的参数,使用尽可能少的参数
    • 参数最好是0-1的。如果有必要,也最好允许能够超出这个范围
    • 所有有关联的参数应该鲁棒且合理
image-20221002112204105
  • sheen
    • 类似天鹅绒的光泽效果
  • clearcoat
    • 清漆

Non-Photorrealistic rendering(NPR)

NPR——stylization(fast and reliable)

  • 来源于真实感渲染
  • 利用抽象
  • 强化重点

应用

  • 艺术
  • 可视化
  • 指示说明
  • 教育
  • 娱乐

风格化

  • 描边
  • 阴影
  • 色块
  • 。。。

Outline Rendering

  • 描边不只是轮廓

image-20221002121116909

  • Boundary

  • Crease

    • 折痕
  • Material edge

  • Silhouette

    • 在物体外部轮廓上,要求有多个面共享的边界

shading方法

image-20221002121509079

  • 描边粗细不一致

Geometry方法

背面渲染成黑色沿顶点法线外扩

image-20221002121836905

postprocess方法

图像边缘检测的方法

image-20221002132828971

Color blocks色块

image-20221002133535272

  • Hard shading: thresholding on shading
  • posterization: thresholding on final image

image-20221002133741767

image-20221002133857329

Strokes Surfaces Stylization

  • sketch
image-20221002134051191 image-20221002135210430