- Home /
How to use a sprite/mesh shader to light up behind it?
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
Answer by Jovssen · Feb 13, 2017 at 11:58 PM
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
struct PixelOutput
{
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.
Graphics.SetRenderTarget
and(/or?)
camera.SetTargetBuffers
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.
Your answer
Follow this Question
Related Questions
Block/Obscure light without shadows 0 Answers
Standard fade shader lit through walls 1 Answer
Distance based lighting 1 Answer
How to make a GameObject not hittable by shadows ? 2 Answers
How do I keep an object lit when a light moves past it? 0 Answers