login



no image


::recent

::off-topic
-:-whoami
welcome!
alternative

::downloads
-:-free
-:-non-free

::coding
-:-projects
gallery
samp
other

::misc
contact
my bookmarks


no image
no image
no image

...



Without wordsMon Jul 10, 2006
CANCELED: Photon-Mapping ... until further noticeFri Jun 23, 2006
Memory. A lot of memory.Thu Jun 08, 2006
night tracingFri May 05, 2006
super monaco gpThu May 04, 2006
a glimpse on global illuminationTue May 02, 2006
back in tracingTue Apr 25, 2006
the key is kdTue Apr 11, 2006
some more imagesThu Apr 06, 2006
refractive dreamingWed Mar 29, 2006
reflective dreamingTue Mar 28, 2006
light beyond the tunnelSat Mar 25, 2006
Directional-MemoryFri Mar 10, 2006
want a glass of liguid and sour sauce?Tue Mar 07, 2006



Without wordsMon 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 noticeFri 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 tracingFri 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 gpThu 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 illuminationTue May 02, 2006

I had a try on global illumination. Pics gonna be better....





back in tracingTue 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 kdTue 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 secondstook 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 imagesThu Apr 06, 2006
...aaaaand some more pics

pure with reflections with refractions
took 10 minutes




refractive dreamingWed 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 dreamingTue 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 tunnelSat Mar 25, 2006

light beyond the tunnel
Yesterday and today I began implementing collision detection.More updates the next days!




Directional-MemoryFri 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...



content->far()
no image
no image
no image
no image
no image
no image
no image
no image
no image
no image
no image
no image
no image
no image
no image
no image
no image
no image
no image