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! 
         

           

