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