我来自高斯可分(线性)模糊着色器的例子,因此将围绕它形成我的问题,但实际上我的问题更为一般。因此,为了应用线性模糊,您应首先在X方向上进行两次传递,然后在Y方向进行模糊,反之亦然。结果相当于方形复杂度高斯模糊着色器。但是在这里你应该保存第一遍的结果并在第二遍中使用它。为此,根据我的理解,应使用FBO渲染第一遍的结果,然后应从FBO中的数据创建纹理,并再次使用此纹理进行第二遍。但GPU工作高度并行,我不知道如何做到这一点不会阻止GPU。我在OpenGL中非常棒,我无法在不牺牲性能的情况下找到正确执行此操作的任何教程。
答案 0 :(得分:1)
我会假设您询问移动设备,因为它标有OpenGLES。
你应该检查这个tutorial,它解释了如何使用额外的(可选的)技巧来实现“分离的”高斯滤波器以利用线性滤波。
如果不要求顶级质量,那么提高性能的一个好方法是在进行第一次(或每次)可分离传球时将FBO尺寸减少50%。
前:
这种将模糊通道与降尺度相结合的技术可以提供良好的结果。在移动设备上的性能,但你必须尝试在通过次数/内核大小/缩减之间找到一个很好的平衡。
在我这边,我更喜欢使用小内核,多次传递和大量降尺度(在绽放的情况下)。
是的,GPU将不得不等待传递完成才能启动另一个传递,但是,如果你的内核很小并且你使用缩减,那么我在移动设备上看到的这种速度非常快。