STILLS:

    -     Home     -     Stills     -     Animations     -     Register     -     FAQ     -     TC-RTC Rules     -     Contact Us     -     Forum     -     Member Area     -    

Illuminatus

Member : DrNo
Illuminatus
Title : Illuminatus
Name : Normand Brière
Country : Canada
Email : #############
Webpage : www.noware.ca
Topic : Illuminated (November)
Copyright : Agreed - 2009-11-27 21:16:40
JPG file : pw-1258427345-fiatlvx.jpg
Renderer Used : OpenGL
Tools used : Homemade Java software
Render Time : 15 minutes
Hardware Used : Macintosh Core 2 Duo, RadeonX1600
Image description

Let there be light? Or let there be one photon?

This is how I imagined the universe at some point, and I still don't know how it compares with reality.

A fundamental question is raised as the following: "If there are one candle and one mirror, are there TWO candles?". Similarly, "If a candle lies inside a box made of 6 mirrors, are there infinitely many candles? Is the resulting illumination infinite?".

The answer is no. Physically, a mirror is not perfect, and as it is shown in the image, the reflected candles are not as bright as the original one. The total illumination is then finite.

But suppose that the mirrors ARE perfect, is the illumination infinite? The answer is still no, because of the occlusion. Indeed, the flame of the candle (as an emitting source) is very small compared to the candle itself. So even if we imagine infinitely many candles reflected through perfect mirrors, the illumination is not infinite because the light coming from a distant flame is most likely to be occluded by another candle (wax stick or support).

We can go a step further. Suppose a candle light can exist without a support. In other words, suppose that a flame can exist by itself inside a box made of perfect mirrors, is the illumination then infinite?

Can fire occlude fire?

This picture is about this "open" idea. The small box is a theoritical perfect situation where a light source can exist on its own without any occluder. As time goes by, the light intensity or density increases indefinitely inside the box. After a sufficient while, even the smallest pinhole would eject a huge blast of light.

So one should take care of a single candle, because it could become brighter than thousands of noon suns.

Description of how this image was created

This entry was by far the most difficult thing I have ever done. Here is why.

As usual, I have to deal with rasterization, so I didn't have the choice but to duplicate the scene many times instead of relying on actual mirror reflections. Even if I had to duplicate my scene 8 times for all possible orientations (before the "infinite" loop), there is no real problem about it except for one thing: the transparency.

I am actually glad that my tools can now better handle soft effects such as a candle halo, etc. To achieve this, I said to myself "Suppose I simply use the normal vector to define the alpha?". If the normal vector is roughly parallel to the view direction, the opacity is maximum, otherwise the opacity (alpha) decreases to reach zero when the normal vector is perpendicular to the view direction. This simple idea produces the desired effects using spheres for the candles, and cones for the illumination coming out of the small box. I also used it for the flames themselves to avoid clean-cut borderlines. It works, it is pretty cool, and I shall use it more and more in the future for much better soft effects, especially for particle-based smoke, etc. Very simple and powerful. I should have implemented this feature way before.

However an unexpected problem occurred when mixing both fake reflection and transparency (halos, walls, etc). The major problem is caused by the depth buffer. Indeed the displaying order is important for the transparency to work, one must start from far away objects, and then the alpha blending can be performed properly. It is a bit tricky, but I simply have to draw the infinite loop backward. When an object is transparent, I don't modify the depth buffer, because it would produce visibility artifacts. For instance, the illumination from the box is made of embedded cones, so I cannot start from the outside cone because an inside cone is behind it. As a result, I cannot start from the inside cone either because the outside cone is partly behind it. I could rely on back-face culling, or simply disabling the depth buffer. But if it works, where is the problem?

The problem is that I don't want to physically duplicate the scene for all possible orientations (upside down, etc). So I use links to the same scene instead. If I make a change to the main scene (e.g. adding an object on the table), I don't need to mess with all copies. Unfortunately this does NOT work. Why? Because if I associate the candle's halo to the main scene, there is no way to render it correctly.

If I start by drawing the main (opaque) scene first, the depth buffer is enabled of course, then I draw the transparent walls from back to front (there is an alpha-channel for the mirror hole), and it works, no problem. I cannot start with the walls because the depth buffer is not activated, and the copies of the main scene won't be drawable "behind" the walls. So I perform the opaque pass first, then I render the walls. But the halos cause all the problems, because I don't know where to put them. If they are part of the main scene, they will be drawn BEFORE the walls. Since the halos don't modify the depth buffer, the walls lying behind the halos will erase or override them as if the walls were in front, yielding a completely wrong result.

