Metal materials study

Texture artist Jarrod Hasenjager posted a page of various metal materials study: aluminum, brass, bronze, chrome, copper, gold, iron, lead and steel, and rusted steel and iron. According to the description, the renders are done in Houdini, and the look is driven by artistic taste and personal experience rather than from physical values.

A GLSL version of smallpt

smallpt is a bare minimum path tracer written under 100 lines of C++, featuring diffuse, and specular reflection, and refraction. Using the detailed explanation slides by David Cline, I experimented porting it to GLSL on Shadertoy.

This proved to be an interesting experiment that brought a few lessons.

You can see the shader and tweak it here. By default it uses 6 samples per pixel, and 3 bounces, which allows it to run smoothly on average hardware. I found 40 samples per pixel and 5 bounces to give nice results while maintaining interactive framerate.

Path tracing, 40 samples per pixel, 5 bounces

Path tracing, 40 samples per pixel, 5 bounces

Update: since GLSL Sandbox has a feature, reading from the previous frame buffer, that Shadertoy is missing at the moment, I thought it’d be interesting try it to have the image converging over time. A little hacking later, a minute or so worth of rendering got me this kind of result: Given the effort, I am really pleased by the result.

Path tracing, 40 samples per pixel, 5 bounces

Path tracing, unknown number of samples per pixel, 7 bounces

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.

Talking about light at Revision

Over the last months I have been reading various resources on light shading, and shared the most relevant ones on this blog. Along the way I became more and more thrilled by how light interacts with materials and how we can model it to get more convincing rendering.

I found some insights to be really enlightening and very worth sharing. Therefore as a way of challenging my own understanding of this matter and as an opportunity to practice talk, I decided to speak about real-time lighting during a seminar at Revision.

Revision is a big demoparty that will be held during four days over the Easter weekend in Saarbrücken, Germany. If you are coming (which I recommend) and want to hear about shading, specular and Fresnel, come and see me!

Update: the talk is scheduled for Saturday April 7th, 14h – 15h.

“Introduction to light shading for real-time rendering”

Update: see this post for the material.