1

我对 SSAO 技术实现有一些疑问:

  1. 它真的需要每个几何图形都有第二个(或更多)管道吗?我的意思是,我找到了一些关于它的教程和资料,但大多数情况下它们只是给你指导,而不需要输入更多细节。

  2. 有没有可能的优化?我正在使用 OSG,我的印象是,如果您将纹理发送给 CPU,然后再扔给 GPU,这可能不是最好的解决方案。

  3. 是否可以使着色器在缓冲区中生成具有样本深度的纹理,并将其发送到第二个管道线,仅使用屏幕的四边形、颜色、场景的深度和测试的深度?我正在使用 osg,但在文档中找不到如何正确执行此操作。

4

1 回答 1

3

一般来说,SSAO 最适合作为延迟着色方法的一部分来实现。严格的前向着色方法是可能的,但仍需要两个渲染通道,并且可以轻松地将 SSAO 添加到延迟着色引擎的第二个渲染通道。在 SSAO 中,您需要场景的完整深度缓冲区才能计算遮挡,因此对问题第 1 部分的简短回答是肯定的,SSAO 需要两次渲染通道。

请注意,在延迟着色中,虽然有两个渲染通道,但复杂的几何体(即您的模型)仅在第一个通道期间渲染,第二个通道通常由为每种类型的光渲染的简单多边形形状组成。这几乎就是您在问题第 3 节中的建议。

关于您问题的第 2 部分,如果设置正确,您不需要将中间纹理移回 CPU,然后在两个渲染通道之间移回 GPU;您只需将您的第一个渲染通道的纹理作为资源提供给您的第二个渲染通道。

于 2014-06-18T19:12:38.367 回答