《OGL dev》Etay Meiri Tutorial 24 - Shadow Mapping - Part 2 笔记
本节教程的shadow mapping,只适用于spot light。
在shadow mapping的第二个pass中:
- 因为NDC空间的x、y坐标为[-1, 1],而uv的区间为[0, 1],需要先映射才能在shadow map中采样:
u = 0.5 * x + 0.5
,v = 0.5 * y + 0.5
。 - 因为NDC空间的z坐标为[-1, 1],而shadow map的记录的深度值为[0, 1],需要先进行映射才能进行比较:
depth = 0.5 * z + 0.5
。 - 因为fragment shader需要同时在diffuse texture和shadow map中采样,所以需要使用两个texture unit。
- 实际深度比较时,因为考虑到浮点数的精度问题,为映射后的z值加上一个很小的小数,再与shadow map采样的深度值进行比较,如果大于深度值则设置阴影。
uniform variable的位置在shader程序链接后确定,除非再次链接否则不改变。这允许应用在不同的shader程序之间切换。
因为地面不会投射阴影,所以我们不需要将地面渲染到shadow map。这是shadow mapping的一种优化。