Photorealism – Global Illumination – Realtime Rendering

In architecture an inevitable part of the design process is, to do visualizations of the project. So one sooner or later has to deal with some render software. I started making pictures using Vray, Mentalray or Maxwell, but the generall technical concept was more or less a secret to me. So i started reading some papers, and inspecting available source-codes, and studied several global illumination techniques such as ray-tracing, photon-mapping, ambient occlusion and pathtracing, always with a high interest in realtime-rendering.

Pathtracing

… seemed to be quite interesting, because the general idea is actually quite simple: shooting a ray into the scene, and gathering shading information during the tracing process to define a pixelcolor.

process for each sample:

shooting a ray from the eye through a pixel, find an inersecting with the scene, gathering material properties and doing a shadow test (point is not shadowed if the ray from the hitpoint to the light finds no inersection with any surface). based on the material properties a new sample dirction is generated and the process is repeated until a given depth is reached or any other termination criteria is true. The mean of the samples defines the pixelcolor. But it’s really slow: A sample-ray, with a maximum depth of 5  also needs 5 shadow rays, and of all them are doing costly intersection tests and it takes quite a lot of samples to get an acceptable image.

The following renderings show the results of my first pathtracing experiment. I did everything in Java, which is probably not the best choice performancewise. But when having a working rendering-setup, i’m planning to do an OpenCL verion, aiming towards realtime-rendering. Some interesting examples are circulating on the web, which show, whats possible these days.

 

rendering statistics

Scene: 36060 triangles (obj file), 1 pointlight

Data Structure: BVH (Bounding Volume Hierachy) to reduce intersection tests.

Rendering: ~11 seconds per pass, 512*512 pixels, sample depth: 4

 

pass: 0 | time:11 sec.

 

pass: 5 | time: 67 sec.

 

pass: 25 | time: 290 sec.

 

pass: 100 | time: 1135 sec.

 

pass : 500 | time:5890 sec. (~1,5 hours)

 

pass: 1000 | time: 11697 sec. (~3 hours)

 

pass: 1500 | 17796 sec. (~ 5 hours)