#include "colors.inc"
#include "textures.inc"
#include "shapes.inc"
#include "shapes2.inc"
#include "shapesQ.inc"
#include "consts.inc"

global_settings { max_trace_level 10 }

camera { location <50, 5, 0> /*50, 5, 0*/
         right <4/3, 0, 0>
         up <0, 1, 0>
         sky <0, 1, 0>
         direction <0, 0, FoV_90>
         look_at <10, 10, 50> } /*10, 10, 50*/

light_source { <5000, 20000, -30000> color White }

/* Planet */
#declare Planet = sphere { <0, 0, 0>, 20
         texture { pigment { granite turbulence 0.7
                             color_map { [0 color Khaki]
                                         [0.3 color Khaki]
                                         [0.5 color ForestGreen]
                                         [0.7 color Tan]
                                         [1 color Tan] } }
                   scale <50, 50, 50> }
         texture { pigment { gradient y
                             color_map { [0 color White]
                                         [0.15 color Clear]
                                         [0.5 color Clear]
                                         [0.85 color Clear]
                                         [1 color White] } }
                   scale <40, 40, 40>
                   translate <0, -20, 0> }
         texture { pigment { bozo turbulence 1.5
                             color_map { [0 0.47 color NavyBlue color NavyBlue]
                                         [0.47 0.5 color NavyBlue color CornflowerBlue]
                                         [0.5 1 color Clear color Clear] } }
                   scale <10, 10, 10> }
         texture { pigment { granite turbulence 0.9
                             pigment_map { [0 color Clear]
                                           [0.3 color Clear]
                                           [0.6 color White]
                                           [1 color White] } }
                   scale <30, 30, 30> } }
/* Starfield and gas clouds */
#declare Space = difference { sphere { <0, 0, 0>, 1000000 }
             sphere { <0, 0, 0>, 999999 }
             texture { pigment { marble turbulence 0.6
                                 color_map { [0 color Black]
                                             [0.4 color red 0.3 blue 0 green 0]
                                             [0.7 color Black]
                                             [1 color Black] } }
                                 finish { ambient 1 }
                       scale <1000000, 1000000, 1000000> }
             texture { pigment { granite turbulence 0.4
                                 color_map { [0 color Clear]
                                             [0.499 color Clear]
                                             [0.5 color White]
                                             [0.501 color Clear]
                                             [1 color Clear] } }
                                 finish { ambient 1 } } }

#declare Stripe = texture { pigment { marble color_map { [0 0.5 color Gray20 color Gray20]
                                                         [0.5 1 color Yellow color Yellow] }
                                      rotate <0, 0, 45> }
                            finish { ambient 0.6 } }
#declare Concrete = texture { pigment { color Wheat } finish { crand 0.05 ambient 0.2 } }
#declare Metall = texture { pigment { color LightSteelBlue }
                            finish { phong 1 phong_size 10
                                     reflection 0.5
                                     metallic
                                     ambient 0.2 } }
#declare FloorT = texture { hexagon texture { pigment { Yellow } finish { ambient 0.2 } }
                                    texture { Concrete }
                                    texture { Metall }
                            scale <0.5, 0.5, 0.5> }
#declare Glass = texture { pigment { color Clear }
                           finish { phong 1 phong_size 50
                                    refraction on
                                    ior 1.55
                                    reflection 0.15 } }
#declare LeafT = texture { pigment { gradient z
                                     color_map { [0 ForestGreen]
                                                 [1 LimeGreen] }
                                     translate <0, 0, 30> }
                           finish { ambient 0.3 } }
#declare Woody = texture { pigment { leopard turbulence 0.5
                                     color_map { [0 color LightWood]
                                                 [1 color MediumWood] }
                                     scale <0.1, 0.5, 0.1> }
                           finish { ambient 0.3 } }
                 texture { pigment { gradient y turbulence 0.4
                                     color_map { [0 color Clear]
                                                 [0.5 color Clear]
                                                 [1 color DarkWood] } } }
