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.
… 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.
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)