《3D游戏与计算机图形学中的数学方法》读书笔记–第七章–光照部分

《3D游戏与计算机图形学中的数学方法》读书笔记--第七章--光照部分

      • RGB颜色模型
      • 光源类型
      • 漫反射
      • 镜面反射
        • Phong高光模型
        • Blinn-Phong高光模型
      • 着色模型
        • Gouraud着色
        • Blinn-Phong着色


RGB颜色模型

RGB颜色模型是平时我们最常用的颜色模型之一,其他常用的颜色模型还有CMYK和HSV等。RGB颜色模型将我们看到的颜色分为R(红色)、G(绿色)、B(蓝色)三个颜色分量的混合。
假设颜色C、D,以及其三个分量分别用下标r、g、b表示,则: C = ( C r , C g , C b ) C=(C_r,C_g,C_b) C=(Cr,Cg,Cb)
对于颜色而言,颜色也可以像向量一样进行某些运算:
s C = ( s C r , s C g , s C b ) , s ∈ R sC=(sC_r,sC_g,sC_b),s\in R sC=(sCr,sCg,sCb),sR
C D = ( C r D r , C g D g , C b D b ) CD=(C_rD_r,C_gD_g,C_bD_b) CD=(CrDr,CgDg,CbDb)
以上两个公式被统一称为颜色调制
另外: C + D = ( C r + D r , C g + D g , C b + D b ) C+D=(C_r+D_r,C_g+D_g,C_b+D_b) C+D=(Cr+Dr,Cg+Dg,Cb+Db)

光源类型

  • 环境光
    一种低强度的光源,来自各个方向,强度均等,近似表现了场景的亮度。一般用 A A A表示环境光。
  • 平行光
    也称为无穷远光源,模拟太阳光,光线平行无衰减
  • 点光源
    从空间某点发出的各个方向等强度的光,符合球对称关系,光线强度与传播距离成平方反比关系衰减。
    若点光源位于P点,则Q点上光强C的计算公式为: C = 1 k c + k l d + k q d 2 C 0 C=\frac {1}{k_c+k_ld+k_qd^2}C_0 C=kc+kld+kqd21C0
    其中, C 0 C_0 C0是光的颜色, d d d是光源到点Q的距离,即 d = ∣ P − Q ∣ d=|P-Q| d=PQ,常数 k c , k l , k q k_c,k_l,k_q kc,kl,kq分别是常数衰减系数、线性衰减系数和二次衰减系数。当 d d d大于 d m a x d_{max} dmax C = 0 C=0 C=0,以加速引擎速度,防止不必要的运算。
  • 聚光灯光源
    聚光灯相当于一个被裁减的点光源。
    若聚光灯位于点 P P P,光源方向向量为 R R R,它发出的光照在点 Q Q Q上的强度 C C C的计算公式为:
    C = m a x { − R ⋅ L , 0 } p k c + k l d + k q d 2 C 0 C=\frac {max\{-R\cdot L,0 \}^p}{k_c+k_ld+k_qd^2}C_0 C=kc+kld+kqd2max{RL,0}pC0
    其中指数 p p p控制聚光灯发出的光的聚集程度, L L L是从 Q Q Q指向 P P P的单位向量:
    L = P − Q ∣ ∣ P − Q ∣ ∣ L=\frac {P-Q}{||P-Q||} L=PQPQ

漫反射

大多数塑料材质是漫反射的典型案例。漫反射是将入射光线的一部分向四面八方散射出去,最终效果可以看做是光线的某种颜色被散播出去(因为有一部分被材质吸收),这种颜色就是漫反射颜色,这种与观察者视角无关的漫反射被称为郎伯反射(Lambertian)

  • 郎伯反射
    郎伯反射是对真实世界漫反射的一个近似。当截面为A的光束(一般而言,我们使用辐照度来量化光,辐照度在这里与A相关)照射到物体表面的时候,由于被照射表面外法向和光线入射方向存在夹角,实际照射到表面的光强为 C c o s θ Ccos\theta Ccosθ,如图:
    《3D游戏与计算机图形学中的数学方法》读书笔记–第七章–光照部分_第1张图片
    设材质的漫反射颜色为 D D D,环境光为 A A A,那么观察者观察到的颜色 K K K为:
    K d i f f u s e = D A + D ∑ i = 1 n C i m a x { N ⋅ L i , 0 } K_{diffuse}=DA+D\sum^{n}_{i=1}{C_i}max\{ N\cdot L_i,0 \} Kdiffuse=DA+Di=1nCimax{NLi,0}

