Once again, SIGGRAPH was jam packed with the latest in computer graphics. For the areas we're interested in, this year seemed a little more incremental than last year, probably because last year had big announcements, including Larrabee and OpenGL 3. Nonetheless, we were exposed to plenty of ideas that will help us keep the technology underlying Insight3D on the cutting edge. I'll hit the highlights in this post.
We tend to spend most of our time in SIGGRAPH courses. This year, my favorite one was Advances in Real-Time Rendering. Wolfgang Engel gave a good talk on deferred shading and light pre-pass. Deferred shading showed up just about everywhere at SIGGRAPH this year, and rightfully so, since it is such a cool technique. Currently, Insight3D uses so-called forward shading to allow support for a wide array of video cards.
Out of all the talks in the real-time rendering course, I enjoyed Alex Evan's talk on LittleBIGPlanet the most. Overall, Little Big Planet is a very impressive engine for "1.5 graphics programmers over 3 years." Although they tried to avoid it, they wound up using deferred shading and a MSAA hack to get 2 layer translucency (translucency is difficult in deferred shading since only a single z value is available during shading). I also liked: "give artists too many knobs and they will ignore them." I think the same is true of developers; if your API is overwhelming, developers will avoid it. We've tried to balance flexibility and simplicity with our interfaces for Insight3D.
An Introduction to Shader-Based OpenGL Programming was a more polished version of last year's OpenGL course.
As usual, there was your fair share of interactive ray tracing. This year, there was a trend toward real-time ray tracing APIs, such as NVIDIA's OptiX and Caustic Graphics' CausticGL. As I've briefly mentioned before, we've architected Insight3D so all the OpenGL calls are isolated behind a renderer interface. Although we don't have any immediate plans to do so, it's very likely that we could implement our renderer using a ray tracing API.
Last year, I really enjoyed Beyond Programmable Shading. I was pleasantly surprised to see that the course contained almost all new content this year. Kayvon Fatahalian's overview of GPU architecture was even better than it was last year. He provided insight into things like why branches and shader length affect performance. Deferred shading showed up again when Johan Andersson showed a DX11 Compute Shader implementation in his presentation. Also of interest to the Insight3D team was J.M.P. van Waveren's presentation on id Tech 5 where he provided some details on virtual texturing. Techniques to handle massive amounts of textures are also useful to Insight3D's support for high resolution imagery. Parallelism was a common theme throughout all the engine talks in this course. Insight3D has some parallelism built in; for example, terrain and imagery disk reads occur in separate threads. There are other areas we can add parallelism to in the future; for example, culling and rendering can be done in a producer-consumer style.
One of my favorite parts of SIGGRAPH is browsing all the new computer graphics books. I am excited about Graphics Shaders: Theory and Practice and Game Engine Architecture, both from A K Peters. Although not new this year, I really like Mobile 3D Graphics with OpenGL ES and M3G from Morgan Kaufmann. The chapters on scene management and performance describe many of the techniques we use in Insight3D. Even though the book is targeted at moblie devices, much of the content is applicable to PCs.