
::recent
::off-topic -:-whoami welcome! alternative
::downloads -:-free -:-non-free
::coding -:-projects gallery samp other
::misc contact my bookmarks
  
...
| 
Without words | Mon Jul 10, 2006 | CANCELED: Photon-Mapping ... until further notice | Fri Jun 23, 2006 | Memory. A lot of memory. | Thu Jun 08, 2006 | night tracing | Fri May 05, 2006 | super monaco gp | Thu May 04, 2006 | a glimpse on global illumination | Tue May 02, 2006 | back in tracing | Tue Apr 25, 2006 | the key is kd | Tue Apr 11, 2006 | some more images | Thu Apr 06, 2006 | refractive dreaming | Wed Mar 29, 2006 | reflective dreaming | Tue Mar 28, 2006 | light beyond the tunnel | Sat Mar 25, 2006 | Directional-Memory | Fri Mar 10, 2006 | want a glass of liguid and sour sauce? | Tue Mar 07, 2006 |
Without words | Mon Jul 10, 2006 |
|
Just some facts:
- 600x600 pixels
- 17,250 seconds / 4.79 hours rendertime
- 2,534,120,000 rays ( 2.534 billion )
- 200 samples per pixel
- maximum path length is 25
- objects (from left to right): glossy mirror, diffuse sculpture, diffuse box, glossy mirroring totem (and a surrounding diffuse box)
And now, have a look:
Next features will be tone-mapping and metropolis-light-transport.
| |
CANCELED: Photon-Mapping ... until further notice | Fri Jun 23, 2006 |
| Farewell, dear Photons ...
It was smeary, hard to optimize on huge scenes, but I gotta say, it was straightforward and somewhat easy to implement. But I won't use it until further notice. It's about photon-mapping.
The "bads" owned the "goods". One great disadvantage of photon-mapping is the big amount of memory. I'm a little poor guy. Trainee. Not employee. And trainees don't have the money for big server clusters. They are happy when they are able to buy some gasoline for their 10l/100km-car.
The image following this phrase was the state-of-the-art before I removed the photon-mapping:
 Not bad. But this rendering took 50 layers (re-rendering the same scene with different initial photon-parameters)
So, farewell, dear Photons! Good bye. Maybe we meet again. Maybe.
More Objects. Regarding the quantity
I actually had a kd-tree in the tracer. But it did not increase the performance. Nope and negative, the opposite was the case. I started a little discussion about it on ompf.org; at that time I thought it has something to do with the parametric nature of the spheres (In contrast to meshed objects which are often build of thousands or even millions of triangles). You can find it here. Take some minutes to read if you want to. If you have not read it: The tree-creation was buggy. I just forgot to initialize the bounding boxes of the nodes ... blame on me.
It was pure accident that I found the bug and holy nature, it took days of disencouraging debugging sessions... I was somewhat close to rewriting the whole kd-stuff.
But now, it's working fine. Have a look at a first image:
 This one took 20 minutes including soft shadows and multiple reflections
And after that rendering, I wanted to know the truth. I made some sessions with (in relation to sooner images) very high object-count:
From left to right: A)1k or 2k spheres including soft reflections; B)I think it was 6k spheres; C)25x25x25=15625 spheres and finally D)the same one but with indirect lighting, making the inner spheres more lit
"Hybrid, you removed the photon maps, now *spelling it long and dismissive* show me some indirectly lit scenes"
Huh, whattup? You've seen one in the previous chapter! It was the 25x25x25 spheres picture on the right; but maybe the following images will calm you down:
These images show indirect lighting. But they are unrealistic due to the wrong lighting math implemented yet
"Okay, they calmed me a bit. But in the meantime, sorry, spheres suck." *hybrid thinking and being jiggered* man, he seems to be very aggressive today. got to do something.
More objects. Regarding the types.
I had the feeling that the time had come to implement some more types of primitive. I couldn't just render spheres again and again. And a cornell-box (http://www.graphics.cornell.edu/online/box/), which is practical for testing purposes, does not consist of spheres only. That motivated me to implement triangles at first right after the spheres. Via ompf.org I found a sweet repository of models on the mesh compendium. I decided to use the 100k-triangles dragon. I rendered some test-images with increasing realism. Please click on the image to get a comparison between direct lighting only and indirect lighting (global illumination):
 Please click on the image to get some more detailed information
Thanks for reading so far and have a look at the last chapter (no more reading, promised!).
Current state-of-the-art
 1024x1024, took 35k seconds (9,76 hours), 11 shadow rays, 100 samples (maximum path length is 5)
 Test scenes in the spirit of the cornell-box
