Kevin Beason's Homepage > Software > Pane


Cornell Box similar to Henrik Wann Jensen's.
200,000 photons. 50,000 caustic photons.
600 gather rays. 4 samples per pixel.
Triangles: 11,682
Resolution: 1024x768
Rendering time: 5 minutes


photon map

15 seconds

Seminar room - Front view. Model by Tony Giordano.
5,000,000 photons. 400 gather rays. 16 samples per pixel.
Triangles: 79,795
Resolution: 1400x466
Rendering time: 29 minutes

Mouse neuron - dendrite. Data courtesy of Dr. Ouimet, FSU Biology.
4,000,000 photons. 2,400 gather rays. 8 samples per pixel.
Triangles: 155,164
Resolution: 2048x2048 (originally)
Rendering time: 12 hours

Brain in a box - Model by Josh Grant.
1,000,000 photons. 300 gather rays. 4 samples per pixel.
Triangles: 609,718
Resolution: 1024x768
Rendering time: 23 minutes

Cornell Box similar to Per H. Christensen's.
400,000 photons. 3,000 gather rays. 4 samples per pixel
Triangles: 14,418
Resolution: 1024x1024
Rendering time: 16 minutes

Another box scene.
200,000 photons. 500,000 caustic photons.
600 gather rays. 4 samples per pixel.
Triangles: 7,244
Resolution: 1024x768
Rendering time: 21 minutes
11/26/03

Extensive revisions (over 40 checkins to RCS):

  • Multi-threading - removed a bunch of static variables, added parallel random number generators, buffered photon storing, mutexes for irradiance cache and output. I see about a 2.25 speed-up on my dual Xeon machine w/ hyperthreading.
  • Diffuse transparency - looks like frosted glass, can be used for subsurface scattering effects
  • Major overhaul to photon emission - is multi-threaded, buffered, the number is controllable within a factor of 2, is completely deterministic because of trajectory splitting using quasi-random sequences, has a bug fix for photons bouncing infinitely against two-overlapping surfaces, limits the use of Russian Roulette when one color component is too large, and photons have a flag for which light source they came from
  • Made several improvements to the irradiance cache based on the Radiance source code: cache point radius reduction with min and max size, translational gradient reduction, improved inclusion (wi>1/a) testing (speed/artifact removal), and fixed the rotational gradient.
  • Experimented with L(S|D)*S+D caustic photons, went back (to LS+D) due to noisy caustics
  • Added minimum ray distance before using approximate solution, based on scene size. Also, gather rays are specularly reflected -- earlier renderings were missing this subtle component.
  • Added cubic interpolation between camera keyframes, for animations
  • Experimented with Photon-map based importance sampling for indirect illumination, went back (to stratified sampling) due to inferiority in Cornell scene. However, for strong indirect lighting the PM IS is superior.
  • Variance control - added but not really used, this allows you to limit the variance in a pixel's samples
  • Reworked ray object - various things are now stored in the ray, including hit position, length, barycentric coordinates, and thread context
  • Fixed specular reflection going into surfaces
  • Fixed overlapping surfaces intersection
  • Tuned ray-triangle intersection code for accuracy/speed
  • Easy to control Russian Roulette for recursion
  • Added README file -- the first inclusion of any form of documenation. Includes the commands used to create two of the above Cornell Box renderings.
  • Bibliography coming soon...


An animation of a mouse neuron that I made in July.
10/24/03


The variance in the cornell box scene.
The variance has variance, doh.
10/23/03

I got a new workstation :)

  • Dual 3.0Ghz Xeons
  • 4Gb RAM
  • Dual 23" cinema displays
  • QuadroFX 2000
  • Dual boot redhat9 and windowsXP
  • vmware


mouse neuron rendered as glass
(model scanned with confocal microscope
by FSU Neuroscience dept.)
1024x768 25 samples
1.3 hours

very thin ring on wood table
1024x768 50 samples
2.5 hours

1 light sample, according to area of luminaire
p=1/A, 1.78 seconds

1 light sample, according to solid angle of luminaire
p=1/w, 1.89 seconds
9/2/03

  • Russian Roulette for refraction rays
  • Imporantance sampling - direct lighting samples with probability proportional to solid angle (instead of area), from a gem by Changyaw Wang
  • Stratified pixel sampling with non-uniform distribution (warped by tent filter weighting, from Realistic Ray Tracing 2nd edition)
  • More precomputation for faster direct lighting with many luminaires
  • Minor component mixing fixes
  • Better photon map viewing options
  • Can scale textures
  • Compiles on Redhat 9


1024x768 16 samples
4.3 hours

1024x768 16 samples
1.8 hours

1024x768 16 samples
2.4 hours
8/21/03

  • fixed irradiance gradients
  • stratified light source sampling
  • separate pass for precomputing indirect illumination
  • attempt at fixing edges (needs more work)
  • bugfix for axis-aligned octree traversal (7% speed hit)
  • octree traversal optimization (3% speed gain)
  • fixed photon bouncing through glass


