Reverse engineering the rendering of a frame in Deus Ex: Human Revolution

Earlier this year, Adrian Courrèges wrote an article detailing his findings while reverse engineering the rendering pipeline in Deus Ex: Human Revolution.

Starting from a given frame, he illustrates the different stages in the rendering: creation of the G buffer, shadow map, ambient occlusion, light prepass, how opaque and transparent objects are treated differently, volumetric lights, bloom effect in LDR, anti-aliasing and color correction, the depth of field, and finally the object interaction visual feedback.

Here are a few screenshots stolen from his article:

Normal map

The light pre-pass

Final image

Adrian since then posted a new article, this time breaking down the rendering of a frame in Supreme Commander. The comments also include insights from the programmer then in charge of the rendering, Jon Mavor.

Epsilon, a 64k intro by Mercury

Last weekend the demogroup Mercury released at Tokyo Demo Fest the final version of their invitation to the upcoming Revision party: a 64kB demo called Epsilon. While the complexity of the scenes is very limited, the rendering, seemingly a raymarching shader, features a couple of very noteworthy real-time effects including ambient occlusion, reflexion (up to two iterations it seems) and refraction, caustics, and an hexagonal bokeh depth of field.

Draft on depth of field resources

What is mostly in my thoughts recently when it comes to rendering is real time depth of field effect. I intend to read state of the art material on the matter and hopefully post a well formed summary, just like I did for physically based rendering, but until then I thought I would list a few resources already.

That’s all for now. ;-)

Update: after further documentation, both Kawase’s  and DICE’s techniques indeed rely on the idea of creating an hexagon shaped bokeh by decomposing it into three skewed boxes, but while Kawase’s approach uses seven passes, DICE’s one takes it down to two passes thanks to some clever use of multirender targets.

Also, I forgot to mention a second article of Matt Pettineo, where he suggests a combination of techniques to achieve a better result.

Show your difference

An example of actual bokeh in a photo of mine