SlideShare a Scribd company logo
Deferred Shading

  Shawn Hargreaves
Overview
• Don’t bother with any lighting while drawing scene
  geometry
• Render to a “fat” framebuffer format, using multiple
  rendertargets to store data such as the position and
  normal of each pixel
• Apply lighting as a 2D postprocess, using these
  buffers as input
Comparison: Single Pass Lighting
For each object:
  Render mesh, applying all lights in one shader

• Good for scenes with small numbers of lights (eg.
  outdoor sunlight)
• Difficult to organize if there are many lights
• Easy to overflow shader length limitations
Comparison: Multipass Lighting
For each light:
  For each object affected by the light:
      framebuffer += object * light

• Worst case complexity is num_objects * num_lights
• Sorting by light or by object are mutually exclusive:
  hard to maintain good batching
• Ideally the scene should be split exactly along light
  boundaries, but getting this right for dynamic lights
  can be a lot of CPU work
Deferred Shading
For each object:
  Render to multiple targets

For each light:
  Apply light as a 2D postprocess

• Worst case complexity is num_objects + num_lights
• Perfect batching
• Many small lights are just as cheap as a few big ones
Multiple Render Targets
• Required outputs from the geometry rendering are:
   – Position
   – Normal
   – Material parameters (diffuse color, emissive, specular
     amount, specular power, etc)

• This is not good if your lighting needs many input
  values! (spherical harmonics would be difficult)
Fat Framebuffers
• The obvious rendertarget layout goes something like:
   –   Position              A32B32G32R32F
   –   Normal                A16B16G16R16F
   –   Diffuse color         A8R8G8B8
   –   Material parameters   A8R8G8B8

• This adds up to 256 bits per pixel. At 1024x768, that
  is 24 meg, even without antialiasing!
• Also, current hardware doesn’t support mixing
  different bit depths for multiple rendertargets
Framebuffer Size Optimizations
• Store normals in A2R10G10B10 format
• Material attributes could be palettized, then looked up
  in shader constants or a texture
• No need to store position as a vector3:
   – Each 2D screen pixel corresponds to a ray from the eyepoint
     into the 3D world (think raytracing)
   – You inherently know the 2D position of each screen pixel,
     and you know the camera settings
   – So if you write out the distance along this ray, you can
     reconstruct the original worldspace position
My Framebuffer Choices
• 128 bits per pixel = 12 meg @ 1024x768:
   –   Depth                       R32F
   –   Normal + scattering         A2R10G10B10
   –   Diffuse color + emissive    A8R8G8B8
   –   Other material parameters   A8R8G8B8

• My material parameters are specular intensity,
  specular power, occlusion factor, and shadow
  amount. I store a 2-bit subsurface scattering control
  in the alpha channel of the normal buffer
Depth
Buffer

Specular
Intensity /
Power
Normal
Buffer
Diffuse
Color
Buffer
Deferred
Lighting
Results
How Wasteful…
• One of my 32 bit buffers holds depth values
• But the hardware is already doing this for me!
• It would be nice if there was an efficient way to get
  access to the existing contents of the Z buffer
• Pretty please? ☺
Global Lights
• Things like sunlight and fog affect the entire scene
• Draw them as a fullscreen quad
• Position, normal, color, and material settings are read
  from texture inputs
• Lighting calculation is evaluated in the pixel shader
• Output goes to an intermediate lighting buffer
Local Lights
• These only affect part of the scene
• We only want to render to the affected pixels
• This requires projecting the light volume into
  screenspace. The GPU is very good at that sort of
  thing…
• At author time, build a simple mesh that bounds the
  area affected by the light. At runtime, draw this in 3D
  space, running your lighting shader over each pixel
  that it covers
Convex Light Hulls
• The light bounding
  mesh will have two
  sides, but it is important
  that each pixel only gets
  lit once
• As long as the mesh is
  convex, backface
  culling can take care of
  this
Convex Light Hulls
• The light bounding
  mesh will have two
  sides, but it is important
  that each pixel only gets
  lit once
• As long as the mesh is
  convex, backface
  culling can take care of
  this
Convex Light Hulls #2
• If the camera is inside
  the light volume, draw
  backfaces
Convex Light Hulls #3
• If the light volume
  intersects the far clip
  plane, draw frontfaces
• If the light volume
  intersects both near and
  far clip planes, your
  light is too big!
Volume Optimization
• We only want to shade
  the area where the light
  volume intersects scene
  geometry
• There is no need to
  shade where the
  volume is suspended in
  midair
• Or where it is buried
  beneath the ground
