Shadow mapping
问题的提出
- 我们之前在进行着色时,对于每个物体仅考虑自己,而不考虑其他物体对它的影响。限定在光栅化中,如何解决阴影问题呢?
- 阴影能被摄像机看到,但不能被光源所照亮。
- 经典的Shadow mapping只能处理点光源(或者说方向光源)产生的阴影,这种阴影有明显的边界,即一个物体要么在阴影里、要么不在。这种非0即1的阴影叫做硬阴影。
Projection to light
- 将相机移动到点光源位置,进行投影,计算并记录点光源照射物体的深度信息。
- 将相机移回角色头部,在角色视线方向进行投影,对每个片段进行变换。
- 使用上一步的变换矩阵,获取刚刚记录的片段对应的深度信息,计算片段到相机的距离。
- 如果距离等于深度,那么使用光进行着色,否则视为阴影。
从光源看向场景
记录物体的深度
从相机看向场景
需要探讨的问题
-
深度的数值精度
-
Shadow Mapping使用多大的分辨率?
-
Shadow Mapping需要更多的计算
-
只能计算硬阴影(理论上)
-
硬阴影和软阴影有什么区别?
硬阴影就是被本影挡住的部分,而软阴影是被部分光源照亮。
如果要做出软阴影,必须使用具有一定体积大小的点光源。