Short reading list on diffuse lighting

This is going to be a short one: I haven’t done any extensive search, but I still want to make a back of the envelope note with a couple of links.

Technology showcase by BeautyPi

Back in 2009, Iñigo Quilez was leaving everyone in awe by releasing the milestone 4kB intro, Elevated, in cooperation with the group TBC. If you haven’t seen this masterpiece, watch it, and keep in mind this was generated from only 4096 bytes worth of data (just the text of this article is already more than a third of that).

After that, news were that he was hired by Pixar, and besides some in progress screenshots from time to time and some live coding experiments, not much was heard from him.

Then a couple of months ago this interview was published, and more recently this praising article of CGW, where we could read he had been in charge of the vegetation rendering in Pixar’s Brave. Needless to say, many people were looking forward to seeing what he would do next, especially in the real-time domain.

Today the group he’s part of, BeautyPi, which seems to be focusing on interactive animations (they presented their work earlier this year at SIGGRAPH), has published the following video. Being a showcase of their last experiments, it is not entertaining like an animation, a clip or a demo are. You could even say it’s boring. But it is visually very impressive, both technically and artistically. Although this is some real-time material, the quality is not that far from movie standards. Regarding the interaction, I am suspecting they are only scratching the surface and they may come up with some very interesting things. What these folks are doing is definitely worth following.

Readings on color management

Color management in the production pipeline is a tough topic. A really tough one. And a crucial one too. Unfortunately not only is this an important and difficult topic, but it also seems to me that except maybe for people working on AAA games or heavy budget film industry, most have little knowledge on the matter, when they’re not just completely unaware of the issue.

The issue that image capturing devices, screens and printers all have different color characteristics (said simply: what you scan, photography or film will not look the same depending on the capturing device used, and a same image will look different depending on the display or printing device too).

The issue that they have a capturing or display range usually far from what the human vision is capable of, and by “far” you must understand by orders of magnitude (said simply, the average human can perceive way more contrast than a camera is able to capture, differentiate much more colors than a screen is able to display, and on top of that there are colors an average screen is just absolutely unable to render, like the orange of your fluorescent highlighter for example; this one is my favorite example actually :) ).

The issue that screens and image formats use a non linear representation leading to severe errors in colors unless it is taken into account when manipulating images (said simply, ignore gamma correction in your rendering and your lighting will be wrong, ignore it when you resize images and they will look wrong too).

I just wish it were more simple and “just worked”. But until then we have to deal with it. So here goes the list of readings on this nonetheless very interesting topic.

On color management:

On gamma correction:

  • Gamma error in picture scaling: this article shows how bad things can go when image manipulation softwares don’t take gamma into account, and gives a glimpse of how widespread the problem is.
  • The Value Of Gamma Compression: I like this short article a lot, as it shows in a quick a clear way how a bad gamma management can ruin a rendering.
  • Gamma and Lighting Part 1, Part 2, Part 3: this three parts article from the same blog explains how they handle the issue in the production pipeline of X-Plane.
  • GPU Gems 3, Chapter 24 – The Importance of Being Linear: this article explains how to take gamma into account in your rendering pipeline; while an interesting read, I think it doesn’t make the issue obvious enough (as I find the different illustrations to be equally bad looking).
  • Gamma FAQ: this FAQ is quite dated but still helps understanding the origin of gamma correction and avoid confusion between various concepts (there is also a Color FAQ from the same author).

Update: this 4mn video explains quite convincingly the need for gamma correction.

On tone mapping:

Have a good read!

Update: this lengthy presentation of GDC 2010 (quoting: “The presentation is basically four 20 minute presentations crammed into 55 minutes.”), by John Hable, covers several of these topics.

A raytracer under a hundred lines of C++

On his website Kevin Beason presents a Monte Carlo ray tracer written with 99 lines of C++, generating a picture of a Cornell box with global illumination. Beyond the interesting experiment and the fact it can generate a binary of 4kB, I find very valuable the fact there are slides explaining all the code.

Crysis 3 tech demo

Crytek has published a video showing the rendering technology used in the CryEngine, more specifically in Crysis 3. While I don’t really dig the artistic choices (I find the overall image to be messy due to the high contrast and not that appealing, aesthetically speaking), the technical side is impressive. I especially like the use displacement mapping and tessellation for the vegetation (by the way, see how great that leaf looks; they got the material completely right). The reflexions visible at 1’52 make me think they also implemented the cone tracing technique, just like Unreal did. On the downside, all the parts with falling water felt unrealistic to me.

Last but not least, Toad Technology! :)

Octree-Based Sparse Voxelization for Real-Time Global Illumination

Last year Cyril Crassin presented a voxel based approach for interactively computing indirect diffuse and specular lighting, along with a couple of demonstration videos, and kept working on the matter since then.

In this talk given in May at the NVIDIA GPU Technology Conference, he briefly explains the technique:

Interestingly enough, as he points out, the technique has been implemented in the Unreal Engine 4 already.