Cool Link Stash, February 2013


Simon Yeoung posted a nice article on his blog on his implementation of voxel cone tracing.

NVIDIA posted a great article on their site on why to use pre-multiplied alpha called Alpha Blending: To Pre or Not To Pre. A longer, more in-depth treatise of the same subject was posted in 2006 by Tom Forsyth, a worthwhile read.

Steve McAuley has a short post on his blog that builds on a previous post he did on making the often used wrapped diffuse model energy-conserving. In this new post, he extends the formula to a generic wrapped diffuse model where an arbitrary power is used to soften the look a bit. His post is called Extension to Energy-Conserving Wrapped Diffuse.

Here's a nice blog post comparing NVIDIA's FX Composer to Unity when it comes to quick shader prototyping.


Google released a C++ library called cpp-btree, which provides an STL-style implementation of B-tree data structures.

Another one of Herb Sutter's talks at C++ and Beyond 2012 got released on Channel 9. atomic Weapons: The C++ Memory Model and Modern Hardware is a two-part talk on the new C++11 memory model. This is a must-watch if you're doing any work on lock free algorithms. Great, in-depth talk.


Decoda is a free and open source IDE for Lua with an integrated debugger. You can check out the source code on the Decoda GitHub repository.

After having done code reviews of the various open sourced id Software code bases, Fabien Sanglard is back with a review of the code of Duke Nukem 3D.

Cool Link Stash, January 2013


There's a good video talk up on Channel 9 from the C++ and Beyond 2012 conference called You don't know blank and blank on the different meaning of const and mutable in C++11.
In summary, the const keyword in C++11 no longer means logical const as it did in C++98. In C++11 const has the sense of bitwise const (or at least internally synchronized to make a function or const-declared object thread-safe).
This follows from the fact that the C++11 standard library guarantees that const means thread-safe for its own types and all operations it calls on your types.
Thread-safe means bitwise const (i.e. no modifications) or internally synchronized. Copy constructors need to be thread-safe in C++11!
It follows that any object that is declared const is fully thread-safe, i.e. truly immutable or internally synchronized.
Note that it's already undefined behavior in C++98 to cast away const from an object declared const!
The new meaning of mutable in C++11 is also thread-safe. A mutable-declared mutex, for example, is now basically a thread-safe object (this means that even its non-const member functions are thread-safe).

Another good Channel 9 talk from C++ and Beyond 2012 that got posted recently is Herb Sutter's talk called C++ Concurrency.


Sébastien Lagarde has an interesting (and still ongoing) blog post series on rendering real-time water.

In the SIGGRAPH brief A 2.5D Culling for Forward+ Takahiro Harada presents a new light culling approach for Forward+ (aka Tile-Based Forward Rendering). The idea is to basically split the frustum for a tile along the depth axis into 32 buckets and then create a bit mask that contains a 1 for a bucket with geometry and a 0 for a bucket with empty space. The same bit mask is computed for the volume of influence of a light. By comparing the bit masks lights can be quickly culled along the depth of a tile's frustum.

NVIDIA has a new, interesting paper titled Toward Practical Real-Time Photon Mapping: Efficient GPU Density Estimation.

PolyVox is a C++ library by indie game developer Volumes Of Fun that provides storage and processing of voxel-based environments. It's released under a liberal zlib license and the source code is available on BitBucket.

Inigo Quilez has an excellent article up on Multiresolution Ambient Occlusion with plenty of pictures. Well worth the read.

A pretty nifty idea for denoising images generated via Monte Carlo ray tracing is presented in the paper Robust Image Denoising using a Virtual Flash Image for Monte Carlo Ray Tracing by Boochang Moon et al. Here's the companion website with a video (download the file, don't watch it on youtube because the strong video compression makes it pointless). The idea is to generate a virtual flash image (by putting a flash-like light source at the camera position and summing that with direct illumination of diffuse surfaces and all interaction with specular surfaces). This virtual flash image is then used to guide the denoising process. The technique is somewhat similar to a paper from several years ago where a real-life flash picture is used to denoise a non-flash picture of the same scene via bilateral filtering.

The I3D paper from the Technical University of Vienna Fast Light-Map Computation with Virtual Polygon Lights describes a quality improvement to the typical VPL-based instant radiosity method to quickly generate light maps on the GPU.

Chris­t­ian Schüler has a nice article on his blog titled Normal Mapping Without Precomputed Tangents. As you might guess, it's about doing normal mapping in a pixel shader without passing a tangent frame via vertex attributes.

Web Development

Developing Backbone.js Applications is an early, online pre-release of a book by Addy Osmani on the popular JavaScript MVC framework Backbone.js.

Cool Link Stash, November/December 2012


Scott Meyers has a new article up on his blog on the distinction between std::move and std::forward and their use in move constructors.

Bit Twiddling hacks is a great and pretty long compilation of trickery with regards to manipulating bits directly.

ChaiScript is an ECMAScript/JavaScript-inspired scripting language for embedding in C++ programs.

ViennaCL is an open source C++ computing library for scientific computing (mostly for solving linear systems) with multiple backends for CUDA, OpenCL, and OpenMP.

Andrey Sinyakov posted some great, introductory slides on new C++11 features. It's a pretty good whirlwind tour of the new standard.


Making Things with Maths is a fantastic, dynamic HTML5 slide set on using mathematics to procedurally create cool stuff. This is a truly awesome set of slides. Highly recommended!

Iñigo Quilez, of demoscene fame but now working at Pixar, gives some insights into the procedurally generated moss in the Pixar movie Brave.

The Nature of Code by Daniel Shiffman is an excellent resource to learn about the mathematical principles often found in nature. It uses Processing.js and contains lots of cool dynamic and interactive demos.

This page on Rapidly-exploring Random Trees is a great resource on an interesting algorithm to explore paths in nonconvex high-dimensional spaces. Pretty interesting technique. I found this via a reference from Casey Muratori's post in his post on The Witness blog on Mapping the Island's Walkable Surfaces.


Sean Barrett wrote a great article on Corners Don't Look Like That: Regarding Screenspace Ambient Occlusion. I think we should move past SSAO as an industry. Unfortunately, I don't really see yet how we can replace it except for with expensive options like voxel cone tracing that might not be feasible for all games on next-gen consoles.

Here's a cool deferred area lights demo implemented in WebGL/three.js. It's based on an older post on the forums.