On this page whenever I write that I used 3d models in
format, this means that I actually converted them to VRML using
Whenever I used 3d models in
3DS format, this
means that I actually converted them to VRML using
rayhunter with parameter
classic was used to render images in this section.
All images below were made by rayhunter with 2x larger width and height, and then they were scaled down
pfilt program from
This way I did trivial anti-aliasing by oversampling.
For classic ray-tracer I added some point/directional/spot lights
to the models. Sometimes I added
mirror property to turn some materials into mirrors.
Office. I used
from collection of models of the
You can download this collection from
(go to HTTP download area there in case ftp doesn't work).
The model is also part of MGF Example Scenes.
One faint light is under the desk light, the other light shines from the outside (and that's how louvers cast shadows on the whole room).
Graz. I used model
graz.mgf, also from
scenes collection. Four bright lights are placed right under the ceiling,
note also two blueish mirrors hanging on the walls.
Sibenik. I used
sibenik.3ds model from
Unfortunately rayhunter doesn't use textures while rendering yet.
Some artifacts are visible near the stairs
(at the lower side of the 1st image and the left side of the 2nd image)
because two model's walls share the same place on the same plane
(uh, I didn't manage to correct this in the model).
Spoon in a watery soup. A simple 3d model that I made using Blender. On the image below you can see that rayhunter correctly "breaks" rays as they enter the water surface, because the spoon appears to be broken. In the upper part you can see some rays are transmitted completely inside underwater.
Forest. Model that I made using
Lights and fog added by hand.
You can download this model (332 KB).
Main feature of this rendering is to demonstrate that
rayhunter handles X3D
Mirror fun. Using Blender I placed an alien (you may have seen this guy elsewhere) between two walls. Initially one wall was a mirror (0.5), and alien was looking at himself. First image below is the Blender rendering. Second image is the rendering of my rayhunter (I exported Blender model to VRML 2.0 and added mirror properties to material by hand). Third image is another rendering from rayhunter, but this time both walls act as mirrors (stronger mirrors, 0.9) and so the reflection is "recursive" (raytracer with depth 10 was used).
You can download corresponding blender and VRML data files from our VRML/X3D demo models (look for
lights_materials/raytracer/alien_mirror.wrl, there's also
By the way, this is one of the first rayhunter renderings of VRML 2.0 models !
rayhunter with parameter
path was used to render images in this section.
If you will compare images below with the images above (rendered using classic ray-tracer), bear in mind that path tracer has a completely different (much more realistic) idea of what is light. For path tracer light is emitted by some objects (with a surface). For classic ray-tracer, light is emitted by some invisible infinitely small point in space. Also, the concept of materials, and how the lights affect them, is different, uses different properties etc. You can say that path tracer actually always works with a different scene than classic ray-tracer. And no, I usually didn't try to arrange the lights and materials properties so that classic and path tracer results are similar.
Spoon in a watery soup this time by path tracer.
Rayhunter parameters: minimal depth 2,
non primary samples count : 4,
Office and graz. Same models and camera settings as the renderings
in the classic section before.
The lower images were processed using
pcond -h to improve the look.
Rayhunter parameters: minimal depth 1,
non primary samples count : 2000,
--primary-samples-count 1. It took a dozen or so hours for each image
(2000 paths for each pixel !), even though the generated images
are small, only 400 x 300... And still the images don't look
particularly pretty, the noise is very high.
For office: settings like above, but rendered to 800 x 600, and scaled to 400 x 300.
Cornell Box. Here you can find detailed description of original model.
Controlling the depth of paths using minimal path depth setting and Russian-roulette parameter: In three renderings below I was changing minimal path depth and Russian-roulette parameter. All other parameters were the same. Samples count = 1 primary x 10 non-primary. Parameters for minimal path depth and Russian-roulette parameter were each time set so that the rendering time was approx the same. I wanted to see which image will look best, i.e. how you should balance between minimal path depth and Russian-roulette parameter. Well, at least I managed to demonstrate that (surprise, surprise) Russian-roulette is a good idea and minimal path depth setting is also a good idea :)
--r-roul-continue 0(so the paths were always cut at depth 3, so our calculations are inherently incorrect (the method is biased), and you can clearly see that left image is darker than the right one.
--r-roul-continue 0.8(so path depth depends only on Russian-roulette). You can see a lot of noise on the image, that's the noise produced by the roulette.
--r-roul-continue 0.5. This looks best, small noise and not biased.
Various number of samples per pixel : From left to right images below were rendered with 1, 10 (= 10 primary x 1 non-primary), 50 (= 10 primary x 5 non-primary) and 100 (= 10 primary x 10 non-primary) samples per pixel. For 2nd and following images I used 10 primary samples per pixel to have anti-aliasing. See rayhunter docs for the explanation what are the "primary" and "non-primary" samples.