渲染算法学习(三)-- Materials

Materials

   由于工作就是做这一块的. 因此, 只对一些基础理论做一下归纳, 依旧使用Games的课程为基础,结合《Real-Time Rendering 4th Edition》进行总结.

L o ( p , ω o ) = L e ( p , ω o ) + ∫ Ω + L i ( p , ω i ) f r ( p , ω i , ω o ) ( n ⋅ ω i ) d ω i (1) \tag1 L_o(p, \omega_o) =L_e(p, \omega_o) + \int_{\Omega^+}L_i(p, \omega_i)f_r(p, \omega_i, \omega_o)(n\cdot\omega_i)d\omega_i Lo(p,ωo)=Le(p,ωo)+Ω+Li(p,ωi)fr(p,ωi,ωo)(nωi)dωi(1)

  • 由于在渲染方程中BRDF( f r ( p , ω i , ω o ) f_r(p, \omega_i, \omega_o) fr(p,ωi,ωo))决定光如何被反射的, 因此能反应出当前着色点的属性
  • 由于着色点的BRDF等同于着色点自身属性, 即可认为BRDF就是材质

Diffuse / Lambertian Material (漫反射BRDF)

  • 漫反射: 光线从某一方向进入当前着色模型后, 都会均匀的反射到各个方向上去.
  • 因此当入射光线和出射光线是uniform时, 根据渲染方程(公式(1)) 可得(不考虑自发光):
    L o ( p , ω o ) = ∫ Ω + f r ( p , ω i , ω o ) L i ( p , ω i ) ( n ⋅ ω i ) d ω i (2) \tag2 L_o(p, \omega_o) = \int_{\Omega^+}f_r(p, \omega_i, \omega_o)L_i(p, \omega_i)(n\cdot\omega_i)d\omega_i Lo(p,ωo)=Ω+fr(p,ωi,ωo)Li(p,ωi)(nωi)dωi(2)
    其中 ω i \omega_i ωi是入射光线, ω o \omega_o ωo为出射光线
    • 由于着色点的BRDF是常数, 因此可以将 f r ( p , ω i , ω o ) f_r(p, \omega_i, \omega_o) fr(p,ωi,ωo)从积分中提出
      • L o ( p , ω o ) = f r ( p , ω i , ω o ) ∫ Ω + L i ( p , ω i ) ( n ⋅ ω i ) d ω i L_o(p, \omega_o) =f_r(p, \omega_i, \omega_o) \int_{\Omega^+}L_i(p, \omega_i)(n\cdot\omega_i)d\omega_i Lo(p,ωo)=fr(p,ωi,ωo)Ω+Li(p,ωi)(nωi)dωi
    • 入射光的Radiance也是已知, 将L_i(p, \omega_i)从积分中提出
      • L o ( p , ω o ) = f r ( p , ω i , ω o ) L i ( p , ω i ) ∫ Ω + ( n ⋅ ω i ) d ω i L_o(p, \omega_o) =f_r(p, \omega_i, \omega_o)L_i(p, \omega_i) \int_{\Omega^+}(n\cdot\omega_i)d\omega_i Lo(p,ωo)=fr(p,ωi,ωo)Li(p,ωi)Ω+(nωi)dωi
    • ( n ⋅ ω i ) (n\cdot\omega_i) (nωi)是法线与入射光线的点积. 即 c o s θ i cos\theta_i cosθi
      • 因此将公式简写成
      • L o = f r L i ∫ Ω + c o s θ i d ω i L_o =f_rL_i \int_{\Omega^+}cos\theta_id\omega_i Lo=frLiΩ+cosθidωi
    • 由于半球上单位立体角积分为 2 π 2\pi 2π, 半球上 c o s θ cos\theta cosθ积分为 π \pi π, 有
      • L o = π f r L i L_o =\pi f_rL_i Lo=πfrLi
    • 由于入射和出射光线都是uniform的, 在不考虑着色点吸收能量的情况下, 根据能量守恒定律, 入射Radiance等于出射Radiance
    • L o = L i L_o =L_i Lo=Li 可得
      • f r = 1 π f_r = \frac{1}{\pi} fr=π1
    • 在进行渲染时, 通常使用albedo(即颜色值)作为反射率, 来渲染漫反射材质的
    • f r f_r fr(BRDF), 在Diffuse Material中通常指漫反射常数
    • 结合反射率, 因此最终的 f r f_r fr为:
      • f r = ρ π f_r = \frac{\rho}{\pi} fr=πρ, ρ \rho ρ为 albedo, ( 0 ≤ ρ ≤ 1 0\le\rho\le1 0ρ1)

