Deferred Shading
Up until now
we have been performing lighting calculations in our games using either the
vertex or fragment shaders in the initial pass and then perform post processing
effects; this is called forward shading. In forward shading, these properties
are used immediately in the fragment shader to perform lighting calculations to
output a single render target.
Forward Shading |
The other
technique is deferred shading. As it name implies, it post-pones the lighting to
a later stage. From the fragment shader, the attributes used for lighting are
passed to multiple render targets (MRT) of color, normal, and depth. These MRT
make up what is known as the G-buffer or geometry buffer. Lighting is
calculated as a post processing effect by sampling the render targets as
textures.
Deferred Shading |
In forward shading,
each fragment is shaded as it goes and requires additional calculations for
each light; the number of calculations needed, is determined by the number of
fragments * number of lights.
As fragments
can include those that are behind others, they can be overlapped. This creates inefficiencies
if the fragment is not affected by a light or is overlapped later on when the
final pixel is calculated; essentially all that effort spent for that fragment
becomes wasted.
What is important
to note in deferred shading is that irrelevant fragments have been culled
before passing on to the G-buffer. The number of calculations needed are
significantly less; number of pixels * number of lights. As you can see, the
complexity of deferred lighting is independent and unaffected by the number of
objects in a scene, where as in forward shading, the more objects there are,
the more fragments and the slower the performance.
Additionally,
with deferred shading, lighting can be optimized by determining a lights region
of influence by using the available world space. Assuming the region of a point
light as a sphere, a spot light as a cone and a directional light as a box, we
can determine which pixels are affected and perform shading only on the pixels in
the region of influence of a specific light. With this technique, many more
lights can be rendered compared to that of forward shading. This is one of the
prime advantages of using deferred lighting, to create scenes with many lights.
A
disadvantage of deferred shading is its memory cost in storing the G-Buffers. The
overhead of storing MRT can be a problem on some hardware, but as technology
improves, this is becoming less and less of a problem. Antialiasing and
transparency are also a problematic, they require a different approach. The
techniques employed to overcome antialiasing and transparencies with deferred shading
are inefficient and as such they may actually lower performance versus the
forward shading approach.
Some
advantages and disadvantages of deferred shading
- Faster more efficient lighting calculations
- More lights can be added
- Lighting information can be accessed by other shaders
- No additional geometry passes needed
Disadvantages
of deferred shading
- Memory cost
- Antialiasing difficulty
- Transparency done separately
- Can’t be done with old hardware
Example of MRT used for deferred shading |
Akenine-Möller, T.,
Haines, E., & Hoffman, N. (2008). Real-time
rendering (3rd ed.). AK
Peters. Retrieved from
http://common.books24x7.com.uproxy.library.dc-uoit.ca/toc.aspx?bookid=31068.
Gunnarsson, E.,
Olausson, M. (2011). Deferred Shading[Seminar Notes]. Retrieved from http://www.cse.chalmers.se/edu/year/2011/course/TDA361/Advanced%20Computer%20Graphics/DeferredRenderingPresentation.pdf
Hogue, A. (2014,
March 7). Deferred Shading [PowerPoint slides]. Retrieved from UOIT College
Blackboard site: https://uoit.blackboard.com/
Nguyuen, H. (2008).
Chapter 19. Deferred Shading in Tabula Rasa. CPU
Gems 3. Retrieved March 9,
2014, from http://http.developer.nvidia.com/GPUGems3/gpugems3_ch19.html
Valient, M. (2007).
Deferred Rendering in Killzone 2. Guerilla Games. Retrieved from
http://www.guerrilla-games.com/presentations/Develop07_Valient_DeferredRenderingInKillzone2.pdf
No comments:
Post a Comment