- Home /
Render Gameobjects in one specific Layer as transparent,
Hi. I have a 2D scene with a second Camera that I have configured to only render the Gameobjects in two specific Culling Layers. This Camera renders to a RenderTexture, that I later use to apply a fake lighting effect to the scene.
All of these Gameobjects are ordered in the same Sorting Layer, but I would like the Gameobjects in one Culling layer to render as transparent, on top of any Gameobjects they ocude in the other Culling Layer.
For example, if the Circles are in Culling Layer A and the Square is in Culling Layer B, I would like the square to render as transparent obscuring part of the blue circle
I think that I could do this using a complicated arrangement of Camera.RenderWithShader and shaders with RenderType tags, but I was wondering if there is a simpler or more elegant way to achieve this.
Objects in Sorting Layer:
Desired Output Texture:
Answer by cb361 · Jun 10, 2020 at 10:20 PM
The solution I eventually found was to give a different Shader/Material to Gameobjects in the two different layers. Objects in layer A use the default Sprite shader, but objects in layer B have a shader that I can change the Blend mode at runtime. By changing the Blend mode in the Camera's OnPreRender() method, I can change the way the objects in layer B renders during that camera's rendering phase. During the main camera rendering phase, I set the objects to render in the normal way, and during my second camera's rendering phase I set the objects to render as transparent, without effecting the rendering of objects in layer A. In this way I was able to get the output image described in my question.
References:
https://answers.unity.com/questions/161945/is-it-possible-to-change-blend-mode-in-shader-at-r.html
Your answer
Follow this Question
Related Questions
Player is "Seen" through walls by AI cameras 1 Answer
occlusion culling conflict with shader,Occlusion culling conflict with shader 0 Answers
camera.RenderWithShader not working in 5.1.0f3 0 Answers
How to render a Layer without the Volume Mask 0 Answers
Fastest way to hide objects during render calls and still have them update 0 Answers