14

我最近在 OpenGL 4.3 中使用体素锥体跟踪实现了软阴影,方法是在光的方向上跟踪一个锥体并累积不透明度值。 在此处输入图像描述

我试图解决或隐藏的关键是当被遮挡的表面更接近遮挡物时非常体素化的阴影效果,以及由于表面体素化而隐藏阴影中的清晰点。我正在使用 64x64x64 的低分辨率体素;然而,即使我使用了更高分辨率的体素,一些较高 mip-map 级别的低分辨率体素仍会在跟踪中捕获。

所以这是我的第一个想法:我希望能够保留最远的阴影最柔和的部分,并用阴影贴图替换更靠近遮挡物的阴影部分。阴影贴图会随着它远离每个遮挡物而褪色,我会以某种方式将它与锥形跟踪阴影混合。

在此处输入图像描述

谁能想到一种方法来根据与每个对象的距离为阴影贴图淡化阴影,然后让它平滑地融合到锥形跟踪阴影中?

我的另一个想法是以某种方式在更接近遮挡物的表面上跟踪阴影,但这可能太昂贵了。

或者,我欢迎任何其他想法来帮助改进我的软阴影算法。

我还放了一段视频来展示它的动态:

https://www.youtube.com/watch?v=SUiUlRojBpM

仍然没有找到解决阴影问题的方法。

4

2 回答 2

2

我猜测“清晰点”伪影是由于大体素尺寸仅部分填充几何体而发生的:“累积不透明度值。”。从光栅化像素转换为体素时,您要采集多少个样本?如果样本体积/体素体积很小,那么正确渲染透明度可能会出现问题 - 较亮区域会显示噪声。

另外,您的体素的透明度方向是否依赖?基于作者的原始论文。方向依赖性对于确保正确渲染半透明体素很重要。

一张快速的图片来解释

“对于阴影贴图,然后让它平滑地融入锥形跟踪阴影中?”

这似乎是你在踢自己的脚。您会获得更大的性能影响,并获得阴影映射和体素锥跟踪的缺点。体素锥追踪很昂贵,但可以提供漂亮的柔和阴影并进行全局照明。阴影贴图更擅长制作硬阴影,并且对于较小的场景更快,但是当您添加更多几何图形时,您最终会多次重绘相同的东西,每个灯光至少一次。

顺便说一句,伟大的工作。我在为我自己的体素锥跟踪的 DirectX 实现进行初步研究时遇到了您的问题。

[编辑]

我意识到我在图片中打错了。右边的图片应该是 4/64,而不是 4/16。我忘记了Z维度。

于 2013-03-24T20:53:21.120 回答
0

好吧,在这种情况下,您可以通过添加更多灯光来做到这一点。您可以添加更多靠近原始灯光的灯光,然后将灯光的阴影与一束较近的灯光的阴影组合在一起。这就是“区域光”效应。

于 2013-03-02T09:46:19.223 回答