// inspired by a pov render by Lutz-Peter Hooge // coded from scratch by pcc // very quick parse time, very long render time // with radiousity on, forget it. // the slowness of this render is inexplicable #version 3.5; #declare use_rad = false; #declare be_transparent = false; global_settings { assumed_gamma 2.2 noise_generator 1 max_trace_level 4 // maybe this lower number will help? (no) #if (use_rad = true) radiosity { /* uses v3.5 radiousity syntax */ always_sample off // You can force POV-Ray to only use the data from // the pretrace step and not gather any new samples // during the final radiosity pass. This may reduce // splotchiness. // It can also be usefull when reusing previously // saved radiosity data. brightness 1 count 96 // number of rays that are sent out whenever a new radiosity // value has to be calculated error_bound 0.1 // lower than 0.1 is not recommended low_error_factor 0.7 // work a little harder during pretrace max_sample 1.0 // scale level of overly bright samples to not exceed this recursion_limit 2 normal off // whether or not radiousity accounts for normals //save_file "octy_fract_01.rad" //load_file "octy_fract_01.rad" } #end } camera { // orthographic location 0 direction <0, 0, 1.5> right <(image_width / image_height), 0, 0> up <0, 1, 0> rotate x*38 translate <-0.3, 3.1, -2.7> } #if (use_rad = true) background { color rgb 1 } #else background { color rgb 0.85 } #end #declare pole_texture = texture { pigment { color rgb 1 } finish { #if (use_rad = true) ambient 0 diffuse 1 #else ambient 0.4 diffuse 0.6 #end specular 0.9 roughness 0.06 } } #declare black_texture = texture { #if (be_transparent = true) pigment { color rgbt <0, 0, 0, 0.5> } #else pigment { color rgb <0, 0, 0> } #end finish { #if (use_rad = true) ambient 0 diffuse 1 #else ambient 0.4 diffuse 0.6 #end } } #declare red_texture = texture { #if (be_transparent = true) pigment { color rgbt <0, 0.6, 1, 0.5> } #else pigment { color rgb <0, 0.6, 1> } #end finish { #if (use_rad = true) ambient 0 diffuse 1 #else ambient 0.4 diffuse 0.6 #end } } #declare framy_thin = 0.005; #declare torus_part = torus { 0.405, framy_thin rotate x*-degrees(atan2(1, (1 / sqrt(2)))) rotate y*45 translate <-1/3, 1/3, -1/3> } #declare framey_part = union { cylinder { <-1, 0, 0>, <0, 0, -1>, framy_thin } cylinder { < 1, 0, 0>, <0, 0, -1>, framy_thin } cylinder { < 1, 0, 0>, <0, 0, 1>, framy_thin } cylinder { <-1, 0, 0>, <0, 0, 1>, framy_thin } sphere { <-1, 0, 0>, framy_thin } sphere { < 1, 0, 0>, framy_thin } sphere { < 0, 0, 1>, framy_thin } sphere { < 0, 0, -1>, framy_thin } sphere { < 0, -1, 0>, framy_thin } sphere { < 0, 1, 0>, framy_thin } cylinder { <0, 0, -1>, <0, 1, 0>, framy_thin } cylinder { <0, 0, -1>, <0, -1, 0>, framy_thin } cylinder { <0, 0, 1>, <0, 1, 0>, framy_thin } cylinder { <0, 0, 1>, <0, -1, 0>, framy_thin } cylinder { <-1, 0, 0>, <0, 1, 0>, framy_thin } cylinder { <-1, 0, 0>, <0, -1, 0>, framy_thin } cylinder { <1, 0, 0>, <0, 1, 0>, framy_thin } cylinder { <1, 0, 0>, <0, -1, 0>, framy_thin } object { torus_part } object { torus_part rotate y*90 } object { torus_part rotate y*180 } object { torus_part rotate y*270 } object { torus_part rotate x*180 } object { torus_part rotate x*180 rotate y*90 } object { torus_part rotate x*180 rotate y*180 } object { torus_part rotate x*180 rotate y*270 } texture { pole_texture } } #declare one_3rd_panel = mesh { #declare cc = -60; #while (cc < 60) triangle { <0, 0, 0.81> <0.41 * sin(radians(cc)), 0, 0.4 * cos(radians(cc))>, <0.41 * sin(radians(cc + 4)), 0, 0.4 * cos(radians(cc + 4))> } #declare cc = cc + 4; #end } #declare one_panel = union { object { one_3rd_panel } object { one_3rd_panel rotate y*120 } object { one_3rd_panel rotate y*240 } rotate x*-degrees(atan2(1, (1 / sqrt(2)))) rotate y*45 translate <-1/3, 1/3, -1/3> } #declare panel_part = union { object { one_panel } object { one_panel rotate y*90 } object { one_panel rotate y*180 } object { one_panel rotate y*270 } object { one_panel rotate x*180 } object { one_panel rotate x*180 rotate y*90 } object { one_panel rotate x*180 rotate y*180 } object { one_panel rotate x*180 rotate y*270 } texture { gradient <0, 1, 0> texture_map { [ 3/4 red_texture ] [ 3/4 black_texture ] } translate <0, -0.5, 0> scale 2 } } #declare base_unit = union { object { framey_part } object { panel_part } } #macro do_it(trans_it, lev, toplev) object { base_unit #if (toplev = 1) rotate x*-90 #end transform trans_it } #if (lev > 1) #local roty = 0; #while (roty < 360) do_it( transform { rotate x*-degrees(atan2(1, (1 / sqrt(2)))) rotate y*45 scale 0.405 translate <-1/3, 1/3, -1/3> rotate y*roty transform trans_it }, lev - 1, 0 ) do_it( transform { rotate x*-degrees(atan2(1, (1 / sqrt(2)))) rotate y*45 scale 0.405 translate <-1/3, 1/3, -1/3> rotate x*180 rotate y*roty transform trans_it }, lev - 1, 0 ) #local roty = roty + 90; #end #end #end union { do_it( transform { translate <0, 1, 0> }, 5, // recursion level 1 // set to one, always ) rotate y*45 rotate z*-10 rotate y*-45 rotate y*-30 } plane { // floor <0, 1, 0>, 0 pigment { color rgb 1 } finish { ambient 0 diffuse 1 } } #if (use_rad = false) light_source { <0, 0, -3000> color rgb 1 rotate x*45 rotate y*45 } #end /* actual end of this file */