Deferred Shading

"Lights, in this article, are point lights with a finite range, beyond which they do not

contribute any lighting. Thus, when we refer to the light volume, this is the spherical

volume defined by the light position and influence radius. This is obviously not physically

correct, but represents a very common type of lights in real-time applications.

The techniques presented can be applied to arbitrary kinds of lights, but this is beyond

the scope of this article.

In the literature it is not always clear what is meant by Deferred Shading. In this

article we mean the technique whereby all required geometry attributes are rendered

into Geometry Buffers (G-Buffers [ST90]), in a single geometry pass. The G-Buffers

contain attributes such as position, normal and material properties for each pixel. This

is followed by a lighting pass, during which the lights are applied one at a time by rasterizing

the light volumes. Note that this is different from Deferred Lighting [AA03],

which only performs light computations in the deferred pass and adds a separate geometry

pass to compute final shading. This technique is also referred to as Light Pre-pass

Rendering [Eng09]. As deferred lighting has the same basic characteristics as deferred

shading, we do not evaluate this technique in this article.

We use the term Forward Shading to mean when lighting is computed in the fragment

(or sometimes, vertex) shader as part of the rasterization of the scene geometry.

This technique is probably still the most common in real-time applications, such as

games."

"The Tiled

Deferred Shading algorithm is summarized in the following steps.

1. Render the (opaque) geometry into the G-Buffers.

2. Construct a screen space grid, covering the frame buffer, with some fixed tile

size, t = (x, y), e.g. 32 × 32 pixels.

3. For each light: find the screen space extents of the light volume and append the

light ID to each affected grid cell.

4. For each fragment in the frame buffer, with location f = (x, y).

(a) sample the G-Buffers at f.

(b) accumulate light contributions from all lights in tile at ⌊f/t⌋

(c) output total light contributions to frame buffer at f."

"Deferred shading renders the scene to a 'fat' texture format, using a shader that outputs colour, normal, depth, and possible other attributes per fragment. Multi Render Target is required as we are dealing with many outputs which get written into multiple render textures in the same pass. After rendering the scene in this format, the shading (lighting) can be done as a post process. This means that lighting is done in screen space. Adding them requires nothing more than rendering a screenful quad; thus the method allows for an enormous amount of lights without noticable performance loss."

For more info, I've included these links as a starting point.

http://c0de517e.blogspot.com/2011/01/mythbuster-deferred-rendering.html

http://en.wikipedia.org/wiki/Deferred_shading

http://s09.idav.ucdavis.edu/talks/04-JAndersson-ParallelFrostbite-Siggraph09.pdf

http://tower22.blogspot.com/2010/11/from-deferred-to-inferred-part-uno.html

http://aras-p.info/blog/2012/03/02/2012-theory-for-forward-rendering/

http://software.intel.com/en-us/articles/deferred-rendering-for-current-and-future-rendering-pipelines

http://graphicrants.blogspot.com/2012/04/tiled-light-culling.html

http://www.catalinzima.com/tutorials/deferred-rendering-in-xna/creating-the-g-buffer/

http://tomgillen.blogspot.com/2010/07/gbuffer-layout.html

http://www.gamedev.net/page/reference/index.html/_/technical/graphics-programming-and-theory/deferred-rendering-demystified-r2746

http://developer.amd.com/wordpress/media/2012/10/D3DTutorial_DeferredShading.pdf

http://mynameismjp.wordpress.com/2012/03/31/light-indexed-deferred-rendering/

http://diaryofagraphicsprogrammer.blogspot.com/2012/04/tile-based-deferred-and-forward.html

http://diaryofagraphicsprogrammer.blogspot.com/2008/03/light-pre-pass-renderer.html

http://www.gamedev.net/page/community/iotd/index.html/_/tile-based-deferred-shading-via-opencl-r233

http://www.gamedev.net/topic/616936-dx11-tile-based-deferred-shading-in-bf3-discussion/

http://www.pjblewis.com/articles/tile-based-forward-rendering/

http://aras-p.info/blog/2012/03/27/tiled-forward-shading-links/

http://www.beyond3d.com/content/articles/19/1

http://http.developer.nvidia.com/GPUGems3/gpugems3_ch19.html

http://www.cse.chalmers.se/~olaolss/main_frame.php?contents=publications

Discussion

http://www.gamedev.net/topic/612789-tile-based-forward-rendering/

http://www.gamedev.net/topic/622221-revival-of-forward-rending/

http://www.gamedev.net/topic/621787-deferred-lighting-via-compute-shaders/

http://forum.beyond3d.com/showthread.php?t=56557

http://forum.beyond3d.com/showthread.php?t=46371

Deffered rendering in Killzone 3

http://www.guerrilla-games.com/publications/dr_kz2_rsx_dev07.pdf

http://publications.dice.se/attachments/GDC11_DX11inBF3_Public.pdf

http://software.intel.com/sites/default/files/m/d/4/1/d/8/lauritzen_deferred_shading_siggraph_2010.pdf

http://bps10.idav.ucdavis.edu/talks/07-andersson_BendingTheGraphicsPipeline_BPS_SIGGRAPH2010.pdf

http://www.slideshare.net/ozlael/deferred-shading

http://www.cs.cmu.edu/afs/cs/academic/class/15869-f11/www/lectures/12_deferred_shading.pdf

http://developer.amd.com/gpu_assets/AMD_Demos_LeoDemoGDC2012.ppsx

http://bps12.idav.ucdavis.edu/talks/03_lauritzenIntersectingLights_bps2012.pdf

https://developer.nvidia.com/sites/default/files/akamai/gamedev/docs/6800_Leagues_Deferred_Shading.pdf

http://www.insomniacgames.com/tech/articles/0209/files/prelighting.pdf

http://lightindexed-deferredrender.googlecode.com/files/LightIndexedDeferredLighting1.1.pdf

http://www.cse.chalmers.se/~olaolss/papers/tiled_shading_preprint.pdf

http://www.cse.chalmers.se/~olaolss/papers/clustered_shading_preprint.pdf

http://www.cse.chalmers.se/~olaolss/papers/tiled_shading_siggraph_2012.pdf

http://developer.amd.com/wordpress/media/2012/10/D3DTutorial_DeferredShading.pdf