初识Unity Shader 流光闪烁效果

汪兴为
2023-12-01

// An highlighted block
Shader "Custom/mistake" {
    Properties {
        _node_1301 ("node_1301", Color) = (0,0,0,1)
        _node_4920 ("node_4920", Color) = (1,0.1,0.2,1)
        _MainTex ("MainTex", 2D) = "white" {}
    }
    SubShader {      //语句块
        Tags {
            "RenderType"="Opaque"          //Shader和渲染引擎的关系
        }
        Pass {  //一个pass一次渲染
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"   //光照模式
            }
            
            
            CGPROGRAM
            #pragma vertex vert   //顶点着色器
            #pragma fragment frag   //片段着色器
            #include "UnityCG.cginc"   //包含常用的帮助函数,宏,结构体
            #pragma multi_compile_fwdbase_fullshadows   //内置大量前向渲染光照计算关键字
            #pragma only_renderers d3d9 d3d11 glcore gles 
            #pragma target 3.0 //3.0版本
            uniform float4 _node_1301;
            uniform float4 _node_4920;
            uniform sampler2D _MainTex; uniform float4 _MainTex_ST;  //贴图滚动  _MainTex_ST进行UV运算,scale 和translation
            struct VertexInput {
                float4 vertex : POSITION;   //模型顶点坐标
                float2 texcoord0 : TEXCOORD0;   //模型第一组纹理存储
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;       //剪裁空间中的顶点坐标,把三维物体渲染到二维屏幕上
                float2 uv0 : TEXCOORD0;         //模型第一组纹理存储
            };
            VertexOutput vert (VertexInput v) {     //顶点程序的入口函数
                VertexOutput o = (VertexOutput)0;       
                o.uv0 = v.texcoord0;
                o.pos = UnityObjectToClipPos( v.vertex );  // 顶点的数据,从模型空间转到裁剪空间
                return o;
            }
            float4 frag(VertexOutput i) : COLOR {     //片段程序  返回COLOR类型的颜色值
// Lighting:
// Emissive:
                float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex));     //获取主纹理
                float4 node_6652 = _Time;  //_Time 时间
                float3 emissive = (_MainTex_var.rgb+lerp(_node_1301.rgb,_node_4920.rgb,(sin((node_6652.g*25.0))*0.5+0.5)));     //主纹理的颜色值+从颜色1到颜色2,波动效果   rgb颜色,lerp线性插值 sin波动效果
                float3 finalColor = emissive;
                return fixed4(finalColor,1);
            }
            ENDCG
        }
    }
    FallBack "Diffuse"     //普通漫反射
    CustomEditor "ShaderForgeMaterialInspector"
}

 类似资料: