Edit2 - Solution inspired by @DMGregory
Shader "Sprites/Layered"
{
Properties
{
[NoScaleOffset] _OutlineTex ("Outline", 2D) = "white" {}
_OutlineColor ("Outline Color", Color) = (1,1,1,1)
[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
[HideInInspector] [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
[HideInInspector] _Color ("Tint", Color) = (1,1,1,1)
[HideInInspector] _RendererColor ("RendererColor", Color) = (1,1,1,1)
[HideInInspector] _Flip ("Flip", Vector) = (1,1,1,1)
[HideInInspector] [PerRendererData] _AlphaTex ("External Alpha", 2D) = "white" {}
[HideInInspector] [PerRendererData] _EnableExternalAlpha ("Enable External Alpha", Float) = 0
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}
Cull Off
Lighting Off
ZWrite Off
Blend One OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex SpriteVert
#pragma fragment LayerFrag
#pragma target 2.0
#pragma multi_compile_instancing
#pragma multi_compile_local _ PIXELSNAP_ON
#pragma multi_compile _ ETC1_EXTERNAL_ALPHA
#include "UnitySprites.cginc"
sampler2D _OutlineTex;
uniform fixed4 _OutlineColor;
fixed4 LayerFrag(v2f IN) : SV_Target
{
fixed4 main = SampleSpriteTexture(IN.texcoord) * IN.color;
main.rgb *= main.a;
fixed4 layer = tex2D(_OutlineTex, IN.texcoord) * _OutlineColor;
float alpha = layer.a;
layer.rgb *= layer.a;
layer.a = 1;
return lerp(main, layer, alpha);
}
ENDCG
}
}
}





