傅里叶变换应用高斯模糊统一

时间:2015-12-02 12:29:50

标签: unity3d shader

我想模糊整个屏幕。 我的第一次尝试是使用自定义着色器和内核卷积。但这当然导致大量帧丢失。 我的第二次尝试是使用傅里叶变换。因此,我的计划是使用“OnRenderImage”函数从RenderTexture源获取图像,然后进行转换然后保存。

void OnRenderImage (RenderTexture source, RenderTexture destination){}

但这意味着,据我所知,将图像从显卡内存复制到RAM,应用转换,然后将其复制回来。

这真的是最好的方式,或者我应该尝试别的东西。

祝福和感谢

1 个答案:

答案 0 :(得分:0)

Unity在标准资源包中具有内置模糊效果,这可能是最好的方法: http://docs.unity3d.com/Manual/script-BlurOptimized.html

要使用它,只需导入效果标准资源包,并将Blur脚本添加到相机。

在幕后,它实际上将使用OnRenderImage,但意味着将图像从图形内存复制到RAM,应用转换然后将其复制回来。

RenderTexture对象表示位于图形卡内存中的纹理。您不要将像素复制到RAM以便操作它。相反,对它的操作是通过基于着色器的过滤器在GPU中完成的,即Graphics.Blit(source, destination, someEffectMaterial);

查看有关后期处理效果的更多信息: http://docs.unity3d.com/Manual/comp-ImageEffects.html