Ideal Reflective / Refractive Material (反射/折射BSDF)

  • BSDF: S指Shine(闪射), 包括BRDF(反射)和BTDF(折射)
  • Perfect Specular Reflection(全反射)
    • 设入射光线为 ω i \omega_i ωi, 出射光线为 ω o \omega_o ωo. 方向都是从着色点指向入射出射方向. 着色点法线为 n ⃗ \vec n n
    • 已知入射光线为 ω i \omega_i ωi和法线 n ⃗ \vec n n , 求全反射出射光线
      • ∵ ω i + ω o = 2 c o s θ n ⃗ \because \omega_i+\omega_o = 2cos\theta\vec n ωi+ωo=2cosθn (平行四边形法则)
      • ∴ ω o = − ω i + 2 c o s θ n ⃗ = − ω i + 2 ( ω i ⋅ n ⃗ ) n ⃗ \therefore \omega_o = - \omega_i + 2cos\theta\vec n = - \omega_i + 2( \omega_i\cdot\vec n)\vec n ωo=ωi+2cosθn =ωi+2(ωin )n
  • Specular Refraction (镜面反射)
    • 发生镜面反射时, 入射光线打到物体时不仅会将光线反射出去,而且光线也可能会进入物体发生折射
    • Snell’s Law(斯内尔定律)
      • 光入射到不同介质的界面上会发生反射和折射。
      • 折射透射角取决于
        • index of refraction (IOR) for incident ray / 入射光所在介质的折射率
        • index of refraction (IOR) for exiting ray / 出射光所在介质的折射率
      • 折射率
介质折射率 η ∗ \eta^* η
真空1.0
空气(海平面)1.00029
水(20℃)1.333
玻璃1.5-1.6
钻石2.42
  • Law of Refraction (折射定律)
    • 设入射光线为 ω i \omega_i ωi, 出射光线为 ω t \omega_t ωt. 方向都是从着色点指向入射出射方向. 着色点法线为 n ⃗ \vec n n , 入射光线与法线 n ⃗ \vec n n 夹角为 θ i \theta_i θi, − n ⃗ -\vec n n 与出射光线夹角为 θ t \theta_t θt, 入射介质折射率为 η i \eta_i ηi, 出射射介质折射率为 η t \eta_t ηt. 有:
      η i s i n θ i = η t s i n θ t (3) \tag3 \eta_i sin\theta_i = \eta_t sin\theta_t ηisinθi=ηtsinθt(3)
    • 因此, 已知入射光线, 法线, 以及入射出射介质的折射率, 即可求出出射光线与 − n ⃗ -\vec n n 的夹角
      • η i s i n θ i = η t s i n θ t ⇒ s i n θ t = η i η t s i n θ i \eta_i sin\theta_i = \eta_t sin\theta_t \Rarr sin\theta_t = \frac{\eta_i}{\eta_t} sin\theta_i ηisinθi=ηtsinθtsinθt=ηtηisinθi
      • ∵ c o s θ t = 1 − s i n 2 θ t \because cos\theta_t = \sqrt{1-sin^{2}\theta_t} cosθt=1sin2θt
      • ∴ c o s θ t = 1 − ( η i η t ) 2 s i n 2 θ i ⇒ 1 − ( η i η t ) 2 ( 1 − c o s 2 θ i ) \therefore cos\theta_t = \sqrt{1-( \frac{\eta_i}{\eta_t})^2sin^{2}\theta_i} \Rarr \sqrt{1-( \frac{\eta_i}{\eta_t})^2(1-cos^2\theta_i)} cosθt=1(ηtηi)2sin2θi 1(ηtηi)2(1cos2θi)
    • 从上诉推导可以看出, 1 − ( η i η t ) 2 ( 1 − c o s 2 θ i ) \sqrt{1-( \frac{\eta_i}{\eta_t})^2(1-cos^2\theta_i)} 1(ηtηi)2(1cos2θi) 1 − ( η i η t ) 2 ( 1 − c o s 2 θ i ) ≥ 0 1-( \frac{\eta_i}{\eta_t})^2(1-cos^2\theta_i)\ge0 1(ηtηi)2(1cos2θi)0
    • 也就是 1 − ( η i η t ) 2 ( 1 − c o s 2 θ i ) < 0 1-( \frac{\eta_i}{\eta_t})^2(1-cos^2\theta_i)<0 1(ηtηi)2(1cos2θi)<0时公式(3)无意义. 即折射不可能发生
    • 因为 1 − c o s 2 θ i 1-cos^2\theta_i 1cos2θi恒小于1, 因此要使 1 − ( η i η t ) 2 ( 1 − c o s 2 θ i ) < 0 1-( \frac{\eta_i}{\eta_t})^2(1-cos^2\theta_i)<0 1(ηtηi)2(1cos2θi)<0, 只有在 ( η i η t ) 2 (\frac{\eta_i}{\eta_t})^2 (ηtηi)2大于0时.
    • 也就是说, 当入射介质折射率大于出射介质折射率的时候, 有可能不会发生折射. 即只发生全反射.
    • 例如, 从水低向上看时, 只能看到一个锥形区域, 其他都看不到(Snell’s Window / Circle). 水下向上看的视野范围97.0°