Stencil Light Volumes
• This is exactly the same problem as finding the
  intersection between scene geometry and an
  extruded shadow volume
• The standard stencil buffer solution applies
• But using stencil requires changing renderstate for
  each light, which prevents batching up multiple lights
  into a single draw call
• Using stencil may or may not be a performance win,
  depending on context
Light Volume Z Tests
• A simple Z test can get
  things half-right, without
  the overhead of using
  stencil
• When drawing light
  volume backfaces, use
  D3DCMP_GREATER to
  reject “floating in the air”
  portions of the light
Light Volume Z Tests #2
• If drawing frontfaces, use
  D3DCMP_LESS to reject
  “buried underground”
  light regions
• Which is faster depends
  on the ratio of
  aboveground vs.
  underground pixels: use
  a heuristic to make a
  guess
Alpha Blending
• This is a big problem!
• You could simply not do any lighting on alpha
  blended things, and draw them after the deferred
  shading is complete. The emissive and occlusion
  material controls are useful for crossfading between
  lit and non-lit geometry
• The return of stippling?
• Depth peeling is the ultimate solution, but is
  prohibitively expensive at least for the time being
High Dynamic Range
• You can do deferred shading without HDR, but that
  wouldn’t be so much fun
• Render your scene to multiple 32 bit buffers, then use
  a 64 bit accumulation buffer during the lighting phase
• Unfortunately, current hardware doesn’t support
  additive blending into 64 bit rendertargets
• Workaround: use a pair of HDR buffers, and simulate
  alpha blending in the pixel shader
DIY Alpha Blending
• Initialize buffers A and B to the same contents
• Set buffer A as a shader input, while rendering to B,
  and roll your own blend at the end of the shader
• This only works as long as your geometry doesn’t
  overlap in screenspace
• When things do overlap, you have to copy all
  modified pixels from B back into A, to make sure the
  input and output buffers stay in sync
• This is slow, but not totally impractical as long as you
  sort your lights to minimize screenspace overlaps
HDR
Results
Volumetric Depth Tests
• Neat side effect of having scene depth available as a
  shader input
• Gradually fade out alpha as a polygon approaches
  the Z fail threshold
• No more hard edges where alpha blended particles
  intersect world geometry!
Deferred Shading Advantages
•   Excellent batching
•   Render each triangle exactly once
•   Shade each visible pixel exactly once
•   Easy to add new types of lighting shader
•   Other kinds of postprocessing (blur, heathaze) are
    just special lights, and fit neatly into the existing
    framework
The Dark Side
• Alpha blending is a nightmare!
• Framebuffer bandwidth can easily get out of hand
• Can’t take advantage of hardware multisampling
• Forces a single lighting model across the entire
  scene (everything has to be 100% per-pixel)
• Not a good approach for older hardware
• But will be increasingly attractive in the future…
The End
• Any questions?

More Related Content

PDF
Deferred lighting
PPT
Light prepass
PPTX
Deferred shading
PPTX
565 Alpha Chun-Fu Chao
PDF
Inferred lighting
PDF
Deferred rendering in Dying Light
PDF
The Rendering Technology of 'Lords of the Fallen' (Game Connection Europe 2014)
PPT
A Bit More Deferred Cry Engine3
Deferred lighting
Light prepass
Deferred shading
565 Alpha Chun-Fu Chao
Inferred lighting
Deferred rendering in Dying Light
The Rendering Technology of 'Lords of the Fallen' (Game Connection Europe 2014)
A Bit More Deferred Cry Engine3

What's hot (20)