/* Corridor */
#declare Pad = sphere { <0, 0, 0>, 1 scale <0.3, 0.1, 0.5> translate <0, -5, 0> }
#declare QuarterPad = union { object { Pad }
                              object { Pad rotate <0, 0, 5> }
                              object { Pad rotate <0, 0, 10> }
                              object { Pad rotate <0, 0, 15> }
                              object { Pad rotate <0, 0, 20> }
                              object { Pad rotate <0, 0, 25> }
                              object { Pad rotate <0, 0, 30> }
                              object { Pad rotate <0, 0, 35> }
                              object { Pad rotate <0, 0, 40> }
                              object { Pad rotate <0, 0, 45> }
                              object { Pad rotate <0, 0, 50> }
                              object { Pad rotate <0, 0, 55> }
                              object { Pad rotate <0, 0, 60> }
                              object { Pad rotate <0, 0, 65> }
                              object { Pad rotate <0, 0, 70> }
                              object { Pad rotate <0, 0, 75> }
                              object { Pad rotate <0, 0, 80> }
                              object { Pad rotate <0, 0, 85> }
                              pigment { color Yellow }
                              finish { ambient 0.2 } }
#declare PadRing = union {
                   object { QuarterPad translate <50, 0, 0> }
                   object { QuarterPad rotate <0, 0, 90> translate <50, 0, 0> }
                   object { QuarterPad rotate <0, 0, 180> translate <50, 0, 0> }
                   object { QuarterPad rotate <0, 0, -90> translate <50, 0, 0> }
                   translate <0, 3, 0> }
#declare Ring = union { difference { object { Disk_Z scale <6, 6, 0.5> }
                                     object { Disk_Z scale <5, 5, 1> }
                                     translate <50, 0, 0> }
                        difference { object { Disk_Z scale <5.75, 5.75, 0.75> }
                                     object { Disk_Z scale <5.25, 5.25, 1> }
                                     translate <50, 0, 0> }
                        torus { 5.25, 0.25 rotate <90, 0, 0> translate <50, 0, 0.5> }
                        torus { 5.25, 0.25 rotate <90, 0, 0> translate <50, 0, -0.5> }
                        torus { 5.75, 0.25 rotate <90, 0, 0> translate <50, 0, 0.5> }
                        torus { 5.75, 0.25 rotate <90, 0, 0> translate <50, 0, -0.5> }
                        translate <0, 3, 0>
                        texture { Concrete }
                        /*pigment { color White }*/ }
#declare CWallJoin = difference { object { Disk_Y scale <46.25, 0.25, 46.25> }
                                  torus { 46.25, 0.25 translate <0, 0.25, 0> }
                                  torus { 46.25, 0.25 translate <0, -0.25, 0> } }
#declare VWallJoin = difference { object { Cube scale <0.25, 5, 0.25> translate <0, -5, 0> }
                                  object { Disk_Y scale <0.25, 6, 0.25> translate <0.25, -5, 0.25> }
                                  object { Disk_Y scale <0.25, 6, 0.25> translate <-0.25, -5, 0.25> } }
#declare FloorBase = union { difference { object { Disk_Y scale <53, 6, 53> }
                                          object { Disk_Y scale <47, 7, 47> }
                                          translate <0, -6, 0> }
                             difference { object { Disk_Y scale <54, 6 54> }
                                          object { Disk_Y scale <46, 7, 46> }
                                          translate <0, -7, 0> }
                             torus { 53, 1 translate <0, -1, 0> }
                             torus { 47, 1 translate <0, -1, 0> }
                             texture { Concrete }
                             /*pigment { color White }*/ }
