[At GDC 2011, Maxis and Intel gave a presentation on optimizing Maxis’ Darkspore™ for processor graphics. This Intel-sponsored Gamasutra article elaborates on that presentation and explores optimizations around Maxis’ deferred-rendering engine. This includes how several bottlenecks were identified and resolved.
David Lee Swenson, the primary author and Lead Engineer on Darkspore, is a 20-year veteran in the game industry. And amazingly enough, he still communicates well with the outside world as a solid speaker and author. He’s joined in this article by my peer, Omar Rodriguez. Dude has amazing hair. Enjoy!
- Orion Granatir]
Released in early 2011, the 2nd Generation Intel® Core™ processors (codenamed "Sandy Bridge") have fundamentally changed the PC gaming landscape, with processor and graphics merged into a single piece of silicon. The tighter integration of graphics into the processor has revolutionized gaming performance and made your favorite games run and look great on mainstream machines. As a developer, the market for your games has opened up immensely.
Figure 1: PC Volumes Dwarf Consoles through 2014
Targeting the mainstream is possible and Intel provides you the tools to help achieve success in this market. Intel® Graphics Performance Analyzers (GPA) 4.0 was released at GDC 2011 with full support for this next generation of processors. Game developers including the Darkspore™ team at Maxis have taken full advantage of Intel® GPA 4.0 features to make sure their game fully utilizes the new processor graphics.
Darkspore is best described as an online action RPG where you control a squad of 3 heroes to fight the Darkspore, an evil infestation of creatures. The game includes a version of the award winning Spore Editor where you can fully customize not just basic features of the characters like color, height, textures, but vertices in the characters’ meshes. With Darkspore, Maxis is targeting mainstream to high end graphics hardware. At the Game Developers Conference 2011, David Lee Swenson, the Lead Engineer on Darkspore, presented how he used Intel® GPA 4.0 to help achieve this goal.
For Darkspore, Maxis implemented a variation of the light pre-pass renderer described by [Engel 2008]. One main advantage of using a light pre-pass renderer is to decouple lighting from the scene geometry. In a forward renderer, lighting is computed at the time the object is drawn. In a light pre-pass renderer, light is accumulated in an off screen buffer and either applied in a post pass or sampled in a final pass per object. The Darkspore renderer is composed of three main passes: deferred pass, lighting pass, and final pass. The deferred pass saves the material data for opaque objects in the scene, the light pass saves all lighting calculations into a light buffer, and the final pass uses the results of the previous passes to create the final frame. The deferred pass uses 2 render targets. The first render target is composed of world normals with a gloss term: Normals (RGB) + Gloss (A).
Figure 2: First render target = world space normals (RGB) + gloss (A)
Depth ([R*256]G), Specular Power (B), and a Toon ID (A) for a toon-style character outline are rendered to the second target of the deferred pass.
Figure 3: Second render target = Depth ([R*256]G) + Specular Power (B) + ToonID (A)
Following the deferred pass, there’s a lighting pass that renders up to 6 parallel lights as well as cloud shadows and the main shadow. Then, each point or spot light are rendered with gobos and/or shadows to a 16F light buffer: Diffuse (RGB) + Specular (A).
Figure 4: Light buffer = Diffuse (RGB) + Specular (A)
During the final pass, each object is rendered again sampling the light buffer. Values for areas intended to glow are written to a second target. Then, the glow target is downsampled and blurred back together with particles and post-processing effects like fog, distortion, and the death effect.
Figure 5: Final pass = Color + Glow + Post FX + Particles + UI
At this point all it needs is the UI and the final frame is complete.
Figure 6: The final frame