8/13/03 (6 minutes)

  • Irradiance Caching v
  • Irradiance Gradients
  • Photon Filtering
  • No same-triangle intersection


800x600 500 paths/pixel, 5.8 hours
(2.4GHz CPU)

1280x960 16 samples, 30 paths/sample
6.7 hours (2.4GHz CPU)
8/7/03

  • stratified sampling in multiple-diffuse component
  • two sided lighting for both point lights and area lights
  • new ray-triangle intersection code (from Moller) is 10-30% faster
  • binary PPM output
  • fixed caustics (was using precomputed solution -- wrong!)
  • fixed precomputed irradiance estimate (now finds nearest photon, so less noise)
  • bug fix plus new triangle-cube intersection (again from Moller), octree creation is 10x faster (~3 seconds for seminar room scene)

800x600 500 paths/pxel 6.5 hours (1.7GHz) 1280x960 440 paths/pixel 4 hours (2 2.4GHz CPUs)
1280x960 200 paths/pixel 4 hours (2 2.4GHz CPUs) 1280x960 200 paths/pixel 4 hours (2 2.4GHz CPUs)
Glitch in intersection with the chairs
7/23/03

  • Importance sampling multiple luminaires (Shirley)
  • Check to prevent repeated triangle-intersection tests


7/22/03 (100,000 photons fired / 100 in estimate for Global map, 20,000,000 photons fired / 200 in Caustic map, 50 paths/pixel, 10 minutes)

  • Precomputed irradiance stored at each photon (Christensen)
  • Fixed color bleeding
  • Separate global and caustic photon map sizes/estimates
  • Model made even more similar to Jensen's


7/21/03 (1,000,000 scattered photons, 100 in estimate, 50 paths/pixel, 5 minutes)

  • Ray-tracing with Jensens's 4-component scheme in his book
  • Automatic maximum search radius (Suykens)

Direct illumination only (100 samples/pixel, 3 minutes) Global photon map (70000 photons in map, 30 seconds)
7/20/03

  • Radiometry values all computed accurately in metric units (W, m)
  • Storing photon map using Jensen's book implementation
  • Global photon map visualization
  • Fixed specular and refractive recursion bug
  • Fixed refraction attenuation


7/18/03 (85000 scattered photons, 3 seconds)

  • Spectral photon emission, scattering, absorption
  • Photon map visualization

10,000 paths/pixel, 35 hours Example octree
7/13/03

  • Rendered with Monte Carlo Path Tracing with OUT quasi-random sampling

1000 paths/pixel 5.7 hours sobol seq. vs. uniform random seq.
7/13/03 Maximum depth=5

  • Sobol sequence results

10 paths/pixel 4 minutes 100 paths/pixel 24 minutes
1000 paths/pixel 4.1 hours 100 paths/pixel 40 minutes (interesting error occurred)
7/12/03 Maximum depth=5

  • Halton sequence for quasi-Monte Carlo integration
  • Higher computation times but better results (in 1000 paths case)

Larger light, less noise Smaller light, more noise
7/11/03 Maximum depth=5 1000 paths/pixel 1.5hrs (each)

  • Tweaks, bug fixes

1 paths/pixel 14 seconds 10 paths/pixel 2 minutes
100 paths/pixel 33 minutes 1000 paths/pixel 6.1 hours
7/2/03 Maximum depth=4

  • Monte-Carlo Path Tracing


6/23/03 (6 hours 40 minutes 800x600)



6/23/03 (13 minutes)

  • Refraction


6/21/03 (5 minutes 26 seconds)

  • Area light sources (100 rays per source)


6/21/03 (1 hour 17 minutes, fullsize image is 1024x768 15samples/pixel)

  • Texture mapping


6/21/03 (65 seconds)



6/21/03 (18 seconds)



6/14/03 (78 seconds)

  • interpolated normals
  • grazing reflected angles fixed
  • 25 samples per pixel


6/09/03 (9 hours)

  • 6400 samples per pixel


6/09/03



6/09/03 (51 hours)

  • 1000 samples per pixel


6/09/03

  • 200 samples per pixel


6/02/03 (3 seconds)

  • Implemented reflections


5/23/03 (2 seconds)

  • Octree


5/22/03 (Debugging image >60fps)

  • Debugging traversal (obviously broken)


5/20/03 (Debugging image >60fps)

  • Octree creation


5/11/03 (1 second)

  • Point lights (multiple)
  • Shadow rays


5/11/03 (4 seconds)

  • Materials, transforms


5/08/03 (4 seconds)

  • n.l diffuse shading


4/23/03 (4 seconds)

  • Loads scenes, stores triangles in linear list
  • Shows Preview (using Inventor)
  • Performs ray-triangle intersection (using Moller's code)
  • Does raytracing
  • Saves to file