// 动态模糊 Shader "Erika/Common/Image/MotionBlur" { Properties { _MainTex("Texture", 2D) = "white" {} _Angle("Angle", float) = 0 _Distance("Distance", float) = 0 _UnitTileOffset("TileOffset", Vector) = (1,1,0,0) _Iterate("Iterate Count", float) = 1 } SubShader { Tags { "RenderType" = "Opaque" "Queue" = "Transparent-1"} LOD 100 ZWrite Off ZTest LEqual Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex image_vert #pragma fragment frag #include "UnityCG.cginc" #include "./ImageEffect.cginc" float _Angle; fixed _Distance; float _Iterate; // 迭代次数 float _AlphaMultiplier; // fixed4 frag(image_v2f i) : SV_Target { _Distance = 0.1; fixed2 uv0 = i.uv; fixed4 color = fixed4(0,0,0,0); const float count = 20; float step = _Distance / count; float amount = 0.2f; for(int i = 0; i < count; ++i) { fixed2 uv = uv0 + step * i * fixed2(cos(radians(_Angle)), sin(radians(_Angle))); if(uv.x > 1) continue; if(uv.x < 0) continue; float weight = amount - amount * ((float)i / (float)count); color += tex2D(_MainTex, uv) * weight; } color.a *= _AlphaMultiplier; //color = fixed4(1,0,0,0.5f); return color; } ENDCG } } } // shader