我对SSAO技术实施有一些疑问:
是否真的需要每个几何体的第二个(或更多)管道?我的意思是,我找到了一些关于它的教程和内容,但大多数情况下,他们只是给你指示,而无需输入更多详细信息。
有可能进行优化吗?我正在使用OSG而且我的印象是,如果你发送CPU的纹理并再次投入GPU并不是最好的解决方案。
是否可以使着色器在缓冲区中生成具有样本深度的纹理,并仅使用屏幕四边形,颜色,场景深度和深度将其发送到第二个管道线进行测试?我正在使用osg而无法找到如何在文档中正确地完成它。
答案 0 :(得分:3)
通常,SSAO最适合作为延迟着色方法的一部分来实现。可以使用严格的前向着色方法,但仍然需要两次渲染过程,并且可以轻松地将SSAO添加到延迟着色引擎的第二次渲染过程中。在SSAO中,您需要场景的完整深度缓冲区才能计算遮挡,因此对问题第1部分的简短回答是肯定的,SSAO需要两个渲染过程。
请注意,在延迟着色中,虽然有两个渲染过程,但复杂的几何体(即模型)仅在第一次传递过程中渲染,第二次传递通常由为每种类型的光渲染的简单多边形形状组成。这几乎就是您在问题第3部分中提出的建议。
关于问题的第2部分,如果设置正确,您不需要将中间纹理移回CPU,然后在两个渲染通道之间返回GPU;您只需将第一个渲染过程的纹理作为第二个渲染过程的资源。