I went to my first Microsoft Gamefest on Monday and Tuesday of this week and met up again with a few of the other DirectX MVPs. I was mostly interested in the graphics track, but the XNA track was also of interest to me. The sessions I attended were:
- Xbox 360 GPU Performance Update
- Pre-Mortem: Torpex Games’ Schizoid
- Picture Perfect: Gamma through the rendering pipeline
- Mapping the Dark Corners: Creating a flexible Framework for Dynamic Shadowing
- GPU Data Structures and Advanced Lighting: State-of-the-Art Techniques from Microsoft Research
- Graphics Futures: Direct3D 11 and Beyond
- Developing 3D Games on the XNA Framework Using TorqueX
- Advanced Debugging in Managed Code
- Windows Vista Graphcis Development Drilldown: Direct3D 10 and 10.1
- Windows to Reality: Getting the Most out of Direct3D 10 Graphics in Your Games
- GPU Font/Vector Rendering and Approximating Catmull-Clark Subdivision Surfaces with Bicubic Patches
- Performance Considerations for Graphics on Windows
I’ll be posting blog entries on these sessions as I get my notes together.
Xbox 360 GPU Performance Update
by Matt Lee
XNA Developer Connection
Oops, I stumbled into an Xbox 360 specific presentation. Since I don’t have an XDK, most of the low-level performance optimization stuff just doesn’t apply to Direct3D on Windows or and isn’t exposed on the Xbox 360 with XNA Game Studio Express. There were some general observations that are useful on either platform.
For complex scenes, deferred shading is popular. With deferred shading, you use multiple render targets to render the inputs to the lighting equation. For instance, in different buffers you render the position, normal and material properties of an object and then in a second pass read those inputs from a pixel shader to perform the final lighting computation as a post-process. Google for “deferred shading” if you’re not familiar with the technique. We used this technique on SGI machines in the mid 90s when I worked on 3DPaint at Evans & Sutherland/Parametric Technology.
There are some common pain points:
- Lack of mipmaps or abuse of mipmap bias; consider anisotropic filtering for more detail
- Uncompressed textures — try using compressed formats if possible
- Volume textures — try using alternate means of expressing the information
- Bad access patterns — too many textures or sparse sampling.
Use PIX to analyze your frames and get an idea of the access patterns to your data. The PIX on the Xbox 360 is much fancier and gives you much more information than the Windows version, so if you’re blessed with an XDK, then you’ve got much better performance tuning resources in PIX than if you are using the PIX in the DirectX SDK on Windows.