TITLE: "Raindrops Keep Falling"
NAME: Daniel Huddleston
COUNTRY: United States of America
EMAIL: meshleer@geocities.com
WEBPAGE: http://www.geocities.com/SoHo/Atrium/1111/index.html
TOPIC: Microcosms
COPYRIGHT: I SUBMIT TO THE STANDARD RAYTRACING COMPETITION COPYRIGHT.
MPGFILE: dh_rain.mpg
RENDERER USED: 
    POV-RAY 3.1

TOOLS USED: 
    POV-RAY 3.1, Asymetrix Digital Video Producer 4.0, Micrografx Photo
Magic (for poster 
file), AVI2MPG1 to convert AVI to MPEG-1 (with much image degradation ensing.
I'll try to get better next time)

CREATION TIME: 
    Hard to say, since I was just puttering around with it for awhile
before things started to 
take shape.


DESCRIPTION OF HOW THIS ANIMATION WAS CREATED: 

Both the city and the raindrops were created using POV-RAY's randomization
function. There are 500 raindrops with randomized positions, and slightly
randomized translation along the X and Z axes as they fall. As for the
buildings, only their heights are randomized.

The raindrops fall away from the camera at a constant velocity, and the camera
follows them down at a slightly slower velocity. Originally, I'd wanted to end
the animation with a cutaway shot of the raindrop just making a tiny,
anticlimactic splash, but I was running out of time to figure out how to do
that. Instead, I decided to create the rooftop cutaway with a flash of
lightning. Finally, I created the scene of the camera descending into the
clouds (plus a second or so of black footage), then edited the whole thing
together 
using Asymetrix Digital Video Producer. Since this program only outputs AVI
files, I then used AVI2MPG1.EXE to convert the AVI to MPEG.

*******************************************************************

The POV code used to generate the frames is as follows:

#include "colors.inc"
#include "finish.inc"
#include "textures.inc"
#include "Stones.inc"

light_source { <25000, 60000, 10000> color rgb <2, 2, 1.9> }

sphere { <650, 1065-1090*clock, 800>, 3 
normal { waves .5 phase clock/15 }
pigment { rgbt <0, .9, 1, .9>} finish { phong 1 } interior{ior 1.33} }

#declare R1 = seed(0)
#declare R2 = seed(1)
#declare R3 = seed(2)
#declare R4 = seed(3)
#declare R5 = seed(4)

//Raindrops

#declare numdrops = 0
#while (numdrops < 500)

sphere { <550+200*rand(R1)-(100*(R1)*clock), (900+400*rand(R3))-1090*clock,
700+200*rand(R2)+(100*(R1)*clock)>, 3 
pigment { rgbt <0, .9, 1, .9>}
normal { waves .5 phase clock/15 } 
   finish { phong 1 } interior{ior 1.33} }

#declare numdrops = numdrops+1

#end

box { <-10000, 800, -10000> <10000, 850, 10000> pigment { bozo turbulence .5
scale 50
   pigment_map {  0 Clear   .5 rgbt <1, 1, 1, .25>   1 Clear  } } 
   interior { media { density { bozo } } } }
box { <-10000, 850, -10000> <10000, 900, 10000> pigment { bozo turbulence .5
scale 50
   pigment_map {  0 Clear   .5 rgbt <1, 1, 1, .25>   1 Clear  } } 
   interior { media { density { bozo } } } }
box { <-10000, 900, -10000> <10000, 950, 10000> pigment { bozo turbulence .5
scale 50
   pigment_map {  0 Clear   .5 rgbt <1, 1, 1, .25>   1 Clear  } } 
   interior { media { density { bozo } } } }
box { <-10000, 950, -10000> <10000, 1000, 10000> pigment { bozo turbulence .5
scale 50
   pigment_map {  0 Clear   .5 rgbt <1, 1, 1, .25>   1 Clear  } } 
   interior { media { density { bozo } } } }
box { <-10000, 1000, -10000> <10000, 1050, 10000> pigment { bozo turbulence .5
scale 50
   pigment_map {  0 Clear   .5 rgbt <1, 1, 1, .25>   1 Clear  } } 
   interior { media { density { bozo } } } }
   
sky_sphere
{
  pigment
  {
    bozo
    turbulence 1.75
    color_map {  0.0 color Blue 0.6   1.0 color rgb 1  }
  }
  scale 1 rotate < clock*-20, 0, 0>
}

camera { perspective
   location <0, 0, 0>
   look_at <650, -10000, 800>
   translate <0, 0, 0> rotate <0, 50*clock 0> translate <650, 1075-1075*clock,
800>
}

plane { y, 0 pigment { rgb <.1, .1, .3> } finish { Dull ambient .3 } normal {
bumps .5 } }

//buildings


#declare building1 =
union { 
   difference { 
      box { <100, 100, 100> <0, 0, 0> }
      box { <95, 101, 95> <5, 90, 5> }
      box { <95, 98, 95> <5, 1, 5> }
      //window holes
      box { <60, 70, 101 > <40, 40 -1> }
      box { <101, 70, 30 > <-1, 40 10> }
      box { <10, 70, 101 > <30, 40 -1> }
      box { <101, 70, 70 > <-1, 40 40> }
      box { <70, 70, 101 > <90, 40 -1> }
      box { <101, 70, 70 > <-1, 40 90> }
      pigment {Gray} 
//      texture { T_Stone3 scale 1 }
      finish { ambient .3}
   }
   box { <107, 1, 107> <-7, 0, -7> pigment { White } }
   box { <99, 98.01, 99> <1, 98, 1> pigment {Gray} }
   box { <95, 100, 2> <5, 1, 3> pigment { Clear } finish { phong 2 reflection .2
} }
   box { <95, 100, 2> <5, 1, 3> pigment { Clear } finish { phong 2 reflection .2
} }
   box { <2, 100, 95> <3, 1, 5> pigment { Clear } finish { phong 2 reflection .2
} }
   box { <96, 100, 95> <97, 1, 5> pigment { Clear } finish { phong 2 reflection
.2 } }
}

#declare XY = 0
#while (XY < 10)

#object {building1 translate <XY*140, 0, 1380>
   scale <1, 2*rand(R4), 1>
   pigment {rgb <rand(R1)/2, rand(R2)/2, rand(R3)/2>} finish { ambient .6 } }
   
