我试图找到在我的游戏引擎中使用的最佳阴影贴图技术。到目前为止,我已经使用PCF,级联阴影贴图和方差阴影贴图实现了标准阴影贴图。然而,它们似乎都没有提供令人满意的结果。
我试图为所有情况找到最佳的阴影映射方法。我需要背面正确的几何体,因此可以使用渲染背面。然而,我也有一些低多边形,平滑的法线几何形状,即使在绘制背面时也会产生一些非常难看的痤疮。
可以使用哪些其他技术来获得漂亮的阴影贴图,没有严重的粉刺,peter-panning或轻微出血,但也没有对几何体(仅背面)施加任何主要限制?
答案 0 :(得分:2)
不幸的是,没有通用的方法可以产生无伪影的阴影,但我可能会给你一些提示。
更接近过滤的百分比不仅是一个很好的起点,而且也是接触硬化阴影的基础(如果您有兴趣,我可以提供有关它的更多信息)。 PCF基本上比方差阴影映射(VSM)或指数阴影映射(ESM)等统计算法产生更好的结果,但速度较慢,因为滤波步骤需要O(n²)而不是O(n)中的可分离滤波器。另一方面,轻度出血是一种疼痛,不能完全去除。
减少甚至消除阴影痤疮的最佳方法是双深度层阴影贴图,这是对中点阴影贴图的改进。这两种算法都在本文中进行了解释:
Weiskopf D.,Ertl T.(2003):“Shadow Mapping Based on Dual Depth Layers”。
该技术需要为每个阴影贴图添加场景的额外渲染通道(当使用级联阴影贴图时可能非常昂贵),但在几乎所有场景中都会产生非常好的结果。当使用现代图形卡和几何着色器时,可以以更快的方式实现深度剥离,这使得能够在一个渲染通道中渲染两个深度层。不幸的是,这不是免费的,我还没有这种技术的经验。我还没有找到任何能够消除彼得平移和阴影痤疮以及双深度层阴影映射的技术。
如果您的半影不是那么大,您可能会通过“正常的偏移偏差”获得很好的效果,这在GDC海报中有解释:
Holbert Daniel(2011):“Saying goodbye to shadow acne”。
实施可能有点棘手,但会删除陡坡的最坏情况。请注意,此技术还会引入新的工件,因为它会稍微“移动”阴影。
总结:我投票支持具有双深度层阴影映射的PCF,并基于阻止搜索和过滤步骤实现联系强化。其他技术,如指数方差阴影贴图(EVSM),总面积方差阴影贴图(SAVSM)或屏幕空间中的技术(mip映射屏幕空间阴影贴图)都带有更复杂的实现,轻微出血或边缘情况,他们只是无法采取后备方法。
对于极高质量和物理上精确的阴影,您可以考虑多视图阴影映射(MVSS),它基本上渲染多个阴影贴图并累积其光贡献。这里解释了它们:
Bavoil,Louis(2011):“Multi-View Soft Shadows”。
MVSS价格昂贵,只能实时用于主角或场景中最重要的对象。蝙蝠侠本人可以在“蝙蝠侠:阿卡姆城”中找到它。
祝你好运! : - )