我最近在OpenGL 4.3中使用体素圆锥体跟踪实现了软阴影,方法是在光的方向上跟踪一个圆锥体并累积不透明度值。
我试图解决或隐藏的关键事情是,当被遮挡的表面越来越接近遮挡时,非常体素化的阴影效果,以及由于表面体素化而隐藏阴影中的清晰斑点。我使用的是低分辨率体素64x64x64;但是,即使我使用更高分辨率的体素,一些处于较高mip贴图级别的低分辨率体素仍然会在跟踪中被捕获。
所以我的第一个想法是:我希望能够保持阴影中最柔和的部分最远,并用阴影贴图替换离遮挡更近的阴影部分。阴影贴图会随着它离每个遮挡的距离越来越远而褪色,我会以某种方式将它与圆锥体跟踪的阴影混合在一起。
有没有人能想出一种方法,根据阴影贴图到每个对象的距离来淡出阴影,然后将其平滑地混合到圆锥体跟踪的阴影中?
我的另一个想法是以某种方式将阴影光线跟踪到离遮挡更近的表面上,但这可能太昂贵了。
或者,我也欢迎任何其他想法来帮助改进我的软阴影算法。
我还放了一段视频来展示它的运动:
https://www.youtube.com/watch?v=SUiUlRojBpM
仍然没有找到解决阴影问题的方法。
发布于 2013-03-25 04:53:21
我猜“透明斑点”伪像的出现是因为大的体素大小只部分填充了几何图形:“累积不透明度值”。当从光栅化的像素转换为体素时,您需要采集多少个样本?如果采样体积/体素体积较小,则可能会出现正确渲染透明度的问题-较亮的区域将显示噪波。
另外,你的体素的透明度方向依赖于吗?Based on the author's original paper。方向依赖关系对于确保正确渲染半不透明体素非常重要。
A quick picture to explain
“用于阴影贴图,然后将其平滑地混合到圆锥体跟踪阴影中?”
这看起来像是在搬起石头砸自己的脚。您将获得更大的性能打击,并获得阴影贴图和体素圆锥体跟踪的缺点。体素圆锥体跟踪是昂贵的,但可以提供良好的软阴影和全局照明。阴影贴图更适合制作硬阴影,并且对于较小的场景速度更快,但随着添加更多的几何体,最终会多次重绘相同的内容,每个灯光至少重绘一次。
顺便说一句,做得很好。我在为我自己的体素圆锥体追踪的DirectX实现做初步研究时遇到了你的问题。
编辑
我意识到我在照片上打错了字。右边的图片应该是4/64,而不是4/16。我忘记了Z维度。
发布于 2013-03-02 17:46:19
好吧,在这种情况下,你可以通过添加更多的灯光来实现。可以添加更多更接近原始灯光的灯光,然后将灯光的阴影与更近的灯光的阴影组合在一起。这就是“区域光”效果。
https://stackoverflow.com/questions/14909220
复制相似问题