I want to use environmental lighting with the ambient source being a grey/black color, and overlay a sprite/mesh to reveal behind it.
I also will need to darken using a sprite/mesh but that I’m able to do just by having the color of the sprite/mesh being a black with limited alpha, to simulate using unity’s shadowing system, but I can’t use something similar with lighting because color information would be lost.
I’ve tried searching if this is even possible at least, but I can’t find anything about it
I think I have it solved. I needed to make my own lighting system for the look I am going for. Very simplified:
In my shader frag() I need to output a struct that contains two colors (float4 or fixed4), rather than a single float4/fixed4
float4 col0 : COLOR0;
float4 col1 : COLOR1;
PixelOutput frag(v2f IN) : SV_Target
Which allows MRT (Multi Rendering Targets) to be used with the camera so that a shader can output multiple (in this case two) different colors to seperate RenderBuffers, if the camera has multiple render targets set.
Then combine the two RenderTextures in OnPostRender() using Graphics.Blit, and then Graphics.Blit null to render the combined RenderTexture directly to the screen, while “juggling” the camera’s rendertargets, and avoiding OnRenderImage() entirely because it only supports a single source-RenderTexture from the camera, not the secondary one used for lighting.
In the shader used to brighten behind it, I used only col1 values, and set col0 to be constantly clear.
This achieves a primitive, customized form of “deferred lighting” that I needed. It accumulates a RenderTexture full of the shadow values, and at the end of rendering “adds” it to the unshaded, but colored, RenderTexture of the scene.
If someone would like more details or the more complete code I would be happy to help, though I am still very new to all of this.