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 }