镜面反射

在多数金属材质身上,往往都会有亮瞎我们的高光部分,这一部分高光的模拟要使用镜面反射模型。镜面反射与观察者视角 V V V有直接关系。

Phong高光模型

设物体表面 Q Q Q点外法向为 N N N,到观察者的单位向量为 V V V,到光源的单位向量为 L L L,反射向量为 R R R,则在Phong模型中,如图所示:
《3D游戏与计算机图形学中的数学方法》读书笔记–第七章–光照部分_第2张图片
则: S C m a x { R ⋅ V , 0 } m ( N ⋅ L > 0 ) SCmax\{ R\cdot V,0 \}^m(N\cdot L>0) SCmax{RV,0}m(NL>0)
其中 S S S为镜面反射颜色, m m m为镜面反射指数, ( N ⋅ L > 0 ) (N\cdot L>0) (NL>0)为布尔表达式。

  • 这个模型可以产生逼真的高光效果,但是缺少物理依据,是一个经验模型,而且,在某些情况下, 由于布尔表达式的限制并不是十分符合物理特性,会出现错误的光照效果。
  • m m m 控制高光锐利程度, m m m越大,高光约锐利,高光范围越小。

Blinn-Phong高光模型

Blinn-Phong模型是对phong模型的改进,解决了Phong模型存在的一些失真情况,并且提高了运算效率。在Blinn-Phong模型中,使用 H H H单位矢量代替了 R R R,称作"HalfWay": H = L + V ∣ ∣ L + V ∣ ∣ H=\frac {L+V}{||L+V||} H=L+VL+V
如图:
《3D游戏与计算机图形学中的数学方法》读书笔记–第七章–光照部分_第3张图片
则,Blinn-Phong高光模型计算公式:
K s p e c u l a r = S ∑ i = 1 n C i m a x { N ⋅ H i , 0 } m ( N ⋅ L i > 0 ) K_{specular}=S\sum^{n}_{i=1}{C_imax\{ N\cdot H_i,0 \}^m(N\cdot L_i>0)} Kspecular=Si=1nCimax{NHi,0}m(NLi>0)

着色模型

光照信息与多种纹理图结合,计算三角形表面光照效果的方法称为着色

Gouraud着色

逐顶点操作,只计算顶点光照,其余通过插值处理。

  • 漫反射公式如下:
    K p r i m a r y = ξ + D A + D ∑ i = 1 n C i m a x { N ⋅ L i , 0 } K_{primary}=\xi+DA+D\sum^{n}_{i=1}{C_imax\{ N\cdot L_i,0 \}} Kprimary=ξ+DA+Di=1nCimax{NLi,0}这里的 ξ \xi ξ指的是自发光颜色。

  • 镜面反射如下:
    K s e c o n d a r y = S ∑ i = 1 n C i m a x { N ⋅ H i , 0 } m ( N ⋅ L i > 0 ) K_{secondary}=S\sum^{n}_{i=1}{C_imax\{ N\cdot H_i,0 \}^m(N\cdot L_i>0)} Ksecondary=Si=1nCimax{NHi,0}m(NLi>0)
    以上为顶点颜色计算公式,三角形面上其他点可由插值得到,即:
    K = K p r i m a r y T 1 T 2 . . . . . . T k + K s e c o n d a r y K=K_{primary}T_1T_2......T_k+K_{secondary} K=KprimaryT1T2......Tk+Ksecondary
    T k T_k Tk为纹理图采样。

Blinn-Phong着色

Blinn-Phong着色模型支持逐像素的着色运算,每个像素的完全光照公式如下:
K = K e m i s s i o n + K d i f f u s e + K s p e c u l a r K=K_{emission}+K_{diffuse}+K_{specular} K=Kemission+Kdiffuse+Kspecular
= ξ M + D T A + ∑ i = 1 n C i [ D T ( N ⋅ L i ) + S G ( N ⋅ H i ) m ( N ⋅ L i > 0 ) ] =\xi M+DTA+\sum^{n}_{i=1}{C_i[DT(N\cdot L_i)+SG(N\cdot H_i)^m(N\cdot L_i>0)]} =ξM+DTA+i=1nCi[DT(NLi)+SG(NHi)m(NLi>0)]

你可能感兴趣的:(计算机图形学基础)