#declare Floor = union {
                 difference { object { FloorBase }
                              plane { <1, 0, 0>, 0 }
                              plane { <0, 0, 1>, 0 }
                              difference { object { Disk_Y scale <52.5, 0.5, 52.5> }
                                           object { Disk_Y scale <47.5, 1, 47.5> } }
                              object { CWallJoin translate <0, -4, 0> }
                              object { VWallJoin translate <0, -4, 46> rotate <0, 10, 0> }
                              object { VWallJoin translate <0, -4, 46> rotate <0, 20, 0> }
                              object { VWallJoin translate <0, -4, 46> rotate <0, 30, 0> }
                              object { VWallJoin translate <0, -4, 46> rotate <0, 40, 0> }
                              object { VWallJoin translate <0, -4, 46> rotate <0, 50, 0> }
                              object { VWallJoin translate <0, -4, 46> rotate <0, 60, 0> }
                              texture { Concrete }
                              /*pigment { color White }*/ }
                 difference { union { torus { 47.5, 0.5 translate <0, -0.5, 0> }
                                      torus { 52.5, 0.5 translate <0, -0.5, 0> } }
                              plane { <1, 0, 0>, 0 }
                              plane { <0, 0, 1>, 0 }
                              texture { Concrete }
                              /*pigment { color White }*/ }
                 difference { object { Disk_Y scale <53, 0.01, 53> translate <0, -0.5, 0> }
                              object { Disk_Y scale <47, 1, 47> translate <0, -0.5, 0> }
                              plane { <1, 0, 0>, 0 }
                              plane { <0, 0, 1>, 0 }
                              texture { FloorT } } }
#declare FrameB = union {
                  /* Inner ring */
                  difference { torus { 44.5, 0.3 }
                               difference { object { Disk_Y scale <44.55, 0.05, 44.55> }
                                            object { Disk_Y scale <44.45, 1, 44.45> }
                                            translate <0, 0.3, 0> } }
                  /* Top ring */
                  difference { torus { 50, 0.3 translate <0, 5.5, 0> }
                               object { Disk_Y scale <49.75, 0.05, 49.75> translate <0, 5.5, 0> } }
                  /* Outer ring */
                  difference { torus { 55.5, 0.3 }
                               difference { object { Disk_Y scale <55.55, 0.05, 55.55> }
                                            object { Disk_Y scale <55.45, 1, 55.45> }
                                            translate <0, 0.3, 0> } }
                  translate <0, 3, 0>
                  texture { Metall }
                  /*pigment { color White }*/ }
#declare Frame = difference { object { FrameB }
                              plane { <1, 0, 0>, 0 }
                              plane { <0, 0, 1>, 0 } }
#declare CorrGlass = difference { torus { 50, 5.55 }
                                  torus { 50, 5.45 }
                                  plane { <1, 0, 0>, 0 }
                                  plane { <0, 0, 1>, 0 }
                                  translate <0, 3, 0>
                                  texture { Glass } }
#declare Corridor = union {
                    object { Floor }
                    object { Frame }
                    object { Ring }
                    object { Ring rotate <0, -30, 0> }
                    object { PadRing rotate <0, -30, 0> }
                    object { Ring rotate <0, -60, 0> }
                    object { PadRing rotate <0, -60, 0> }
                    object { Ring rotate <0, -90, 0> }
                    /*object { CorrGlass }*/ }
/* Doorway */
#declare Panel = union {
                 object { Cube scale <0.05, 0.8, 0.3> texture { Metall } }
                 object { Cube scale <0.1, 0.2, 0.2> translate <0, 0.5, 0>
                          pigment { Green } finish { ambient 0.5 } }
                 object { Cube scale <0.1, 0.2, 0.2>
                          pigment { Green } finish { ambient 0.5 } }
                 object { Cube scale <0.1, 0.2, 0.2> translate <0, -0.5, 0>
                          pigment { Red } finish { ambient 0.5 } } }
#declare DWallJoin = difference { object { Cube scale <10, 0.25, 0.25> }
                                  object { Disk_X scale <11, 0.25, 0.25> translate <0, 0.25, 0.25> }
                                  object { Disk_X scale <11, 0.25, 0.25> translate <0, -0.25, 0.25> } }
