Guest User

ToonLitSpecularAlpha.shader

a guest
Mar 26th, 2018
2,014
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. Shader "Toon/Lit Specular Alpha" {
  2. Properties{
  3. _Color("Main Color", Color) = (1,1,1,1)
  4. _SColor("Specular Color", Color) = (1,1,1,1)
  5. _MainTex("Base (RGB)", 2D) = "white" {}
  6. _Ramp("Toon Ramp (RGB)", 2D) = "gray" {}
  7. _RampS("Specular Ramp (RGB)", 2D) = "gray" {} // specular ramp, cutoff point
  8. _SpecSize("Specular Size", Range(0.65,0.999)) = 0.9 // specular size
  9. _SpecOffset("Specular Offset", Range(0.5,1)) = 0.5 // specular offset of the spec Ramp
  10. _TColor("Gradient Overlay Top Color", Color) = (1,1,1,1)
  11. _BottomColor("Gradient Overlay Bottom Color", Color) = (0.23,0,0.95,1)
  12. _Offset("Gradient Offset", Range(-4,4)) = 3.2
  13. [Toggle(RIM)] _RIM("Fresnel Rim?", Float) = 0
  14. _RimColor("Fresnel Rim Color", Color) = (0.49,0.94,0.64,1)
  15. [Toggle(FADE)] _FADE("Fade specular to bottom?", Float) = 0
  16. _TopBottomOffset("Specular Fade Offset", Range(-4,4)) = 3.2
  17. }
  18.  
  19. SubShader{
  20. Tags{ "Queue" = "Transparent"}
  21. LOD 200
  22. Blend SrcAlpha OneMinusSrcAlpha
  23.  
  24. CGPROGRAM
  25. #pragma surface surf ToonRamp vertex:vert keepalpha
  26. #pragma shader_feature FADE // fade toggle
  27. #pragma shader_feature RIM // rim fresnel toggle
  28. sampler2D _Ramp;
  29.  
  30. // custom lighting function that uses a texture ramp based
  31. // on angle between light direction and normal
  32. #pragma lighting ToonRamp exclude_path:prepass
  33. inline half4 LightingToonRamp(SurfaceOutput s, half3 lightDir, half atten)
  34. {
  35. #ifndef USING_DIRECTIONAL_LIGHT
  36. lightDir = normalize(lightDir);
  37. #endif
  38.  
  39. half d = dot(s.Normal, lightDir)*0.5 + 0.5;
  40. half3 ramp = tex2D(_Ramp, float2(d,d)).rgb;
  41.  
  42. half4 c;
  43. c.rgb = s.Albedo * _LightColor0.rgb * ramp * (atten * 2);
  44. c.a = s.Alpha;
  45. return c;
  46. }
  47.  
  48.  
  49. sampler2D _MainTex;
  50. float4 _Color;
  51. float4 _SColor; // specular color
  52. sampler2D _RampS; // specular ramp
  53. float _SpecSize; // specular size
  54. float _SpecOffset; // offset specular ramp
  55. float4 _TColor; // top gradient color
  56. float4 _BottomColor;// bottom gradient color
  57. float _TopBottomOffset; // gradient bottom offset
  58. float _Offset; // specular fade offset
  59. float4 _RimColor; // fresnel rim color
  60.  
  61. struct Input {
  62. float2 uv_MainTex : TEXCOORD0;
  63. float3 lightDir;
  64. float3 worldPos; // world position
  65. float3 viewDir; // view direction from camera
  66. };
  67.  
  68. void vert(inout appdata_full v, out Input o)
  69. {
  70. UNITY_INITIALIZE_OUTPUT(Input, o);
  71. o.lightDir = WorldSpaceLightDir(v.vertex); // get the worldspace lighting direction
  72. }
  73.  
  74. void surf(Input IN, inout SurfaceOutput o) {
  75. float3 localPos = (IN.worldPos - mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz);// local position of the object, with an offset
  76. half4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
  77. half d = dot(o.Normal, IN.lightDir)*0.5 + _SpecOffset; // basing on normal and light direction
  78. half3 rampS = tex2D(_RampS, float2(d, d)).rgb; // specular ramp
  79.  
  80. float rim = 1 - saturate(dot(IN.viewDir, o.Normal)); // calculate fresnel rim
  81. #if RIM
  82. o.Emission = _RimColor.rgb * pow(rim, 1.5); // fresnel rim
  83. #endif
  84. float specular= (step(_SpecSize, rampS.r)) * rampS * d* _SColor;
  85. o.Albedo = specular; // specular
  86. o.Alpha = c.a + specular;
  87. #if FADE
  88. float specular2 = (step(_SpecSize, rampS.r)) * rampS * d* saturate(localPos.y + _TopBottomOffset) * _SColor;
  89. o.Albedo = specular2; // fade specular to bottom
  90. o.Alpha = c.a + specular2;
  91. #endif
  92. o.Albedo += c.rgb*lerp(_BottomColor, _TColor, saturate(localPos.y + _Offset)) * 1.1; // multiply color by gradient lerp
  93.  
  94. }
  95. ENDCG
  96.  
  97. }
  98.  
  99. Fallback "Diffuse"
  100. }
Advertisement
Add Comment
Please, Sign In to add comment