Full Outline Shader

I’ve seen the outline diffuse off the wiki and Daniel’s Rim shader (very nice) - which are close to what I’m looking for but not quite.

I’d like to have a shader which uses Diffuse+Normal or Specular+Normal plus outlines the object in a given colour. Something like Left 4 Dead 2 uses to show culled characters. In particular, I’d like it to outline as though the model were in 2D, so the outline is constant and only surrounds the object (i.e. the rim shader is close but width out outline varies around model and it impacts the surface as well).

Anyone capable of making such a beast for pay or that can point me in the right direction?

Shader "Toon Basic OutlineOnly" {
        Properties {
                //_Color ("Main Color", Color) = (.5,.5,.5,1)
                _OutlineColor ("Outline Color", Color) = (0,0,0,1)
                _Outline ("Outline width", Range (.002, 0.03)) = .005
                //_MainTex ("Base (RGB)", 2D) = "white" { }
                //_ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { Texgen CubeNormal }
        }
       
        CGINCLUDE
        #include "UnityCG.cginc"
       
        struct appdata {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
        };

        struct v2f {
                float4 pos : POSITION;
                float4 color : COLOR;
        };
       
        uniform float _Outline;
        uniform float4 _OutlineColor;
       
        v2f vert(appdata v) {
                v2f o;
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);

                float3 norm   = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);
                float2 offset = TransformViewToProjection(norm.xy);

                o.pos.xy += offset * o.pos.z * _Outline;
                o.color = _OutlineColor;
                return o;
        }
        ENDCG

        SubShader {
                Tags { "RenderType"="Opaque" }
                //UsePass "Toon/Basic/BASE"
                Pass {
                        Name "OUTLINE"
                        Tags { "LightMode" = "Always" }
                        Cull Front
                        ZWrite On
                        ColorMask RGB
                        Blend SrcAlpha OneMinusSrcAlpha

                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                        half4 frag(v2f i) :COLOR { return i.color; }
                        ENDCG
                }
        }
               
        Fallback "Toon/Basic"
}

Ok, I tried this and get a solid black figure - though if you highlight him in editor you can see there is some outlining. Tried uncommenting the _MainTex property to assign a texture but still get something like: Grab By | Simple. Screenshot. Sharing Software Blog .

Also, that shader still shades the entire surface, not just a 2d slice based on perspective - less of an issue for now I guess … any thoughts on why the texture refuses to render?

Perhaps a DX vs OGL issue?