#declare Doorway = union {
                   difference { object { Cube scale <3, 12, 7> translate <0, -5, 0> }
                                object { Cube scale <5, 2.5, 1.75> translate <0, -1.5, 0> }
                                object { Cube scale <0.5, 2.52, 3> translate <2, -1.5, 0> }
                                object { Cube scale <0.5, 2.52, 3> translate <-2, -1.5, 0> }
                                object { Cube scale <0.25, 2.75, 0.25> translate <3, -1.5, 1.75> }
                                object { Cube scale <0.25, 2.75, 0.25> translate <3, -1.5, -1.75> }
                                object { Cube scale <0.25, 0.25, 2> translate <3, -4, 0> }
                                object { Cube scale <0.25, 0.25, 2> translate <3, 1, 0> }
                                object { Cube scale <0.5, 13, 0.5> translate <3, -5, -7> }
                                object { Cube scale <0.5, 13, 0.5> translate <3, -5, 7> }
                                object { Cube scale <0.5, 13, 0.5> translate <-3, -5, -7> }
                                object { Cube scale <0.5, 13, 0.5> translate <-3, -5, 7> }
                                object { Cube scale <0.5, 0.5, 8> translate <3, 7, 0> }
                                object { Cube scale <0.5, 0.5, 8> translate <-3, 7, 0> }
                                object { Cube scale <4, 0.5, 0.5> translate <0, 7, -7> }
                                object { Cube scale <4, 0.5, 0.5> translate <0, 7, 7> }
                                object { DWallJoin translate <0, -8, -7> }
                                object { DWallJoin rotate <0, -90, 0> translate <3, -8, 0> }
                                object { DWallJoin translate <0, -3, -7> }
                                object { DWallJoin translate <0, 2, -7> }
                                object { DWallJoin rotate <0, -90, 0> translate <3, -3, 0> }
                                object { DWallJoin rotate <0, -90, 0> translate <3, 2, 0> } }
                   /* Doors */
                   object { Cube scale <0.3, 2.52, 0.55> translate <2, -1.5, 2.25> }
                   object { Cube scale <0.29, 2.52, 0.56> translate <2, -1.5, 2.25> texture { Stripe } }
                   /* Door edges */
                   object { Disk_Y scale <0.25, 2.75, 0.25> translate <2.75, -1.5, 2> }
                   object { Disk_Y scale <0.25, 2.75, 0.25> translate <2.75, -1.5, -2> }
                   object { Disk_Z scale <0.25, 0.25, 2> translate <2.75, -4.25, 0> }
                   object { Disk_Z scale <0.25, 0.25, 2> translate <2.75, 1.25, 0> }
                   /* Main block edges */
                   object { Disk_Y scale <0.5, 11.5, 0.5> translate <2.5, -5, -6.5> }
                   object { Disk_Y scale <0.5, 11.5, 0.5> translate <2.5, -5, 6.5> }
                   object { Disk_Y scale <0.5, 11.5, 0.5> translate <-2.5, -5, -6.5> }
                   object { Disk_Y scale <0.5, 11.5, 0.5> translate <-2.5, -5, 6.5> }
                   object { Disk_Z scale <0.5, 0.5, 6.5> translate <2.5, 6.5, 0> }
                   object { Disk_Z scale <0.5, 0.5, 6.5> translate <-2.5, 6.5, 0> }
                   object { Disk_X scale <2.5, 0.5, 0.5> translate <0, 6.5, -6.5> }
                   object { Disk_X scale <2.5, 0.5, 0.5> translate <0, 6.5, 6.5> }
                   sphere { <2.5, 6.5, 6.5>, 0.5 }
                   sphere { <2.5, 6.5, -6.5>, 0.5 }
                   sphere { <-2.5, 6.5, 6.5>, 0.5 }
                   sphere { <-2.5, 6.5, -6.5>, 0.5 }
                   object { Panel translate <3, -0.5, 3> }
                   translate <-3, 4, 50>
                   texture { Concrete }
                   /*pigment { color White }*/ }
