[小明学Shader]13.闪光效果

1.效果

更改设定的偏移值可以达到光束动起来的效果.

2.原理

首先,将当前uv通过与左乘矩阵绕原点顺时针旋转30度,然后再乘以二,将当前像素点的亮度乘以lerp(1,0,uv.y)(即(1 – f )* a + b * f,旋转过后,处于x轴上的点所得到亮度最大,将得到的值转化为0-1内的变量,乘以当前uv对应的图片上的rgb即可.

除此之外,通过对当前uv乘以2可以让一半儿的uv所对应的插值小于0,只有uv小于0.5的才可能uv值大于0.然后再对uv.y进行相应的加减操作可以让光束出现的图片上任意位置.

3.代码

 1 Shader "Custom/闪光" {
 2     Properties {
 3         _MainTex ("Base (RGB)", 2D) = "white" {}
 4         _Percent("Percent",range(-4,3))=0.5
 5     }
 6     SubShader {
 7         Tags { "RenderType"="Opaque" }
 8         LOD 200
 9         
10         CGPROGRAM
11         #pragma surface surf Lambert
12 
13         sampler2D _MainTex;
14         float _Percent;
15 
16         struct Input {
17             float2 uv_MainTex;
18         };
19 
20         void surf (Input IN, inout SurfaceOutput o) {
21             half4 c = tex2D (_MainTex, IN.uv_MainTex);
22             o.Albedo = c.rgb;
23             o.Alpha = c.a;
24             float2 blink_uv=(IN.uv_MainTex+_Percent)*2;
25             //旋转矩阵
26             fixed2x2 rotMat=fixed2x2(0.866,0.5,-0.5,0.866);
27             blink_uv=mul(rotMat,blink_uv);
28             fixed rgba=lerp(1,0,abs(blink_uv.y));
29             
30             o.Albedo+=saturate(rgba);
31             
32         }
33         ENDCG
34     } 
35     FallBack "Diffuse"
36 }
View Code

 

posted @ 2015-12-17 22:41  WongSiuming  阅读(453)  评论(0编辑  收藏  举报