Fresnel Reflection / Term (菲涅耳项)

  • 菲涅耳项主要描述:光线进入物体表面有多少能量被反射, 有多少能量被折射

   光波通过不同介质的分界面时会发生反射和折射,入射光分为反射光和折射光两部分。这两束光的进行方向之间的关系虽可由反射和折射定律决定,但二光束的振幅和振动取向却不能决定。菲涅耳以光是横波的设想为基础,把入射光分为振动平面平行于入射面的线偏振光和垂直于入射面的线偏振光,并导出了光的折射比、反射比之间关系的菲涅耳公式。由菲涅耳公式可以求出一定入射角下反射和透射的振幅、强度等。可以很好地解释光的反射与折射的起偏问题及半波损失问题等。菲涅耳公式作为光学和电磁理论的一个重要基本公式。而且在薄膜及电磁现象中应用非常广泛1

  • 从上述描述中可以看出, 虽然可以使用折射定律或反射定律, 根据不同介质的折射率计算出出射光线, 但是对玻璃等材质的渲染效果并不是特别理想. 原因是"菲涅尔效应". 导体和绝缘体在视线垂直于物体表面和在视线平行于物体表面两个极化角度中反应出的不同的反射率和折射率. 因此视线的位置会影响实际材质的渲染效果. 因此使用菲涅尔项, 根据渲染介质的基础折射率和入射出射角度,计算出当前材质的最终反射率和折射率.会使渲染效果更真实. (全反射时菲涅尔项不适用)
  • 把入射波电场(光线)的振幅矢量分解成两个分量, 一个分量垂直与入射平面,即 s s s分量;另一个分量在入射平面的内,即与平面平行为 p p p分量。(考虑极化)
    R s = ∣ n 1 c o s θ i − n 2 c o s θ t n 1 c o s θ i + n 2 c o s θ t ∣ 2 = ∣ n 1 c o s θ i − n 2 1 − ( n 1 n 2 s i n θ i ) 2 n 1 c o s θ i + n 2 1 − ( n 1 n 2 s i n θ i ) 2 ∣ 2 (4) \tag4 R_s = \begin{vmatrix} \frac{n_1cos\theta_i-n_2cos\theta_t}{n_1cos\theta_i+n_2cos\theta_t} \end{vmatrix}^2 = \begin{vmatrix} \frac{n_1cos\theta_i-n_2\sqrt{1-(\frac{n_1}{n_2}sin\theta_i)^2}}{n_1cos\theta_i+n_2\sqrt{1-(\frac{n_1}{n_2}sin\theta_i)^2}} \end{vmatrix}^2 Rs=n1cosθi+n2cosθtn1cosθin2cosθt2=n1cosθi+n21(n2n1sinθi)2 n1cosθin21(n2n1sinθi)2 2(4)
    R p = ∣ n 1 c o s θ t − n 2 c o s θ i n 1 c o s θ t + n 2 c o s θ i ∣ 2 = ∣ n 1 1 − ( n 1 n 2 s i n θ i ) 2 − n 2 c o s θ i n 1 1 − ( n 1 n 2 s i n θ i ) 2 + n 2 c o n θ i ∣ 2 (5) \tag5 R_p = \begin{vmatrix} \frac{n_1cos\theta_t-n_2cos\theta_i}{n_1cos\theta_t+n_2cos\theta_i} \end{vmatrix}^2 = \begin{vmatrix} \frac{n_1\sqrt{1-(\frac{n_1}{n_2}sin\theta_i)^2}-n_2cos\theta_i}{n_1\sqrt{1-(\frac{n_1}{n_2}sin\theta_i)^2}+n_2con\theta_i} \end{vmatrix}^2 Rp=n1cosθt+n2cosθin1cosθtn2cosθi2=n11(n2n1sinθi)2 +n2conθin11(n2n1sinθi)2 n2cosθi2(5)
  • 公式(4、5)为两种极化情况下的菲尼尔项,
    • R s R_s Rs R p R_p Rp都是0-1之间的数
    • *这个菲涅耳公式与电场菲涅耳公式不同, 没有推导出这个公式怎么来的. 先放下, 渲染只要使用Schlick近似公式, 暂时忽略该公式的来源.
  • 导体和绝缘体菲涅耳项不一样. 导体反射更高,并且导体的折射率是负数
  • 由于渲染器不考虑极化, 因此使用不极化的菲涅耳项为 R s R_s Rs, R p R_p Rp的平均:
    • R e f f = 1 2 ( R s + R p ) R_{eff} = \frac{1}{2}(R_s+R_p) Reff=21(Rs+Rp)
  • Schlick’s Approximation
    • Schlick’s Approximation对导体和绝缘体都是不错的近似
      R ( θ ) = R 0 + ( 1 − R 0 ) ( 1 − c o s θ ) 5 (6) \tag6 R(\theta) = R_0+(1-R_0)(1-cos\theta)^5 R(θ)=R0+(1R0)(1cosθ)5(6)
    • 其中基准反射率 R 0 R_0 R0
      R 0 = ( n 1 − n 2 n 1 + n 2 ) 2 (7) \tag7 R_0 = (\frac{n_1 - n_2}{n_1+n_2})^2 R0=(n1+n2n1n2)2(7)
    • n 1 n_1 n1, n 2 n_2 n2分别是入射介质和出射介质的折射率