/* Arboretum */
#declare AWallJoin = difference { object { Disk_Y scale <26, 0.25, 26> }
                                  object { Disk_Y scale <24.75, 1, 24.75> }
                                  torus { 24.75, 0.25 translate <0, 0.25, 0> }
                                  torus { 24.75, 0.25 translate <0, -0.25, 0> } }
#declare TreeFloor = union {
                     difference { union { object { Disk_Y scale <24, 7, 24> translate <0, -7, 0> }
                                          object { Disk_Y scale <25, 6, 25> translate <0, -7, 0> }
                                          torus { 24, 1 translate <0, -1, 0> } }
                                  object { Disk_Y scale <15, 10, 15> }
                                  object { Disk_Y scale <16, 1, 16> }
                                  difference { object { Disk_Y scale <23, 0.5, 23> }
                                               object { Disk_Y scale <17, 1, 17> } }
                                  object { AWallJoin translate <0, -4, 0> }
                                  object { VWallJoin translate <0, -4, -25> rotate <0, -80, 0> }
                                  object { VWallJoin translate <0, -4, -25> rotate <0, -70, 0> }
                                  object { VWallJoin translate <0, -4, -25> rotate <0, -60, 0> }
                                  object { VWallJoin translate <0, -4, -25> rotate <0, -50, 0> }
                                  object { VWallJoin translate <0, -4, -25> rotate <0, -40, 0> }
                                  object { VWallJoin translate <0, -4, -25> rotate <0, -30, 0> }
                                  object { VWallJoin translate <0, -4, -25> rotate <0, -20, 0> }
                                  object { VWallJoin translate <0, -4, -25> rotate <0, -10, 0> }
                                  object { VWallJoin translate <0, -4, -25> } }
                     torus { 16, 1 translate <0, -1, 0> }
                     torus { 17, 0.5 translate <0, -0.5, 0> }
                     torus { 23, 0.5 translate <0, -0.5, 0> }
                     difference { object { Disk_Y scale <23, 0.01, 23> }
                                  object { Disk_Y scale <17, 1, 17> }
                                  translate <0, -0.5, 0>
                                  texture { FloorT } }
                     texture { Concrete }
                     /*pigment { color White }*/ }
#declare UpperRing = union { difference { object { Disk_Y scale <24, 0.25, 24> }
                                          object { Disk_Y scale <23, 2, 23> } }
                             difference { object { Disk_Y scale <23.75, 0.5, 23.75> }
                                          object { Disk_Y scale <23.25, 2, 23.25> } }
                             torus { 23.75, 0.25 translate <0, 0.25, 0> }
                             torus { 23.75, 0.25 translate <0, -0.25, 0> }
                             torus { 23.25, 0.25 translate <0, 0.25, 0> }
                             torus { 23.25, 0.25 translate <0, -0.25, 0> }
                             translate <0, 10.5, 0>
                             texture { Concrete }
                             /*pigment { color White }*/ }
#declare SquPost = union {
                   difference { object { Cube scale <0.5, 5.25, 0.5> }
                                object { Cube scale <0.25, 6, 0.25> translate <-0.5, 0, 0.5> }
                                object { Cube scale <0.25, 6, 0.25> translate <0.5, 0, 0.5> }
                                object { Cube scale <0.25, 6, 0.25> translate <-0.5, 0, -0.5> }
                                object { Cube scale <0.25, 6, 0.25> translate <0.5, 0, -0.5> } }
                   object { Disk_Y scale <0.25, 5.25, 0.25> translate <0.25, 0, 0.25> }
                   object { Disk_Y scale <0.25, 5.25, 0.25> translate <0.25, 0, -0.25> }
                   object { Disk_Y scale <0.25, 5.25, 0.25> translate <-0.25, 0, 0.25> }
                   object { Disk_Y scale <0.25, 5.25, 0.25> translate <-0.25, 0, -0.25> }
                   translate <23.5, 5.25, 0>
                   texture { Concrete }
                   /*pigment { color White }*/ }
