Chapter 10 Surface Shading

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

Chapter 10 Surface Shading

10.1 Diffuse Shading

Lambertain Shading Model

在这里插入图片描述

其中n表示表面法线方向,l表示光照方向,表面颜色正比于θ,公式为
c = c r c l n ∙ l ( 10.1 ) c = c_rc_ln\bullet l\qquad\qquad(10.1) c=crclnl(10.1)

其中 c r c_r cr表示漫反射系数, c l c_l cl表示光照强度,它的取值范围为[0, 1],为了防止负值的出现将公式(10.1)表示为以下形式
c = c r c l m a x ( 0 , n ∙ l ) ( 10.2 ) c = c_rc_lmax(0, n\bullet l)\qquad\qquad(10.2) c=crclmax(0,nl)(10.2)

Ambient Shading

如果只是用漫反射公式(10.2)来表示光照效果那么会有一个问题,在光线照不到的位置会是完全黑的,添加环境光来给添加一个默认亮度
c = c r ( c a + c l m a x ( 0 , n ∙ l ) ) ( 10.3 ) c = c_r(c_a + c_lmax(0, n\bullet l))\qquad\qquad(10.3) c=cr(ca+clmax(0,nl))(10.3)

其中 c a c_a ca表示所有表面接收到的环境光的平均值

10.2 Phong Shading

在这里插入图片描述

其中n表示法线方向,l表示光照方向,r表示反射方向,e表示观察方向。σ表示观察方向与反射方向的夹角,越大高光效果应该越弱,该影响可以表示为
c = c l ( e ∙ r ) ( 10.4 ) c = c_l(e \bullet r) \qquad \qquad(10.4) c=cl(er)(10.4)

通过(10.4)产生的光斑会比物理世界中的要大一些,通过phong exponent缩小其范围。
c = c l m a x ( 0 , e ∙ r ) p ( 10.5 ) c = c_lmax(0, e \bullet r)^p \qquad\qquad(10.5) c=clmax(0,er)p(10.5)

其中pphong exponent为一个正数,效果如图所示

在这里插入图片描述

反射方向计算如图所示
在这里插入图片描述

计算公式
r = − l + 2 ( l ∙ n ) n ( 10.6 ) r = -l + 2(l \bullet n)n \qquad\qquad(10.6) r=l+2(ln)n(10.6)

为了简化(10.5)中反射方向的计算,可以通过光线方向以及观察方向的中间方h向与法线方向的计算来进行近似

在这里插入图片描述

h的计算方式如(10.7)所示

h = e + l ∥ e + l ∥ ( 10.7 ) h = \frac{e+l}{\begin{Vmatrix} e+l \end{Vmatrix}}\qquad\qquad(10.7) h=e+le+l(10.7)

(10.5)可以重新表示为(10.8)的格式
c = c l ( h ∙ n ) p ( 10.8 ) c = c_l(h \bullet n)^p\qquad\qquad(10.8) c=cl(hn)p(10.8)

同时进行ADS光照,公式如(10.9所示)
c = c r ( c a + c l m a x ( 0 , n ∙ l ) ) + c l ( h ∙ n ) p ( 10.9 ) c = c_r(c_a + c_lmax(0, n \bullet l)) + c_l(h \bullet n)^p\qquad\qquad(10.9) c=cr(ca+clmax(0,nl))+cl(hn)p(10.9)
可以使用高光系数来控制高光部分的颜色显示如(10.10)所示
c = c r ( c a + c l m a x ( 0 , n ∙ l ) ) + c l c p ( h ∙ n ) p ( 10.9 ) c = c_r(c_a + c_lmax(0, n \bullet l)) + c_lc_p(h \bullet n)^p\qquad\qquad(10.9) c=cr(ca+clmax(0,nl))+clcp(hn)p(10.9)

法向量的插值
三角面的法线插值可以使用三角形重心坐标来进行计算
n = α n 0 + β n 1 + γ n 2 ( 10.10 ) n = \alpha n_0 + \beta n_1 + \gamma n_2\qquad\qquad(10.10) n=αn0+βn1+γn2(10.10)

其中 ( α , β , γ ) (\alpha, \beta, \gamma) (α,β,γ)为pixel的重心坐标。

10.3 Atistic Shading

Line Drawing

判断某条边是否需要描边,可以通过观察者的位置与该边关联的两个平面的法线进行计算,当 ( e ∙ n 0 ) ( e ∙ n 1 ) (e \bullet n_0)(e \bullet n_1) (en0)(en1)小于0,则需要描边。如果 f i ( p ) = 0 f_i(p)=0 fi(p)=0表示一个平面,也可以通过 f 0 ( e ) f 1 ( e ) < 0 f_0(e)f_1(e)<0 f0(e)f1(e)<0进行判断。

如果需要进行折痕进行绘制,可以通过 n 0 ∙ n 1 < t h r e s h o l d n_0 \bullet n_1<threshold n0n1<threshold进行判断。

Cold-to-Warm Shading

可以将物体阳面跟阴面分别用冷暖色进行表示,对于过度位置进行插值,计算方式如公式(10.11)所示
c = k w c w + ( 1 − k w ) c c ( 10.11 ) c = k_wc_w + (1 - k_w)c_c\qquad\qquad(10.11) c=kwcw+(1kw)cc(10.11)

其中 c w c_w cw c c c_c cc分别为暖色与冷色, k w k_w kw表示暖色系数,计算方式如下
k w = 1 + n ∙ l 2 ( 10.12 ) k_w = \frac{1 + n \bullet l}{2}\qquad\qquad(10.12) kw=21+nl(10.12)

显示效果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值