Microfacet Material

  • PBR渲染管线中采用的是一种叫做微表面(Microfacet Model)的材质模型,它基于物理的观察,认为物体表面由很多凹凸不平的微小镜面组成。这些具有不同大小、方向的微表面在对入射光线进行反射时产生了不同的反射效果,从而使得人眼能观察到不同的材质属性2
  • 假设物体的表面是粗糙的. 当从远处看该物体时, 物体表面是平的、是粗糙的。 当从近处看就能看到细微的表面。
    • 微表面的表现是:远处看是材质, 近处看是几何.
  • 研究微表面最重要的是研究微表面的法线分布
    • 微观表面法线: 即微表面法线(凹凸不平的微小镜面法线)
    • 宏观法线:物体表面宏观法线
    • 法线分布函数(Normal Distribution Function,NDF or Specular D)
      • 微平面的法线分布函数 D ( m ) D(m) D(m)描述了微表面法线的统计分布
      • 若以函数输入和输出的角度来看NDF,则其输入为微表面粗糙度(微表面法线集中程度)和宏观法线与视线的中间矢量(微表面法线方向),输出为此方向上的微表面法线强度。
    • 使用微表面法线分布可以表示材质
      • 当法线分布集中时为glossy材质
      • 当法线分布分散时为diffuse材质
  • 微表面 BRDF 公式:
    f ( i , o ) = F ( i , h ) G ( i , o , h ) D ( h ) 4 ( n , i ) ( n , o ) (8) \tag8 f(i,o) = \frac{F(i,h)G(i,o,h)D(h)}{4(n,i)(n,o)} f(i,o)=4(n,i)(n,o)F(i,h)G(i,o,h)D(h)(8)
    其中, i i i为入射光线, o o o为出射光线, h h h为半程向量。
    • F ( i , h ) F(i,h) F(i,h)为菲尼尔项, 描述不同程度的反射情况。
    • G ( i , o , h ) G(i,o,h) G(i,o,h)为阴影遮挡函数,相互遮挡
    • D ( h ) D(h) D(h)为法向分布函数,当 h h h 与宏观法线一致时,能量才完全反射出去
  • BRDF的性质:
    • BRDF非负性
    • 线性性质(分步计算的结果等于直接计算结果)
    • 可逆性,入射光线如出射光线互换,得到BRDF值相同
    • 能量守恒, 小于等于1。BRDF是小于等于1的数
  • grazing angel 掠射角度
    • 与平面平行的光线