#declare MetalPost = difference { object { Disk_Y scale <0.3, 5.25, 0.3> }
                                  object { Cube scale <0.05, 6, 0.05> translate <0.3, 0, 0> }
                                  object { Cube scale <0.05, 6, 0.05> translate <-0.3, 0, 0> }
                                  translate <0, 5.25, 23.5>
                                  texture { Metall }
                                  /*pigment { color White }*/ }
#declare TopFrame = union {
                    difference { union { torus { 23.5, 0.3 rotate <90, 0, 0> }
                                         torus { 23.5, 0.3 rotate <90, 0, 0> rotate <0, 45, 0> }
                                         torus { 23.5, 0.3 rotate <90, 0, 0> rotate <0, 90, 0> }
                                         torus { 23.5, 0.3 rotate <90, 0, 0> rotate <0, 135, 0> } }
                                 plane { <0, 1, 0>, 0 }
                                 cone { <0, 0, 0>, 0, <0, 25, 0>, 25 } }
                    torus { sqrt((23.5*23.5)/2), 0.3 translate <0, sqrt((23.5*23.5)/2), 0> }
                    translate <0, 11, 0>
                    texture { Metall }
                    /*pigment { color White }*/ }
#declare LowerGlass = difference { object { Disk_Y scale <23.55, 5.25, 23.55> }
                                   object { Disk_Y scale <23.45, 6, 23.45> }
                                   object { Cube scale <6, 6, 6> translate <23.5, 0, 0> }
                                   translate <0, 5.25, 0>
                                   texture { Glass } }
#declare TopGlass = difference { sphere { <0, 0, 0>, 23.55 }
                                 sphere { <0, 0, 0>, 23.45 }
                                 plane { <0, 1, 0>, 0 }
                                 translate <0, 11, 0>
                                 texture { Glass } }
/* Tree */
#declare BLeaf = sphere { <0, 0, 0>, 1 scale <3, 2, 5> rotate <0, 0, 20> translate <1, -2, 0> }
#declare HLeaf = difference { object { BLeaf }
                              object { BLeaf scale <1.5, 1.5, 1.5> translate <0, -0.2, 0> }
                              plane { <1, 0, 0>, 0 }
                              scale <0.5, 1.5, 1> }
#declare Leaf = union { object { HLeaf texture { LeafT rotate <0, 30, 0> } }
                        object { HLeaf rotate <0, 180, 0> texture { LeafT rotate <0, -30, 0> } }
                        translate <0, 1.2, -4> }
#declare Leaf1 = object { Leaf scale <0.7, 0.7, 0.7> rotate <30, 0, 0> }
#declare Leaf2 = object { Leaf scale <0.5, 0.5, 0.5> rotate <50, 0, 0> }
#declare Leaf3 = object { Leaf scale <1.3, 1.3, 1.3> rotate <-25, 0, 0> }
#declare Leaf4 = object { Leaf scale <0.8, 0.8, 0.8> rotate <-35, 0, 0> }
#declare Leaf5 = object { Leaf scale <0.4, 0.4, 0.4> rotate <-45, 0, 0> }
#declare Trunk = difference { object { Disk_Y scale <5, 10, 5> }
                              torus { 5, 4.5 scale <1, 4, 1> translate <0, 5, 0> }
                              translate <0, -10, 0>
                              texture { Woody } }
