// Goal: create as many objects as possible in as few lines of code as // possible and make an interesting scene out of it. #declare branch = 3; #declare shrinkage = .76; #declare rseed = seed(27182818); #macro cyltree(lvl) #if (lvl > 0) union { cone { <0,0,0>, 0.15, <0,1,0>, 0.15*shrinkage } sphere { <0,1,0>, 0.15*shrinkage } #local i = branch*(1 + rand(rseed))/2; #while (i > 0) object { cyltree(lvl - 1 - rand(rseed)*.3) scale shrinkage rotate x*(25 + rand(rseed)*10) rotate y*(i+lvl)*360/branch translate y } #local i=i-1; #end } #else sphere { <0, .5, 0>, 0.5 pigment { rgb<.2, .6, 0> } } #end #end light_source { <0,20,-1000>, rgb<1,1,1> } light_source { <0,-5000,0>, rgb<.3, .3, .3> } sky_sphere { pigment { gradient y color_map { [0.0 rgb<.6, .8, .9>] [1.0 rgb<0, 0, .3>] } scale 2 translate -y rotate z*20 } } camera { location <1, .5, -4.5> look_at <0, 2.5, 0> } object { cyltree(13) pigment { rgb<.6, .4, 0> } }