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.
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.