shader "Custom/Mask"
{
Properties
{
[HDR]_Color("Color", Color) = (1,1,1,1)
_RimValue("RimValue", Range(0,10)) = 2
_RimIntensity("RimIntensity", Range(0,1)) = 1
}
SubShader
{
pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 pos : SV_POSITION;
};
v2f vert(appdata_base v)
{
v2f f;
f.pos = UnityObjectToClipPos(v.vertex);
return f;
}
fixed4 frag(v2f i) : SV_TARGET
{
return fixed4(0,0,1,1);
}
ENDCG
}
pass
{
Tags{"Queue"="Transparent" "RenderType"="Transparent" "IgnoreObjector"="True" }
ZTest Greater
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 pos : SV_POSITION;
half3 worldNormal : NORMAL;
float4 worldVertex : TEXCOORD0;
};
fixed4 _Color;
float _RimValue;
float _RimIntensity;
v2f vert(appdata_base v)
{
v2f f;
f.pos = UnityObjectToClipPos(v.vertex);
f.worldNormal = UnityObjectToWorldNormal(v.normal);
f.worldVertex = mul(unity_ObjectToWorld, v.vertex);
return f;
}
fixed4 frag(v2f i) : SV_TARGET
{
half3 worldNormal = normalize(i.worldNormal);
fixed3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldVertex));
float rim = 1 - saturate(dot(worldNormal, worldViewDir));
fixed3 rimColor = pow(rim, _RimValue) * _Color * _RimIntensity;
return fixed4(rimColor, rimColor.r);
}
ENDCG
}
}
}