各项同性法线分布函数

  • Beckmann分布

    • Beckmann分布具备形状不变性
      D ( m ) = χ + ( n ⋅ m ) π α b 2 ( n ⋅ m ) 4 exp ⁡ ( ( n ⋅ m ) 2 − 1 α b 2 ( n ⋅ m ) 2 ) (9) \tag9 D(m) = \frac{\chi^+(n\cdot m)}{\pi\alpha_b^2(n\cdot m)^4}\exp(\frac{(n\cdot m)^2-1}{\alpha_b^2(n\cdot m)^2}) D(m)=παb2(nm)4χ+(nm)exp(αb2(nm)2(nm)21)(9)
      • 其中, n n n为宏观法线, m m m为微表面法线
      • α b \alpha_b αb是粗糙度系数, 值越大越光滑,反之越粗糙。
      • χ + ( n ⋅ m ) \chi^+(n\cdot m) χ+(nm)确保在宏观表面下方的顶点其NDF为0
      • 系数 α b \alpha_b αb可以交由用户选择。值在 ( 0 , ∞ ) (0, \infty) (0,)之间
  • Blinn-Phong分布

    • Blinn-Phong法线分布函数改进Phong着色模型
    • Blinn-Phong 分布不具备形状不变性
      D ( m ) = χ + ( n ⋅ m ) α p + 2 2 π ( n ⋅ m ) α p (10) \tag{10} D(m) = \chi^+(n\cdot m)\frac{ \alpha_p+2}{2\pi}(n\cdot m)^{\alpha_p} D(m)=χ+(nm)2παp+2(nm)αp(10)
      其中, n n n为宏观法线, m m m为微表面法线
      • α p \alpha_p αp是粗糙度系数, 值越大越光滑,反之越粗糙。
      • χ + ( n ⋅ m ) \chi^+(n\cdot m) χ+(nm)确保在宏观表面下方的顶点其NDF为0
      • 系数 α p \alpha_p αp可以交由用户选择。值在 ( 0 , ∞ ) (0, \infty) (0,)之间
      • 其中, α p = 2 α b − 2 − 2 \alpha_p = 2\alpha_b^{-2}-2 αp=2αb22 与Beckmann分布的 α b \alpha_b αb等价
    • 公式(10)改写
      D ( m ) = χ + ( n ⋅ m ) α b − 2 π ( n ⋅ m ) 2 α b − 2 − 2 (11) \tag{11} D(m) = \chi^+(n\cdot m)\frac{ \alpha_b^{-2}}{\pi}(n\cdot m)^{2\alpha_b^{-2}-2} D(m)=χ+(nm)παb2(nm)2αb22(11)
  • GGX分布

    • GGX, 即Trowbridge-Reitz分布,最初由Trowbridge和Reitz提出,后被Walter等人重新发现。将其命名为GGX
    • GGX分布具备形状不变性
      D ( m ) = χ + ( n ⋅ m ) α g 2 π ( 1 + ( n ⋅ m ) 2 ( α g 2 − 1 ) ) 2 (12) \tag{12} D(m) =\frac{\chi^+(n\cdot m)\alpha_g^2}{\pi(1+(n\cdot m)^2(\alpha_g^2-1))^2} D(m)=π(1+(nm)2(αg21))2χ+(nm)αg2(12)
      • 系数 α g \alpha_g αg与Beckmann分布系数 α b \alpha_b αb类似,可由用户自定义
      • 迪士尼着色模型中,使用 α g = r 2 \alpha_g = r^2 αg=r2 用户可以输入 [ 0 , 1 ] [0,1] [0,1]之间的值。使分布更具线性变化

