如何应用深度测试来漫射照明?

时间:2018-03-30 08:34:59

标签: vulkan

我一直在通过vulkan摆弄我的方式,并尝试了一些基本的漫射照明,这只考虑了表面法线。在面对光线的模型一侧,事情看起来很好 -

The side facing the light.

在模型的另一侧,模型的一部分是阴影,就像它被照亮一样,即使它不应该 -

Notice how the shutter seems illuminated

我知道发生这种情况是因为我只考虑表面法线,并且着色器并不关心顶点的位置,只要它的法线朝向光线,但我该如何解决?我觉得我需要一种方法来进行深度测试,以确定是否应该点亮模型的一部分。如果是这样的话我该怎么做呢?如果不这样做,我该怎么办?

1 个答案:

答案 0 :(得分:2)

听起来你想要实现阴影。

标准方式是shadow mapping。您可以从灯光的角度渲染场景,并仅保留深度缓冲区。然后,将该深度缓冲区作为纹理传递给片段着色器,并根据点在世界中的位置进行采样,并将采样深度与光线距离进行比较。

然而,这种技术有各种各样的警告。最常见的是阴影痤疮,其中量化误差导致碎片自阴影导致斑点光照,您可以通过向深度添加小偏移来解决这个问题。下一个是彼得平移,你先前添加的偏移导致轻薄的墙壁与地板相遇的光线穿透,你可以通过不让墙壁足够薄以使偏移穿过它们来解决这个问题。