现代计算机图形学入门-L7-着色.1(shading) 着色定义与Blinn-Phong模型
什么是着色?
经过前面的mvp变换、视口变换(viewport transformation)、光栅化后,三角形显示在屏幕上,变成不同像素,但此时无颜色和光影的变化。 求这些像素的值或者颜色是什么?——这就是着色的内容。
-
字典定义: 在绘画上,通过平行线或颜色块,引入明暗的不同、颜色不同
-
图形学 对不同问题应用不同的材质。不同的材质跟光线作用有不同的结果。
Blinn-Phong Reflectance Model(最基础的着色模型)
1. Specular highlights(高光)
物体直接反射光源的部分,多见于质感比较光滑的物体。
2. Diffuse reflection(漫反射)
当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,这种反射称之为“漫反射”或“漫射”。对于漫反射,所有观测方向颜色是相同的
3. Ambient lighting(环境光)
环境光为场景提供恒定照明。 它会无差别地点亮所有对象顶点。 环境光在所有方向都是恒定的,并且会无差别地为某个物体的任意一个像素上色,因此在图形学中将环境光视为一个常量。
- 分析出漫反射、高光、环境光就可以定义出一种材质。
了解一些定义
-
shading point(着色点)
- 在物体表面上,即便对于曲面,在局部极小范围内也是一个平面。
-
Viewer direction, v 观测方向。单位向量
- 从shading point 连向相机
-
Surface normal,n 法线向量
- 垂直与平面的一个方向。单位向量。
-
Light direction, I
- 光照方向,从shading point 连向光源。单位向量
-
Surface parameters(color,shineness)
- 物体表面属性(颜色、粗糙度),例如陶瓷未上釉看起来向石膏,上釉后很光亮。
-
着色具有局部性 只考虑shading point自己与上述v、I、n三个方向的作用,不考虑其他物体的存在——不考虑阴影。
漫反射、高光、环境光
Diffuse Reflection(漫反射)
一根光线打到物体表面某个点上,被该点均匀地反射到各个方向去
-
shading point 的法线向量n与光照方向I的夹角不同,导致吸收的光照不同
从物理上也可以解释,角度不同,使得在shading point周围的单位面积上接收的能量不同。地球一年四季也是同理,夏天直射,冬天非直射。
-
shading point 与光源距离r不同,该点光强不同
中心点初始能量为I,随着传播,能量均匀分布在球面上,又因为能量守恒定律,因此球面上任意一点的光强intensity=I/r2
综上可得:
某个shading point的任意一个观测方向上的光强为:
-
I/r2 该点接收到的光强
-
kd 漫反射系数,表示整体的反射率。
- 为0, 完全吸收
- 为1,完全反射
如定义为一个rbg值,就代表对红绿蓝波长的光的反射系数,同时红绿蓝的光波打到物体表面上再经过反射,形成了物理含义的颜色。
-
n · l,两个单位向量点乘,结果与长度无关,都是夹角的余弦值。
-
n 与l夹角为负数,光线从物体内部打到表面,无物理意义——无反射,应该是黑的结果。因此用max函数进行处理。
-
Ld漫反射是往四面八方均匀反射出去,所以与观测方向无关
Specular Term 高光项
- 对于表面绝对光滑的物体,反射方向为镜面反射,得到R(与I对称)。
- 对于金属等非完全镜面但又比较光滑的表面,反射沿R一定范围分布。不同的材质分布范围不同。
- 观察方向v足够接近反射方向R时,可以观察到高光。(Phong模型)
改进
因为(I+R)/|I+R|=n,求观察方向v反射方向R的夹角,可以转化为求半程向量与shading point法线向量h夹角——n与h的点乘。
-
半程向量h
h=(v+I)/|v+I|,光照方向与观测方向相加后,进行归一化
- 夹角余弦的指数p——余弦能够表示两个向量之间的接近程度,但是容忍度太高了。而日常的高光应该是比较居中的一小块区域,不进行指数运算,算出来的高光会是很大的一块区域。
- Blinn-Phong正常情况下,p取值范围[100,200]
改进后的优点
- 减小计算量,因为求反射向量计算量大,而n是已知的。半程向量也非常好求——h =(l+v)/|l+v|,h与n的夹角余弦只需要求两者的点乘即可
Ambient Term 环境光
shading point无法被光源直接照射,但能接收四面八方环境通过弹射而来的光线。实际环境光较为复杂,Blinn-Phong模型中,为了简化,假设:
- 任何一个点,接收到的环境光是相同的——Ia。
- 与观测方向v无关
- 与光照方向I无关
综上,环境光是一个常数
注意
着色与观测的距离无关,原因后续课程讲到辐射度量学中Idensity、Radience等概念时解释。
总结
本节课介绍了着色的定义,与Blin-Phong模型——包含环境光(Ambient)、漫反射(Diffuse)、高光项(Specular)。
- 环境光,常数
- 漫反射,均匀发散,与观测方向v无关,与光照方向I、光源距离r、表面系数kd有关
- 高光,与光照方向I、观测方向v(h=(v+I)/|v+I|)、光源距离r、表面系数kd有关
上述公式中的多个属性可以通过材质进行定义,通过对物体应用不同的材质,可以得到如金属、塑料、粗糙表面等不同的着色效果。
福利
关注公众号“羽毛不会飞”,后台回复“计算机图形学”,获得虎书第二版中文版,虎书第四版英文版,games101课件
恰饭区
"文末喜欢作者"——投喂羽毛小鸡腿🍗,吃饱了继续写。
点点广告也是爱🥰,攒攒明年植发钱。
更多
现代计算机图形学入门-L5-光栅化.1-视口变换与光栅化过程
CocosCreator3.4.2原生二次开发的正确姿势——手把手教你接SDK
关于作者
我是羽毛,一名游戏研发工程师,一名野生摄影同学。我的公众号主要分享自己的一些游戏项目开发过程中的功能总结及日常开发笔记。也希望能通过平台的交流,与更多有想法的同学交流认识,共同成长。
欢迎大家在日常开发过程中,如果觉得有需要讨论解决、分享或者探讨的内容,在公众号后台或者文章留言处给我反馈,提供写作的方向,从另一个角度也尽量让写作内容更贴近大家的需求以及痛点,在此谢谢各位同学.
另外羽毛也提供付费技术咨询的服务,有需求的同学可以公众号后台私信添加微信。