C/C++教程

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

本文主要是介绍渲染算法学习(六)-- Real-Time Physically-Based Materials,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • PBR and PBR Materials
    • Physically-Based Rendering (PBR)
  • PBR materials in RTR
    • PBR materials
  • Microfacet BRDF
    • Normal Distribution Function (NDF)
    • Shadowing-Masking Term(Term G)
    • Linearly Transformed Cosines
    • Disney’s Principled BRDF
    • Non-Photorealistic Rendering (NPR) -- Fast and Reliable Stylization
  • 小结

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θh​e−α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π​∫01​f(μo​,μi​,ϕ)μi​dμi​dϕ(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θi​dω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θi​sinθi​dθi​dϕ
            • 令 μ = s i n θ \mu = sin\theta μ=sinθ
              • 微分公式-- d s i n θ = c o s θ d θ \mathrm{d}sin\theta = cos\theta\mathrm{d}\theta dsinθ=cosθdθ
            • E o ( p , ω 0 ) = ∫ Ω + f r ( p , ω i , ω o ) μ i d μ i d ϕ E_{o}(p, \omega_0) = \int_{\varOmega^+}f_r(p, \omega_i, \omega_o) \mu_i\mathrm{d}\mu_i d\phi Eo​(p,ω0​)=∫Ω+​fr​(p,ωi​,ωo​)μi​dμi​dϕ
            • 由于公式(3)从积分单位立体角变为对 μ \mu μ 和 ϕ \phi ϕ 积分
              • 因此积分线也随之发生变化(内层积分和外层积分)
      • Kulla-Conty 思想
        • 公式(3)计算的结果范围是 [ 0 , 1 ] [0,1] [0,1]

        • 设计一个额外的Lobe,其结果为 1 − E ( μ o ) 1-E(\mu_o) 1−E(μo​)

          • 公式(3)表示,光线在一次弹射时出射的Radiance。光源总能量为1。因此,该光线经过一次弹射所损失的能量为 1 − E ( μ o ) 1-E(\mu_o) 1−E(μo​)。
          • 这种出射的BRDF Lobe 在不同的入射方向有不同的值
        • 因此,由于引用Shadowing-Masking Term项所损失的能量,可以使用上述理论计算出的能量损失项补充

          • Kulla-Conty 使用的补充能量项(称补充的BRDF Lobe)为 c ( 1 − E ( μ i ) ) ( 1 − E ( μ o ) ) c(1-E(\mu_i))(1-E(\mu_o)) c(1−E(μi​))(1−E(μo​))

            • 考虑对称性。
              • 入射光线 μ i \mu_i μi​在出射光线 μ o \mu_o μo​损失的能量为 ( 1 − E ( μ o ) ) (1-E(\mu_o)) (1−E(μo​))
              • 相反(对称)入射光线 μ o \mu_o μo​在出射光线 μ i \mu_i μi​损失的能量为 ( 1 − E ( μ i ) ) (1-E(\mu_i)) (1−E(μi​))
              • c c c 需要计算
          • 因此,Kulla-Conty提出的损失项BRDF为

            f m s ( μ o , μ i ) = ( 1 − E ( μ o ) ) ( 1 − E ( μ i ) ) π ( 1 − E a v g ) , E a v g = 2 ∫ 0 1 E ( μ ) μ d μ (4) \tag4 f_{ms}(\mu_o,\mu_i) = \cfrac{(1-E(\mu_o))(1-E(\mu_i))}{\pi(1-E_{avg})}, E_{avg} = 2\int_0^1E(\mu)\mu\mathrm{d}\mu fms​(μo​,μi​)=π(1−Eavg​)(1−E(μo​))(1−E(μi​))​,Eavg​=2∫01​E(μ)μdμ(4)
            其中

            • c c c 为公式(4)中分母部分
            • 公式(4)分子部分可以使用公式(3)计算得出
            • E a v g E_{avg} Eavg​为一个数值
          • 证明

            • 上面已经推导,损失的能量为 1 − E ( μ o ) 1-E(\mu_o) 1−E(μo​),因此,使用公式(4)的BRDF求解渲染方程的结果也应该是 1 − E ( μ o ) 1-E(\mu_o) 1−E(μo​)

            • 方程如下
              E m s ( μ o ) = ∫ 0 2 π ∫ 0 1 f m s ( μ o , μ i , ϕ ) μ i d μ i d ϕ (5) \tag{5} E_{ms}(\mu_o) = \int_0^{2\pi} \int_0^1f_{ms}(\mu_o,\mu_i,\phi)\mu_i\mathrm{d}\mu_i\mathrm{d}\phi Ems​(μo​)=∫02π​∫01​fms​(μo​,μi​,ϕ)μi​dμi​dϕ(5)

              • 外层对 ϕ \phi ϕ积分结果为 2 π 2\pi 2π (二重积分)

                • -> ∫ 0 2 π ∫ 0 1 f m s ( μ o , μ i , ϕ ) μ i d μ i d ϕ \int_0^{2\pi} \int_0^1f_{ms}(\mu_o,\mu_i,\phi)\mu_i\mathrm{d}\mu_i\mathrm{d}\phi ∫02π​∫01​fms​(μo​,μi​,ϕ)μi​dμi​dϕ
                • -> ∫ 0 2 π d ϕ ∫ 0 1 f m s ( μ o , μ i , ϕ ) μ i d μ i \int_0^{2\pi} \mathrm{d}\phi\int_0^1f_{ms}(\mu_o,\mu_i,\phi)\mu_i\mathrm{d}\mu_i ∫02π​dϕ∫01​fms​(μo​,μi​,ϕ)μi​dμi​
                • -> 2 π 2\pi 2π = ∫ 0 2 π d = 2 π − 0 \int_0^{2\pi} \mathrm{d} = 2\pi-0 ∫02π​d=2π−0
                  E m s ( μ o ) = 2 π ∫ 0 1 ( 1 − E ( μ o ) ) ( 1 − E ( μ i ) ) π ( 1 − E a v g ) μ i d μ i E_{ms}(\mu_o) = 2\pi \int_0^1 \cfrac{(1-E(\mu_o))(1-E(\mu_i))}{\pi(1-E_{avg})}\mu_i\mathrm{d}\mu_i Ems​(μo​)=2π∫01​π(1−Eavg​)(1−E(μo​))(1−E(μi​))​μi​dμi​
              • 将与积分变量无关的变量可以提出

              E m s ( μ o ) = 2 ( 1 − E ( μ o ) ) ( 1 − E a v g ) ∫ 0 1 ( 1 − E ( μ i ) μ i d μ i E_{ms}(\mu_o) = 2\cfrac{(1-E(\mu_o))}{(1-E_{avg})} \int_0^1 (1-E(\mu_i)\mu_i\mathrm{d}\mu_i Ems​(μo​)=2(1−Eavg​)(1−E(μo​))​∫01​(1−E(μi​)μi​dμi​

              • 先计算积分的结果(积分公式–定积分)

                • ∫ 0 1 ( 1 − E ( μ i ) μ i d μ i \int_0^1 (1-E(\mu_i)\mu_i\mathrm{d}\mu_i ∫01​(1−E(μi​)μi​dμi​
                • ∫ 0 1 [ μ i − μ i E ( μ i ) ] d μ i \int_0^1 [\mu_i-\mu_iE(\mu_i)]\mathrm{d}\mu_i ∫01​[μi​−μi​E(μi​)]dμi​
                • ∫ 0 1 μ i d μ i \int_0^1\mu_i\mathrm{d}\mu_i ∫01​μi​dμi​ - ∫ 0 1 μ i E ( μ i ) d μ i \int_0^1\mu_iE(\mu_i)\mathrm{d}\mu_i ∫01​μi​E(μi​)dμi​
                  • ∫ 0 1 μ i d μ i \int_0^1\mu_i\mathrm{d}\mu_i ∫01​μi​dμi​ = 1 2 ∗ 1 2 − 1 2 ∗ 0 2 \cfrac{1}{2}*1^2-\cfrac{1}{2}*0^2 21​∗12−21​∗02 = 1 2 \cfrac{1}{2} 21​
                  • ∫ 0 1 μ i E ( μ i ) d μ i \int_0^1\mu_iE(\mu_i)\mathrm{d}\mu_i ∫01​μi​E(μi​)dμi​ = 1 2 ∗ E a v g \cfrac{1}{2}*E_{avg} 21​∗Eavg​
                • ∫ 0 1 μ i d μ i \int_0^1\mu_i\mathrm{d}\mu_i ∫01​μi​dμi​ - ∫ 0 1 μ i E ( μ i ) d μ i \int_0^1\mu_iE(\mu_i)\mathrm{d}\mu_i ∫01​μi​E(μi​)dμi​
                  • 1 2 ∗ ( 1 − E a v g ) \cfrac{1}{2}*(1-E_{avg}) 21​∗(1−Eavg​)
              • 因此:
                E m s ( μ o ) = 2 ( 1 − E ( μ o ) ) ( 1 − E a v g ) ∗ 1 2 ∗ ( 1 − E a v g ) E_{ms}(\mu_o) = 2\cfrac{(1-E(\mu_o))}{(1-E_{avg})} * \cfrac{1}{2}*(1-E_{avg}) Ems​(μo​)=2(1−Eavg​)(1−E(μo​))​∗21​∗(1−Eavg​)
                E m s ( μ o ) = 1 − E ( μ o ) E_{ms}(\mu_o) = 1-E(\mu_o) Ems​(μo​)=1−E(μo​)

          • 公式(4)中 E a v g = 2 ∫ 0 1 E ( μ ) μ d μ E_{avg} = 2\int_0^1E(\mu)\mu\mathrm{d}\mu Eavg​=2∫01​E(μ)μdμ的求解

            • 使用split sum思想进行求解(不知道是否有解析解的积分)
              • 求解方式:预计算、打表
              • 要求
                • 积分维度不能过高
                  • 不依赖于很多参数
              • E a v g E_{avg} Eavg​中,参数:观测方向 μ o \mu_o μo​和积分中的损失BRDF
                • 为每种不同的BRDF单独设计预计算或打表
                  • 因此,参数可设为BRDF的Roughness项
              • E a v g E_{avg} Eavg​ 的预计算,可以由 μ o \mu_o μo​和BRDF的roughness项组合得到
        • 如果微表面BRDF有颜色,在计算出射Radiance时会有额外的能量损失(吸收)

          • 先考虑没有颜色的方法计算出射Radiance
          • 然后考虑,由于颜色对能量的吸收带来的能量损失
            • 定义一个平均的菲尼尔项
              • 无论入射角有多大。计算每次反射时,平均会反射多少能量
                F a v g = ∫ 0 1 F ( μ ) μ d μ ∫ 0 1 μ d μ = 2 ∫ 0 1 F ( μ ) μ d μ (6) \tag{6} F_{avg} = \cfrac{\int_0^1F(\mu)\mu\mathrm{d}\mu}{\int_0^1\mu\mathrm{d}\mu} = 2\int_0^1F(\mu)\mu\mathrm{d}\mu Favg​=∫01​μdμ∫01​F(μ)μdμ​=2∫01​F(μ)μdμ(6)
          • Kulla-Conty 定义的颜色项(color term)
            C c o l o r = F a v g E a v g 1 − F a v g ( 1 − E a v g ) (7) \tag{7} C_{color} = \cfrac{F_{avg}E_{avg}}{1-F_{avg}(1-E_{avg})} Ccolor​=1−Favg​(1−Eavg​)Favg​Eavg​​(7)
            • 推导
              • 分情况分别计算最终能看到的能量
                • 直接能看到的能量
                  • F a v g E a v g F_{avg}E_{avg} Favg​Eavg​
                • 经过一次bounce
                  • F a v g ( 1 − E a v g ) ⋅ F a v g E a v g F_{avg}(1-E_{avg})\cdot F_{avg}E_{avg} Favg​(1−Eavg​)⋅Favg​Eavg​
                • 经过 k k k次bounces,能看到的能量
                  • F a v g k ( 1 − E a v g ) k ⋅ F a v g E a v g F_{avg}^k(1-E_{avg})^k\cdot F_{avg}E_{avg} Favgk​(1−Eavg​)k⋅Favg​Eavg​
                • 当 k k k为无穷大时,将所有项相加可得到一个极数,即公式(7)
          • 因此,带颜色的微表面最终的能量损失BRDF为
            f m s ( μ o , μ i ) = F a v g E a v g 1 − F a v g ( 1 − E a v g ) ⋅ ( 1 − E ( μ o ) ) ( 1 − E ( μ i ) ) π ( 1 − E a v g ) , E a v g = 2 ∫ 0 1 E ( μ ) μ d μ (8) \tag8 f_{ms}(\mu_o,\mu_i) = \cfrac{F_{avg}E_{avg}}{1-F_{avg}(1-E_{avg})} \cdot \cfrac{(1-E(\mu_o))(1-E(\mu_i))}{\pi(1-E_{avg})}, E_{avg} = 2\int_0^1E(\mu)\mu\mathrm{d}\mu fms​(μo​,μi​)=1−Favg​(1−Eavg​)Favg​Eavg​​⋅π(1−Eavg​)(1−E(μo​))(1−E(μi​))​,Eavg​=2∫01​E(μ)μdμ(8)

Linearly Transformed Cosines

  • LTC用于解决微表面模型着色问题
    • 主要基于(GGX分布),其他分布也适用
    • 不考虑阴影
    • 主要解决在微表面模型下多边形光源的着色问题
  • 思想
    • 任何出射的2D BRDF lobe(所有出射光线围成的区域)都能通过某种线性变换,变换成一个余弦函数。
    • 多边形光源也能变换成一个余弦函数
    • 通过上述俩个变换
      • BRDF Lobe 就会变成Consine(固定值)
      • 多边形光源变成另一个多边形光源(多边形光源内部都是均匀的(各处radiance相同))
      • 把任意BRDF Lobe在任意的多边形光源的着色,转换成一个固定cosine项对任意多边形光源进行积分的问题。而后者是有解析解的。
    • 变换项有
      • BRDF M − 1 → \underrightarrow{M^{-1}} M−1​ Cosine :BRDF变换到余弦函数
      • ω i \omega_i ωi​ M − 1 → \underrightarrow{M^{-1}} M−1​ ω i ′ \omega_i' ωi′​ :方向从 ω i \omega_i ωi​ 变换到 ω i ′ \omega_i' ωi′​
      • P P P M − 1 → \underrightarrow{M^{-1}} M−1​ P ′ P' P′ :积分域从 P P P 变换到 P ′ P' P′
  • 方法:(变量替换)
    • 使用多边形光源进行着色的渲染方程如下
      L ( ω 0 ) = L i ⋅ ∫ P F ( ω i ) d ω i (9) \tag{9} L(\omega_0) = L_i \cdot \int_{P}F(\omega_i)\mathrm{d}\omega_i L(ω0​)=Li​⋅∫P​F(ωi​)dωi​(9)
      其中
      • F ( ω i ) = f r ⋅ c o s θ i F(\omega_i) = f_r\cdot cos\theta_i F(ωi​)=fr​⋅cosθi​
      • 由于 L i L_i Li​为多边形光源,其光源在任何位置的能量都相同(uniform)。因此,可提出到积分外
        • 该论文有对光源非uniform情况的解决方案
    • 公式(9) 变量替换:
      • LTC将 F ( ω i ) F(\omega_i) F(ωi​) 替换成 c o s ( ω i ′ ) cos(\omega_i') cos(ωi′​), 将 ω i \omega_i ωi​替换成 M ω i ′ ∣ ∣ M ω i ′ ∣ ∣ \cfrac{M\omega_i'}{||M\omega_i'||} ∣∣Mωi′​∣∣Mωi′​​(归一化),因此有:
      • L ( ω 0 ) = L i ⋅ ∫ P c o s ( ω i ′ ) d M ω i ′ ∣ ∣ M ω i ′ ∣ ∣ L(\omega_0) = L_i \cdot \int_{P} cos(\omega_i')\mathrm{d}{\cfrac{M\omega_i'}{||M\omega_i'||}} L(ω0​)=Li​⋅∫P​cos(ωi′​)d∣∣Mωi′​∣∣Mωi′​​
      • 积分推导略,最后得到
      • L ( ω 0 ) = L i ⋅ ∫ P ′ c o s ( ω i ′ ) J d ω i ′ L(\omega_0) = L_i \cdot \int_{P'} cos(\omega_i')J\mathrm{d}\omega_i' L(ω0​)=Li​⋅∫P′​cos(ωi′​)Jdωi′​
        • J J J为推导后得到的雅可比矩阵
    • 变换矩阵 M M M的获取
      • 由于观察方向不同,不同角度的BRDF Lobe不同,每一种不同的BRDF Lobe都有不同的变换矩阵 M M M
        • 预计算求 M M M
          • 常见BRDF,可以先预计算出从不同观察方向得到的BRDF Lobe的变换矩阵 M M M
        • M M M可以使用最优化方法得到

Disney’s Principled BRDF

  • 动机
    • physically-based materials 不擅长表示真实的材质
      • 微表面模型无法完全表示真实的材质
      • 微表面模型无法表示所有真实的物体性质
    • physically-based materials 对于艺术家不友好
      • PBR参数都是物理参数,艺术家很难理解参数的意义
  • 设计目标
    • 便于艺术家编辑, 算法不一定是物理上正确的
    • 虽然Disney’s Principled BRDF物理上未必正确。但同样,在实时渲染中称为PBR(毕竟实时渲染中PBR也是物理上的一种近似)
  • Principled 设计原则
    • 应使用直观而非物理参数。
    • 应有尽可能少的参数。
    • 参数应在其合理范围内。0到1。
    • 在合理的情况下,允许将参数设置到其合理范围之外。
    • 所有参数组合应尽可能可靠和合理
  • 工业界使用到的参数
    • subsurface:次表面散射 比diffuse还要平的效果
    • metallic:金属性
    • specular:镜面反射
    • specular Tint:镜面反射颜色
    • roughness :粗糙度
    • anisotropic:各项异性
    • sheen:绒毛雾化效果
    • sheenTint:绒毛雾化效果颜色
    • clearcoat:清漆
    • clearcoatGloss:清漆光滑程度
  • 优缺点
    • 便于理解,方便控制
    • 使用一个模型能描述很多类型材质
    • 实现非常复杂(有开源实现)
    • 并不是基于物理的
    • 巨大的参数空间
      • 有冗余

Non-Photorealistic Rendering (NPR) – Fast and Reliable Stylization

  • 非真实感渲染
    • 快速
    • 可靠
  • NPR是在真实感渲染后,再进行风格化处理
    • 思路
      • NPR将真实感渲染中某些操作进行转化来完成风格化。
    • 风格化
      • Bold contours 轮廓(outlines)
        • 分类
          • boundary/border edge 边界
          • Crease 折痕
          • Material edge 材质间过度区
          • Silhouette edge 轮廓:有多个面共享的边界
        • 描边
          • 着色实现
            • 观察方向和法线垂直的边为(Silhouette )
              • 不同位置描边的粗细不同(缺点)
            • 背面模型放大涂黑,做边界
          • 后处理实现
            • Sobel detector
      • Blocks of colors 色块
        • 方法
          • Hard shading
            • 阈值化进行渲染
          • Posterization
            • 图像上阈值化处理
      • Strokes on surfaces
        • 使用纹理
        • Tonal art maps

小结

   本节主要是对渲染算法学习(二)的补充。主要做一下Shadowing-Masking Term的笔记。

这篇关于渲染算法学习(六)-- Real-Time Physically-Based Materials的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!