You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
1.8 KiB
Plaintext

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Outlined/Silhouette Only"
{
Properties
{
_OutlineColor("Outline Color", Color) = (0,0,0,1)
_Outline("Outline width", Range(0.0, 1)) = .5
}
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 = UnityObjectToClipPos(v.vertex);
float3 norm = normalize(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 { "Queue" = "Transparent" }
Pass
{
Name "BASE"
CULL OFF
ZTEST ALWAYS
ZWRITE OFF
Blend ONE ONE
Stencil
{
REF 2
COMP ALWAYS
PASS REPLACE
ZFAIL REPLACE
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
half4 frag(v2f i) :COLOR
{
return half4(0,0,0,0);
}
ENDCG
}
Pass
{
Name "INNER"
CULL OFF
ZTEST ALWAYS
ZWRITE OFF
Blend One One
Stencil
{
REF 1
COMP ALWAYS
PASS REPLACE
ZFAIL REPLACE
}
CGPROGRAM
#pragma vertex vert2
#pragma fragment frag
v2f vert2(appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.color = _OutlineColor;
return o;
}
half4 frag(v2f i) :COLOR
{
return half4(0,0,0,0);
}
ENDCG
}
Pass
{
Name "OUTLINE"
CULL OFF
ZTEST ALWAYS
ZWRITE OFF
BLEND ONE ONEMINUSDSTCOLOR
Stencil
{
REF 2
COMP EQUAL
PASS REPLACE
ZFAIL REPLACE
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
half4 frag(v2f i) :COLOR
{
return i.color;
}
ENDCG
}
}
Fallback "Diffuse"
}