效果不是如下 比图中要真实清晰==
Shader "Unlit/LightBean_Code"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_EmissColor("_EmissColor",color) = (1,1,1,1)
_EmissIntensity("_EmissIntensity",float) = 0.75
_FadeOffset("_FadeOffset",float) = 0
_FadePower("_FadePower",Range(0,10)) = 5
_RimMin("_RimMin",Range(-1,0.9)) = 0.8
_RimMax("_RimMax",Range(-2,5)) = 0.9
_Expand("_Expand",float) = 0
_Speed("_Speed",vector) = (0.1,0,0,0)
}
SubShader
{
Tags { "RenderType"="Transparent" }
LOD 100
Pass
{
ZWrite off
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float3 worldPos : TEXCOORD1;
float3 worldNormal : TEXCOORD2;
float2 vertexUV : TEXCOORD3;
};
sampler2D _MainTex;
float4 _MainTex_ST;
float _FadePower;
float _FadeOffset;
float _RimMax,_RimMin,_Expand,_EmissIntensity;
float4 _EmissColor,_Speed;
v2f vert (appdata v)
{
v2f o;
// 用 uv的 x 限制一下,x=0 的根部就会不缩放。。 从而防止整体缩放
v.vertex.xyz = v.vertex.xyz + v.normal * _Expand * v.uv.x;
o.vertex = UnityObjectToClipPos(v.vertex);
// 下面在用 uv.x 参与计算的 都是未经缩放的uv值,此处单独标记一下
o.vertexUV = v.uv;
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
float3 worldPos = mul(unity_ObjectToWorld,v.vertex);
o.worldPos = worldPos;
o.worldNormal = UnityObjectToWorldNormal(v.normal);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
float2 uv = i.vertexUV;
// 控制光束的大小
float fadeData = saturate(((1 - uv.x ) - _FadeOffset )* _FadePower);
fadeData = min(fadeData,1.0 - uv.x);
float3 worldPos = i.worldPos;
float3 viewDir = normalize(UnityWorldSpaceViewDir(worldPos)) ;
float3 normal = normalize(i.worldNormal);
// 控制高亮的范围
float nDv = abs(dot(viewDir,normal));
float fresnal = smoothstep(_RimMin,_RimMax,nDv);
// 两者相乘 作为透明度
float alpha = fadeData * fresnal;
// 顶点动画
float2 uv_main = i.uv + _Speed.xy * _Time.y * 1.0;
fixed4 col = tex2D(_MainTex, uv_main);
float4 endCol = col.r * _EmissColor * _EmissIntensity;
return float4(endCol.rgb,alpha);
}
ENDCG
}
}
}