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 }