#declare Tree = union {
                object { Leaf }
                object { Leaf rotate <0, 80, 0> }
                object { Leaf rotate <0, 160, 0> }
                object { Leaf rotate <0, 250, 0> }
                object { Leaf1 rotate <0, 30, 0> }
                object { Leaf1 rotate <0, 120, 0> }
                object { Leaf1 rotate <0, 200, 0> }
                object { Leaf1 rotate <0, 270, 0> }
                object { Leaf2 rotate <0, 20, 0> }
                object { Leaf2 rotate <0, 90, 0> }
                object { Leaf2 rotate <0, 150, 0> }
                object { Leaf2 rotate <0, 210, 0> }
                object { Leaf2 rotate <0, 260, 0> }
                object { Leaf2 rotate <0, 320, 0> }
                object { Leaf3 rotate <0, 45, 0> }
                object { Leaf3 rotate <0, 110, 0> }
                object { Leaf3 rotate <0, 190, 0> }
                object { Leaf3 rotate <0, 320, 0> }
                object { Leaf4 }
                object { Leaf4 rotate <0, 120, 0> }
                object { Leaf4 rotate <0, 240, 0> }
                object { Leaf5 rotate <0, 50, 0> }
                object { Leaf5 rotate <0, 100, 0> }
                object { Leaf5 rotate <0, 150, 0> }
                object { Leaf5 rotate <0, 200, 0> }
                object { Leaf5 rotate <0, 250, 0> }
                object { Leaf5 rotate <0, 400, 0> }
                object { Trunk }
                translate <0, 20, 0> }
#declare BushLeaf = object { Leaf scale <2, 1, 1> rotate <15, 0, 0> }
#declare Bush = union { object { BushLeaf translate <0, 1, 0> }
                        object { BushLeaf rotate <0, 100, 0> scale <0.95, 0.95, 0.95> translate <0, 2, 0> }
                        object { BushLeaf rotate <0, 200, 0> scale <0.9, 0.9, 0.9> translate <0, 3, 0> }
                        object { BushLeaf rotate <0, 300, 0> scale <0.85, 0.85, 0.85> translate <0, 4, 0> }
                        object { BushLeaf rotate <0, 40, 0> scale <0.8, 0.8, 0.8> translate <0, 5, 0> }
                        object { BushLeaf rotate <0, 140, 0> scale <0.75, 0.75, 0.75> translate <0, 6, 0> }
                        object { BushLeaf rotate <0, 240, 0> scale <0.7, 0.7, 0.7> translate <0, 7, 0> }
                        object { BushLeaf rotate <0, 340, 0> scale <0.65, 0.65, 0.65> translate <0, 8, 0> }
                        object { BushLeaf rotate <0, 80, 0> scale <0.6, 0.6, 0.6> translate <0, 9, 0> }
                        object { BushLeaf rotate <0, 180, 0> scale <0.55, 0.55, 0.55> translate <0, 10, 0> }
                        object { BushLeaf rotate <0, 280, 0> scale <0.5, 0.5, 0.5> translate <0, 11, 0> }
                        object { BushLeaf rotate <0, 20, 0> scale <0.45, 0.45, 0.45> translate <0, 12, 0> }
                        object { BushLeaf rotate <0, 120, 0> scale <0.4, 0.4, 0.4> translate <0, 13, 0> }
                        object { BushLeaf rotate <0, 220, 0> scale <0.35, 0.35, 0.35> translate <0, 14, 0> }
                        object { BushLeaf rotate <0, 320, 0> scale <0.25, 0.25, 0.25> translate <0, 15, 0> }
                        union { cone { <0, -2, 0>, 0.5, <0, 16, 0>, 0.2 }
                                sphere { <0, 16, 0>, 0.2 }
                                pigment { bozo turbulence 0.4
                                          color_map { [0 color Tan]
                                                      [1 color Yellow] }
                                          scale <0.05, 1, 0.05> }
                                finish { ambient 0.2 } }
                        translate <0, 2, 0> }
#declare Strand = difference { torus { 5, 0.05 rotate <90, 0, 0> }
                               plane { <0, 1, 0>, 0 }
                               plane { <0, -1, 0>, 0 rotate <0, 0, 55> }
                               translate <-5, 0, 0>
                               pigment { color Green }
                               finish { ambient 0.2 } }
