#declare use_hdr_lighting = 1; #declare use_distrib_refl_refr = 1; global_settings{ max_trace_level 10 montecarlo { mc_rand_seed mc_max_diffuse_bounce 3 mc_pixel_refresh_ratio 0.5 mc_colour_clip 1.0 } } #default { texture { pigment { color rgb 1 } finish { diffuse 1 ambient 0 montecarlo { mc_diffuse { 1 5 2 } } } } } camera { location <0, 15, -15> direction z right x*image_width/image_height look_at <0, 0, -5> } #if (use_hdr_lighting) #version unofficial MegaPov 1.2; sphere { 0,1 pigment { image_map { // hdr "grace_probe.hdr" once map_type 7 hdr "galileo_probe.hdr" once map_type 7 } } finish { ambient 1.5 diffuse 0} scale 10000 rotate 90*y rotate 180*y hollow montecarlo { mc_sky { 100 } } } #else sphere { 0,1 texture { pigment { color rgb 1 } finish { diffuse 0 ambient 0.66 } } hollow on no_shadow scale 10000 } sphere { 0,10 montecarlo { mc_portal { 1 1 1 1 } } texture { pigment { color rgb 1 } finish { diffuse 0 ambient 100 } } translate 100*y rotate 20*z } #end plane { y, 0 texture { pigment { color rgb 1 } finish { diffuse 1 ambient 0 } } } #declare R1 = seed(0); // color #declare R2 = seed(496); // position #declare R3 = seed(8764); // height #declare R4 = seed(9845); // rotation #declare R5 = seed(12345); // reflection #declare R6 = seed(56743); // refraction #declare R7 = seed(6543); // reflection dispersion #declare R8 = seed(98421); // refraction dispersion #declare reflect_ratio = 0.25; #declare refract_ratio = 0.25; #declare extend = 35; #declare nb_box = 150; #declare i = 0; #declare min_refract = 0.90; #macro DEFINE_TEXTURE_PARAM() /* diffuse by default */ #declare reflect = 0; #declare reflect_on_off = 0; #declare refract = 0; #declare refract_on_off = 0; #declare diff = 1; #declare rand_test_1 = rand(R5); #if (rand_test_1 < reflect_ratio) /* diffuse-reflective */ #declare reflect = rand(R5); #declare reflect_on_off = 1; #declare diff = 1 - reflect; #else #declare rand_test_2 = rand(R6); #if (rand_test_2 < refract_ratio) /* refractive-reflective */ #declare refract = min_refract+rand(R6)*(1-min_refract); #declare refract_on_off = 1; #declare reflect = 1 - refract; #declare reflect_on_off = 1; #declare diff = 0; #end #end #end #while (i < nb_box) #declare height = rand(R3)*4; #declare dim = rand(R3)/2+0.5; DEFINE_TEXTURE_PARAM() box { -1,1 texture { #if (refract_on_off > 0.5) pigment { color rgbf } #else pigment { color rgb } #end finish { diffuse diff #if (reflect_on_off > 0.5) reflection {reflect reflect fresnel on} #else reflection {0 fresnel on} #end #if (use_distrib_refl_refr) montecarlo { #if (reflect_on_off > 0.5) mc_reflect { 1 2 2 rand(R7)*10000 } #end #if (refract_on_off > 0.5) mc_refract { 1 2 2 rand(R8)*10000 } #end } #end } } interior { ior 1.33 } scale rotate rand(R4)*360*y translate height/2*y-extend/2*x-extend/2*z translate } #declare i = i + 1; #end #declare nb_sphere = 150; #declare i = 0; #while (i < nb_sphere) #declare height = rand(R3)*1.5; DEFINE_TEXTURE_PARAM() sphere { 0,1 texture { #if (refract_on_off > 0.5) pigment { color rgbf } #else pigment { color rgb } #end finish { diffuse diff #if (reflect_on_off > 0.5) reflection {reflect reflect fresnel on} #else reflection {0 fresnel on} #end #if (use_distrib_refl_refr) montecarlo { #if (reflect_on_off > 0.5) mc_reflect { 1 2 2 rand(R7)*10000 } #end #if (refract_on_off > 0.5) mc_refract { 1 2 2 rand(R8)*10000 } #end } #end } } interior { ior 1.33 } scale height rotate rand(R4)*360*y translate height*y-extend/2*x-extend/2*z translate } #declare i = i + 1; #end