0

嗨,这些水平线的原因是什么?区域光是绿色平面上方的黄色方块。线条的图案根据平面上方区域光的距离而变化,但它们仍然是水平线。

我有 4 个点光源均匀分布在区域光的表面(黄色方形贴片)。

你可以在这里看到它的样子(16x 超级采样)。

4

1 回答 1

1

这看起来像阴影痤疮:由于近似误差而产生的不希望的自阴影、图案化。请注意,完全阴影区域没有线条,这表明问题在于阴影系统错误地“认为”绿色平面在那里处于阴影中。

编辑:由于您是光线追踪,问题可能是您错误地与“发射”它们的平面的出射阴影光线相交。以下建议适用于使用阴影贴图的光栅化,而不是光线追踪,但它们可能仍然具有指导意义......


阴影映射的工作原理是首先从每个灯光的角度绘制深度图,记录阴影对象的“阴影图”。然后,在绘制实际图像时,每个像素从阴影贴图中采样阴影深度,并将其与从该像素位置的光线计算的深度进行比较:如果像素深度大于阴影深度,则它被阴影。

请注意,如果正在绘制的对象距离灯光最近的阴影对象,则像素深度应与阴影深度相同。但是,由于采样和浮点计算并不精确,因此比较只是近似相等。所以,部分时间(基于采样和浮点误差的奇思妙想),它认为像素深度比同一物体造成的阴影深度更远:物体自身阴影。


有几种方法可以避免暗疮。最简单的选项(也是您场景的明显选择)是从阴影投射器列表中删除对象。由于您的飞机似乎打算用作“地板”,因此无论如何它不应该遮蔽任何东西。这还有一个额外的好处,那就是节省将地板绘制到所有阴影贴图上的时间……

同样的原则,如果一个物体是“不漏水的”,单边三角形始终朝外,你应该反转阴影贴图的三角形方向测试。这将从对象的黑暗面获取阴影深度(无论如何它都处于全阴影中,因为它背对光线),所以它不会在明亮的一面造成粉刺。

如果您有一个必须从两侧可见的平面物体,您可以对阴影深度应用偏差;图形软件和硬件通常对此有规定。不幸的是,这可能有点繁琐:偏差必须足够大以隐藏采样/计算错误,但又足够小以至于不会导致其他伪影。

于 2013-11-14T23:13:00.937 回答