Handling Post Processing after Deferred Shading

Started by
1 comment, last by KoldGames 10 years, 1 month ago

Hello everyone! I finally finished implementing Deferred Shading as well as Deferred Lighting in my engine. I am now to point where I would like to add some Post Processing Effects and was wondering, what is the most efficient way to set this up and allow multiple effects? I was thinking that I'd have something like this: For each effect, set to render to a single target, call the effects Render method, in the effect's Render method, create a copy of the target before clearing, render the effect using the target I copied (the last effects output texture), set to the back buffer, then render the target.


void NXPPBloom::Render(NXRenderTarget& target)
{
   //Get the last effect output texture before I clear
   NXTexture2D before = target.Texture;

   target.Clear(0, 0, 0, 0);
   
   //Bloom code...
} 

Do you guys think this will work? Is there a more efficient or easier way to do this? Thanks! :)

Advertisement

Usually the approach is to have 2 render targets and 'ping pong' between them. Let's say the result of your deferred rendering scene ends up in RT1.

Post Effect A renders to RT2 using RT1 as a texture.

Post Effect B renders to RT1 using RT2 as a texture

Post Effect C renders to RT2 using RT1 as a texture

etc.

That's the basic approach, although the details can get a bit messy. e.g. You might want to reuse some of your G-buffer render targets rather than allocating new ones. You might want to do some of your post effects at reduced resolution. You might want to combine some post effects into single passes to better balance ALU and bandwidth usage in your shaders.

Hey everyone! I setup a quick post process effect system and got laying effects working! I'm really excited! Haha! It seems to be working fine. I'll post here if I encounter any problems in the future. I'm actually using 5 targets (color, normal, depth, lighting, and final image) in deferred shading, then passing my final image target to my post process manager which then uses one single render target to layer effects! So six targets! (because I couldn't get it working with taking one of my original targets and re-using it lol).

Original Image

b82h.png

Grayscale Effect Added to Manager:

jy9k.png

Blur Added:
2w0w.png

Grayscale Disabled:
wiw9.png

Thanks! smile.png

This topic is closed to new replies.

Advertisement