光能传递全局照明阴影的边缘抖动,不直

Posted

技术标签:

【中文标题】光能传递全局照明阴影的边缘抖动,不直【英文标题】:Radiosity global illumination shadow`s edges jitter, being not straight 【发布时间】:2016-11-07 08:40:57 【问题描述】:

我正在实施辐射照明技术。我有一些静态场景,我想预先计算,然后在其中显示和移动。所以不是实时的,但必须在手机上工作。 所以几何体被分割,光线反弹,但阴影边缘看起来很糟糕:

几何正在使用三角形分割:

由于它们的边缘没有沿着阴影对齐,因此看起来不太好。互联网上的样本没有(虽然有些样本有)。所以我可能遗漏了一些东西。

也许我应该找到阴影边缘并强制三角测量沿这些边缘创建线。但要找到它们并不容易,它们的形状可能很复杂,而且可能有很多灯,进一步增加了三角限制的数量。更密集的三角测量不太可能有帮助(尝试过),边缘抖动将在更小的范围内,但更强烈。如果创建了更多的三角形并且输出模糊,这可能会有所帮助。但由于这是光能传递,增加三角形的数量会显着影响性能。图片中的场景非常简单,非常适合演示,但我们需要(并且拥有)更复杂的场景/视图,包括模型、3d 透视图等。 显示的三角形实际上进一步细分为四个,以便更好地进行颜色插值,但这些是光反弹的单位。

【问题讨论】:

【参考方案1】:

您无法从稀疏镶嵌的几何体中获得硬阴影。所以如果你有一个应该产生硬阴影的点光源:

应用您的辐射算法。 从解决方案中减去直接光,因此它只有间接光贡献。 渲染场景时,对间接照明使用光能传递解决方案,对硬阴影使用经典技术(如高分辨率阴影贴图)。

或者,您确实可以执行自适应细分。请参阅GPU Gems 2. Chapter 39. Global Illumination Using Progressive Refinement Radiosity#Adaptive Subdivision 了解松散的描述和参考。

【讨论】:

我不需要硬阴影。我只希望阴影看起来像阴影。可能真的辐射度应该主要用于间接光。 然后使用区域灯。它会让事情变得顺利。否则我所说的一切仍然适用(不,你不能通过做一些智能镶嵌来解决你的问题,尤其是当你有多个灯时)。 谢谢,这提供了一些想法。你能建议一些关于区域灯的阅读吗?据我所知,它们是一堆点光源,听起来很慢。 不在光能传递求解器中——它们只是一个发光的几何体。因此,如果今天您的辐射度求解每个面的Lout = D*∫Lin,那么您需要将其更改为Lout = Ls + D*∫Lin,其中Ls 是面自身发出的光。当您唯一可以使用的是仅支持点光源的渲染引擎时,使用“一堆点光源”方法...... 呃,难道不应该用这些人脸来计算吗?我认为它更接近现在的状态。可以有最初发光的几何体。它也属于辐射度求解器。

以上是关于光能传递全局照明阴影的边缘抖动,不直的主要内容,如果未能解决你的问题,请参考以下文章

WPF window 子窗口反馈效果(抖动/阴影渐变)

为选定的边缘 UIView 添加阴影

怎么为android控件边缘添加阴影

怎么为android控件边缘添加阴影

如何在 UIView 下绘制阴影?

SceneKit 阴影电锯像粗糙的边缘