I spent Monday afternoon learning Direct X 11 techniques. It was a bit more involved. The afternoon started with an interesting sessions on Direct Compute (using the programmable GPU to do things other than rendering).

Next came so of the enhancements added to the PC version of the new Tomb Raider game, including using tessellation on the GPU to add more triangles to lower resolution models and a fair bit on how Lara’s hair model (called TressFX) works. This seemed fairly comprehensive, starting with simulation of how wind affects the hair, as well as other attributes of the hair such as wetness, then how the hair is lit using anisotropic lighting and self shadowing techniques, and finally how anti-aliasing is applied to the hair, which due to its geometry may be prone to anti-aliasing artefacts.

This video also featured in the presentation.

After Tomb Raider came a session on how Crysis 3 is rendered using a Hybrid method that combines both deferred and forward rendering. Basically, forward rendering is the normal method of rendering using something similar to the traditional rendering pipeline. Deferred rendering is a long established technique in which sets of results for a scene are calculated and stored for use in the rendering calculation later on, hence the name deferred rendering. As with many techniques both have advantages and disadvantages. Crysis 3 uses a hybrid method in an attempt to get the best of both worlds by sorting the geometry into what would be best rendered using one method and what would be best rendered using the other method. The Crysis 3 session also included some great tall grass effects together with an explanation of how they were created.

Next came a description of how to light a scene that has thousands of lights, comparing forward+ rendering and deferred rendering to see which one wins out. I was getting pretty tired by this point. Trying to absorb technical talks really takes it out of you, so forgive the vague description. Forward+ rendering used direct compute to implement a tile based approach to split the scene into small, asymmetric view fustrums, finding out the minimum and maximum pixel depths for each fustrum and using that information to discard as many lights as possible from the rendering calculation. The session then went on to cover shadow casting lights, transparency and how to deal with artefacts of the method.

The final session addressed ways to use deferred contexts to store DirectX Api calls so that you can feed the graphics card commands efficiently without hitting bottlenecks.

Busy day. Bring on Tuesday!