纹理局部颜色积累/模糊

时间:2015-12-27 19:28:29

标签: unity3d textures shader vertex-shader

简单来说,我希望我的自定义着色器可以在最后一帧中访问自己的输出,以便通过颜色累积产生伪运动模糊。虽然运动模糊根本不是正确的术语。

请考虑以下内容:我的网格具有大多数透明纹理。纹理偏移不断变化。我现在想要构建一个着色器,使用该着色器,纹理而不是跳跃,从它所处的位置慢慢消失。全屏模糊效果不起作用;模糊必须仅保留在物体上,并且需要独立于相机运动。

到目前为止,我的想法是定义一个RenderTexture,它包含在最后一帧中生成的纹理,但由于RenderTextures由相机渲染,因为我想要的是网格特定的纹理,我不会知道如何实施。

我还尝试在着色器中使用GrabPass { },但是这似乎再次抓住整个渲染的屏幕而不是纹理。

我可能误解了着色器是如何工作的;如果渲染整个屏幕是唯一的选择,那么我可以将我的材质指定给一个平面并以这种方式渲染纹理,但是我不确定如何,或者更确切地说:在我的代码中,我会这样做。创建一个原始平面和一个相机只是为了让着色器工作也似乎是一个效果所需的很多东西,最初,我认为很容易实现。 耸肩

非常感谢任何帮助或指示,

- s_m_w

编辑:这是我想要实现的非常快速的模拟图:

Mock shader

我通过操纵纹理偏移来实现当前效果。第二个效果中的“模糊”需要独立于相机移动。

1 个答案:

答案 0 :(得分:1)

我认为您必须将效果渲染到RenderTexture上。 您可以在代码中创建相机。您可以将其渲染目标设置为RenderTexture,并且可以使用OpenGL命令(GL类)方便地渲染全屏四边形。基本上,您可以在代码中设置完整的效果渲染基础架构。

第1帧: 将EffectShader源纹理设置为RenderTexture1。 渲染到RenderTexture2。 使用RenderTexture2使用ObjectShader对对象进行着色。

第2帧: 将EffectShader源纹理设置为RenderTexture2。 渲染到RenderTexture1。 使用RenderTexture1使用ObjectShader对对象进行着色。

重复。