PDF
Deferred Rendering in Killzone 2
PPTX
Calibrating Lighting and Materials in Far Cry 3
PPTX
Around the World in 80 Shaders
PPTX
The Rendering Technology of Killzone 2
PPT
Crysis Next-Gen Effects (GDC 2008)
PPT
Secrets of CryENGINE 3 Graphics Technology
PDF
Forward+ (EUROGRAPHICS 2012)
PPT
Star Ocean 4 - Flexible Shader Managment and Post-processing
PPT
Destruction Masking in Frostbite 2 using Volume Distance Fields
PPTX
Shiny PC Graphics in Battlefield 3
PPT
Paris Master Class 2011 - 01 Deferred Lighting, MSAA
PDF
Rendering AAA-Quality Characters of Project A1
PPTX
Photogrammetry and Star Wars Battlefront
PDF
Epic_GDC2011_Samaritan
PPTX
GDC 2014 - Deformable Snow Rendering in Batman: Arkham Origins
PPTX
Rendering Technologies from Crysis 3 (GDC 2013)
PDF
CEDEC 2018 - Towards Effortless Photorealism Through Real-Time Raytracing
PPT
Terrain Rendering in Frostbite using Procedural Shader Splatting (Siggraph 2007)
PPTX
GTC 2014 - DirectX 11 Rendering and NVIDIA GameWorks in Batman: Arkham Origins
PDF
The rendering technology of 'lords of the fallen' philip hammer
Deferred Rendering in Killzone 2
Calibrating Lighting and Materials in Far Cry 3
Around the World in 80 Shaders
The Rendering Technology of Killzone 2
Crysis Next-Gen Effects (GDC 2008)
Secrets of CryENGINE 3 Graphics Technology
Forward+ (EUROGRAPHICS 2012)
Star Ocean 4 - Flexible Shader Managment and Post-processing
Destruction Masking in Frostbite 2 using Volume Distance Fields
Shiny PC Graphics in Battlefield 3
Paris Master Class 2011 - 01 Deferred Lighting, MSAA
Rendering AAA-Quality Characters of Project A1
Photogrammetry and Star Wars Battlefront
Epic_GDC2011_Samaritan
GDC 2014 - Deformable Snow Rendering in Batman: Arkham Origins
Rendering Technologies from Crysis 3 (GDC 2013)
CEDEC 2018 - Towards Effortless Photorealism Through Real-Time Raytracing
Terrain Rendering in Frostbite using Procedural Shader Splatting (Siggraph 2007)
GTC 2014 - DirectX 11 Rendering and NVIDIA GameWorks in Batman: Arkham Origins
The rendering technology of 'lords of the fallen' philip hammer
Ad

Viewers also liked (20)

PDF
Deferred Rendering in Killzone 2
PDF
Lighting of Killzone: Shadow Fall
PPTX
DirectX 11 Rendering in Battlefield 3
PDF
Keyword Research for Pay-Per-Click Marketing
PDF
Safety
PPTX
Mitchell
ODP
Nerva Nevada
PDF
PPT
before upload
PPT
كيفية البحث عن اصدقائك في جيران أو دعوتهم الى جيران في حال لم يشتركوا بعد؟
PPTX
Mumbrella - Programmatic For Marketers
DOCX
PPT
PDF
James Van Fleteren
PPT
Ordering Via Twitter
PDF
Citizen Presentation
PDF
Cctv cameras
PDF
Social engagement intro zeethos
PDF
Guide to Planning Your Next Web Project
Deferred Rendering in Killzone 2
Lighting of Killzone: Shadow Fall
DirectX 11 Rendering in Battlefield 3
Keyword Research for Pay-Per-Click Marketing
Safety
Mitchell
Nerva Nevada
before upload
كيفية البحث عن اصدقائك في جيران أو دعوتهم الى جيران في حال لم يشتركوا بعد؟
Mumbrella - Programmatic For Marketers
James Van Fleteren
Ordering Via Twitter
Citizen Presentation
Cctv cameras
Social engagement intro zeethos
Guide to Planning Your Next Web Project
Ad

Similar to Deferred shading (20)

PPTX
Real-time lightmap baking
PDF
Deferred rendering in_leadwerks_engine[1]
PPTX
Develop2012 deferred sanchez_stachowiak
PPT
Advanced Lighting Techniques Dan Baker (Meltdown 2005)
PDF
Smedberg niklas bringing_aaa_graphics
PPTX
Penn graphics
PDF
Rendering Tech of Space Marine
PPT
Advanced Lighting for Interactive Applications
PPTX
A Bizarre Way to do Real-Time Lighting
PPTX
4,000 Adams at 90 Frames Per Second | Yi Fei Boon
PDF
Hill Stephen Rendering Tools Splinter Cell Conviction
PDF
Rendering basics
PDF
[UniteKorea2013] The Unity Rendering Pipeline
PDF
iOS Visual F/X Using GLSL
PDF
Offscreenparticle
PPTX
Summer Games University - Day 3
PDF
Hpg2011 papers kazakov
PPTX
The Rendering Pipeline - Challenges & Next Steps
PPT
Anatomy of a Texture Fetch
PDF
PapersWeLove - Rendering Synthetic Objects Into Real Scenes - Paul Debevec.pdf
Real-time lightmap baking
Deferred rendering in_leadwerks_engine[1]
Develop2012 deferred sanchez_stachowiak
Advanced Lighting Techniques Dan Baker (Meltdown 2005)
Smedberg niklas bringing_aaa_graphics
Penn graphics
Rendering Tech of Space Marine
Advanced Lighting for Interactive Applications
A Bizarre Way to do Real-Time Lighting
4,000 Adams at 90 Frames Per Second | Yi Fei Boon
Hill Stephen Rendering Tools Splinter Cell Conviction
Rendering basics
[UniteKorea2013] The Unity Rendering Pipeline
iOS Visual F/X Using GLSL
Offscreenparticle
Summer Games University - Day 3
Hpg2011 papers kazakov
The Rendering Pipeline - Challenges & Next Steps
Anatomy of a Texture Fetch
PapersWeLove - Rendering Synthetic Objects Into Real Scenes - Paul Debevec.pdf

