实现屏幕模糊,onrenderimage 不调用
void OnRenderImage(RenderTexture src, RenderTexture dest)
{
if (is_support && blur_mat != null && render_blur_effect)
{
// 首先对输出的结果做一次降采样,也就是降低分辨率,减小RT图的大小
int width = src.width / blur_down_sample;
int height = src.height / blur_down_sample;
// 将当前摄像机画面渲染到被降采样的RT上
final_blur_rt = RenderTexture.GetTemporary(width, height, 0);
Graphics.Blit(src, final_blur_rt);
cur_iterate_num = 1; // 初始化迭代
while (cur_iterate_num <= blur_iteration)
{
blur_mat.SetFloat("_BlurSize", (1.0f + cur_iterate_num * blur_spread) * blur_size); // 设置模糊扩散uv偏移
temp_rt = RenderTexture.GetTemporary(width, height, 0);
// 使用blit的其他重载,针对对应的材质球和pass进行渲染并输出结果
Graphics.Blit(final_blur_rt, temp_rt, blur_mat, BLUR_HOR_PASS);
Graphics.Blit(temp_rt, final_blur_rt, blur_mat, BLUR_VER_PASS);
RenderTexture.ReleaseTemporary(temp_rt); // 释放临时RT
cur_iterate_num++;
}
GetBlurScreenShot(parent);
Graphics.Blit(src, dest); // 不修改最终输出画面
RenderTexture.ReleaseTemporary(final_blur_rt); // final_blur_rt作用已经完成,可以回收了
render_blur_effect = false;
}
else
{
Graphics.Blit(src, dest);
}
}
无法触发函数
这个函数的脚本你有挂载到需要模糊的相机上了吗?
你在调用之前debug一下if()里面用到的判断条件是否满足,没调用那就是条件不满足