ToonBasicOutline.shader 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. Shader "Toon/Basic Outline" {
  2. Properties {
  3. _Color ("Main Color", Color) = (.5,.5,.5,1)
  4. _OutlineColor ("Outline Color", Color) = (0,0,0,1)
  5. _Outline ("Outline width", Range (.002, 0.03)) = .005
  6. _MainTex ("Base (RGB)", 2D) = "white" { }
  7. _ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { }
  8. }
  9. CGINCLUDE
  10. #include "UnityCG.cginc"
  11. struct appdata {
  12. float4 vertex : POSITION;
  13. float3 normal : NORMAL;
  14. };
  15. struct v2f {
  16. float4 pos : SV_POSITION;
  17. UNITY_FOG_COORDS(0)
  18. fixed4 color : COLOR;
  19. };
  20. uniform float _Outline;
  21. uniform float4 _OutlineColor;
  22. v2f vert(appdata v) {
  23. v2f o;
  24. o.pos = UnityObjectToClipPos(v.vertex);
  25. float3 norm = normalize(mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal));
  26. float2 offset = TransformViewToProjection(norm.xy);
  27. #ifdef UNITY_Z_0_FAR_FROM_CLIPSPACE //to handle recent standard asset package on older version of unity (before 5.5)
  28. o.pos.xy += offset * UNITY_Z_0_FAR_FROM_CLIPSPACE(o.pos.z) * _Outline;
  29. #else
  30. o.pos.xy += offset * o.pos.z * _Outline;
  31. #endif
  32. o.color = _OutlineColor;
  33. UNITY_TRANSFER_FOG(o,o.pos);
  34. return o;
  35. }
  36. ENDCG
  37. SubShader {
  38. Tags { "RenderType"="Opaque" }
  39. UsePass "Toon/Basic/BASE"
  40. Pass {
  41. Name "OUTLINE"
  42. Tags { "LightMode" = "Always" }
  43. Cull Front
  44. ZWrite On
  45. ColorMask RGB
  46. Blend SrcAlpha OneMinusSrcAlpha
  47. CGPROGRAM
  48. #pragma vertex vert
  49. #pragma fragment frag
  50. #pragma multi_compile_fog
  51. fixed4 frag(v2f i) : SV_Target
  52. {
  53. UNITY_APPLY_FOG(i.fogCoord, i.color);
  54. return i.color;
  55. }
  56. ENDCG
  57. }
  58. }
  59. Fallback "Toon/Basic"
  60. }