Making game objects invisble behind other objects


is it possible to make a game object invisible behind another certain object?

I need this because I want to build an augmented reality animation, where a stickman climbs out of a hole in the floor. The floor must be transparent, because it should look like the stickman comes out of a card, or something.

So how to make the floor transparent but don’t render any objects beyond it.


There is this shader that masks other objects.

What you need is some geometry that renders only to the Z-buffer. Off the top of my head, you can probably force that using a transparent texture, setting the Z-write to stencil and the threshold to 0 (so it always writes to the Z-buffer no matter what the alpha value is).

Can’t check for you as I’m in the middle of installing the latest update, sorry :slight_smile:

You need a matte material. I tried to create a shader that does that once, but the result was not working (instead of showing the background, nothing was rendered where the object was) and I don’t know how I would make it work…but maybe someone else can help…

Shader "Matte" {
	Properties {
	SubShader {
		Tags {

		Cull Back
		ZWrite On
		ZTest LEqual
		ColorMask RGBA
		Blend Zero One
		Fog {

		#pragma surface surf BlinnPhongEditor  vertex:vert
		#pragma target 2.0

			struct EditorSurfaceOutput {
				half3 Albedo;
				half3 Normal;
				half3 Emission;
				half3 Gloss;
				half Specular;
				half Alpha;
				half4 Custom;
			inline half4 LightingBlinnPhongEditor_PrePass (EditorSurfaceOutput s, half4 light) {
				half3 spec = light.a * s.Gloss;
				half4 c;
				c.rgb = (s.Albedo * light.rgb + light.rgb * spec);
				c.a = s.Alpha;
				return c;

			inline half4 LightingBlinnPhongEditor (EditorSurfaceOutput s, half3 lightDir, half3 viewDir, half atten) {
				half3 h = normalize (lightDir + viewDir);
				half diff = max (0, dot ( lightDir, s.Normal ));
				float nh = max (0, dot (s.Normal, h));
				float spec = pow (nh, s.Specular*128.0);
				half4 res;
				res.rgb = _LightColor0.rgb * diff;
				res.w = spec * Luminance (_LightColor0.rgb);
				res *= atten * 2.0;

				return LightingBlinnPhongEditor_PrePass( s, res );
			struct Input {
				float4 color : COLOR;

			void vert (inout appdata_full v, out Input o) {
			float4 VertexOutputMaster0_0_NoInput = float4(0,0,0,0);
			float4 VertexOutputMaster0_1_NoInput = float4(0,0,0,0);
			float4 VertexOutputMaster0_2_NoInput = float4(0,0,0,0);
			float4 VertexOutputMaster0_3_NoInput = float4(0,0,0,0);

			void surf (Input IN, inout EditorSurfaceOutput o) {
				o.Normal = float3(0.0,0.0,1.0);
				o.Alpha = 1.0;
				o.Albedo = 0.0;
				o.Emission = 0.0;
				o.Gloss = 0.0;
				o.Specular = 0.0;
				o.Custom = 0.0;
				float4 Master0_0_NoInput = float4(0,0,0,0);
				float4 Master0_1_NoInput = float4(0,0,1,1);
				float4 Master0_2_NoInput = float4(0,0,0,0);
				float4 Master0_3_NoInput = float4(0,0,0,0);
				float4 Master0_4_NoInput = float4(0,0,0,0);
				float4 Master0_5_NoInput = float4(1,1,1,1);
				float4 Master0_7_NoInput = float4(0,0,0,0);
				float4 Master0_6_NoInput = float4(1,1,1,1);

				o.Normal = normalize(o.Normal);
	Fallback "Diffuse"