我最近在OpenGL 4.3中使用体素锥跟踪实现了软阴影,方法是在光的方向上跟踪一个圆锥并累积不透明度值。
我试图解决或隐藏的关键是当被遮挡的表面越来越接近遮挡物时的体素化阴影效果,以及由于表面体素化而隐藏阴影中的清晰斑点。我使用的是低分辨率体素64x64x64;然而,即使我使用更高分辨率的体素,一些更高的mip-map级别的低分辨率体素仍然会被捕获。
所以这就是我的第一个想法:我希望能够保留最远的阴影中最柔和的部分,并用阴影贴图替换更靠近遮挡物的阴影部分。阴影贴图会因为距离每个遮挡物更远而褪色,我会以某种方式将其与锥形跟踪阴影混合在一起。
任何人都可以想办法根据每个物体与阴影贴图的距离来淡化阴影,然后将其平滑地融入锥形追踪的阴影中吗?
我的另一个想法是以某种方式将阴影光线追踪到更接近封堵器的表面上,但这可能太贵了。
或者,我欢迎任何其他想法来帮助改进我的软阴影算法。
我还制作了一个视频来展示它:
https://www.youtube.com/watch?v=SUiUlRojBpM
仍然没有找到解决阴影问题的方法。
答案 0 :(得分:2)
我猜测由于大体素尺寸仅部分填充几何体而出现“清晰斑点”伪影:“累积不透明度值”。从光栅化像素转换为体素时,您拍摄了多少个样本?如果样品体积/体素体积很小,则可能存在正确渲染透明度的问题 - 较亮区域会显示噪声。
另外,您的体素的透明度方向是否依赖? Based on the author's original paper。方向依赖对于确保正确渲染半透明体素非常重要。
“对于阴影贴图,然后将其平滑地混合到锥形跟踪的阴影中?”
这似乎是你在脚下射击自己。您可以获得更大的性能,并且可以获得阴影贴图和体素锥跟踪的缺点。体素锥体跟踪很昂贵,但可以提供良好的柔和阴影并进行全局照明。阴影贴图在做硬阴影方面效果更好,对于较小的场景更快,但是当您添加更多几何图形时,最终会重复重绘相同的内容,至少每次重绘一次。
顺利完成工作。我在为自己的DirectX实施体素锥体追踪进行初步研究时遇到了您的问题。
[编辑]
我意识到我在图片中写了一个拼写错误。右边的图片应该是4/64,而不是4/16。我忘记了Z维度。
答案 1 :(得分:0)
嗯,在这种情况下,您可以通过添加更多灯光来实现。您可以添加更多靠近原始灯光的灯光,然后使用一堆更近的灯光构成灯光的阴影。这就是“区域光”效应。