十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
今天就跟大家聊聊有关使用shader怎么实现屏幕高斯模糊,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
秦都ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
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; i2.新建一个顶点着色器的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怎么实现屏幕高斯模糊有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
分享标题:使用shader怎么实现屏幕高斯模糊
浏览地址:http://6mz.cn/article/iedhep.html