So I didn't have the choice but to duplicate the candles halos, etc. one by one 8 times for all possible configurations by respecting a very precarious order not to draw any transparent effect behind another one. It was absolutely tedious and painful. It took me days even weeks instead of hours.

One last problem I had to deal with is a limitation of OpenGL, not rasterization. The fact is that any temporary OpenGL rendering is clamped to 8-8-8 bits because it is stored in the 24-bit color buffer. Usually such a side effect is not obvious because the final image is already 24 bits. However, the problem becomes important when many transparent layers are rendered from back to front. When a bright light is drawn behind a semi-opaque layer, the intensity of that light is lost. It appears flat and lifeless. To fix this, I had to reduce the overall intensity of the entire scene. I typically divide this intensity by 8, and the effect of that is that the image is no longer 8-8-8 bits, but only 5-5-5 bits. Since a temporary rendering can exceed 5-5-5 bits because the physical limit is 8-8-8 bits, the flatness due to clamping is much less noticeable. After the final rendering, I have to boost all image pixels by 8 to recover the actual intensity. The drawback is that the picture uses only 15-bit colors, not 24, and this could produce artifacts due to the reduced color palette.

If I knew it would go that complicated, I would have implemented a ray tracer in less time. But it is finally done, so I can work on another entry. ANY other image will be easier to do than this one.

______________________

There is one interesting point about all this actually. One can exploit the "problems" in a good way. For instance, the small metal plates associated with the 5-sided bolts (suggesting the "solidity" of the light accumulator) are not reflective. They have been simply drawn BEFORE the walls. They then reveal what lies BEHIND the walls and such an effect really looks like a reflection.

______________________

One note about the tablecloth texture. The expression "FIAT LVX" is originally reversed and can be found as is (through Google). The idea is to imagine that a mirror is necessary for it to be readable forward. Maybe it refers to my "theory" that all the light in the universe comes from a reflection of a unique source. It is much simpler to put a candle inside a 6-mirror box than to create infinitely many actual candles, maybe God thought about the same before creating the universe.

Another note is about a subtle (or obvious) element of the scene. I wanted my name (No) to be written somewhere. So I used the small box for the "N" and a sphere outline for the "O". The mirror reflection on the right (where there is no actual mirror for the viewer to imagine a "perfect" mirror as if there were none) reveals roughly the word "NOON". Now one can better understand why the above story box ended that way.

The final note is about an interesting coincidence, the word "Lux" also has a physical definition:

"The lux (symbol: lx) is the SI unit of illuminance and luminous emittance. It is used in photometry as a measure of the apparent intensity of light hitting or passing through a surface."

General statistics
No of ratings : 7
Min. overall rating : 19 (7 / 7 / 5)
Max. overall rating : 45 (14 / 15 / 16)
Sum of rating : 251 / 420
Date uploaded : 2009-11-17 03:09:05
Specific details

Note: The maximum value below is misleading as the voting system has changed.
If the member votes for all the entries and has created one him/herself, there is an
automatic 20/20/20 score added to the value (This encourages all members who enter to vote).

Rating type :
Min : Max : Sum : Out of
Artistic :
7 : 14 : 78 : 140
Concept :
7 : 16 : 83 : 140
Technical :
5 : 16 : 90 : 140
Overall :
19 : 45 : 251 : 420
Comments by members when rating this image
1.   26-12-2009 A good rendition of the infinity mirror room. [SMcA]
2.   18-12-2009 An interesting idea but as it only took 15 minutes to render could you have done something to improve the quality of the final image. Higher (or lower) AA settings?
3.   04-12-2009 Somewhat reminiscent of 'The Cube' movies, isn't it? Very nice! A slight inconsistency: the beam reflected in the left mirror is a little 'clouded', (indication of mirrar flaws?), so the many reflections a little unexpected.

- Privacy Policy - Terms & Conditions - FAQ - Contact Us -

Copyright © Steve Paget & Colin Price with Stephen McAvoy & Thomas de Groot : 2007-2011 - All rights reserved