// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Outline_Extend" {
Properties {
//_Outline("Out line",range(0,0.2))=0.02
_Thickness("Thickness",range(0,2))=0.01
_Factor("Factor",range(0,2))=0.5
_Factor2("Factor",range(0,2))=0.5
_OutlineColor("OutlineColor",Color) = (1,0,0,0)
[Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Int) = 4 //声明外部控制开关
}
SubShader {
Pass
{
Stencil
{
Ref 1
Comp Always
Pass Replace
ZFail Replace
}
ColorMask 0
}
pass{
Tags{"LightMode"="Always"}
Cull Back
ZWrite On
ZTest [_ZTest]
Stencil
{
Ref 0
Comp Equal
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float _Thickness;
float _Factor;
float4 _OutlineColor;
struct v2f {
float4 pos:SV_POSITION;
};
v2f vert (appdata_full v) {
v2f o;
o.pos=UnityObjectToClipPos(v.vertex);
float3 dir=normalize(v.vertex.xyz);
float3 dir2=v.normal;
dir=lerp(dir,dir2,_Factor);
dir= mul ((float3x3)UNITY_MATRIX_IT_MV, dir);
float2 offset = TransformViewToProjection(dir.xy);
offset=normalize(offset);
o.pos.xy += offset * o.pos.z *_Thickness;
return o;
}
float4 frag(v2f i):COLOR
{
return _OutlineColor;
}
ENDCG
}//end of pass .1
pass{
Tags{"LightMode"="Always"}
Cull Front
ZWrite On
ZTest[_ZTest]
Stencil
{
Ref 0
Comp Equal
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float _Thickness;
float _Factor2;
float4 _OutlineColor;
struct v2f {
float4 pos:SV_POSITION;
};
v2f vert (appdata_full v) {//.2
v2f o;
o.pos=UnityObjectToClipPos(v.vertex);
float3 dir=normalize(v.vertex.xyz);
float3 dir2=v.normal;
dir=lerp(dir,dir2,_Factor2);
dir= mul ((float3x3)UNITY_MATRIX_IT_MV, dir);
float2 offset = TransformViewToProjection(dir.xy);
offset=normalize(offset);
o.pos.xy += offset * o.pos.z *_Thickness;
return o;
}
float4 frag(v2f i):COLOR
{
return _OutlineColor;
}
ENDCG
}//end of pass .2
}
}
FR:徐海涛(hunk xu)
QQ技术群:386476712