如何将后处理着色器应用于场景的一部分

时间:2017-01-23 19:55:43

标签: opengl opengl-es

我有以下渲染管道:

[Input texture that changes every frame] - > [3D content rendered on top of changing texture] - > [Post processing shader] - > [Composited texture with post processing applied to input texture + 3D content]

我想实现这个管道:

[Input texture that changes every frame] - > [3D content rendered on top of changing texture]+[Post processing shader applied to 3D content] - > [Composited texture with post processing only applied to 3D content]

实现这一目标的最佳方式是什么?

我在考虑将3D内容渲染到屏幕外纹理(使用透明的非渲染部分),然后将后处理着色器应用于此纹理,然后在背景纹理顶部渲染具有透明度的后处理纹理。

有没有更好的方法呢?如果没有,那么如何使用alpha渲染纹理然后在之前的纹理上进行合成?

1 个答案:

答案 0 :(得分:1)

如果您的后期处理很简单,例如白平衡或HDR,那么您可以先渲染3D内容,应用后处理,然后在启用深度测试的情况下以适当的最大深度渲染背景纹理

如果您的后处理更复杂,如模糊或类似的东西,那么我担心渲染到第二个纹理是唯一的解决方案。渲染成RGBA纹理很简单,就像RGB一样。只需确保在整个管道中使用预乘alpha,否则您将无法正确组合纹理。在使用(0,0,0,0)颜色渲染清除纹理之前。