EMAIL:bbowen@cswnet.com
NAME: Barrett L. Bowen
TOPIC: TIME
COPYRIGHT: I SUBMIT TO THE STANDARD RAYTRACING COMPETITION COPYRIGHT.
RENDERER USED: POV-Ray 3.0 beta 0.7 for Windows 
TOOLS USED: GUM beta 0.91, POVCAD 4.0, WCVT2POV, PaintShopPro 3.0
RENDER TIME: 7hrs. 26mins. 25secs.
HARDWARE USED: Gateway2000 486DX2-66V running DOS 6.0 and Windows 3.1
IMAGE DESCRIPTION:
	Discrete units of infinity -- hours, minutes, and seconds -- just
stack up one right after another and stretch out forever.

DESCRIPTION OF HOW THIS IMAGE WAS CREATED:
	I thought it would be fun to render infinity as an iterated fractal 
using an hourglass where the supporting posts were themselves hourglasses in turn
having posts that were hourglasses, in turn having . . . you get the idea. I was 
right: it was fun. But it looked kind of lonely just sitting there in the middle
of nothing all by itself. Of course infinity runs all directions so I thought
hundreds of these fractal objects stretcing out to . . well. . infinity, would 
keep it company and be even more fun, as well as make the scene more interesting.

	The hourglass itself was designed in GUM with 4 copies of a bicubic patch 
and two tori. The discs capping the tori were added by hand. I kept all of the
numbers to whole integers for convenience in calculating the ratios, offsets, etc.
necessary to implement a recursive placement algorithm.
 
	 A careful study of the recursion examples included in the POV-Ray 3.0 
distribution files and lots of trial and error eventually gave me what I was
looking for. Well, almost. . . I kept running out of memory!

	As you may know, POV provides two forms of bicubic patch objects. One
precomputes all of the triangles before rendering which speeds things up but uses
more memory. I could only achieve ONE level of recursion with it. The other stores
only the points and calculates the patch triangles as it renders. I achieved two
levels of recursion with it, but, the test renders were so excruciatingly slow that 
experimenting with other aspects of the scene became a real pain. So. . .

	After experimenting with the surface-of-revolution, and lathe objects, and
subsequently rejecting them for speed ( STURM keyword almost always required) I 
returned to GUM and changed the B-rep of one of the patches to "mesh" with the
u and v steps set to 20. I then "zoomed" in real close to each of the mesh inter-
section points along one edge and recorded the x,y values under the mouse 
to the nearest quarter value (x.0, x.25, x.5, x.75). 

	In POVCAD, I zoomed the world units out to accomodate the size of the
hourglass(+-64), increased the grid spacing to match the quarter values (64*2*4),
and created a .pth path data file from the points I recorded from GUM. I swept 
the path 360 degrees in 28 segments. I then used WCVT2POV to calculate smoothed
normals from the resulting .raw triangle file, and output a POV .inc file.
Finally, I changed the "union{. . . }" statement to a "mesh{. . . }" statement
and solved part of my memory problems.

	Using Pov's highly efficent mesh object allowed me squeeeeeeze out a 
third level of recursion after I set my temporary swap disk in windows to 35M
and made the level 0 object just a cylinder. It rendered relatively fast too.
As you can see, 2 levels of recursion were sufficient, and, left plenty of room for
sand in the hourglass ( which you don't see, more on that later. . .) but I
could only get a couple or three copies of the fractal object before I hit the
memory barrier again. 

	So how 'did' I get all those hourglass objects in there?
	
	It's all done with mirrors ( I've always wanted to say that ) :
Five merged planes, dark gray in color, completely transparent, with luminous, perfect mirrored finishes, form 3 walls a floor and a ceiling around just one fractal object The three walls are positioned to form a right triangle with the right angle behind the center object proportional to the distance of any one hourglass's center and its parent's center. And obviously, the ceiling and floor touch the top and bottom respectively. Of course I can't have flowing sand with mirrors or every other level of reflection would show sand flowing the wrong way.

	The texture of the mirrors was arrived at solely through trial and error. Basically, here is what is happening: The color chosen is made clear to allow the light in. Dark gray, because white overly brightens everything since the color of the reflective surface is mingled in with the color of the reflected object. Not 
completely black because some brightening provides a distance attenuation effect
similiar to fog. This helps compensate for some of the loss of depth cueing that 
results from reflected rays not casting shadows. A side benefit is that it works well with POV 3.0's adc_bailout value to save rendering time. Finally, it is luminous (POV keyword:"no_shadow")to prevent floating shadows that appear as darkened areas in the picture. 

	Notice there is no glass. I tried it, but since clear mirrors precluded the use of a background object ( it would be visible "through" the reflected objects) the glass just sort of vanished in odd places. I also tried completely filling the glass with sand, giving the solid pigment a glass finish, and substituting in a different colored wood to make it look like a carving. The scene is so near to being overly busy though, that the plain dull pigment has a pleasing, compensating effect. I just liked it better the way it is.

	Last but not least, four soft area lights add just enough realism to make you want to reach out and grab one of those hourglass objects. This is especially evident in the upper and lower left corners.
	
	I've sure had fun with this one and learned a lot along the way. I hope you enjoy it as much as I did. 
	

	 
	 

