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.

Toward physically based rendering, screenshot after screenshot

Here are the screenshots I made for the talk I previously mentioned. They show how the rendering evolves through the choice of shading. The setup consist of a close yellowish punctual light on the up right, and a distant red-ish punctual light on the back left, as well as a dim blue ambient. The objects only differ by the specular exponent, which jumps by a times two factor from one object to the next one, left to right.

One light, Lambert diffuse only.

Two lights, Lambert diffuse only, with variance shadow map.

Two lights, Lambert diffuse only, with albedo.

Two lights, diffuse and Phong specular. Notice the color on the left.

One light, Phong specular only. Notice the discontinuity on the left.

Two lights, diffuse and Blinn-Phong specular.

One light, Blinn-Phong specular only. Notice the absence of discontinuity.

Two lights, diffuse and normalized Phong specular. Notice the highlight intensity.

Two lights, diffuse and normalized Blinn-Phong specular.

Two lights, diffuse and normalized Blinn-Phong specular, Fresnel term with Schlick

Two lights, Heidrich-Seidel anisotropic specular.

Next steps: getting used to the Fresnel version, experimenting with the exponent as a texture lookup, and normalizing the Heidrich-Seibel specular.

Introduction to light shading for real-time rendering

I am finally back in Tokyo after two intense weeks in Europe, during which I did things as various as being a perfect tourist in four capitals (stolen bag experience included) or attending the world biggest demoparty, getting nominated with the rest of my group for some awards, ranking 2nd in a competition and getting slashdotted for that. :)

As previously advertised, I presented at Revision a talk on light shading. A video was recorded for the streaming and has been made available online pretty much immediately, thanks to the work of the Revision team:

Unfortunately, the last minutes are missing. I was basically comparing the Fresnel version with the manually tweaked version, and explaining that while the former might not look perfect yet, it was an out of the box result, while the latter required me to introduce some fudge factor I had to tweak. Regarding references, I couldn’t list them all so I just mentioned the most significant ones (the first part of this talk is strongly inspired by Naty Hoffmann’s course introduction) and referred to here for the rest. At last I mentioned an evaluation sheet for whoever cared to give some feedback.

Performance wise, when seeing the video I feel embarrassed. The flow is far from what I was aiming, some explanations are not crystal clear as I wanted them to be, and you can notice I was confused a couple of times by the surrounding noise (hey, did I mention it’s a party?). But on the other hand various people told me it was a good seminar so even though there is much room for improvement, it’s not that bad of a start I guess.

Anyway, you can download a quick export of the party version of the slides. When I have some time I will try to get a better looking export (without text and images cropped out), and fix a couple of slides.

Readings on physically based rendering

Physically based rendering (PBR) seems to be the hot thing recently in game as well as film industries. Last year at SIGGRAPH Naty Hoffman led a course on physically based shading. The first talk in particular gives some excellent insights on the physics behind lighting.

This year, at SIGGRAPH again, the physically based lighting used in Call of Duty: Black Ops was one of the topics of the course Advances in Real-Time Rendering in 3D Graphics and Games. Keith Judge wrote an article to sum up the ideas presented in this talk in shading language. Sébastien Largarde also has some insights on the shift to physically based shading from a production point of view.

On a narrower topic Rory Driscoll briefly explained the problem of energy conservation, a first but important step toward PBR, in a convincing and straight to the point manner. In articles mentioning normalization factors the origin is not always clear, especially when authors take shortcuts to avoid digressing from their topic. Fortunately Fabian Giesen wrote a demonstration of the normalization factor for the Phong and Blinn-Phong models and Chris­t­ian Schüler gathered various of the normalization terms we can see in publications, with proper references.

There are many other sources to read, but I will stop there for now. Just follow the links and you have plenty of reading already. ;)


Addendum: Sébastien pointed out this article on energy conservation for wrapped diffuse lighting and this one on physically plausible microfacet BRDF, which includes a WebGL demo to play with.


Update: Tri-Ace has made a couple of presentations on the matter over the last years, which you can find on their research page.


Update: this article, Basic Theory of Physically-Based Rendering, presents the ideas of PBR in a very easy to read manner and works well as an introduction.

Visualizing specular component in real life

Graphics programmers are quite used to the idea of specular highlight. It is usually more or less understood, or accepted, to be the reflected part of the incoming light, on top of the one that sort of bounces in every direction and that is referred to as the diffuse part. The specular term happens to have a very physical meaning though (which I won’t elaborate on for this time) and the interesting property of being polarized while the diffuse part is not.

This property is used by photographers, who add polarizing filters to their gear in order to eliminate glares and reflections from their shots when taking photos through glass or water for instance.

John Hable has written a very interesting article showing how to split specular and diffuse in real images. He later wrote another article showing that specular often contributes more than we expect for matte materials. Both help giving an idea of the importance of the specular term as well as getting the eye trained to identify it.