我的背面(对光)和阴影贴图有问题,我似乎无法通过。我仍处于优化引擎的相对早期阶段,但我似乎无法到达那里,因为即使为这一几何图形手动调整了所有内容,它仍然看起来像垃圾。
它是一堵通过大约 5 块不同的墙“弯曲”的瘦墙。当我创建我的深度图时,我正在剔除正面(对光)。这肯定有帮助,但墙另一侧的正面似乎是导致 z 冲突/投影阴影的原因。
截图上的一些注释:
- 绘制深度纹理(来自灯光)时剔除正面
- 我为这块几何图形调整了近平面和远平面(分别设置为 20 和 25)
- 一个定向光源,以轻微的角度朝向场景的右侧向下照射,足以表明墙壁应该被遮蔽,但大部分是笔直向下
- 使用非常大的 4096x4096 阴影贴图纹理
- 所有照明都被禁用,但知道我正在做柔和的照明(因此顶点的顶点法线)即使在这面墙上
正如这里提到的,它得出的结论是,您不应该对光线背面的多边形进行阴影处理。我正在努力解决这个特殊问题,因为我不想将面部法线一直传递到片段着色器以排除那里的光线的真正背面 - 但是如果有人认为这是最好/唯一的解决方案对于这个几何,这就是我必须要做的。考虑到管道如何让面部法线通过它变得不容易/明显,这让我觉得这不是阻力最小的路径。请注意,我传递的法线是顶点法线,以允许在边缘周围产生更柔和的照明效果(可能包括非阴影和阴影表面)。
请注意,我有一些令人讨厌的Perspective Aliasing,但我希望我的下一步是处理级联阴影贴图,但如果没有解决这个问题,我觉得我只是在推迟不可避免的事情,因为我已经手动收紧了视图尽我所能(或者我认为)。
无论如何,我觉得我错过了一些东西,所以如果您有任何想法或帮助,将不胜感激!
编辑
需要明确的是,根据光线的来源,从技术上讲,墙不应该处于阴影中。
下面是关闭阴影的图像。这只是使用顶点法线来计算漫反射照明 - 它并不漂亮(太多几何图形可见),但它确实表明某些边缘有些可见。
所以是的,墙应该在阴影中,但我希望我可以让平滑工作更好,这样边缘就可以有一些漫射照明。如果我需要将它完全置于阴影中,那么如果是将其置于阴影中的阴影贴图,或者我的代码专门将其置于阴影中,因为面法线已消失,我对此很好 - 但将面法线通过对我的顶点/片段着色器来说似乎不是阻力最小的路径。
也许这些将有助于更好地说明我的问题,或者可能会揭示我缺少的一些基本理解。
编辑#2
我在下面包含了深度纹理。您可以在左下角看到有问题的墙,从屏幕截图中您可以看到我如何将深度值修剪到 ~0.4->1。这意味着该墙的深度值从 0.4 范围开始。所以它没有完美地剪裁,但它很接近。这看起来合理吗?我很确定它是一个完整的 24 位或 32 位深度缓冲区,是 iOS 上的一个 DEPTH_COMPONENT 扩展。对于@starmole,这是否有助于确定我的投影中是否存在缩放错误?您是否认为我的地图所覆盖的大小/区域太大,因此如果它聚焦得更近可能会有所帮助?