1.因為項目中需要中間清晰四周模糊的效果
對場景模型有效果對UI沒有效果
實現效果
效果圖(這是拖出來的3D圖片)沒模糊前
效果圖 模糊后(中間清晰,四周模糊,中間大小可調節)
首先是shader腳本
Shader "Custom/GaoShiMoHu" { Properties{ _MainTex("紋理",2D) = "while"{} _Level("強度",Range(1,100)) = 10 _CenterX("中心X坐標",Range(0,1)) = 0.5 _CenterY("中心Y坐標",Range(0,1)) = 0.5 _BufferRadius("緩沖半徑",Range(0,1)) = 0 } SubShader{ Tags { "RenderType" = "Opaque" } Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; float _Level; float _CenterX; float _CenterY; float _BufferRadius; struct v2f { fixed4 vertex : POSITION; fixed2 uv : TEXCOORD; }; v2f vert(appdata_base v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord; return o; } fixed4 frag(v2f i) :COLOR { fixed4 finalColor; fixed2 center = fixed2(_CenterX,_CenterY); fixed2 uv = i.uv - center; fixed3 tempColor = fixed3(0,0,0); fixed blurParams = distance(i.uv,center); for (fixed j = 0;j < _Level;j++) { tempColor += tex2D(_MainTex,uv*(1 - 0.01*j*saturate(blurParams / _BufferRadius)) + center).rgb; } finalColor.rgb = tempColor / _Level; finalColor.a = 1; return finalColor; } ENDCG } } FallBack "Diffuse" }
第二步 是C#腳本
掛在Camera上面
using System.Collections; using System.Collections.Generic; using UnityEngine; //什么模式都可以運行 ExecuteInEditMode [ExecuteInEditMode] public class ImageEffect_GaussianBlur : MonoBehaviour { public Shader RadiaBlurShader; [HideInInspector] public Material RadiaBlurMaterial; [Range(1, 100)] public float Level = 10; [Range(0, 10)] public float BufferRadius = 0.5f; [Range(0, 1)] public float CenterX = 0.5f; [Range(0, 1)] public float CenterY = 0.5f; private void Awake() { RadiaBlurMaterial = new Material(RadiaBlurShader); } void OnRenderImage(RenderTexture src, RenderTexture dest) { if (RadiaBlurMaterial != null) { RadiaBlurMaterial.SetFloat("_Level", Level); RadiaBlurMaterial.SetFloat("_CenterX", CenterX); RadiaBlurMaterial.SetFloat("_CenterY", CenterY); RadiaBlurMaterial.SetFloat("_BufferRadius", BufferRadius); Graphics.Blit(src, dest, RadiaBlurMaterial); } else { Graphics.Blit(src, dest); } } }
最后shader拖上去即可