//***********************************************Basics***************************************************** camera { location <-10,15,-40> up y right 4/3*x look_at <-10, 5.0, 20.0> angle 45 } light_source { 0*x color rgb <1,1,1> area_light <2000,0,0>, <0,0,2000>, 5, 5 adaptive 1 translate <-2000, 4000, -2000> } #declare PI = pi; //*********************************************Atmosphere*************************************************** sky_sphere { pigment { gradient y color_map { [0.0 color rgb <0.7,0.7,1.0>] [1.0 color blue 0.5] } } } fog { fog_type 2 distance 55 color <.7,.7,.7> turbulence <2,2,2> turb_depth 50 fog_alt 40 } #declare Loop1 = 0; #declare R1 = seed(1); #while ( Loop1 < 10000 ) sphere { <0,0,0>, 1 texture { pigment { marble color_map { [ 0 color rgbt <1,1,1,0> ] [ 1 color rgbt <1,1,1,1> ] } scale <1.5,1,1> } } finish { ambient .5 } scale <.25,.02,.02> rotate <10*rand(R1),0,-15+10*rand(R1)> translate no_shadow } #declare Loop1 = Loop1+1; #end plane { <0,1,0>, 0 texture { pigment { color rgbt <1,1,1,1> } } interior { media { scattering { 1 color rgb <1,1,1> } density { function { (y^2/4)*noise3d(x/4,0,z*5)*(noise3d(x/15,0,z)/2+.5)*noise3d(x/10,0,z/15) } color_map { [0 color rgb <0,0,0>] [1 color rgb <1,1,1>] } } } } rotate <0,10,0> translate <0,2,0> hollow on } //************************************************Snow****************************************************** #declare Snow_tex = texture { pigment { color rgb <1,1,1> } normal { wrinkles .2 scale .2 } finish { ambient .3 } } #declare Sphere4 = function { exp(-(1*(x^2+z^2))) } #declare Left_foot = function { Sphere4(x-.2*abs(x),0,z/1.7)+ Sphere4(x*1.3,0,1*(z+1.7)) } #declare Right_foot = function { Sphere4(x+.2*abs(x),0,z/1.7)+ Sphere4(x*1.3,0,1*(z+1.7)) } #declare SnowPile = function { x*exp(-(x^2+z^2)) } #declare Snow1 = function { pigment { marble color_map { [0 color rgb 1] [1 color rgb 0] } scallop_wave rotate <0,-12,0> } } #declare Snow2 = function { .7*(noise3d(x/20,y/20,z/20)/2+.5)* .5*Snow1(x/3-.2*y+.5*noise3d(x/4,y/4,z/4), y/3+noise3d(x/4,y/4,z/4), z/3+.5*noise3d(x/4,y/4,z/4) )+ .7*(-noise3d(x/20,y/20,z/20)/2+.5)* .5*Snow1(x/3+1.5-.2*y+.5*noise3d(x/4,y/4+10,z/4), y/3+noise3d(x/4,y/4+10,z/4), z/3+.5*noise3d(x/4,y/4+10,z/4) ) } #declare Snow = function { y-Snow2(x,y,z) } #declare tran = <0,0,-1>; #declare rad = 3.2; difference { isosurface { function { Snow } max_trace 5 max_gradient 5 bounded_by { box { <-200,-10,-30>, <20,3,200> } } accuracy .001 } sphere { <-.7,0,23.8>+tran, rad } sphere { <1.4,0,17.5>+tran, rad } sphere { <-.9,0,11.7>+tran, rad } sphere { <1.1,0,5.5>+tran, rad } sphere { <-1,0,0>+tran, rad } sphere { <1,0,-6>+tran, rad } sphere { <-1.3,0,-11.5>+tran, rad } sphere { <1.1,0,-19.5>+tran, rad } sphere { vrotate(<15,0,30>,<0,-40,0>), 10 } sphere { vrotate(<10,0,60>,<0,-40,0>), 10 } sphere { vrotate(<35,0,100>,<0,-40,0>), 10 } sphere { vrotate(<-15,0,120>,<0,-40,0>), 10 } sphere { vrotate(<-55,0,110>,<0,-40,0>), 10 } sphere { vrotate(<15,0,30>,<0,-40,0>), 10 } sphere { vrotate(<15,0,30>,<0,-40,0>), 10 } texture { Snow_tex } rotate <0,40,0> translate <0,0,0> } isosurface { function { Snow(x,y,z)+Left_foot(1.5*(x+.7),y,1.5*(z-23.8)) } max_gradient 5 accuracy .001 bounded_by { sphere { <-.7,0,23.8>+tran, rad } } texture { Snow_tex } rotate <0,40,0> } isosurface { function { Snow(x,y,z)+Right_foot(1.5*(x-1.4),y,1.5*(z-17.5)) } max_gradient 5 accuracy .001 bounded_by { sphere { <1.4,0,17.5>+tran, rad } } texture { Snow_tex } rotate <0,40,0> } isosurface { function { Snow(x,y,z)+Left_foot(1.5*(x+.9),y,1.5*(z-11.7)) } max_gradient 5 accuracy .001 bounded_by { sphere { <-.9,0,11.7>+tran, rad } } texture { Snow_tex } rotate <0,40,0> } isosurface { function { Snow(x,y,z)+Right_foot(1.5*(x-1.1),y,1.5*(z-5.5)) } max_gradient 5 accuracy .001 bounded_by { sphere { <1.1,0,5.5>+tran, rad } } texture { Snow_tex } rotate <0,40,0> } isosurface { function { Snow(x,y,z)+Left_foot(1.5*(x+1),y,1.5*z) } max_trace 10 max_gradient 5 accuracy .001 bounded_by { sphere { <-1,0,0>+tran, rad } } texture { Snow_tex } rotate <0,40,0> } isosurface { function { Snow(x,y,z)+Right_foot(1.5*(x-1),y,1.5*(z+6)) } max_gradient 5 accuracy .001 bounded_by { sphere { <1,0,-6>+tran, rad } } texture { Snow_tex } rotate <0,40,0> } isosurface { function { Snow(x,y,z)+Left_foot(1.5*(x+1.3),y,1.5*(z+11.5)) } max_gradient 5 accuracy .001 bounded_by { sphere { <-1.3,0,-11.5>+tran, rad } } texture { Snow_tex } rotate <0,40,0> } isosurface { function { Snow(x,y,z)+Right_foot(1.5*(x-1.1),y,1.5*(z+19.5)) } max_gradient 5 accuracy .001 bounded_by { sphere { <1.1,0,-19.5>+tran, rad } } texture { Snow_tex } rotate <0,40,0> } #declare V = vrotate(<15,0,30>,<0,-40,0>); #declare Vx = V.x; #declare Vy = V.y; #declare Vz = V.z; isosurface { function { Snow(x,y,z)+3*SnowPile(((x-Vx)/3)+.1*Sphere((x-Vx)/3,y/5,(z-Vz)/3),y,(z-Vz)/3) } max_gradient 5 bounded_by { sphere V, 10 } texture { Snow_tex } rotate <0,40,0> } #declare V = vrotate(<10,0,60>,<0,-40,0>); #declare Vx = V.x; #declare Vy = V.y; #declare Vz = V.z; isosurface { function { Snow(x,y,z)+3*SnowPile(((x-Vx)/3)+.1*Sphere((x-Vx)/3,y/5,(z-Vz)/3),y,(z-Vz)/3) } max_gradient 5 bounded_by { sphere V, 10 } texture { Snow_tex } rotate <0,40,0> } #declare V = vrotate(<35,0,100>,<0,-40,0>); #declare Vx = V.x; #declare Vy = V.y; #declare Vz = V.z; isosurface { function { Snow(x,y,z)+3*SnowPile(((x-Vx)/3)+.1*Sphere((x-Vx)/3,y/5,(z-Vz)/3),y,(z-Vz)/3) } max_gradient 5 bounded_by { sphere V, 10 } texture { Snow_tex } rotate <0,40,0> } #declare V = vrotate(<-15,0,120>,<0,-40,0>); #declare Vx = V.x; #declare Vy = V.y; #declare Vz = V.z; isosurface { function { Snow(x,y,z)+3*SnowPile(((x-Vx)/3)+.1*Sphere((x-Vx)/3,y/5,(z-Vz)/3),y,(z-Vz)/3) } max_gradient 5 bounded_by { sphere V, 10 } texture { Snow_tex } rotate <0,40,0> } #declare V = vrotate(<-55,0,110>,<0,-40,0>); #declare Vx = V.x; #declare Vy = V.y; #declare Vz = V.z; isosurface { function { Snow(x,y,z)+3*SnowPile(((x-Vx)/3)+.1*Sphere((x-Vx)/3,y/5,(z-Vz)/3),y,(z-Vz)/3) } max_gradient 5 bounded_by { sphere V, 10 } texture { Snow_tex } rotate <0,40,0> } #declare V = vrotate(<-35,0,130>,<0,-40,0>); #declare Vx = V.x; #declare Vy = V.y; #declare Vz = V.z; isosurface { function { Snow(x,y,z)+3*SnowPile(((x-Vx)/3)+.1*Sphere((x-Vx)/3,y/5,(z-Vz)/3),y,(z-Vz)/3) } max_gradient 5 bounded_by { sphere V, 10 } texture { Snow_tex } rotate <0,40,0> } #declare V = vrotate(<0,0,135>,<0,-40,0>); #declare Vx = V.x; #declare Vy = V.y; #declare Vz = V.z; isosurface { function { Snow(x,y,z)+3*SnowPile(((x-Vx)/3)+.1*Sphere((x-Vx)/3,y/5,(z-Vz)/3),y,(z-Vz)/3) } max_gradient 5 bounded_by { sphere V, 10 } texture { Snow_tex } rotate <0,40,0> } //*********************************************Vegetation*************************************************** #include "baretree.inc" #include "./tomtree/tomtree.inc" object { TREE scale 50 translate <15,-3,30> } #declare SPIEL=12.73; #declare BIEGUNG_X=30;//Width of bend in x-direction #declare BIEGUNG_Z=15;//Width of bend in z-direction #declare FREQUENZ_X=2;//Frequency of x-bend #declare FREQUENZ_Z=4;//Frequency of z-bend #include "./tomtree/tomtree.inc" object { TREE scale 40 rotate <0,60,0> translate <10,-3,60> } #declare SPIEL=111.73; #declare BIEGUNG_X=45;//Width of bend in x-direction #declare BIEGUNG_Z=30;//Width of bend in z-direction #declare FREQUENZ_X=4;//Frequency of x-bend #declare FREQUENZ_Z=5;//Frequency of z-bend #include "./tomtree/tomtree.inc" object { TREE scale 53 rotate <0,160,0> translate <35,-3,100> } #declare SPIEL=1.73; #declare BIEGUNG_X=30;//Width of bend in x-direction #declare BIEGUNG_Z=25;//Width of bend in z-direction #declare FREQUENZ_X=4;//Frequency of x-bend #declare FREQUENZ_Z=5;//Frequency of z-bend #include "./tomtree/tomtree.inc" object { TREE scale 50 rotate <0,256,0> translate <-15,-3,120> } #declare SPIEL=11151.73; #declare BIEGUNG_X=40;//Width of bend in x-direction #declare BIEGUNG_Z=25;//Width of bend in z-direction #declare FREQUENZ_X=3;//Frequency of x-bend #declare FREQUENZ_Z=5;//Frequency of z-bend #include "./tomtree/tomtree.inc" object { TREE scale 37 rotate <0,-30,0> translate <-55,-3,110> } #declare SPIEL=-1111.73; #declare BIEGUNG_X=50;//Width of bend in x-direction #declare BIEGUNG_Z=35;//Width of bend in z-direction #declare FREQUENZ_X=4;//Frequency of x-bend #declare FREQUENZ_Z=6;//Frequency of z-bend #include "./tomtree/tomtree.inc" object { TREE scale 41 translate <-35,-3,130> } #declare SPIEL=-111.73; #declare BIEGUNG_X=15;//Width of bend in x-direction #declare BIEGUNG_Z=15;//Width of bend in z-direction #declare FREQUENZ_X=2;//Frequency of x-bend #declare FREQUENZ_Z=3;//Frequency of z-bend #include "./tomtree/tomtree.inc" object { TREE scale 46 rotate <0,180,0> translate <0,-3,135> } #declare SPIEL=1111.74; #include "./tomtree/tomtree.inc" object { TREE scale 40 rotate <0,100,0> translate <-80,-3,147> } #declare SPIEL=115.73; #include "./tomtree/tomtree.inc" object { TREE scale 50 rotate <0,-75,0> translate <15,-3,152> } #declare SPIEL=121; #include "./tomtree/tomtree.inc" object { TREE scale 50 rotate <0,145,0> translate <-53,-3,157> } //*****Makes a long, curved blade of grass******************** #macro Large_blade (Position,Width,Height,Curve,Tilt,Rotation,Pigment,Segments) #local Loop=0; union { #while (Loop < Segments) cone { , Width*(Segments-Loop)/Segments, , Width*(Segments-Loop-1)/Segments } #local Loop=Loop+1; #end pigment {color rgb Pigment } finish {specular 0.1 roughness 0.05} rotate rotate <0,0,Rotation.z> rotate <0,Rotation.y,0> translate Position } #end #declare Pod1 = union { Large_blade (<-30,0,10>, .07, 9, .8, 0, <0,0,-10>, <.4,.25,0>,10) Large_blade (<-30,0,15>, .07, 8, .6, 0, <0,0,0>, <.4,.25,0>,10) Large_blade (<-25,0,20>, .07, 7.3, .73, 0, <0,0,0>, <.4,.25,0>,10) Large_blade (<-35,0,16>, .07, 6.7, .85, 0, <0,0,-20>, <.4,.25,0>,10) Large_blade (<-28,0,25>, .07, 8.4, .62, 0, <0,0,0>, <.4,.25,0>,10) } #declare Pod2 = union { Large_blade (<-24,0,13>, .07, 8.1, .55, 0, <0,0,-12>, <.4,.25,0>,10) Large_blade (<-32,0,17>, .07, 6.2, .71, 0, <0,0,-5>, <.4,.25,0>,10) Large_blade (<-25,0,30>, .07, 7.4, .77, 0, <0,0,0>, <.4,.25,0>,10) Large_blade (<-24,0,26>, .07, 8.4, .6, 0, <0,0,-23>, <.4,.25,0>,10) Large_blade (<-26,0,32>, .07, 7.6, .65, 0, <0,0,0>, <.4,.25,0>,10) } #declare Pod3 = union { Large_blade (<-34,0,35>, .07, 9.1, .62, 0, <0,0,-7>, <.4,.25,0>,10) Large_blade (<-40,0,37>, .07, 7.2, .71, 0, <0,0,-10>, <.4,.25,0>,10) Large_blade (<-25,0,42>, .07, 7.1, .73, 0, <0,0,0>, <.4,.25,0>,10) Large_blade (<-27,0,31>, .07, 8, .65, 0, <0,0,5>, <.4,.25,0>,10) Large_blade (<-36,0,45>, .07, 6.6, .65, 0, <0,0,0>, <.4,.25,0>,10) } Large_blade (<-20,0,27>, .07, 8.4, .6, 0, <0,0,-65>, <.4,.25,0>,10) Large_blade (<-26,0,-4>, .07, 9, .72, 0, <0,0,-5>, <.4,.25,0>, 10) object { Pod1 } object { Pod2 } object { Pod3 } #declare Pod4 = union { object { Pod1 translate <-10,0,16> } object { Pod1 translate <-20,0,25> } object { Pod2 translate <-5,0,22> } object { Pod2 translate <-12,0,35> } object { Pod3 translate <-20,0,31> } object { Pod3 translate <-15,0,39> } } object { Pod4 } object { Pod4 translate <-20,0,41> } object { Pod4 translate <10,0,35> } object { Pod4 translate <20,0,20> }