All animations and stills copyright (c) 1993+ Ryan M. Geiss.

Much older stuff (all pre-2000); Images generated in Borland C++
(except the first two, done in Pascal):

The 2D Fractal:

The 3D Fractal:

Lensflare/fog in first image added from Photoshop.
Notice the (bad) reflections and shadows on the water in image #3, and the self-shadowing in image #2.

Raytraced Blobs and 3D Fractals, featuring reflection, intersection, phong and shadows:

Notice the blob reflections in the last 3 images.

Metaball, meet the Metacube and Metatorus:

Bump mapping, transparency, refraction w/multiple shadows, more transparency, and balls & cubes.

Some of the output of my second lab for CIS 782:


For this lab we had to do several things - implement texture (image) mapping, do some sort of aliasing-correction (I chose the EWA filter over mip-mapping or summed area tables), and do some solid (procedural) textures in 2d and 3d.

The first pair of images demonstrate the Elliptical Weighted Average filter. The left texture-mapped cube gets nasty aliasing artifacts (click to enlarge). The right image fixes these by applying an Elliptical Weighted Average filter. This means that when one ray should hit a large number of texels (pixels in the texture map), instead of indexing into the first one it sees and using that value (which causes the aliasing), it treats the screen pixel as a circle and projects that onto the cube (which becomes an ellipse), then does a guassian-weighted average of the texels in the ellipse, to get a very realistic representation of the texture without aliasing. Damn good solution, isn't it!?

The third image has just a texture map, while the fourth adds to that a bump map on a larger scale to make a very cool wrought-iron look.


The fifth image shows my 2d procedural brick texture. The bricks stagger randomly but repeat after a while, and their colors are a gradient between two values which repeat randomly after a while, but since the color & stagger repeat at different intervals (I think something like 13 and 19), it's almost impossible to see any repetition.

The 6th and 7th images demonstrate some noise functions for solid textures. The last image is a procedural wood texture.

And finally, the distributed raytracer, a joint effort between Vince Scheib and myself - winter 98-99.



Vince Scheib and I combined our raytracer technologies and added distributed raytracing for this, our final CIS 782 project. Distributed raytracing ameliorates the inherent "crisp" look of raytraced images by jittering all the rays when cast, reflected, refracted, etc. You then render hundreds of "jittered" images (which look pretty bad by themselves) and blend them together, and voila - you get smooth shadows, soft reflections, depth-of-field (camera focusing), motion blur, etc. See Vince's page for some depth-of-field and motion blur images.

The first two images demonstrate soft shadows with spheres & poly objects. The second image has phong shading on the poly object. The third shows a keen way of manipulating the math/geometry of the faces to contract them, the fourth, to expand them (uniformly).

The fifth image shows fuzzy reflections (190 oversamples) - note the progressively-sharper reflections in the spheres from left to right. The sixth image shows fuzzy refraction (200 oversamples). The last image shows a very, very cool grand finale (24 oversamples). I made the object in Imagine and exported it by .DXF. With a recursion depth of 3, at 800x600, it took about 12 hours to render the 24 images (oversamples) for this image on two computers, each with 4 (FOUR) 300-MHz Sun UltraSparc2 processors! (The object has 3600 faces... that's a lot of intersection).