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://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://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://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
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