(个人笔记,由于刚开始学习再加上英语不太好,所以有的地理解的可能不太对,望指正)
Chapter 10 Surface Shading
10.1 Diffuse Shading
Lambertain Shading Model

其中n表示表面法线方向,l表示光照方向,表面颜色正比于θ,公式为
c=crcln∙l(10.1)
其中cr表示漫反射系数,cl表示光照强度,它的取值范围为[0, 1],为了防止负值的出现将公式(10.1)表示为以下形式
c=crclmax(0,n∙l)(10.2)
Ambient Shading
如果只是用漫反射公式(10.2)来表示光照效果那么会有一个问题,在光线照不到的位置会是完全黑的,添加环境光来给添加一个默认亮度
c=cr(ca+clmax(0,n∙l))(10.3)
其中ca表示所有表面接收到的环境光的平均值
10.2 Phong Shading

其中n表示法线方向,l表示光照方向,r表示反射方向,e表示观察方向。σ表示观察方向与反射方向的夹角,越大高光效果应该越弱,该影响可以表示为
c=cl(e∙r)(10.4)
通过(10.4)产生的光斑会比物理世界中的要大一些,通过phong exponent缩小其范围。
c=clmax(0,e∙r)p(10.5)
其中p为phong exponent为一个正数,效果如图所示

反射方向计算如图所示

计算公式
r=−l+2(l∙n)n(10.6)
为了简化(10.5)中反射方向的计算,可以通过光线方向以及观察方向的中间方h向与法线方向的计算来进行近似

h的计算方式如(10.7)所示
h=∥∥e+l∥∥e+l(10.7)
(10.5)可以重新表示为(10.8)的格式
c=cl(h∙n)p(10.8)
同时进行ADS光照,公式如(10.9所示)
c=cr(ca+clmax(0,n∙l))+cl(h∙n)p(10.9)
可以使用高光系数来控制高光部分的颜色显示如(10.10)所示
c=cr(ca+clmax(0,n∙l))+clcp(h∙n)p(10.9)
法向量的插值
三角面的法线插值可以使用三角形重心坐标来进行计算
n=αn0+βn1+γn2(10.10)
其中(α,β,γ)为pixel的重心坐标。
10.3 Atistic Shading
Line Drawing
判断某条边是否需要描边,可以通过观察者的位置与该边关联的两个平面的法线进行计算,当(e∙n0)(e∙n1)小于0,则需要描边。如果fi(p)=0表示一个平面,也可以通过f0(e)f1(e)<0进行判断。
如果需要进行折痕进行绘制,可以通过n0∙n1<threshold进行判断。
Cold-to-Warm Shading
可以将物体阳面跟阴面分别用冷暖色进行表示,对于过度位置进行插值,计算方式如公式(10.11)所示
c=kwcw+(1−kw)cc(10.11)
其中cw、cc分别为暖色与冷色,kw表示暖色系数,计算方式如下
kw=21+n∙l(10.12)
显示效果
