渲染算法学习(六)-- Real-Time Physically-Based Materials

本文详细探讨了基于物理的渲染(PBR)及其在实时渲染中的应用。PBR致力于模拟真实世界中的材质,但在实时渲染中往往需要简化和近似。文章介绍了迪士尼的BRDF模型和微表面模型,特别是Normal Distribution Function (NDF)和Shadowing-Masking Term。此外,还讨论了Linearly Transformed Cosines(LTC)技术,用于解决多边形光源的着色问题,以及迪士尼的Principled BRDF,这是一种旨在简化艺术家编辑的材质模型。最后,提到了非真实感渲染(NPR)作为快速可靠的风格化工具。

PBR and PBR Materials

  • 《Physically-Based Rendering》

Physically-Based Rendering (PBR)

  • 任何关于渲染的课题都是基于物理的
  • 材质、灯光、相机(透镜)、光线传播等等
  • PBR不仅仅包含基于物理的材质,但是通常大家说的PBR都用来表示基于物理的材质

PBR materials in RTR

  • 材质渲染中实时渲染远远落后与离线渲染(材质的丰富程度)
    • 质量和准确度远低于离线渲染
    • 在保证速度的前提下,尽可能提升材质渲染的质量
  • 实时渲染中提到的基于物理的材质,基本上都不是基于物理的 (这句话的意思应该是,为了提升效率,对基于物理的材质渲染方法进行简化和近似)
  • 优秀的渲染引擎
    • Pixar – RenderMan
    • Disney – Hyperion
    • Weta Digital – Manuka

PBR materials

  • 表面上定义
    • 微表面模型(不是真正意义上的PBR)
    • 迪斯尼BRDF(比较友好,但也不是真正意义上的PBR)
  • 体积上定义
    • 烟和雾
    • 主要关注效率和近似单次散射和多次散射
      • 云、头发、皮肤
  • 通常不会有太多新的理论,但会有很多实现技巧(hacks)
  • 实时渲染中,性能(速度)是考虑的关键因素。
    • 所有材质都是离线材质算法在保证速度的前提下提高渲染质量

Microfacet BRDF

  • 在渲染算法学习(三)中已经有详细笔记,因此这里只做一些新内容的总结

Normal Distribution Function (NDF)

  • 法线方向的一个函数
  • Beckman NDF(这里指各向同性Beckmann NDF)
    D ( h ) = e − t a n 2 θ h α 2 π α 2 c o s 4 θ h (1) \tag1 D(h) = \frac{e^{-\frac{tan^2\theta_h}{\alpha^2}}}{\pi\alpha^2cos^4\theta_h} D(h)=πα2cos4θheα2tan2θh(1)
    其中
    • α \alpha α是物体表面的粗糙程度(值越小越光滑(mirror/specular))
    • θ h \theta_h θh是半程向量 h h h和宏观法线 n n n的夹角
    • 公式(1)与渲染算法学习(三)公式(9)是等价的,只是将公式(9)中的 c o s cos cos项转换成 t a n tan tan项(已经手撕过了)
  • Beckmann NDF类似高斯函数
    • 可以表示不同粗糙程度的表面
    • 定义在坡度空间上(slope space)
      • 可以保证在坡度空间下 ,无限大的函数也能保证不会出现面朝下的微表面
      • 归一化性质
        • 保证NDF函数在per unit solid angle上积分为1
  • GGX分布
    • 分布特点:long tail(长尾)
      • Beckman分布很快就衰减到接近0
      • GGX也是很快衰减,但是在衰减到一定程度时,衰减的速度会减缓
      • 使用GGX分布在渲染光源时,由于其衰减越趋近0,其衰减的速度越慢。因此,高光周围会出现很明显的光晕。这种长尾巴可以带来很自然渲染的效果。
  • GTR (Generalized Trowbridge-Reitz)
    • 为GGX扩展方法,可以通过调整参数自定义尾巴长度
      • γ \gamma γ值越小,尾巴越长
      • γ = 2 \gamma = 2 γ=2为GGX
      • γ \gamma γ取最大值时为Beckman NDF