More from ozlael ozlael (20)

PPTX
Unity & VR (Unity Roadshow 2016)
PDF
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
PPTX
Optimizing mobile applications - Ian Dundore, Mark Harkness
PDF
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
PDF
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
PDF
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
PDF
Infinity Blade and beyond
PDF
스티브잡스처럼 프레젠테이션하기
PDF
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
PDF
Introduce coco2dx with cookingstar
PDF
Deferred rendering case study
PDF
Kgc make stereo game on pc
PPTX
mssao presentation
PDF
Modern gpu optimize blog
PDF
Modern gpu optimize
PDF
Bickerstaff benson making3d games on the playstation3
PDF
DOF Depth of Field
PDF
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
PDF
Unity & VR (Unity Roadshow 2016)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
Optimizing mobile applications - Ian Dundore, Mark Harkness
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
Infinity Blade and beyond
스티브잡스처럼 프레젠테이션하기
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
Introduce coco2dx with cookingstar
Deferred rendering case study
Kgc make stereo game on pc
mssao presentation
Modern gpu optimize blog
Modern gpu optimize
Bickerstaff benson making3d games on the playstation3
DOF Depth of Field
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)

Recently uploaded (20)

PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPT
Teaching material agriculture food technology
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Big Data Technologies - Introduction.pptx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Advanced IT Governance
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Machine learning based COVID-19 study performance prediction
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Understanding_Digital_Forensics_Presentation.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
MYSQL Presentation for SQL database connectivity
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Teaching material agriculture food technology
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Reach Out and Touch Someone: Haptics and Empathic Computing
Big Data Technologies - Introduction.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Advanced IT Governance
Mobile App Security Testing_ A Comprehensive Guide.pdf
Approach and Philosophy of On baking technology
Machine learning based COVID-19 study performance prediction
Diabetes mellitus diagnosis method based random forest with bat algorithm
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows

