Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
THE DEVIL IS IN THE DETAILS
Initial Requirements










Anatomy of a Frame
Frame Cost










Data Structure for Lighting & Shading









Preparing Clustered Structure




 𝑍𝑆𝑙𝑖𝑐𝑒 = 𝑁𝑒𝑎𝑟𝑧 × (
𝐹𝑎𝑟𝑧
𝑁𝑒𝑎𝑟𝑧
)
𝑠𝑙𝑖𝑐𝑒
𝑛𝑢𝑚 𝑠𝑙𝑖𝑐𝑒𝑠




Preparing Clustered Structure






//Pseudo-code - 1 job per depth slice ( if any item )
for ( y = MinY; y < MaxY; ...
Preparing Clustered Structure













Preparing Clustered Structure
Preparing Clustered Structure
Detailing the World









Detailing the World












Detailing the World

 𝑒0 𝑒1


const float4 albedo = tex2Dgrad( decalsAtlas, uv.xy * scaleBias.xy + scaleBias.zw, uvDDX...
Detailing the World










Detailing the World
Detailing the World
Detailing the World
Detailing the World
Detailing the World
Detailing the World
Lighting










Lighting
//Pseudocode
ComputeLighting( inputs, outputs ) {
Read & Pack base textures
for each decal in cell {
early out fr...
Lighting












Lighting










Lighting


Lighting

 




 



Transparents






Particle Lighting










Decoupled Particle Lighting










Decoupled Particle Lighting
//Pseudocode – Particle shading becomes something like this
Particles( inputs, outputs ) {
…
c...
Decoupled Particle Lighting









Particle Light Atlas
Decoupled Particle Lighting

Post-Process
Optimizing Data Fetching ( GCN )








Clustered Lighting Access Patterns
Clustered Lighting Access Patterns
Clustered Lighting Access Patterns
Clustered Lighting Access Patterns
Analyzing the Data







Leveraging Access Patterns










Thread X A B D
Thread Y B C E
Thread Z A C D E
Scalar A B C D E
Special Paths











Dynamic Resolution Scaling









Async Post Processing









GCN Wave Limits Tuning







GCN Register Usage









What’s next ?







Special Thanks








We are Hiring !
Thank you





References














Bonus Slides
Lighting















Deferred Passes








Siggraph2016 - The Devil is in the Details: idTech 666
Siggraph2016 - The Devil is in the Details: idTech 666
Siggraph2016 - The Devil is in the Details: idTech 666
Siggraph2016 - The Devil is in the Details: idTech 666
Siggraph2016 - The Devil is in the Details: idTech 666
Siggraph2016 - The Devil is in the Details: idTech 666
Upcoming SlideShare
Loading in …5
×

Siggraph2016 - The Devil is in the Details: idTech 666

2,684 views

Published on

A behind-the-scenes look into the latest renderer technology powering the critically acclaimed DOOM. The lecture will cover how technology was designed for balancing a good visual quality and performance ratio. Numerous topics will be covered, among them details about the lighting solution, techniques for decoupling costs frequency and GCN specific approaches.

Published in: Technology
  • Be the first to comment

Siggraph2016 - The Devil is in the Details: idTech 666

  1. 1. THE DEVIL IS IN THE DETAILS
  2. 2. Initial Requirements          
  3. 3. Anatomy of a Frame Frame Cost          
  4. 4. Data Structure for Lighting & Shading         
  5. 5. Preparing Clustered Structure      𝑍𝑆𝑙𝑖𝑐𝑒 = 𝑁𝑒𝑎𝑟𝑧 × ( 𝐹𝑎𝑟𝑧 𝑁𝑒𝑎𝑟𝑧 ) 𝑠𝑙𝑖𝑐𝑒 𝑛𝑢𝑚 𝑠𝑙𝑖𝑐𝑒𝑠    
  6. 6. Preparing Clustered Structure       //Pseudo-code - 1 job per depth slice ( if any item ) for ( y = MinY; y < MaxY; ++y ) { for ( x = MinX; x < MaxX; ++x ) { intersects = N planes vs cell AABB if ( intersects ) { Register item } } }
  7. 7. Preparing Clustered Structure             
  8. 8. Preparing Clustered Structure
  9. 9. Preparing Clustered Structure
  10. 10. Detailing the World         
  11. 11. Detailing the World            
  12. 12. Detailing the World   𝑒0 𝑒1   const float4 albedo = tex2Dgrad( decalsAtlas, uv.xy * scaleBias.xy + scaleBias.zw, uvDDX, uvDDY ); 𝑒 𝑒 𝑒 𝑒0 𝑥 𝑒1 𝑥 2 𝑥 𝑥 𝑒0 𝑦 𝑒1 𝑦 2 𝑦 𝑦 𝑒0 𝑧 𝑒1 𝑧 2 𝑧 𝑧 0 0 0 1 0.5 𝑠𝑖𝑧𝑒𝑋 0 0 0.5 0 0.5 𝑠𝑖𝑧𝑒𝑌 0 0.5 0 0 0.5 𝑠𝑖𝑧𝑒𝑍 0.5 0 0 0 1 ∙
  13. 13. Detailing the World          
  14. 14. Detailing the World
  15. 15. Detailing the World
  16. 16. Detailing the World
  17. 17. Detailing the World
  18. 18. Detailing the World
  19. 19. Detailing the World
  20. 20. Lighting          
  21. 21. Lighting //Pseudocode ComputeLighting( inputs, outputs ) { Read & Pack base textures for each decal in cell { early out fragment check Read textures Blend results } for each light in cell { early out fragment check Compute BRDF / Apply Shadows Accumulate lighting } }
  22. 22. Lighting            
  23. 23. Lighting          
  24. 24. Lighting  
  25. 25. Lighting            
  26. 26. Transparents      
  27. 27. Particle Lighting          
  28. 28. Decoupled Particle Lighting          
  29. 29. Decoupled Particle Lighting //Pseudocode – Particle shading becomes something like this Particles( inputs, outputs ) { … const float3 lighting = tex2D( particleAtlas, inputs.texcoord ); result = lighting * inputs.albedo; … }
  30. 30. Decoupled Particle Lighting          Particle Light Atlas
  31. 31. Decoupled Particle Lighting 
  32. 32. Post-Process
  33. 33. Optimizing Data Fetching ( GCN )        
  34. 34. Clustered Lighting Access Patterns
  35. 35. Clustered Lighting Access Patterns
  36. 36. Clustered Lighting Access Patterns
  37. 37. Clustered Lighting Access Patterns
  38. 38. Analyzing the Data       
  39. 39. Leveraging Access Patterns           Thread X A B D Thread Y B C E Thread Z A C D E Scalar A B C D E
  40. 40. Special Paths           
  41. 41. Dynamic Resolution Scaling         
  42. 42. Async Post Processing         
  43. 43. GCN Wave Limits Tuning       
  44. 44. GCN Register Usage         
  45. 45. What’s next ?       
  46. 46. Special Thanks      
  47. 47.   We are Hiring !
  48. 48. Thank you     
  49. 49. References              
  50. 50. Bonus Slides
  51. 51. Lighting               
  52. 52. Deferred Passes        

×