Archive for February, 2009
Heightfield and media rendering
Another lazy update. This work is from the middle of 2008.
First image shows a failed attempt at rendering a displacement mapped triangle mesh. I tried to implement a variation on Interactive Smooth and Curved Shell Mapping (Jeschke et al.) (shown) but my variation was a failure. I also looked at Direct Ray Tracing of Displacement Mapped Triangles (Smits et al.) but became impatient.
Eventually I gave up and just went with brute ray marching on a single plane (second image). Marching proceeds using a hard-coded Lipschitz constant which adjusts step size based on a multiple of the current vertical distance. Once a crossing is found the intersection is refined using bisectional search to the desired accuracy. This is very slow as it evaluates the displacement shader (the height function) like crazy. The height field in the second image is a ridged multi fractal procedural function from Texturing & Modeling: A Procedural Approach pg. 504. I lifted both the illumination and terrain type from the beautiful renderings by Picogen.
I added path tracing for participating media (third image). This helped me find a bug in the photon mapping code and now they all match up. The full size version of the third image shows a comparison of path tracing (4 min) vs. path tracing with explicit light sampling (20 min) vs. photon mapping (43 min). Update: The variation in timings is from me working around noisy bugs in my integration.