Games101-系列课程笔记
Lecture 07 Shading-P1
本篇博客内容为Games-101系列课程的 Lecture 07 Shading1内容,有兴趣的小伙伴可前往GAMES101官网下载相关内容。GAMES101官网
画家算法(Painter’s Algorithm)
- 原理
画家算法是按照从远到近的方式,依次对物体进行光栅化和着色,近距离的物体在同一像素点位置遮挡远距离物体。 - 缺点:
- 要先根据距离远近排序,对n个三角形的时间复杂度为O(nlogn)
- 在复杂的环境背景下,我们很难判断清楚物体的远近关系
- 无法解决物体相互交叠问题(见下图)
深度缓冲(Z-Buffer)
原理
对屏幕上每个像素点,记录像素点深度值z值(用z-buffer,深度缓冲)。对三角形覆盖的每个点,先判断深度值depth和光栅化后对应像素上的z值的大小关系。如果depth<z,说明三角形上这个点距光栅化像素点更近,从而更新z值并更新该像素点颜色(用frame-buffer,帧缓冲器)。
伪代码
时间复杂度
假设n个三角形大小合适,每个三角形覆盖常数个像素。则Z-Buffer算法时间复杂度为O(n)(因为只记录最小值,并非排序)。
渲染(Shading)
简单的定义
渲染(或着色)是为一个物体涂上某种材料(Applying a material)
Blinn-Phong 反射模型(Blinn-Phong Reflectance Model)
-
光照类型
- 高光(Specular Highlight)
- 漫反射(Diffuse Reflection)
- 环境光照(Ambient Lighting)
-
图示
-
输入:
- 观察者方向向量 v
- 法线 n
- 光照方向 l
- 表面参数(颜色、光亮度shinness等)
-
PS:这种shading模型不产生阴影效果
-
漫反射(Diffuse Reflection)
- 光线均匀反射到各个方向上
- Lambert’s cosine law
光照方向 l和法线 n之间的夹角,影响物体表面接收到的光强。 - 光线衰弱(Light Falloff)
- 漫反射公式
Ld:反射光强
kd:漫反射系数,越大表示吸收能量的能力越弱
max(0,n·l):确保Ld>=0,因为<0没有物理意义。 - 漫反射光强和观测方向无关(见上述公式)
参考
[1]. GAMES101_Lecture_07.pdf
[2]. Shirley P , Marschner S R . Fundamentals of Computer Graphics[M]. AK Peters, 2005.