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.