Shadowing-Masking Term(Term G)

  • 该节填一下渲染算法学习(三)的坑,详细做一下微表面模型G项的总结
  • the geometry term G
    • 表示微表面模型自遮挡情况
      • 光源被遮挡(shadowing)
      • 相机看不到的微表面(Masking)
      • 因此G也称Shadowing-Masking Term
    • G项为了解决由于遮挡产生的darkening(变暗)的现象
      • 由于遮挡问题,导致最终渲染结果没有通过计算得到的结果亮。因此需要提供一个变暗的操作。
      • 变暗操作的一些性质
        • 垂直微表面模型看时,不做变暗操作(无自遮挡)~1
        • 与微表面掠射角度(grazing angle)看时,会变暗非常多(自遮挡很多)~0
  • The Smith shadowing-masking term
    • 分成两部分(由于shadowing和masking是相关的,该方法假设这两项不相关)
      • shadowing
      • masking
        G ( i , o , m ) ≈ G 1 ( i , m ) G 1 ( o , m ) (2) \tag{2} G(i,o,m) \approx G_1(i,m)G_1(o,m) G(i,o,m)G1(i,m)G1(o,m)(2)
        其中
        • G 1 ( i , m ) G_1(i,m) G1(i,m)为shadowing自遮挡项
        • G 1 ( o , m ) G_1(o,m) G1(o,m)为masking自遮挡项
    • 缺陷
      • 有能量损失
      • roughness越大,能量损失越严重(越暗)
        • 因为微表面越粗糙,沟壑越多,反射光更容易被其他微表面遮挡。因此多次弹射的占比越大。因此只考虑一次弹射计算BRDF,会有能量丢失。
    • 白炉测试:测试BRDF能量损失
    • 解决方法
      • 将损失的能量补回来
      • 准确方法[Heitz et al. 2016],适用于离线渲染
      • RTR方法
        • 被遮挡与发生下次弹射是同一概念
        • The Kulla-Conty Approximation
          • 通过经验模型来补充丢失的能量
    • The Kulla-Conty Approximation
      • 如果要补回损失的能量,就要计算出一次弹射时有多少出射radiance( L o ( p , ω o ) ) L_o(p, \omega_o)) Lo(p,ωo))
      • 因此
        • Kulla-Conty设从各个方向入射的radiance为1,即( L i ( p , ω i ) = 1 L_i(p, \omega_i)=1 Li(p,ωi)=1)
        • 先求出微表面需要进行一次弹射的着色点的出射radiance,公式如下
          E ( μ o ) = ∫ 0 2 π ∫ 0 1 f ( μ o , μ i , ϕ ) μ i d μ i d ϕ (3) \tag{3} E(\mu_o) = \int_0^{2\pi} \int_0^1f(\mu_o,\mu_i,\phi)\mu_i\mathrm{d}\mu_i\mathrm{d}\phi E(μo)=02π01f(μo,μi,ϕ)μidμidϕ(3)
          其中
          • f ( μ o , μ i , ϕ ) f(\mu_o,\mu_i,\phi) f(μo,μi,ϕ)为BRDF项
            • 该方法认为 ϕ \phi ϕ μ o \mu_o μo μ i \mu_i μi无关
          • 由于 L i ( p , ω i ) = 1 L_i(p, \omega_i)=1 Li(p,ωi)=1。因此,公式无入射radiance项
          • 渲染方程 c o s cos cos项在公式(3)中被换元
            • 将公式(3)用渲染方程表示
              • E o ( p , ω 0 ) = ∫ Ω + f r ( p , ω i , ω o ) c o s θ i d ω i E_{o}(p, \omega_0) = \int_{\varOmega^+}f_r(p, \omega_i, \omega_o)cos\theta_i \mathrm{d}\omega_i Eo(p,ω0)=Ω+fr(p,ωi,ωo)cosθidωi
            • 由于单位球面可以展开为对 θ \theta θ ϕ \phi ϕ 的积分
              • r 2 s i n θ d θ d ϕ r^2sin\theta d\theta d\phi r2sinθdθdϕ (渲染算法学习(二))
            • 单位立体角 d ω = s i n θ d θ d ϕ d\omega = sin\theta d\theta d\phi dω=sinθdθdϕ
            • 换元
              • E o ( p , ω 0 ) = ∫ Ω + f r ( p , ω i , ω o ) c o s θ i s i n θ i d θ i d ϕ E_{o}(p, \omega_0) = \int_{\varOmega^+}f_r(p, \omega_i, \omega_o)cos\theta_i sin\theta_i d\theta_i d\phi Eo(p,ω0)=Ω+fr(p,ωi,ωo)cosθisinθidθid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值