Unityd外发光Shader Lab

  1 Shader "Faye/OutLightting"
  2 {
  3 Properties
  4 {
  5 _MainTex("Texture (RGB)", 2D) = "black" {}
  6 _Color("Color", Color) = (0, 0, 0, 1)
  7 _AtmoColor("Atmosphere Color", Color) = (0.5, 0.5, 1.0, 1)
  8 _Size("Size", Float) = 0.1
  9 _Falloff("Falloff", Float) = 5
 10 _FalloffPlanet("Falloff Planet", Float) = 5
 11 _Transparency("Transparency", Float) = 15
 12 _TransparencyPlanet("Transparency Planet", Float) = 1
 13 }
 14 SubShader
 15 {
 16 Pass
 17 {
 18 Name "PlanetBase"
 19 Tags {"LightMode" = "Always"}
 20 Cull Back
 21 CGPROGRAM
 22 #pragma vertex vert
 23 #pragma fragment frag
 24 #pragma fragmentoption ARB_fog_exp2
 25 #pragma fragmentoption ARB_precision_hint_fastest
 26 #include "UnityCG.cginc"
 27 uniform sampler2D _MainTex;
 28 uniform float4 _MainTex_ST;
 29 uniform float4 _Color;
 30 uniform float4 _AtmoColor;
 31 uniform float _FalloffPlanet;
 32 uniform float _TransparencyPlanet;
 33 struct v2f
 34 {
 35 float4 pos : SV_POSITION;
 36 float3 normal : TEXCOORD0;
 37 float3 worldvertpos : TEXCOORD1;
 38 float2 texcoord : TEXCOORD2;
 39 };
 40 v2f vert(appdata_base v)
 41 {
 42 v2f o;
 43 o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
 44 o.normal = v.normal;
 45 o.worldvertpos = mul(_Object2World, v.vertex).xyz;
 46 o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
 47 return o;
 48 }
 49 float4 frag(v2f i) : COLOR
 50 {
 51 i.normal = normalize(i.normal);
 52 float3 viewdir = normalize(_WorldSpaceCameraPos-i.worldvertpos);
 53 float4 atmo = _AtmoColor;
 54 atmo.a = pow(1.0-saturate(dot(viewdir, i.normal)), _FalloffPlanet);
 55 atmo.a *= _TransparencyPlanet*_Color;
 56 float4 color = tex2D(_MainTex, i.texcoord)*_Color;
 57 color.rgb = lerp(color.rgb, atmo.rgb, atmo.a);
 58 return color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0), i.normal);
 59 }
 60 ENDCG
 61 }
 62 Pass
 63 {
 64 Name "AtmosphereBase"
 65 Tags {"LightMode" = "Always"}
 66 Cull Front
 67 Blend SrcAlpha One
 68 CGPROGRAM
 69 #pragma vertex vert
 70 #pragma fragment frag
 71 #pragma fragmentoption ARB_fog_exp2
 72 #pragma fragmentoption ARB_precision_hint_fastest
 73 #include "UnityCG.cginc"
 74 uniform float4 _Color;
 75 uniform float4 _AtmoColor;
 76 uniform float _Size;
 77 uniform float _Falloff;
 78 uniform float _Transparency;
 79 struct v2f
 80 {
 81 float4 pos : SV_POSITION;
 82 float3 normal : TEXCOORD0;
 83 float3 worldvertpos : TEXCOORD1;
 84 };
 85 v2f vert(appdata_base v)
 86 {
 87 v2f o;
 88 v.vertex.xyz += v.normal*_Size;
 89 o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
 90 o.normal = v.normal;
 91 o.worldvertpos = mul(_Object2World, v.vertex);
 92 return o;
 93 }
 94 float4 frag(v2f i) : COLOR
 95 {
 96 i.normal = normalize(i.normal);
 97 float3 viewdir = normalize(i.worldvertpos-_WorldSpaceCameraPos);
 98 float4 color = _AtmoColor;
 99 color.a = pow(saturate(dot(viewdir, i.normal)), _Falloff);
100 color.a *= _Transparency*_Color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0), i.normal);
101 return color;
102 }
103 ENDCG
104 }
105 }
106 FallBack "Diffuse"
107 }
原文地址:https://www.cnblogs.com/wugang/p/3878091.html