• [小明学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
  • 相关阅读:
    @Controller 与 @RestController 的区别
    Java泛型
    Java面试被经常问到的常用算法
    jdk和jre的区别
    Spring获取对象的方式
    xsi:schemaLocation的作用
    SpringBoot学习(一)
    docker-elk装IK自定义分词库
    MySQL存储引擎
    docker环境下elasticsearch安装ik和拼音分词
  • 原文地址:https://www.cnblogs.com/WongSiuming/p/5055564.html
Copyright © 2020-2023  润新知