// Pyramid of 35 spheres POV-Ray source by Blotwell
  // Uploaded to Wikimedia Commons
  // and released under GPL
  //
  // Render frames 0 through 23 (24 is identical to 0)
  
  #max_trace_level 15
  #declare sq = 1/sqrt(2);
  #declare vx = <2,0,0>;
  #declare vy = <1,0,sqrt(3)>;
  #declare vz = <1,sqrt(8/3),sqrt(1/3)>;
  
  #declare my_sphere_1 =
  sphere { <0,1,0>,1 pigment { color rgbf <.9,1,.9,.9> }
        finish { refraction 1 ior 1.2 } };
  #declare my_sphere_2 =
  sphere { <0,1,0>+vz,1 pigment { color rgbf <.9,.9,1,.9> }
        finish { refraction 1 ior 1.2 } };
  #declare my_sphere_3 =
  sphere { <0,1,0>+vz+vz,1 pigment { color rgbf <1,1,.8,.9> }
        finish { refraction 1 ior 1.2 } };
  #declare my_sphere_4 =
  sphere { <0,1,0>+vz+vz+vz,1 pigment { color rgbf <1,.9,.9,.9> }
        finish { refraction 1 ior 1.2 } };
  #declare my_sphere_5 =
  sphere { <0,1,0>+vz+vz+vz+vz,1 pigment { color rgbf <.9,.9,.9,.9> }
        finish { refraction 1 ior 1.2 } };
  
  camera {
    location <-15,11,-12>
    right <2/3,0,0>
    up <0,1/2,0>
    look_at 4*vz-<0,3,0>
  }
  
  light_source {vx*10+<0,10,0> color rgb <1,1,1>}
  light_source {vy*10+<0,10,0> color rgb <1,1,1>}
  
  plane { <0,1,0>, 0
  	finish {ambient 0.2}
  	pigment { marble turbulence 1
  		color_map { [0.0 rgb 1] [0.9 rgb 0.9] [1.0 rgb <0.6,0.5,0.5>] }
  		scale 6 } }
  
  plane { <0,-1,0>, -12
  	finish {ambient 1}
  	pigment { color rgb <.6,.6,.8> } }
  
  union {
  object { my_sphere_1 translate 0 }
  object { my_sphere_1 translate vx }
  object { my_sphere_1 translate vy }
  object { my_sphere_1 translate vx+vx }
  object { my_sphere_1 translate vx+vy }
  object { my_sphere_1 translate vy+vy }
  object { my_sphere_1 translate vx+vx+vx }
  object { my_sphere_1 translate vx+vx+vy }
  object { my_sphere_1 translate vx+vy+vy }
  object { my_sphere_1 translate vy+vy+vy }
  object { my_sphere_1 translate vx+vx+vx+vx }
  object { my_sphere_1 translate vx+vx+vx+vy }
  object { my_sphere_1 translate vx+vx+vy+vy }
  object { my_sphere_1 translate vx+vy+vy+vy }
  object { my_sphere_1 translate vy+vy+vy+vy }
  
  object { my_sphere_2 translate 0 }
  object { my_sphere_2 translate vx }
  object { my_sphere_2 translate vy }
  object { my_sphere_2 translate vx+vx }
  object { my_sphere_2 translate vx+vy }
  object { my_sphere_2 translate vy+vy }
  object { my_sphere_2 translate vx+vx+vx }
  object { my_sphere_2 translate vx+vx+vy }
  object { my_sphere_2 translate vx+vy+vy }
  object { my_sphere_2 translate vy+vy+vy }
  
  object { my_sphere_3 translate 0 }
  object { my_sphere_3 translate vx }
  object { my_sphere_3 translate vy }
  object { my_sphere_3 translate vx+vx }
  object { my_sphere_3 translate vx+vy }
  object { my_sphere_3 translate vy+vy }
  
  object { my_sphere_4 translate 0 }
  object { my_sphere_4 translate vx }
  object { my_sphere_4 translate vy }
  
  object { my_sphere_5 translate 0 }
  translate -4*vz
  rotate <0,clock*5,0>
  translate 4*vz
  }