画家算法(Painter's Algorithm)
从后到前绘制,覆盖帧缓冲区
不同的绘制顺序,可能会产生不同的结果
此外,需要对深度进行排序(n 个三角形需要 O(nlogn)),存在无法解决的深度值顺序问题
Z-Buffer
介绍
存储每个采样点(像素)当前的 min z-value
需要额外的 buffer 存储深度值
frame buffer 存储 color values
depth buffer(z-buffer)存储 depth
主要点:为了简化理解,我们假设 z 总是正数(z 越小,表示越近,z越大,表示越远)
伪代码
同时更新 framebuffer 和 zbuffer
例子
R 表示无穷大
复杂度
O(n) :遍历 n 个三角形(每个三角形假设是常数覆盖)
不需要考虑三角形绘制顺序,可以用 GPUs 实现
Shading
对不同物体应用不同材质的过程
Blinn-Phong Reflectance Model
基本概念
Specular highlights:高光
Diffuse reflection:漫反射
Ambient lighting:环境光
局部 Shading
在特定的 shading point,计算光反射到 camera
法线,\vec{n}
观测方向,\vec{v}
光照方向,\vec{l}
表面参数,(color, shininess, ...)
都是单位向量
shading 不等于 shadow,shading 不会生成阴影
漫发射
光在各个方向均匀地散射,从任意观测方向看表面颜色是相同的
Lambert's cosine law
单位面积有多少光被接收?
立方体的表面接收一定量的光
60^o旋转立方体,顶面拦截一半的光
通常情况下,单位面积的光与cos\theta = \vec{l} \cdot \vec{n}成正比
Light Falloff
Lambertian(Diffuse) Shading
Shading 独立于观察方向
L_d:漫发射光
k_d:漫反射系数(color),表示反射率,即有多少光会被反射
r:光源到 shading point 的距离
max(0, \vec{n}\cdot\vec{l}):有多少光可以到达 shading point