Cool Link Stash, May & June 2013

Graphics

Matt Swoboda (aka Smash of demoscene fame) posted two interesting posts on real-time GPU ray tracing. In the first post he mostly talks about the various techniques he tried, and in the second post he discusses some more implementation details of the final technique used in the "5 faces" demo.

Making WebGL Dance is a fantastic online presentation on the basics of rendering with WebGL. It uses WebGL itself for the slides and is really well done. Recommended.

fxguide.com has a nice article on the physically-based rendering in the recent game Remember Me.

Kind of an old post from 2011, but somebody recently reposted this on Twitter and it made me look at it again: Alexandre Mutel has an interesting post on his blog called Advanced HLSL using closures and function pointers. He shows some interesting hacks to do closures in HLSL, even with shader models 3 and 4. Pretty interesting.

Other

libCello. is a somewhat crazy C99 library that adds higher-level language primitives to C, mostly via macros. Interesting, yet crazy.

Terra is a low-level, statically-typed, compiled, LLVM-based language with a syntax very similar to Lua. It has excellent integration with C code. Seems very interesting.

Debugger Canvas is a nifty Visual Studio plugin that aids in debugging C# apps. It displays the entire callstack in bubbles on a canvas and gives a nice "big picture" view when stepping through code. I haven't used it much but it seems like it could be useful after getting used to it. The most annoying thing about it is that it's only available for Visual Studio 2010 Ultimate. Any other version will not do.

Learn Git Branching is a great interactive website that teaches you how to do branching in git. Recommended!

Cool Link Stash, April 2013

I don't have a lot of links for April because I was pretty busy getting married 😛
Nevertheless, here are some links to stuff I had time to check out:

Graphics

Some interesting research to be published at Eurographics 2013 on automatically creating locomotion controllers for biped, triped, or quadruped animals can be found in the paper titled Animal Locomotion Controllers from Scratch by Kevin Wampler, Jovan Popovic, and Zoran Popovic.

RenderingPipeline.com has a great post with lots of links to Low-Level GPU Documentation. Useful stuff for any graphics engineer.

The Distant Souls development blog has another good write-up of the remaining GCN performance tips posted by Nick Thibieroz on Twitter.

Ke-Sen Huang's page of SIGGRAPH 2013 papers has gotten quite full in the last few weeks. Lots of interesting new papers to read.

Other

Niklas Frykholm gave a talk at GDC 2013 on how to work collaboratively on creating assets for a game. The main takeaway is that you should have a simple asset format that gives each object a GUID and stores simple key-value properties so that these asset files can be auto-merged via a semantic merge tool that understands the format. It's a great idea and I've worked on engines that did exactly what he proposes. I really wish the Unity engine would do this better with its text-based asset format. It would be nice if there was a semantic merge tool available for it.

Cool Link Stash, March 2013

Graphics

Fabian Giesen finished his excellent series on low-level optimization of an Intel software occlusion culling sample. The whole series is an excellent read. Highly recommended.

Unity 4.1 has a new, useful feature called Property Drawers, which allow you to more easily draw some of your component properties in the inspector in a custom way. There's a good blog post that describes how to use them. Another new feature is support for shader replacement, not just for post processing as it used to be, but also for the whole scene (including lighting).

TrenchBroom is a pretty fantastic open source project with excellent documentation. It's a cross-platform level editor for Quake, but with a modern twist. Instead of working in multiple 2D viewports you work completely in a 3D viewport.

Given that the new Playstation 4 is powered by an AMD GPU with the Graphics Corex Next (GCN) architecture, this AMD whitepaper on the GCN architecture is a good introduction to how the hardware looks like.

On that note, here's a nice collection of performance tips for the AMD GCN architecture, originally posted on Twitter by AMD's Nick Thibieroz.

While not immediately relevant for real-time rendering, but nevertheless interesting (as the technique can achieve interactive framerates on current high-end GPUs), is a paper by Jose Esteve et al called Bringing Transmittance Function Maps to the Screen. The paper describes an adaptive variation of the algorithm presented in the paper Transmittance Function Mapping by Cyril Delalandre et al to render single scattering in participating media. Essentially, the idea is to render a shadow map from the point of view of the light source and projecting the transmittance function using a decomposition into the Fourier cosine series as basis functions. The resulting coefficients are stored in a texture map called the transmittance function map. When rendering from the camera each view ray that enters the participating media volume is ray-marched. For each step along the ray, if the light is visible from that point, the transmittance function map is sampled and evaluated. This new paper now adds adaptive ray marching to the algorithm, where thresholding is used to find out if the transmittance function has sharp falloffs. If it does, a second ray marching is performed to finely sample the transmittance function in just that region. This gives better results if the participating volume is not uniformly dense, i.e. it has regions of higher density where the transmittance decays rapidly and wispy regions where the transmittance changes slowly.

C++

The Zopflic Compression Algorithm is a new zlib-compatible compressor. It takes more time (a _lot_ more time, about 100x) but compression is about 5% better than zlib.

Other

Python Tools for Visual Studio is a pretty nifty plugin for full Python integration into Visual Studio. It supports editing, browsing, debugging, profiling, CPython, IronPython, Intellisense, and a

Jare's blog has a great post collecting links to slides from talks of this year's GDC.