我正在尝试制作一个自阴影对象(opengl/glsl)。我做的步骤是:
1- 从灯光渲染场景以获得深度图
2- 从相机位置渲染并计算每个点到光源的距离,如果点到光源的距离大于存储在深度图中的深度,则该点处于阴影中。
但随之出现了暗影粉刺的问题。所以,第二步会像:
2- ...如果(abs(DISTANCE_OF_THE_POINT_TO_LIGHT - DEPTH_STORED_IN_THE_DEPTH_MAP)> BIAS)点在阴影中。
但它仍然没有给我很好的结果(没有合适的偏差值)。
所以,我实现了 woo 技巧(从光中找到第一个和第二个表面,然后将中点存储在深度缓冲区中)。为此,我进行了两次深度剥离。步骤是:
1- 像往常一样从灯光渲染场景以获得第一张深度图。
2- 从光照渲染场景得到第二张深度图,如果一个点到光照的距离等于第一张深度图中的距离,则丢弃该点(即不渲染第一层)。
3- 存储为您的最终深度图(第一个深度图 + 第二个深度图)/2
4- 从相机位置渲染并计算每个点到光源的距离,如果点到光源的距离大于深度图中存储的深度,则该点处于阴影中。
现在问题出现在第2步,我们之前遇到的SAME问题:当第一层和第二层接近时会出现舍入误差并且还会出现某种粉刺,并且也没有合适的偏差值。所以,我没有从 woo 算法中得到任何好处,它只是将问题转移到深度剥离部分。
你怎么能解决这个问题?