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
10 CGINCLUDE
11 #include "UnityCG.cginc"
12
13 struct appdata {
14 float4 vertex : POSITION;
15 float3 normal : NORMAL;
16 };
17
18 struct v2f {
19 float4 pos : SV_POSITION;
20 UNITY_FOG_COORDS(0)
21 fixed4 color : COLOR;
22 };
23
24 uniform float _Outline;
25 uniform float4 _OutlineColor;
26
27 v2f vert(appdata v) {
28 v2f o;
29 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
30
31 float3 norm = normalize(mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal));
32 float2 offset = TransformViewToProjection(norm.xy);
33
34 o.pos.xy += offset * o.pos.z * _Outline;
35 o.color = _OutlineColor;
36 UNITY_TRANSFER_FOG(o,o.pos);
37 return o;
38 }
39 ENDCG
40
41 SubShader {
42 Tags { "RenderType"="Opaque" }
43 UsePass "Toon/Basic/BASE"
44 Pass {
45 Name "OUTLINE"
46 Tags { "LightMode" = "Always" }
47 Cull Front
48 ZWrite On
49 ColorMask RGB
50 Blend SrcAlpha OneMinusSrcAlpha
51
52 CGPROGRAM
53 #pragma vertex vert
54 #pragma fragment frag
55 #pragma multi_compile_fog
56 fixed4 frag(v2f i) : SV_Target
57 {
58 UNITY_APPLY_FOG(i.fogCoord, i.color);
59 return i.color;
60 }
61 ENDCG
62 }
63 }
64
65 Fallback "Toon/Basic"
66 }