嗨,这些水平线的原因是什么?区域光源是绿色平面上方的黄色方块。线条的图案根据平面上方区域光的距离而变化,但它们仍然是水平线。
我有4点光源均匀分布在区域光(黄色方形斑块)的表面上。
你可以在这里看到它的样子(16倍超级采样)。
这看起来像阴影痤疮:不需要的自我阴影,由于近似误差而图案化。 请注意,完全阴影区域中没有线条,这表明问题在于阴影系统错误地"认为"绿色平面在那里处于阴影中。
编辑:由于您正在进行光线追踪,因此问题可能是您错误地与"发射"它们的平面的出射阴影光线相交。 以下建议适用于阴影贴图的光栅化,而不是光线追踪,但它们可能仍然具有指导意义......
阴影贴图
的工作原理是首先从每个光源的角度绘制深度贴图,记录阴影对象的"阴影贴图"。 然后,在绘制实际图像时,每个像素从阴影贴图中采样阴影深度,并将其与像素位置的该光源计算的深度进行比较:如果像素深度大于阴影深度,则对其进行阴影。
请注意,如果要绘制的对象是离光源最近的阴影对象,则像素深度应与阴影深度相同。 但是,由于采样和浮点计算不精确,因此比较仅大致相等。 因此,部分时间(基于采样和浮点误差的突发奇想),它认为像素深度比同一对象引起的阴影深度更远:对象阴影本身。
有几种方法可以避免阴影痤疮。 最简单的选项(也是场景的明显选择)是从阴影投射器列表中删除对象。 由于您的飞机似乎打算用作"地板",因此无论如何,它不应该遮蔽任何东西。 这还有一个额外的好处,那就是节省了将地板绘制到所有阴影贴图上所需的时间......
根据相同的原理,如果对象是"水密的",单侧三角形始终朝外,则应反转阴影贴图的三角形方向测试。 这将从物体的黑暗面(无论如何,它处于完全阴影中,因为它背对光线),因此它不会在明亮的一面引起痤疮。
如果你有一个必须从两侧都可以看到的平面物体,你可以对阴影深度应用偏差; 图形软件和硬件通常对此有规定。 不幸的是,这可能有点繁琐:偏差必须足够大以隐藏采样/计算错误,但又足够小,以至于不会导致其他伪影。