Deferred shading

  • 1. Deferred Shading Shawn Hargreaves
  • 2. Overview • Don’t bother with any lighting while drawing scene geometry • Render to a “fat” framebuffer format, using multiple rendertargets to store data such as the position and normal of each pixel • Apply lighting as a 2D postprocess, using these buffers as input
  • 3. Comparison: Single Pass Lighting For each object: Render mesh, applying all lights in one shader • Good for scenes with small numbers of lights (eg. outdoor sunlight) • Difficult to organize if there are many lights • Easy to overflow shader length limitations
  • 4. Comparison: Multipass Lighting For each light: For each object affected by the light: framebuffer += object * light • Worst case complexity is num_objects * num_lights • Sorting by light or by object are mutually exclusive: hard to maintain good batching • Ideally the scene should be split exactly along light boundaries, but getting this right for dynamic lights can be a lot of CPU work
  • 5. Deferred Shading For each object: Render to multiple targets For each light: Apply light as a 2D postprocess • Worst case complexity is num_objects + num_lights • Perfect batching • Many small lights are just as cheap as a few big ones
  • 6. Multiple Render Targets • Required outputs from the geometry rendering are: – Position – Normal – Material parameters (diffuse color, emissive, specular amount, specular power, etc) • This is not good if your lighting needs many input values! (spherical harmonics would be difficult)
  • 7. Fat Framebuffers • The obvious rendertarget layout goes something like: – Position A32B32G32R32F – Normal A16B16G16R16F – Diffuse color A8R8G8B8 – Material parameters A8R8G8B8 • This adds up to 256 bits per pixel. At 1024x768, that is 24 meg, even without antialiasing! • Also, current hardware doesn’t support mixing different bit depths for multiple rendertargets
  • 8. Framebuffer Size Optimizations • Store normals in A2R10G10B10 format • Material attributes could be palettized, then looked up in shader constants or a texture • No need to store position as a vector3: – Each 2D screen pixel corresponds to a ray from the eyepoint into the 3D world (think raytracing) – You inherently know the 2D position of each screen pixel, and you know the camera settings – So if you write out the distance along this ray, you can reconstruct the original worldspace position
  • 9. My Framebuffer Choices • 128 bits per pixel = 12 meg @ 1024x768: – Depth R32F – Normal + scattering A2R10G10B10 – Diffuse color + emissive A8R8G8B8 – Other material parameters A8R8G8B8 • My material parameters are specular intensity, specular power, occlusion factor, and shadow amount. I store a 2-bit subsurface scattering control in the alpha channel of the normal buffer
  • 14. How Wasteful… • One of my 32 bit buffers holds depth values • But the hardware is already doing this for me! • It would be nice if there was an efficient way to get access to the existing contents of the Z buffer • Pretty please? ☺
  • 15. Global Lights • Things like sunlight and fog affect the entire scene • Draw them as a fullscreen quad • Position, normal, color, and material settings are read from texture inputs • Lighting calculation is evaluated in the pixel shader • Output goes to an intermediate lighting buffer
  • 16. Local Lights • These only affect part of the scene • We only want to render to the affected pixels • This requires projecting the light volume into screenspace. The GPU is very good at that sort of thing… • At author time, build a simple mesh that bounds the area affected by the light. At runtime, draw this in 3D space, running your lighting shader over each pixel that it covers
  • 17. Convex Light Hulls • The light bounding mesh will have two sides, but it is important that each pixel only gets lit once • As long as the mesh is convex, backface culling can take care of this
  • 18. Convex Light Hulls • The light bounding mesh will have two sides, but it is important that each pixel only gets lit once • As long as the mesh is convex, backface culling can take care of this
  • 19. Convex Light Hulls #2 • If the camera is inside the light volume, draw backfaces
  • 20. Convex Light Hulls #3 • If the light volume intersects the far clip plane, draw frontfaces • If the light volume intersects both near and far clip planes, your light is too big!
  • 21. Volume Optimization • We only want to shade the area where the light volume intersects scene geometry • There is no need to shade where the volume is suspended in midair • Or where it is buried beneath the ground
  • 22. Stencil Light Volumes • This is exactly the same problem as finding the intersection between scene geometry and an extruded shadow volume • The standard stencil buffer solution applies • But using stencil requires changing renderstate for each light, which prevents batching up multiple lights into a single draw call • Using stencil may or may not be a performance win, depending on context
  • 23. Light Volume Z Tests • A simple Z test can get things half-right, without the overhead of using stencil • When drawing light volume backfaces, use D3DCMP_GREATER to reject “floating in the air” portions of the light
  • 24. Light Volume Z Tests #2 • If drawing frontfaces, use D3DCMP_LESS to reject “buried underground” light regions • Which is faster depends on the ratio of aboveground vs. underground pixels: use a heuristic to make a guess
  • 25. Alpha Blending • This is a big problem! • You could simply not do any lighting on alpha blended things, and draw them after the deferred shading is complete. The emissive and occlusion material controls are useful for crossfading between lit and non-lit geometry • The return of stippling? • Depth peeling is the ultimate solution, but is prohibitively expensive at least for the time being
  • 26. High Dynamic Range • You can do deferred shading without HDR, but that wouldn’t be so much fun • Render your scene to multiple 32 bit buffers, then use a 64 bit accumulation buffer during the lighting phase • Unfortunately, current hardware doesn’t support additive blending into 64 bit rendertargets • Workaround: use a pair of HDR buffers, and simulate alpha blending in the pixel shader
  • 27. DIY Alpha Blending • Initialize buffers A and B to the same contents • Set buffer A as a shader input, while rendering to B, and roll your own blend at the end of the shader • This only works as long as your geometry doesn’t overlap in screenspace • When things do overlap, you have to copy all modified pixels from B back into A, to make sure the input and output buffers stay in sync • This is slow, but not totally impractical as long as you sort your lights to minimize screenspace overlaps
  • 29. Volumetric Depth Tests • Neat side effect of having scene depth available as a shader input • Gradually fade out alpha as a polygon approaches the Z fail threshold • No more hard edges where alpha blended particles intersect world geometry!
  • 30. Deferred Shading Advantages • Excellent batching • Render each triangle exactly once • Shade each visible pixel exactly once • Easy to add new types of lighting shader • Other kinds of postprocessing (blur, heathaze) are just special lights, and fit neatly into the existing framework
  • 31. The Dark Side • Alpha blending is a nightmare! • Framebuffer bandwidth can easily get out of hand • Can’t take advantage of hardware multisampling • Forces a single lighting model across the entire scene (everything has to be 100% per-pixel) • Not a good approach for older hardware • But will be increasingly attractive in the future…
  • 32. The End • Any questions?