在像素着色器中可以实现什么样的模糊?

Joa*_*nge 8 shader gpu glsl hlsl pixel-shader

高斯,框,径向,方向,运动模糊,变焦模糊等

我读到高斯模糊可以在可以在像素着色器中实现的通道中分解,但是找不到任何样本.

假设任何与自身以外的像素有关的效果都无法在像素着色器中实现,这是正确的吗?

Luc*_*uca 5

只要您能够将信息传递给着色器,就可以实现所有功能。

在这种情况下,技巧是执行多遍渲染。最终的着色器将采用一定数量的采样器,它们是非模糊源,用于计算模糊值。

例如,可以使用多个纹理来基于累积缓冲区模拟效果。


要实现高斯模糊,请将场景渲染到frambuffer对象上,并在颜色附件上附加纹理。这是第一关。

作为第二遍,渲染纹理四边形,其中纹理是第一步中生成的纹理四边形。纹理坐标从顶点阶段传递到片段阶段,并在四边形上进行插值。确实,每个片段都有纹理坐标。为每个坐标应用一个偏移量以获取基础坐标周围的纹理,并执行高斯模糊。


fen*_*fen 5

后处理效果的通用“管道”

setRenderTarget(myRenderTarget); // or FBO in GL
drawAwsomeScene();

setdefaultRenderTarget();   // draw to screen...

blurShader.use();
// shader needs to know what is the size of one pixel on the screen
blurShader.uniform2f("texelSize", 1/screenW, 1/screenH);

// set the texture with scene rendered...
setRenderTargetTexture();

drawFullScreenQuad();

// other effects...
Run Code Online (Sandbox Code Playgroud)

模糊的有用示例/教程:http : //www.gamerendering.com/2008/10/11/gaussian-blur-filter-shader/