着色及光线反射原理

着色英文名叫shading,在韦氏字典里的意思表达的是一个物体的明暗颜色,在图形学中有特殊的含义,即:将材质应用于对象的过程

shading有很多种方式,这里介绍其中一种比较简单的,叫Blinn-Phong 反射模型

我们知道,人的眼睛能看到物体表面的明暗和颜色,是因为光射到了物体上,然后反射到人的眼睛里。

反射有三种方式:高光 Specular highlights漫反射 Diffuse reflection环境光Ambient lighting

 

 

对于每一个单独的物体,为了衡量光线的强度 ,我们定几个参数作为输入项,根据这几个参数,可以得到最后的颜色。

 

 

着色点 shading point:我们假设物体表面有无数个点可以反射光,每个点为一个shading point

法线向量 n:沿物体表面,过shading point做一条切线,垂直于这条切线并向外的线,设为单位向量

光源方向向量 l:从shading point连向光源的线,设为单位向量

观测方向向量 v:从shading point连向摄像机的线,设为单位向量

现在把高光、漫反射、环境光分别用以上参数做分析。

漫反射

 

 

我们可以认为,漫反射是光线以一定的角度直射到物体表面,均匀的反射到各个方向。 

Blinn-Phong 反射模型认为,漫反射受到3个因素叠加而成,分别是光源到物体的距离光线跟物体的角度物体的材质

光源到物体的距离

我们把光线看成一种能量,一束光外扩散,总能量不变,范围便大,强度变低。光的强度跟距离的平方成反比

我们用I/r²表示能量到达系数,I表示光强度,r表示扩散半径。

 

光线跟物体的角度

就像太阳的直射会造成夏季一样,光射向物体的角度会造成物体表面单位面积的光密度不同,从而接收到的光强度不同。当角度θ越接近0°强度最大,物体越亮;越接近90°强度越小,物体越暗。

我们用max(0, n · l) 表示接收系数,n和l分别是法向量和光源向量,他们的乘积等于两个向量的夹角cosθ的值(0°时为1,90°时为0)。max的作用是如果值为负并不会有衰减。

 

 

物体的材质

不同的材质表面吸收的光不同,导致人看到的颜色不同。

我们用kd表示材质漫反射系数

 

 

从左到右不同的材质, 同样强度同样角度的光照所反射的颜色不同。

 

综上所述,可以用一个公式来表示漫反射的总颜色值:

 

 

 

 

高光

Blinn-Phong 反射模型认为,高光是一束很窄的光,只有反射向量和观测向量非常接近时,才能被观测到。

 

跟漫反射类似,我们可用光源到物体的距离反射向量和观测向量的夹角物体的材质三个因素叠加形成高光。(跟漫发射不同的是,Blinn-Phong 反射模型的高光不会考虑接收强度,也就是光线跟物体的角度)。

但是由于反射向量的计算量比较大(根据入射方向和法线向量求出),Blinn-Phong 提出了一种优化方法,即法线向量n半程向量h的夹角,可以一定程度来表示R和v是否接近。

而半程向量非常好求,l + v后再做归一化即可得。

 

这里需要注意的是,因为最后的夹角会影响到是否能观察到高光,而用简单的cos函数会导致能被观测到的范围非常大,例如当α=45°,cos并不等于0,相当于偏移45度依然能观察到高光,显然跟现实不太符合。这里的方法是把cos函数变成cos次方函数,通过调整次方p的值调整可见范围。一般p的值为100~200,把可见范围调整到3°~5°。

 

 由此可得到Blinn-Phong 反射模型下的高光公式:

 

环境光

Blinn-Phong 反射模型认为,环境光跟光源的距离、射入角度的关系不大,可以把所有所有射入的光线因素当成常量I,然后再加上物体的材质,总共2个因素。

 

因此,在Blinn-Phong 反射模型中,环境光的强度是一样的(常量I),意味着如果物体的材质一样,所有只有环境光反射的地方(比如背面),看起来都是平的(没有明暗分别),不管这个地方是凹还是凸。

总结:

1.高光受光照强度入射角度(Blinn-Phong模型不考虑)、观测角度材质系数影响;

2.漫反射受关照强度入射角度材质系数影响;

3.环境光受常数I材质系数影响。

 

高光 Specular highlights漫反射 Diffuse reflection环境光Ambient lighting三种反射叠在一起,即为最终的Blinn-Phong 反射。

 

posted @ 2022-04-05 22:14  银龙背上的骑士  阅读(915)  评论(0编辑  收藏  举报