Z-Buffer深度缓存z-buffer指每个采样像素储存z值最小的值即离镜头最近的值并用两个缓存维护遮挡信息frame buffer储存颜色值 depth buffer(z-buffer)储存深度深度缓存发生在像素上重要我们假设z永远是正数值更小则距离更近深度缓存算法z-buffer algorithmfor(each triangle T)for(eachsample(x,y,z)in T)if(zzbuffer[x,y])// closest sample so farframebuffer[x,y]rgb;// update colorzbuffer[x,y]z;// update depthelse;// do nothing, this sample is occluded时间复杂度为O(n)n为渲染的三角形个数假设每个三角形覆盖常数个像素非常重要的算法在所有GPU硬件中都有实现Shading着色Shading是对物体应用一种材质的过程着色并不会带来阴影阴影由光线追踪等其他技术生成Blinn-Phong Reflectance Model漫反射着色Lambertian(Diffuse) ShadingLdkd⋅Ir2⋅max⁡(0,n⋅l)L_d k_d \cdot \frac{I}{r^2} \cdot \max(0, n \cdot l)Ld​kd​⋅r2I​⋅max(0,n⋅l)下面解释公式各部分的原理1.蓝色正方体的黑色面接受到的光照的能量与其法线与光线所成夹角有关夹角越小光线接近垂直照射表面光照能量大法线n⃗\vec{n}n与光线l⃗\vec{l}l均为方向向量夹角θ\thetaθ黑色面的单位面积接受到的光照能量与cosθl⋅ncos\thetal \cdot ncosθl⋅n成正比排除cosθ0cos\theta 0cosθ0的情况2.点光源向周围散发的光照能量在球壳上每一点能量相同随距离增大逐渐衰减假设在距离点光源单位距离处能量为III距离点光源距离为rrr处能量为I/r2I/r^2I/r23.kdk_dkd​反映了物体表面对光线的反射能力白色反射能力强数值大得到的最终结果大黑色kd0k_d0kd​0不反射光