#declare Grass = union { object { Strand }
                         object { Strand scale <0.8, 0.8, 0.8> rotate <0, 30, 0> }
                         object { Strand scale <0.9, 0.9, 0.9> rotate <0, 200, 0> }
                         object { Strand scale <0.5, 0.5, 0.5> rotate <0,120, 0> }
                         object { Strand scale <0.6, 0.6, 0.6> rotate <0, 270, 0> }
                         object { Strand scale <0.7, 0.7, 0.7> rotate <0, 300, 0> }
                         object { Strand scale <0.8, 0.8, 0.8> rotate <0, 60, 0> }
                         scale <2, 2, 2> }
#declare GrassGroup = union { object { Grass translate <8, -5, 2> }
                              object { Grass translate <11, -5, -3> }
                              object { Grass translate <9.5, -5, -1> } }
#declare GrassGroup2 = union { object { Grass translate <13, -5, 3> }
                               object { Grass translate <13, -5, -3> } }
#declare TreeHouse = union {
                     object { TreeFloor }
                     object { Tree scale <1.5, 1.5, 1.5> translate <0, -7, 0> }
                     object { Bush translate <10, -5, 0> rotate <0, 30, 0> }
                     object { Bush translate <10, -5, 0> rotate <0, 120, 0> }
                     object { Bush translate <10, -5, 0> rotate <0, 210, 0> }
                     object { Bush translate <10, -5, 0> rotate <0, 300, 0> }
                     object { GrassGroup rotate <0, 75, 0> }
                     object { GrassGroup rotate <0, 165, 0> }
                     object { GrassGroup rotate <0, 255, 0> }
                     object { GrassGroup rotate <0, 345, 0> }
                     object { GrassGroup2 rotate <0, 30, 0> }
                     object { GrassGroup2 rotate <0, 120, 0> }
                     object { GrassGroup2 rotate <0, 210, 0> }
                     object { GrassGroup2 rotate <0, 300, 0> }
                     object { Grass translate <3, -5, -2> }
                     object { Grass translate <3, -5, 2> }
                     object { Grass translate <2, -5, -3> }
                     object { Grass translate <-2, -5, -3> }
                     object { Grass translate <-3, -5, 2> }
                     object { Grass translate <-3, -5, -2> }
                     object { Grass translate <2, -5, 3> }
                     object { Grass translate <-2, -5, 3> }
                     object { Disk_Y scale <20, 1, 20> translate <0, -5, 0> pigment { color Tan } }
                     object { UpperRing }
                     object { SquPost rotate <0, 90, 0> }
                     object { SquPost rotate <0, -90, 0> }
                     object { SquPost rotate <0, 180, 0> }
                     object { MetalPost rotate <0, 45, 0> }
                     object { MetalPost rotate <0, -45, 0> }
                     object { MetalPost rotate <0, 135, 0> }
                     object { MetalPost rotate <0, -135, 0> }
                     object { TopFrame }
                     /*object { LowerGlass }
                     object { TopGlass }*/
                     translate <-28.5, 0, 50> }
#declare Ground = plane { <0, 1, 0>, -8
                          pigment { bozo turbulence 0.8
                                    color_map { [0 color Gray60]
                                                [1 color White] }
                                    scale <10, 10, 10> } }
#declare Ground2 = height_field { tga "Ground.tga"
                                  smooth
                                  translate <-0.5, 0, -0.5>
                                  scale <500, 5, 500>
                                  translate <-200, -12, 200>
                                  pigment { color White }
                                  finish { ambient 0.2 } }
#declare Cliffs = height_field { tga "Cliffs.tga"
                                 translate <-0.5, 0, -0.5>
                                 scale <800, 100, 900>
                                 translate <-300, -15, 300>
                                 pigment { gradient y turbulence 0.1
                                           color_map { [0 color White]
                                                       [0.3 color Gray70]
                                                       [0.4 color Gray90]
                                                       [0.8 color Gray50]
                                                       [1 color Gray90] }
                                           scale <1, 50, 1> }
                                 finish { ambient 0.2 } }

object { Corridor }
object { Doorway }
object { TreeHouse }

object { Cliffs }
object { Ground2 }
object { Space }
object { Planet scale <10, 10, 10> translate <-1000, 800, 1900> finish { ambient 0.3 } }
