TITLE: The City NAME: Ian McNamara COUNTRY: United States EMAIL: i-mcnamara@cornellcollege.edu //Valid through 06/06 WEBPAGE: people.cornellcollege.edu/i-mcnamara //Valid through 06/06 TOPIC: Minimalism COPYRIGHT: I submit to the standard raytracing competition copyright. JPGFILE: the_city.jpg ZIPFILE: the_city.zip RENDERER USED: POV-Ray 3.6 TOOLS USED: Photoshop for jpeg-ification and the compilation of the pamphlet picture Winamp for hours of music and entertainment RENDER TIME: About 2d, 21h and 45m. HARDWARE USED: Pentium 4, 3.06 GHz, 1 GB RAM IMAGE DESCRIPTION: While wandering though a museum you stumble across a minimalistic art installation in a nearly deserted room. The late afternoon sun streams in through the windows that line the large hall falling upon the exhibit in the center. Set atop the platform in the center of the room is representation of a city. You are either impressed and stay to watch the beam of light move gradually across the sculpture or you dismiss it as an amateur attempt and set out in search of other works. DESCRIPTION OF HOW THIS IMAGE WAS CREATED: This idea has grown gradually over the past two months. Originally I planned on rendering two entries for this competition, but in the end I barely had time to get this one in. At first I was planing to make an abstract image that would simply be showcasing POV-Ray's radiosity feature. It was to be very simple in design, which of course meant that I spent way too much time on it. The main focus of the picture was to be several randomly placed blocks between two colored walls and how the color from the walls dispersed itself among the blocks. Well, in order to place the blocks randomly between the walls, I wrote "boxcollisiondetection2d.inc" which is included in my zip file. Feed in the scale, location, and y rotation of two blocks, and the macro will spit out true or false, the first being a collision and the second being a miss. This macro only works in detecting collisions on the x and z axes (boxes above one another would result in a collision) and every once in a while the macro tries to divide a number by zero, but other than that, it works rather well. After a few days of playing around with my blocks, I realized that with a bit of tweaking my abstract collection of blocks could in fact be used to create a city model. In order to add to the aesthetic appeal of the creation, I decided that each building would be supported by a length of cable. A few more days of work went into writing "City_Placement_Circle_Weighted.pov" (also included) which places a set amount of city blocks within a set radius and uses the collision detecting macro to make sure that no two blocks or cables intersect. The placement program also weights the height of the blocks so that the block in the center is the tallest and the others fall off at an exponential rate. This .pov file then writes out the positions of the buildings to "lightcolor_memory.txt" Finally, I decided that I would show off my work inside a museum like setting. Everything else in the room (with the exception of the pamphlet and walls) is made using simple CSG. The City Blocks: The scale, location and rotation of the blocks are read in from the file "lightcolor_memory.txt" and saved into arrays. The blocks are then placed using a series of while loops. The cables were originally going to be straight, but I added the use of a spline in order to make hang more realistically. The Platform: Simple CSG. Plain white texture meant to show off the slight color bleeding from the city blocks caused by radiosity. The Floor: More CSG. Tile textures are simple pigment patterns. The blurred reflections in the floor are caused by an averaged texture_map containing varying normals. I learned this method while browsing though Tim Nikias' website at www.nolights.de. He also has some excellent radiosity tutorials. The Bench: A hellish collection of CSG. These benches slow down the rendering considerably. They use the T_Wood14 texture from the "woods.inc" include file. The Pamphlet: A fun little mesh. It uses a simple function to determine height. The picture textured onto it was made using additional POV-Ray renderings and Photoshop. The image "pamphlet_picture.bmp" is included in the zip file, though at a reduced resolution. The Walls: The walls (including the windows) are mesh objects placed using a while loop. The lights on the wall are also mesh objects, each containing an area light. The Sky and Sun: The sun is a parallel light that points at the center of the scene. The sky is a plane that has a simple gradient pigment with bozo clouds on top of it. The Haze: This killed me in terms of rendering time. The haze is a scattering media contained inside a solid mesh. 100 samples were used in this picture, but 300 would have produced a much better (though much later) result. The sun (a fake on in fact) is the only light source which interacts with the media. (Done using a light_group) Lighting and Radiosity: There are 32 area lights located near the ceiling in this room. Radiosity is enabled and adds a great deal to this scene. That pretty much covers this entry. Just about everything in this scene can be adjusted by tweaking variables around, and if you figure out how to use the collision detection macro you can get some rather interesting results. Please feel free to play around with everything I've submitted. Thanks for reading!