Sign in to follow this  

Handling Post Processing after Deferred Shading

This topic is 1423 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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! :)

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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
 

Edited by KoldGames

Share this post


Link to post
Share on other sites
Sign in to follow this