Lecture 7 Shading 1 (Illumination, Shading and Graphics Pipeline)
可见性 & 遮挡(visibility & occlusion)
- 解决方法:Z-buffering 深度缓存/深度缓冲
- 画家算法:先把远处的画完,然后往近处覆盖掉物体
- 环:无法判断深度关系
- 深度缓存:
- 初始认为像素都在无限远
- Z-buffer 无法处理透明物体
着色处理(shading)
- 对不同物体应用不同材质
- 漫反射:接收到多少能量
Blinn-Phong Reflectance Model 光照模型 着色模型
- 漫反射和观测的方向
v
v
v无关:
- 高光:近镜面反射,观察方向和镜面反射方向接近
- 说明法线向量和半程向量方向接近
- 能量吸收:不考虑的原因→经验模型
- 环境光:不讲究从哪进来,且与
v
v
v也没有关系,是个常数
- 事实:全局光照
- 事实:全局光照
- 环境光 + 漫反射光 + 高光 = Blinn-Phong 反射模型
Lecture 8 Shading 2 (Shading, Pipeline and Texture Mapping)
着色频率
- Flat shading(三角形着色)
- 每个三角形的法线是一样的,Shading一次获得颜色值
- 效果不好
- Gouraud shading(顶点着色)
- 每个顶点做一次Shading,中间对颜色值插值
- Phong shading(像素着色)
- 对法线值做插值,对每个点做Shading
- 不是Blinn-Phong
- 着色频率取决于物体本身:如果模型足够复杂,则使用简单的Shading方法效果不一定差
- 好的效果一般需要大的计算量
- 顶点法线方向的计算:相邻面的法线的加权平均
实时渲染管线
- shader:
- 顶点着色器: . v s h .vsh .vsh
- 像素着色器: . f s h .fsh .fsh
- Shadertoy
- GPU:并行计算
纹理映射
- 三维物体的表面是二维的
- 纹理:一张图
- 映射:纹理“蒙”在物体表面
- 参数化
- 纹理上的坐标:在纹理上定义一个坐标系(
u
u
u和
v
v
v都在0~1之内)
Lecture 9 Shading 3 (Texture Mapping Cont.)
重心坐标
- 三角形内的插值:
- α,β,γ三个均非负,则点在三角形内,否则在三点所在平面内
纹理的放大
- 像素纹理:texel
- 多个pixel映射到了同一个texel
- 双线性插值Bilinear:最近的4个点
- 双向三次插值Bicubic:周围16个点做三次插值
纹理的缩小
- Super sampling:浪费:
- MipMap:
- 三线性插值
- 各向异性过滤