// 1:09 https://www.youtube.com/watch?v=LhqI_yj3zO0 Shader "Erika/Unit/ImageEffect/unit_img_motionBlur" { Properties { _MainTex("Texture", 2D) = "white" {} _Angle("Angle", float) = 0 _Distance("Distance", float) = 0 } SubShader { Tags { "RenderType"="Opaque" "Queue" = "Transparent-1"} LOD 100 ZWrite Off ZTest LEqual Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; float _Angle; fixed _Distance; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } fixed4 frag (v2f i) : SV_Target { fixed2 uv = i.uv; fixed2 offset = fixed2(0.05, 0.05); const float sampleCount = 30; fixed4 color = fixed4(0,0,0,0); float radian = radians(_Angle); float distance = _Distance; for(int i = 0; i < sampleCount; i++) { float dx = distance * cos(radian) / sampleCount * i; float dy = distance * sin(radian) / sampleCount * i; color += tex2D(_MainTex,float2(uv.x + dx,uv.y + dy)) * (1 / sampleCount); } //color.rgb *= 0.5f; return color; } ENDCG } } }