我想模糊整个屏幕。 我的第一次尝试是使用自定义着色器和内核卷积。但这当然导致大量帧丢失。 我的第二次尝试是使用傅里叶变换。因此,我的计划是使用“OnRenderImage”函数从RenderTexture源获取图像,然后进行转换然后保存。
void OnRenderImage (RenderTexture source, RenderTexture destination){}
但这意味着,据我所知,将图像从显卡内存复制到RAM,应用转换,然后将其复制回来。
这真的是最好的方式,或者我应该尝试别的东西。
祝福和感谢
答案 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