- Home /
Making game objects invisble behind other objects
Hi,
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.
Thanks Alex
Answer by Winterblood · Jun 09, 2012 at 03:22 PM
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 :)
$$anonymous$$hh, okay.
Theoretically I understand, what you suggest. But practically I don't have a clue what to do ;-)
I'm totally new to Unity and made only one scene, yet. So if you could give me a direction, where to read on or where to get more informations on creating those geometry, I will try to go ahead reading and learning :-)
Thanks $$anonymous$$
It's all in the material settings, but the ready-made shader @whydoidoit linked to below is probably much easier!
@aledander: I guess you wanted to reply to winterblood's answer, so i converted your answer into a comment.
Answers should answer the question.
Answer by Piflik · Jun 09, 2012 at 05:42 PM
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 {
"Queue"="Geometry-500"
"IgnoreProjector"="False"
"RenderType"="Opaque"
}
Cull Back
ZWrite On
ZTest LEqual
ColorMask RGBA
Blend Zero One
Fog {
}
CGPROGRAM
#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);
}
ENDCG
}
Fallback "Diffuse"
}