光线追踪:带有区域光的水平伪影
Posted
技术标签:
【中文标题】光线追踪:带有区域光的水平伪影【英文标题】:ray tracing: horizontal artifacts with Area lights 【发布时间】:2013-11-14 14:50:31 【问题描述】:嗨,这些水平线的原因是什么?区域光是绿色平面上方的黄色方块。线的图案会随着平面上方区域光的距离而变化,但它们仍然是水平线。
我有 4 个点光源均匀分布在区域光的表面(黄色方形贴片)。
您可以看到它的样子 here(16 倍超级采样)。
【问题讨论】:
看起来像阴影粉刺(A.K.A. 不正确的自我阴影)。您是否正在采取措施避免阴影光线与起源它们的表面相交?您可以使用表面法线偏移阴影光线的原点,或检查相交的形状是否不同于发出光线的形状。 【参考方案1】:这看起来像阴影痤疮:由于近似误差而产生的不希望的自阴影,图案化。请注意,完全阴影区域没有线条,这表明问题在于阴影系统错误地“认为”绿色平面在那里处于阴影中。
编辑:由于您是光线追踪,问题可能是您错误地与“发射”它们的平面的出射阴影光线相交。以下建议适用于使用阴影贴图的光栅化,而不是光线追踪,但它们可能仍然具有指导意义...
阴影映射的工作原理是首先从每个灯光的角度绘制深度图,记录阴影对象的“阴影图”。然后,在绘制实际图像时,每个像素从阴影贴图中采样阴影深度,并将其与从该像素位置的该光线计算的深度进行比较:如果像素深度大于阴影深度,则它被阴影。
请注意,如果要绘制的对象是距离灯光最近的阴影对象,则像素深度应该与阴影深度相同。但是,由于采样和浮点计算并不精确,因此比较只是大约相等。所以,部分时间(基于采样和浮点误差的奇思妙想),它认为像素深度比同一个物体造成的阴影深度更远:物体本身会产生阴影。
有几种方法可以避免暗疮。最简单的选项(也是您场景的明显选择)是从阴影投射器列表中删除对象。由于您的飞机似乎打算用作“地板”,因此无论如何它不应该遮蔽任何东西。这样做的另一个好处是节省了将地板绘制到所有阴影贴图上的时间......
根据同样的原则,如果一个对象是“不漏水的”,单边三角形始终朝外,则应该反转阴影贴图的三角形方向测试。这将从对象的黑暗面获取阴影深度(无论如何它都处于全阴影中,因为它背对光线),所以它不会在明亮的一面造成粉刺。
如果您有一个必须从两侧可见的平面物体,您可以对阴影深度应用偏置;图形软件和硬件通常对此有规定。不幸的是,这可能有点繁琐:偏差必须足够大以隐藏采样/计算错误,但又必须足够小以至于不会导致其他伪影。
【讨论】:
以上是关于光线追踪:带有区域光的水平伪影的主要内容,如果未能解决你的问题,请参考以下文章