Today was already the last GDC day! The sessions started a bit later, so we could catch some extra sleep. The sessions turned out to be even more interesting than yesterday!
Halo: Reach Effects Tech
Chris Tchou explained the technique they used at Bungie for fast colliding particles. Everything must be done on the GPU to keep the simulation fast. However, dealing with physics in the graphics pipeline is very challenging. Their approach is surprisingly easy, but I had never heard of it before. They calculate the physics for the particles using the information available in screenspace: the normals and depth of the environment. This will result in an incorrect particle simulation behind the player, but that won’t be visible anyway. In short, the path of the particle is checked against the information of the depth buffer. If there is a collision, the bounce is calculated based on the normal-buffer information. This approach seems to me like the perfect solution for colliding particles: No unnecessary work is done, it is fast and it looks very good.
They also explained how they implemented the technique for the shields in Halo: Reach. The vertices are pushed out along the normal to create the hull. The distance to the background is calculated using the depth buffer. When the difference of the current depth and the depth from the depth buffer is small, the hull is in front of the shielded object. In that case, the shield should be more translucent to show the shielded object. The outer edges of the hull are faded to give the shield a smooth look. I really like making such graphical effects myself, so it was cool to see their approach.
To-The-Metal CPU Optimization
This session was sponsored by Intel and introduced their new AVX instructions. Optimizing CPU code in general was also discussed. I had only learned about the internals of a CPU on a very basic level, so this session was very useful to provide me with some more insight in what actually happens. I grew a bit of intuition on how to do hardcore optimization. I will probably not need to use this in the near future. The compiler already optimizes code up to a certain degree. And because optimizations can obfuscate the code quite a bit, I don’t think code should be changed for optimization when it is not necessary. I think readability is much more important than optimization in most cases. However, if I would decide to make a software renderer (or raytracer), this hardcore optimizing will be necessary.
Directionally Localized Anti-Aliasing
A brand new technique for anti-aliasing was presented by Dmitry Andreev. There have been quite some recent developments in the area of anti-aliasing techniques, primarily focusing on MorphoLogical Anti-Aliasing (MLAA). But MLAA is not perfect. MLAA is hard to implement efficiently on the GPU, and the result changes when the camera moves which gives an uneasy image. The approach of DLAA is quite straightforward: edges are blurred along their edge direction. The blurring is done exclusively on the edge pixels and uses a large kernel. The result is a very good looking anti-aliasing!
The algorithm is split in a horizontal and vertical step. First, the edge pixels are detected using a kernel. The detected edges are blurred to filter out insignificant edges. To filter out edges from very high frequency particles, the pixels which show up as edges in both the horizontal and vertical edge detection can be excluded. On the resulting edge-pixels, a large smoothing kernel performs the blurring and the result is blended back onto the original image. There are some other optimizations possible, which brings back the execution time to 2.2 ms on an Xbox 360 and 1.6 ms on a PS3 using 5 SPU’s. That’s still a bit slow, but it might be faster than other techniques with a similar quality. Unfortunately, no in-depth comparison to other anti-aliasing techniques was showed.
Subsurface Scattering
Subsurface scattering is difficult to render quickly in computer graphics. It is the effect that light passes through the material partially and diffusely (like the red glow shining through your hand when an intense light source is at the opposite side). The offered solution approximates this effect, ignoring the real physics behind subsurface scattering. Basically, when a light source shines on an object from the back, the lighting shining on the back is calculated. Two things have to be accounted for in this lighting: the thickness of the object and the distortion of the light. The distortion is handled by changing the inverted normal slightly. The thickness of the object is pre-calculated (and stored in the G-buffer). This is done by using a sort of inverted ambient occlusion: The distance inside the model to other edges of the model is calculated and averaged, giving a sort of average thickness at a specific position on the model. This translucency map can be edited to add for example veins in the material, faking internal material structure. It can also be colored, which could fake for example the red interior color of a human hand. The pre-calculated translucency filters light visible from a back-light. The result of thisĀ technique looked astonishing, especially when combined with global illumination. The reported execution time was 0.6ms on an Xbox 360, 1.0 ms on a PS3, and 0.03 ms using Compute Shaders in DirectX 11 (What?! This because of their other patching technique for deferred shading). The main disadvantages of this technique are that concavities are ignored and morphing objects are not supported because the translucency map is pre-calculated.
The end
That was the end of the GDC. The last two sessions of the GDC (DLAA and subsurface scattering) were great, and exactly the type of sessions I had expected before attending the GDC. Some sessions were in another form where the developers just told the way they approached things (so not really new stuff, just experience-sharing).
When looking back at the GDC, the experience was inexpressibly awesome. I have never learned some much in so little time. But learning cool new stuff was not the only benefit. I have also gained quite a few valuable connections. I will have contact with at least 4 of them after the GDC!
For the last day, we’ll probably do some more shopping and cruising around San Francisco, but I will not post that here. The previous paragraph is the perfect closing of my GDC-report, so I will not ruin that with a new post. For now, we are going to enjoy the tablets we got yesterday :)
I like this post| 6 people like this post.




















