边缘光效果加流光效果
// Upgrade NOTE: replaced ‘_World2Object’ with ‘unity_WorldToObject’
Shader “Unlit/Scan_code”
{
Properties
{
_MainTex (“Texture”, 2D) = “white” {}
_RimMin(“RimMin”,Range(0,1)) = 0.0
_RimMax(“RimMax”,Range(0,1)) = 1.0
_RimColor(“RimColor”, Color) = (1,1,1,1)
_RimIntensity(“RimIntensity”, Range(0,1)) = 0.5
_InnerColor(“InnerColor”, Color) = (0,0,0,1)
_FlowTilling(“Flow Tilling”,Vector) = (1,1,0,0)
_FlowSpeed(“Flow Speed”, Vector) = (1,1,0,0)
_FlowTex(“Flow Texture”, 2D) = “white” {}
_FlowIntensity(“Flow Intensity”, Range(0,1)) = 0.5
_InnerAlpha(“Inner Alpha”, Range(0,1)) = 0.0
}
SubShader
{
Tags { “RenderType”=“Transparent” }
LOD 100
Pass{ZWrite OffBlend SrcAlpha OneCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 texcoord : TEXCOORD0;float3 normal : NORMAL;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float3 pos_world : TEXCOORD1;float3 normal_world : TEXCOORD2;float3 pivot_world : TEXCOORD3;};sampler2D _MainTex;float4 _MainTex_ST;float _RimMin;float _RimMax;half4 _RimColor;half _RimIntensity;half4 _InnerColor;float4 _FlowTilling;float4 _FlowSpeed;sampler2D _FlowTex;float _FlowIntensity;float _InnerAlpha;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);//计算世界空间下的顶点法线float3 normal_world = mul(float4(v.normal,0.0),unity_WorldToObject).xyz;o.normal_world = normal_world;//输出世界空间下的顶点坐标float3 pos_world = mul(unity_ObjectToWorld,v.vertex).xyz;o.pos_world = pos_world;o.pivot_world = mul(unity_ObjectToWorld,float4(0,0,0,1)).xyz; return o;}fixed4 frag (v2f i) : SV_Target{ fixed4 col = tex2D(_MainTex, i.uv);//片元shader里的世界法线half3 normal_world = normalize(i.normal_world);//世界里的视线方向half3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.pos_world); //相机坐标减去顶点坐标half NdotV = saturate(dot(normal_world,viewDir));//法线与视线的点积 规范到0-1内half fresnel = 1-NdotV;//0-1half fresnel_ssLimit = smoothstep(_RimMin,_RimMax,fresnel);half emiss = tex2D(_MainTex, i.uv).r; emiss = pow(emiss,2);half final_fresnel = saturate( fresnel_ssLimit + emiss);half3 rim_color = lerp(_InnerColor,_RimColor* _RimIntensity,final_fresnel); //边缘光//流光half2 uv_flow = (i.pos_world.xy - i.pivot_world.xy)*_FlowTilling.xy;uv_flow = _Time.y * _FlowSpeed.xy + uv_flow;float4 flow_rgba = tex2D(_FlowTex, uv_flow)*_FlowIntensity;float3 final_col = rim_color+ flow_rgba.rgb;float final_alpha = saturate(final_fresnel + flow_rgba.a+ _InnerAlpha);return fixed4(final_col,final_alpha);}ENDCG}
}
}