简易shader实践记录4-流光效果

分享一个流光效果
在这里插入图片描述

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "HZEffect/AniScaleUV" {
    Properties {
        _MainTex ("MainTex", 2D) = "white" {}
        _TintColor ("Color", Color) = (0.5,0.5,0.5,1)
        _LiuGuang ("流光贴图", 2D) = "white" {}
        [MaterialToggle] _WuAlpha ("黑白流光图无Alpha时勾选", Float ) = 0
        _LiuGuang_Color ("流光_Color", Color) = (0.5,0.5,0.5,1)
        _LiuGuang_QiangDu ("流光强度", Float ) = 3
        _UVScale ("UV缩放", Range(0, 1)) = 0.3
        [MaterialToggle] _AniUVScale ("UV缩放动画", Float ) = 0.3
        _LiuGuang_Speed ("动画速度", Float ) = 5
        _LiuGuang_Mask ("二次_Mask(给流光更复杂的遮罩)", 2D) = "white" {}
        _UVNiuQu ("UV扭曲", 2D) = "white" {}
        _NiuQu_QiangDu ("扭曲强度", Float ) = 0
        [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
    }
    SubShader {
        Tags {
            "IgnoreProjector"="True"
            "Queue"="Transparent"
            "RenderType"="Transparent"
        }
        Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }
            Blend SrcAlpha OneMinusSrcAlpha
            ZWrite Off
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_FORWARDBASE
            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase
            #pragma exclude_renderers xbox360 xboxone ps3 ps4 psp2 
            #pragma target 3.0
            uniform float4 _TimeEditor;
            uniform sampler2D _MainTex; uniform float4 _MainTex_ST;
            uniform float4 _TintColor;
            uniform sampler2D _LiuGuang; uniform float4 _LiuGuang_ST;
            uniform float4 _LiuGuang_Color;
            uniform float _LiuGuang_QiangDu;
            uniform fixed _LiuGuang_Speed;
            uniform fixed _WuAlpha;
            uniform sampler2D _UVNiuQu; uniform float4 _UVNiuQu_ST;
            uniform fixed _NiuQu_QiangDu;
            uniform fixed _AniUVScale;
            uniform fixed _UVScale;
            uniform sampler2D _LiuGuang_Mask; uniform float4 _LiuGuang_Mask_ST;
            struct VertexInput {
                float4 vertex : POSITION;
                float2 texcoord0 : TEXCOORD0;
                float4 vertexColor : COLOR;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float2 uv0 : TEXCOORD0;
                float4 vertexColor : COLOR;
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.uv0 = v.texcoord0;
                o.vertexColor = v.vertexColor;
                o.pos = UnityObjectToClipPos(v.vertex );
                return o;
            }
            float4 frag(VertexOutput i) : COLOR {
                fixed node_5662 = 0.5;
                fixed node_1254 = ((_NiuQu_QiangDu*0.15)+node_5662);
                float4 node_9400 = _Time + _TimeEditor;
                fixed _AniUVScale_var = lerp( _UVScale, fmod((node_9400.r*_LiuGuang_Speed),1.0), _AniUVScale );
                float4 _UVNiuQu_var = tex2D(_UVNiuQu,TRANSFORM_TEX(i.uv0, _UVNiuQu));
                float2 node_5211 = lerp((i.uv0+((i.uv0-node_1254)/_AniUVScale_var)+(_UVNiuQu_var.r*_NiuQu_QiangDu)),float2(node_1254,node_1254),_AniUVScale_var);
                float2 node_8432 = saturate(node_5211);
                float4 _LiuGuang_var = tex2D(_LiuGuang,TRANSFORM_TEX(node_8432, _LiuGuang));
                float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex));
                float4 _LiuGuang_Mask_var = tex2D(_LiuGuang_Mask,TRANSFORM_TEX(i.uv0, _LiuGuang_Mask));
                fixed node_7335 = (lerp( _LiuGuang_var.a, _LiuGuang_var.r, _WuAlpha )*_MainTex_var.a*_LiuGuang_Mask_var.r);
                float3 node_6933 = (_LiuGuang_var.rgb*_LiuGuang_Color.rgb*_LiuGuang_QiangDu);
                float3 emissive = ((lerp( _MainTex_var.rgb, node_6933, node_7335.r ))*i.vertexColor.rgb*_TintColor.rgb*2.0);
                float3 finalColor = emissive;
                return fixed4(finalColor,(_MainTex_var.a*i.vertexColor.a*_TintColor.a));
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值