千家信息网

使用shader怎么实现屏幕高斯模糊

发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,今天就跟大家聊聊有关使用shader怎么实现屏幕高斯模糊,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.新建一个C#脚本,改脚本必须挂在摄像
千家信息网最后更新 2024年09月30日使用shader怎么实现屏幕高斯模糊

今天就跟大家聊聊有关使用shader怎么实现屏幕高斯模糊,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1.新建一个C#脚本,改脚本必须挂在摄像机上

using UnityEngine;using System.Collections;/// /// 高期模糊/// public class GaussianBlur : PostEffectsBase {         //调整高斯模糊迭代次数        [Range(0, 4)]        public int iterations = 3;        //模糊范围        [Range(0.2f, 3.0f)]        public float blurSpread = 0.6f;        //缩放系数        //downSample越大,需要处理的像素越少,同时也能进一步提高模糊程序,        //但过大的downSample可能会使图像像素化。        [Range(1, 8)]        public int downSample = 2;         public Shader gaussianBlurShader;        private Material gaussianBlurMaterial = null;         public Material material {                get {                        gaussianBlurMaterial = CheckShaderAndCreateMaterial(gaussianBlurShader, gaussianBlurMaterial);                        return gaussianBlurMaterial;                }        }         void OnRenderImage(RenderTexture src, RenderTexture dest) {                if (material != null) {                        //利用缩放对图像进行降采样,从而减少需要处理的像素个数,提高性能。                        int rtW = src.width / downSample;                        int rtH = src.height / downSample;                         //分配一块缓冲区,这是因为,高斯模糊需要调用两个Pass,我们需要使用一块中间缓存来                        //存储第一个Pass执行完毕后得到的模糊结果。                        RenderTexture buffer0 = RenderTexture.GetTemporary(rtW, rtH, 0);                        //将该临时渲染纹理的滤波模式设置为双线性。这样,在调用第一个Pass时,我们需要处理的                        //像素个数就是原来的几分之一。对图像进行降采样不仅可以减少需要处理的像素个数,提高性能,                        //而且适当的降采往往还可以得到更好的模糊效果。                        buffer0.filterMode = FilterMode.Bilinear;                         Graphics.Blit(src, buffer0);                         //高斯模糊迭代次数                        for(int i=0; i

2.新建一个顶点着色器的shader,实现高斯模糊的shader代码如下:

using UnityEngine;using System.Collections;/// /// 高期模糊/// public class GaussianBlur : PostEffectsBase {         //调整高斯模糊迭代次数        [Range(0, 4)]        public int iterations = 3;        //模糊范围        [Range(0.2f, 3.0f)]        public float blurSpread = 0.6f;        //缩放系数        //downSample越大,需要处理的像素越少,同时也能进一步提高模糊程序,        //但过大的downSample可能会使图像像素化。        [Range(1, 8)]        public int downSample = 2;         public Shader gaussianBlurShader;        private Material gaussianBlurMaterial = null;         public Material material {                get {                        gaussianBlurMaterial = CheckShaderAndCreateMaterial(gaussianBlurShader, gaussianBlurMaterial);                        return gaussianBlurMaterial;                }        }         void OnRenderImage(RenderTexture src, RenderTexture dest) {                if (material != null) {                        //利用缩放对图像进行降采样,从而减少需要处理的像素个数,提高性能。                        int rtW = src.width / downSample;                        int rtH = src.height / downSample;                         //分配一块缓冲区,这是因为,高斯模糊需要调用两个Pass,我们需要使用一块中间缓存来                        //存储第一个Pass执行完毕后得到的模糊结果。                        RenderTexture buffer0 = RenderTexture.GetTemporary(rtW, rtH, 0);                        //将该临时渲染纹理的滤波模式设置为双线性。这样,在调用第一个Pass时,我们需要处理的                        //像素个数就是原来的几分之一。对图像进行降采样不仅可以减少需要处理的像素个数,提高性能,                        //而且适当的降采往往还可以得到更好的模糊效果。                        buffer0.filterMode = FilterMode.Bilinear;                         Graphics.Blit(src, buffer0);                         //高斯模糊迭代次数                        for(int i=0; i

看完上述内容,你们对使用shader怎么实现屏幕高斯模糊有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0