Advertisement
jrgoncal

RimAlpha

Mar 1st, 2015
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.89 KB | None | 0 0
  1. Shader "Toony Gooch/Toony Gooch RimAlpha"
  2. {
  3.     Properties
  4.     {
  5.         _Color ("Main Color", Color) = (1,1,1,1)
  6.        
  7.         _MainTex ("Base (RGB)", 2D) = "white" {}
  8.         _Ramp ("Toon Ramp (RGB)", 2D) = "gray" {}
  9.        
  10.         _RimPower ("Rim Power", Float) = 1.4
  11.        
  12.         _SColor ("Shadow Color", Color) = (0.0,0.0,0.0,1)
  13.         _LColor ("Highlight Color", Color) = (0.5,0.5,0.5,1)
  14.     }
  15.  
  16.     SubShader
  17.     {
  18.         Tags { "RenderType"="Transparent" "IgnoreProjector"="True" "Queue"="Transparent" }
  19.         LOD 200    
  20.        
  21.         // extra pass that renders to depth buffer only
  22.         Pass {
  23.             ZWrite On
  24.             ColorMask 0
  25.         }
  26.        
  27. CGPROGRAM
  28.         #pragma surface surf ToonRamp alpha
  29.        
  30.         sampler2D _MainTex;
  31.         sampler2D _Ramp;
  32.         float4 _Color;
  33.         float4 _LColor;
  34.         float4 _SColor;
  35.         float _RimPower;
  36.        
  37.         // custom lighting function that uses a texture ramp based
  38.         // on angle between light direction and normal
  39.         #pragma lighting ToonRamp exclude_path:prepass
  40.         inline half4 LightingToonRamp (SurfaceOutput s, half3 lightDir, half atten)
  41.         {
  42.             #ifndef USING_DIRECTIONAL_LIGHT
  43.             lightDir = normalize(lightDir);
  44.             #endif
  45.            
  46.             half d = dot (s.Normal, lightDir)*0.5 + 0.5;
  47.             half3 ramp = tex2D(_Ramp, float2(d,d)).rgb;
  48.             ramp = lerp(_SColor,_LColor,ramp);
  49.            
  50.             half4 c;
  51.             c.rgb = s.Albedo * _LightColor0.rgb * ramp * (atten * 2);
  52.             c.a = 255;
  53.            
  54.             return c;
  55.         }
  56.        
  57.         struct Input
  58.         {
  59.             float2 uv_MainTex : TEXCOORD0;
  60.             float3 pos : POSITION0;
  61.             float3 viewDir;
  62.         };
  63.        
  64.         void surf (Input IN, inout SurfaceOutput o)
  65.         {
  66.             half4 c = tex2D(_MainTex, IN.uv_MainTex);
  67.             o.Albedo = c.rgb * _Color.rgb;
  68.            
  69.             //Rim alpha
  70.             half rim = 1.0f - saturate( dot(normalize(IN.viewDir), o.Normal) );
  71.             o.Alpha = (1.0f - (pow (rim, _RimPower)))*2.0f - 0.8f;
  72.            
  73.             //Default semi-transparency
  74.             o.Alpha *= _Color.a;
  75.         }
  76. ENDCG
  77.  
  78.         UsePass "Transparent/Diffuse/FORWARD"
  79.     }
  80.  
  81.     Fallback "Toon/Lighted"
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement