这是一个理论问题。假设我们有2个对象
太阳在上面垂直照耀着。盒子直接在地板上方一定距离。现在,我将Shadow map
与盒子和地板一起渲染到场景中。
但是当我在盒子和地板着色器中分别对Shadow map
进行采样时,box
和floor
完全是一团糟,上面遍布着黑白条纹。
但是我发现我创建了两个单独的Shadow maps
Box map
不包含任何对象,因为我认为框上方没有对象可以在其上投射阴影
Floor map
仅包含该框,因为该框位于其上方,因此它会在地板上投射阴影
当我在每个着色器中对这两个单独的Shadow maps
进行采样时,结果是正确的。
所以我只是想知道在现实世界中,物体在各处移动,我们如何跟踪什么物体在Shadow
上投射了什么?
我们是否对每个对象使用单独的Shadow maps
。跟踪前面的对象?还是在着色器中使用深度条件?
如果后者将以着色器代码的形式提供一些理论或算法,将不胜感激。
答案 0 :(得分:5)
您为每个光源而不是每个对象创建一个阴影贴图。
您看到的伪像称为自阴影,最可能是因为您为阴影贴图渲染对象的正面而不是背面,并且您没有添加小的偏移量。
仅使用背面渲染的技巧仅适用于具有一定体积的闭合对象,不适用于地板等对象,唯一的方法是使用微小的偏移量。
仅创建一个阴影贴图不一定是正确的,根据场景的不同,您可能会为一个光源创建多个阴影贴图,以便能够为关闭的对象获取详细的阴影。但这并不能改变事实,即阴影贴图是按光源而不是按对象的。