Graphics 光线跟踪:具有区域光的水平瑕疵

Graphics 光线跟踪:具有区域光的水平瑕疵,graphics,raytracing,Graphics,Raytracing,嗨,这些水平线的原因是什么??区域光是绿色平面上方的黄色正方形。线的图案根据平面上方区域光的距离而变化,但它们仍然是水平线 我有4个点光源均匀地分布在区域光的表面上(黄色方形面片) 你可以看到它看起来是什么样子(16倍超级采样)。看起来像阴影痤疮:不希望的自我阴影,由于近似误差形成的图案。请注意,完全阴影区域中没有线条,这表明问题在于阴影系统错误地“认为”绿色平面处于阴影中 编辑:由于是光线跟踪,问题可能是与“发射”它们的平面的传出阴影光线错误相交。以下建议适用于带有阴影贴图的光栅化,而不是光线

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

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


你可以看到它看起来是什么样子(16倍超级采样)。

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

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


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

请注意,如果正在绘制的对象是距离灯光最近的阴影对象,则像素深度应与阴影深度相同。但是,由于采样和浮点计算不精确,比较结果仅大致相等。因此,在一定程度上(基于采样和浮点错误的突发奇想),它认为像素深度比同一对象(对象本身)引起的阴影深度要远


有几种方法可以避免暗疮。最简单的选择(也是场景中最明显的选择)是从阴影投射器列表中移除对象。因为你的飞机看起来像是一个“地板”,所以无论如何,它不应该遮蔽任何东西。这还有一个额外的优点,那就是节省了在所有阴影贴图上绘制地板所需的时间

根据相同的原则,如果对象是“水密”的,且单面三角形始终朝外,则应反转阴影贴图的三角形方向测试。这将从物体的黑暗面获取阴影深度(因为它背对着光线,所以处于完全阴影中),因此它不会在光明面产生痤疮

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

看起来像阴影痤疮(也称为不正确的自阴影)。您是否正在采取措施避免阴影光线与产生它们的曲面相交?可以使用“曲面法线”偏移阴影光线的原点,也可以检查相交的形状是否不同于原始光线的形状。