#object {building1 translate <XY*140, 0, 1240>
   scale <1, 2*rand(R4), 1>
   pigment {rgb <rand(R1)/2, rand(R2)/2, rand(R3)/2>} finish { ambient .6 } }
   
#object {building1 translate <XY*140, 0, 1100>
   scale <1, 2*rand(R4), 1>
   pigment {rgb <rand(R1)/2, rand(R2)/2, rand(R3)/2>} finish { ambient .6 } }

#object {building1 translate <XY*140, 0, 960>
   scale <1, 2*rand(R4), 1>
   pigment {rgb <rand(R1)/2, rand(R2)/2, rand(R3)/2>} finish { ambient .6 } }

#object {building1 translate <XY*140, 0, 820>
   scale <1, 2*rand(R4), 1>
   pigment {rgb <rand(R1)/2, rand(R2)/2, rand(R3)/2>} finish { ambient .6 } }

#object {building1 translate <XY*140, 0, 680>
   scale <1, 2*rand(R4), 1>
   pigment {rgb <rand(R1)/2, rand(R2)/2, rand(R3)/2>} finish { ambient .6 } }

#object {building1 translate <XY*140, 0, 540>
   scale <1, 2*rand(R4), 1>
   pigment {rgb <rand(R1)/2, rand(R2)/2, rand(R3)/2>} finish { ambient .6 } }

#object {building1 translate <XY*140, 0, 400>
   scale <1, 2*rand(R4), 1>
   pigment {rgb <rand(R1)/2, rand(R2)/2, rand(R3)/2>} finish { ambient .6 } }  


#object {building1 translate <XY*140, 0, 260>
   scale <1, 2*rand(R4), 1>
   pigment {rgb <rand(R1)/2, rand(R2)/2, rand(R3)/2>} finish { ambient .6 } }
   
#object {building1 translate <XY*140, 0, 120>
   scale <1, 2*rand(R4), 1>
   pigment {rgb <rand(R1)/2, rand(R2)/2, rand(R3)/2>} finish { ambient .6 } }
      
#declare XY = XY+1

#end

******************************************************

For the opening sequence where we plunge into the clouds, the camera statement
was changed as follows:

camera { perspective
   location <0, 0, 0>
   look_at <650, 10000, 8000>
   translate <0, 0, 0> rotate <90*clock, 50*clock, 0> translate <650,
1055-45*clock, 800+45*clock>

