左が改良版、右が法線方向に伸ばしてアウトラインの上をテクスチャが上書きする方式
Shader "Custom/Outline2" { Properties{ _Color("Color",Color) = (1,1,1,1) _OutlineWide("OutlineWide",Range(0.,0.2)) = 0. _OutlinePow("OuwlinePow",Range(0,5.)) = 1. _MainTex("Texture",2D) = "white" {} } SubShader{ Tags{"RenderType"="Opaque"} CGINCLUDE #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex :POSITION; float4 normal :NORMAL; float4 texcoord :TEXCOORD; }; struct v2f { float4 pos: SV_POSITION; float2 uv: TEXCOORD; }; ENDCG Pass{ Stencil{ Ref 1 Comp always Pass replace } Cull Back CGPROGRAM sampler2D _MainTex; float4 _MainTex_ST; v2f vert(appdata v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.texcoord,_MainTex); return o; } float4 frag(v2f i) :SV_Target{ return tex2D(_MainTex ,i.uv); } ENDCG }//Pass Pass{ Cull Front Stencil{ Ref 1 Comp NotEqual } CGPROGRAM float _OutlineWide; v2f vert(appdata v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex+v.normal*_OutlineWide); return o; } float4 _Color; float4 frag(v2f i) :SV_Target{ return _Color; } ENDCG }//Pass }//SubShader FallBack "Diffuse" }