| |
Memory. A lot of memory. | Thu Jun 08, 2006 |
| It has been a while since the last update in the glass log. Where should I begin? (thinking about it while having a look at the image gallery...;)
At first
I skipped the glass-raytracer version 2. The last feature: Some monte-carlo-raytracing to get sweet soft shadows. No attempt for real global illumnation, but I got the basics. This is the last edition 2-rendering:
Doing it object-oriented
Then I have begun to write the third edition: glass++. From now on glass++ is my pretty-tracer family, object oriented to the bones. The glass-tracer (without "++") in contrast will be focused on realtime-raytracing. So, to sum it up: "glass++" will produce nice and realistic images, "glass" will produce images fast with triangles being the only type of primitive.
Introducing Mr.Jensen
At the moment the most important glass++-feature is photon-mapping (an efficient technique which helps to approximate the rendering equation, http://graphics.ucsd.edu/~henrik/papers/ewr7/egwr96.pdf). Take a look at this first try:

focus your eyes on that smooth shadowing;)
Getting on GI
To further improve the quality I let the photons shot out by the lights bounce of the surfaces they hit, let them be reflected and refracted:

from left to right: an image with just a few photons to get an imagination of what happens; a first nice rendering with just the first hits saved (no indirect lighting); a nice image with some soft reflections and a basic but wrong lighting model
Memory. A lot of memory.
Applying higher detail of lighting meant increase the number of photons meant increased memory-usage (a lot of, believe me): A photon is saved with a position (12Bytes), a direction (12Bytes) and a color (16Bytes). Shoot millions of them and store them into a kd-tree for faster tracing and hope you got memory. A lot of it (I know I've already said that).
And if you don't have enough of that rare resource called memory? Why not render the same scene not only one time but again and again and finally combine them, each time with different photon-directions?

from image to image the number of layers is increased from 1 to totally 417 layers
Current glass++-state-of-the-art (50layers)

to be continued...
| |
night tracing | Fri May 05, 2006 |
| My raytracer made it through the night. The following image took 130 minutes. Resolution 600x600x6000, that makes a total of ... owow, 2,160,000,000 rays, that is 2160 million, which is 2.16 billion, ..., but there's still a lot of noise in the image. Today I will do something with it, reducing the noise is the target, and refractions including caustics, yeah.

| |
super monaco gp | Thu May 04, 2006 |
| 30 minutes rendertime, casting totally 800x800x800 rays ( 800x800 due to the resolution, multiplied with 800 for each random monte-carlo ray ), that makes a total of 512,000,000 rays. It's not fast, but furious, I think ( I am talking about the RIGHT PIC, the left one is just another boring test pic )

| |
a glimpse on global illumination | Tue May 02, 2006 |
| I had a try on global illumination. Pics gonna be better....
| |
back in tracing | Tue Apr 25, 2006 |
| I have completely rewritten the glass-raytracer from point-zero on.
This time I have implemented the standard kd-traversal code. In the old version, that code was absolutely slow, now, it's fast and correct.
The following scene consists of 100*100*2 triangles for the floor, 8*3 triangles for the pyramid-like-things and 10*25*2 triangles for that wall. That makes a total of 20524 triangles. I have tried a triangle-count of 400*400*2 for the floor (this is 16 times more triangles=320000 triangles), the time then was, I don't remember exactly, 2.5 seconds.
There are several points where I can optimize the code. One bottleneck is the conversion from floating-point-color values to screen-comformate-integer values.
But for now, have a look at the images:
|
|
|
taking 1.4 seconds to render
| added one light
| taking 4.5 seconds with 3 lights
|
| |
the key is kd | Tue Apr 11, 2006 |
| I have implemented a naive kd-tree yesterday. The following scene using the kd takes only a half
of time of the same without kd's:
The next two scenes consist of 10*10*10=1000 Spheres:
 |  |
took 69 seconds | took 146 seconds |
 |  | |
recursion depth 5 (303 secs) | 280 secs |
 |  | |
250 secs | 344 secs |
Hmmm, seems that I should more concentrate on the code than the images...
| |
some more images | Thu Apr 06, 2006 |
| ...aaaaand some more pics
|
|
|
pure
| with reflections
| with refractions
|
|
took 10 minutes
|
| |
refractive dreaming | Wed Mar 29, 2006 |
| I made some more fun-pics and I build in some refractioning, take a look at the images
|
|
|
just for fun
| just for more fun
| refraction with an index of 1.3
|
|
refraction with an index of 1.1
|
| |
reflective dreaming | Tue Mar 28, 2006 |
| It's always pretty cool to get motivated by the own creations; finally there are reflections in the glass:
|
|
|
a first try
| the visualized reflection-vectors
| like the second picture, this time with 30 randomized spheres
|
|
first transparency to get refractions later
|
| |
light beyond the tunnel | Sat Mar 25, 2006 |
| light beyond the tunnel
Yesterday and today I began implementing collision detection.More updates the next days!
| |
Directional-Memory | Fri Mar 10, 2006 |
| Today I began coding. The file structure evoluted and the hierarchy of the files.
There is a little bit of graphics for you: The colors are the visualized halfrays. In fact I save the directions in the screenbuffer before rendering. That will be very usefull on realtime-rendering due to saving some multiplications per screen.

| |
want a glass of liguid and sour sauce? | Tue Mar 07, 2006 |
| Writing a raytracer was one of the topics I wanted to do the last years. I did not, just that rae-tracer from the image-gallery, but that was nothing serious. What I am planning to hack is a high quality raytracer, coded for high performance from the beginning on.
I want results. HighQ results. That will be fun...
| |
| |