各项异性法线分布函数

  • Anisotropic Beckmann Distribution
    D ( m ) = χ + ( n ⋅ m ) π α x α y ( n ⋅ m ) 4 exp ⁡ ( − ( t ⋅ m ) 2 α x 2 + ( b ⋅ m ) 2 α y 2 ( n ⋅ m ) 2 ) (13) \tag{13} D(m) = \frac{\chi^+(n\cdot m)}{\pi \alpha_x\alpha_y(n\cdot m)^4}\exp(- \frac{\frac{(t\cdot m)^2}{\alpha_x^2}+\frac{(b\cdot m)^2}{\alpha_y^2}}{(n\cdot m)^2}) D(m)=παxαy(nm)4χ+(nm)exp((nm)2αx2(tm)2+αy2(bm)2)(13)
  • Anisotropic GGX Distribution
    D ( m ) = χ + ( n ⋅ m ) π α x α y ( ( t ⋅ m ) 2 α x 2 + ( b ⋅ m ) 2 α y 2 + ( n ⋅ m ) 2 ) 2 (14) \tag{14} D(m) = \frac{\chi^+(n\cdot m)}{\pi \alpha_x\alpha_y(\frac{(t\cdot m)^2}{\alpha_x^2}+\frac{(b\cdot m)^2}{\alpha_y^2} + (n\cdot m)^2)^2} D(m)=παxαy(αx2(tm)2+αy2(bm)2+(nm)2)2χ+(nm)(14)
  • 其中, n n n为宏观法线, m m m为微表面法线, t t t为切线方向, b b b为副切线方向
  • α x \alpha_x αx α y \alpha_y αy是切线方向和副切线方向上的粗糙度系数。当 α x = α y \alpha_x = \alpha_y αx=αy时退化成各项同性
  • 迪士尼着色模型对 α x \alpha_x αx α y \alpha_y αy的定义
    • 其使用各项同性粗糙度系数 α g \alpha_g αg和自定义的各项异性参数 α a n i s o \alpha_{aniso} αaniso计算 α x \alpha_x αx α y \alpha_y αy的值
    • k = 1 − 0.9 α a n i s o k = \sqrt{1-0.9\alpha_{aniso}} k=10.9αaniso , 公式中0.9将各项异性横纵比限制到 10 : 1 10:1 10:1
    • α x = α g 2 k \alpha_x = \frac{\alpha_g^2}{k} αx=kαg2
    • α y = α g 2 k \alpha_y =\alpha_g^2 k αy=αg2k
  • Imageworks 对 α x \alpha_x αx α y \alpha_y αy的定义
    • α x = α g 2 ( 1 + α a n i s o ) \alpha_x =\alpha_g^2 (1+\alpha_{aniso}) αx=αg2(1+αaniso)
    • α y = α g 2 ( 1 − α a n i s o ) \alpha_y =\alpha_g^2 (1-\alpha_{aniso}) αy=αg2(1αaniso)

小结

   本节主要对渲染方程中的BRDF项进行拆解,对公式(8)中的每一个重要项分别进行总结。其中忽略了 G ( i , o , h ) G(i,o,h) G(i,o,h)项的具体解释,后期可以继续补充。


  1. https://baike.baidu.com/item/%E8%8F%B2%E6%B6%85%E8%80%B3%E5%85%AC%E5%BC%8F/9103788?fr=aladdin#reference-[1]-1248306-wrap ↩︎

  2. https://blog.uwa4d.com/archives/Study_PBR.html ↩︎

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值