- Home /
Have a shader with have a limited effectiveness
Hi, That green-blue material needs to be masked, as shown in the first photo, but if i position it further away and angle the camera so the green-blue material is in front, the masking still occurs, this is normal but i am wondering how to limit the range of this masking, so the shader will mask everything in for example a "1 metre" area, and stop masking out of that. Disabling the Shader will not help as then you can see the material. Thanks~
THIS SHADER IS ON THE MASK Shader "Custom/Stencil/Mask OneZLess" { SubShader { Tags { "RenderType"="Opaque" "Queue"="Geometry-1" } ColorMask 0 ZWrite off
Stencil
{
Ref 1
Comp always
Pass replace
}
Pass
{
Cull Back
ZTest Less
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 pos : SV_POSITION;
};
v2f vert(appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
return o;
}
half4 frag(v2f i) : COLOR
{
return half4(1,1,0,1);
}
ENDCG
}`enter code here`
}
}
THIS SHADER IS ON THE GREEN-BLUE IMAGE Shader "Custom/GraffitiShader" { Properties { _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {} }
SubShader { Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} LOD 100
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
Stencil
{
Ref 1
Comp notequal
Pass keep
}
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
UNITY_FOG_COORDS(1)
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.texcoord);
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
Your answer
