我遇到了背面(光线)和阴影贴图的问题,我似乎无法通过。我仍然处于优化引擎的相对早期阶段,但是我似乎无法实现这一点,即使手动调整这一块几何形状,它仍然看起来像垃圾。
它是一个瘦墙,通过约5个不同的墙块“弯曲”。当我创建我的深度图时,我正在剔除前脸(对光线)。这肯定有帮助,但墙的另一侧的正面似乎是导致z战斗/投射阴影。
截图上的一些注释:
正如所提到的here,它得出结论,你不应该遮挡从光线背面的多边形。我正在努力解决这个问题,因为我不想将面法线一直传递到片段着色器以排除那里真正的背面 - 但是如果有人觉得这是最好的/唯一的解决方案这种几何形状就是我必须要做的。考虑到管道如何不容易/明显地通过面法线通过它让我觉得这不是阻力最小的路径。请注意,我传递的法线是顶点法线,以允许边缘周围更柔和的光照效果(可能包括非阴影和阴影表面)。
请注意,我有一些讨厌的Perspective Aliasing,但我希望我的下一步工作是cascaded shadow maps,但如果不解决这个问题,我觉得我只是在拖延不可避免的事情,因为我尽我所能(或者我认为)尽可能地收紧了观点。
无论如何我觉得我错过了什么,所以如果你有任何想法或帮助,我将非常感激!
修改
为了清楚起见,根据光线的来源,墙壁技术上不应该处于阴影中。
下面是阴影关闭的图像。这只是使用顶点法线来计算漫反射光照 - 它不漂亮(太多的几何体是可见的),但它确实显示某些边缘有些可见。
所以是的,墙应该在阴影中,但我希望我可以让平滑效果更好,所以边缘可以有一些漫射光。如果我需要将它完全放在阴影中,那么如果它的阴影贴图将它置于阴影中,或者我的代码专门将它置于阴影中,因为面部法线不在,我对此很好 - 但将面部正常通过我的顶点/片段着色器似乎不是阻力最小的路径。
也许这些将有助于更好地说明我的问题,或者可能揭示我缺少的一些基本理解。
编辑#2
我在下方加入了深度纹理。你可以在左下方看到有问题的墙,从截图中你可以看到我如何将深度值修剪为~0.4-> 1。这意味着该墙的深度值从0.4范围开始。所以它没有完美地剪裁它,但它的关闭。这看起来合情合理吗?我非常确定它是一个完整的24或32位深度缓冲区,是iOS上的DEPTH_COMPONENT扩展。对于@starmole,这有助于确定我的投影中是否存在缩放误差?你认为我的地图所覆盖的尺寸/面积是否太大,因此如果它更接近它可能有帮助吗?
答案 0 :(得分:2)
问题似乎是你
(1)和(2)表示阴影贴图和背面之间会有Z战斗。
此外,阴影贴图分辨率对您没有帮助 - 只需看一下阴影贴图中的墙,它就是一个像素厚。
建议: