Utilisation : Les liens ne sont pas apparents. Pour obtenir des informations sur un mot clé, cliquez-le dans le script !
// Persistence Of Vision raytracer version 3.5 sample file. //============================================ // The field, new improved version October. 2001 // Copyright Gilles Tran 2001 // http://www.oyonale.com // // Render with a 2.67 ratio such as 320*120, 640*240, 1024*384, 1280*480 //-------------------------------------------- // Uncomment AreaOK=true below to turn on the area light // This will blur the shadow under the submarine // but the rendering time will extremely slow global_settings {max_trace_level 15} #declare AreaOK = false; #declare AreaOK = true; #include "colors.inc" #include "functions.inc" //======== // General //======== // Camera //------- #declare PdV = <-20,-20,-400>; camera { location PdV direction z*2 up y right 8*x/3 look_at <-20, 30, 0> } //-------------------- // reorientation macro //-------------------- #macro mOrient(P1, P2) #local yV1 = vnormalize(P2-P1); #local xV1 = vnormalize(vcross(yV1, z)); #local zV1 = vcross(xV1, yV1); matrix <xV1.x, xV1.y, xV1.z, yV1.x, yV1.y, yV1.z, zV1.x, zV1.y, zV1.z, P1.x, P1.y, P1.z> #end //------- // colors //------- #declare colWater1 = rgb <0, 79, 159>/255; #declare colWater2 = rgb <7, 146, 217>/255; #declare colWater3 = rgb <82, 239, 238>/255; #declare colSub = <7/255, 146/255, 217/255>; //------- // lights //------- light_source {<-10, 1000,-10> color colWater2*10 #if (AreaOK) area_light x*200, z*200, 3, 3 adaptive 1 jitter orient #end } light_source {<-200,-1000,-300> color colWater2*2 shadowless media_interaction off} light_source {PdV color colWater2*2 shadowless media_interaction off} //-------------- // mine textures //-------------- #declare txtMine = texture { pigment {color colWater3*0.1} finish {ambient 0 diffuse 0.4 specular 0.03 roughness 0.2 reflection 0.05} } #declare txtCable = texture { pigment {color colWater3*0.1} finish {ambient 0 diffuse 0.1 specular 0.02 roughness 0.2} } //------------- // sub textures //------------- #declare txtSkin = texture { pigment { function {min(1, max(0, y))} turbulence 0.01 omega 1.5 lambda 5 poly_wave 1.5 color_map {[0 Clear][0.25 rgbt <0, 0, 0, 0.7>] [0.4 rgbt <0, 0, 0, 0.3>]} scale 38 translate -y*17 } finish {ambient 0 diffuse 0.6 specular 0.1 roughness 1/10} } #declare trb = 0.0001; #declare pigLettre = pigment {bozo color_map {[0 White*1.3][1 White*0.5]}} #declare txtLettre = texture { // submarine name pigment { object { text {ttf "cyrvetic.ttf" "PERSISTENCE" 10, 0.3*x translate -z*0.5 scale <1, 1, 10> } pigment {color Clear}, pigment {pigLettre} } rotate y*90 scale 1.5 translate <-10,-1,-25> } finish {ambient 0 diffuse 0.4} } #declare txtSub0 = texture { pigment {rgb colSub*0.2} finish {ambient 0 diffuse 0.3 specular 0.05 roughness 0.1} } // Thanks to Bob H. for the help regarding these textures #declare txtSubBase = texture { pigment { cells color_map { [.45 rgb <colSub.x*0.1, colSub.y*0.1, colSub.z*0.1>] [.55 rgb <colSub.x, colSub.y, colSub.z>*0.8] } scale <100, .125, 1> } scale 3 finish {ambient 0 diffuse 0.3 specular 0.05 roughness 0.1} } #declare txtSubTop = texture {txtSubBase} texture { pigment { cells color_map { [.25 rgbf <colSub.x*0.1, colSub.y*0.1, colSub.z*0.1, 0>] [.75 rgbf <colSub.x, colSub.y, colSub.z, 1>] } scale <100, 0.75, 1> } scale 3.5 finish {ambient 0 diffuse 0.3 specular 0.05 roughness 0.1} } texture { pigment { cells color_map { [.25 rgbf <colSub.x*0.4, colSub.y*0.4, colSub.z*0.4, 0>] [.75 rgbf <colSub.x, colSub.y, colSub.z, 1>] } scale <100, 0.45, 1> } scale 2.5 finish {ambient 0 diffuse 0.3 specular 0.05 roughness 0.1} } texture {txtSkin} #declare txtSubBottom = texture {txtSubBase} texture { pigment { cells color_map { [.25 rgbf <colSub.x*0.5, colSub.y*0.5, colSub.z*0.5, 0>] [.75 rgbf <colSub.x, colSub.y, colSub.z, 1>] } scale <100, .75, 1> } scale 5 finish {ambient 0 diffuse 0.3 specular 0.05 roughness 0.1} } texture { pigment { cells color_map { [0 rgbf <colSub.x*0.5, colSub.y*0.5, colSub.z*0.5, .5>] [1 rgbf <colSub.x, colSub.y, colSub.z, 1>] } scale <100, 0.25, 1> } scale 5 translate 1 finish {ambient 0 diffuse 0.3 specular 0.05 roughness 0.1} } texture {txtLettre} texture {txtSkin} //===== // Mine //===== // Spikes //------- #declare Spike = union { #declare rSpike1 = 0.08; #declare rSpike2 = rSpike1*0.3; #declare ySpike = 0.4; cone {0, rSpike1, y*ySpike, rSpike2} sphere {0, rSpike2 translate y*ySpike} sphere {0, rSpike1*1.5 scale <1, 0.3, 1>} #declare i = 0; #while (i<360) sphere {0, 0.015 scale <2, 1, 2> translate <rSpike1*2.8,-0.04, 0> rotate y*i} #declare i = i+30; #end translate y } //---------- // Mine body //---------- #declare rd = seed(0); #declare MineBody = union { isosurface { function {x*x+y*y+z*z-1 + f_noise3d(x*10, y*10, z*10)*0.05} max_gradient 2.492 contained_by {sphere{0, 1}} } #declare i = 0; #while (i<360) #declare j = 0; #while (j<180) object {Spike rotate z*(i+rand(rd)*2) rotate y*(j+rand(rd)*2)} #declare j = j+45; #end #declare i = i+45; #end object {Spike rotate 90*y} object {Spike rotate -90*y} rotate 360*rand(rd) } //--------------------------------- // Mine cable and decorative collar //--------------------------------- #declare rFil = 0.03; #declare yFil = 100; #declare MineCable = isosurface { function {f_helix1(x, y, z, 3, 35, 0.35*rFil, 0.55*rFil, 2, 1, 0)} contained_by {box {<-rFil, 0,-rFil>, <rFil, yFil, rFil>}} max_gradient 2.552 scale <1,-1, 1>*3 translate -y } #declare MineCollar = lathe { cubic_spline 15, <0.058, 0.003>, <0.081, 0.000>, <0.101, 0.055>, <0.099, 0.085>, <0.104, 0.132>, <0.066, 0.152>, <0.095, 0.169>, <0.089, 0.194>, <0.144, 0.227>, <0.143, 0.281>, <0.145, 0.307>, <0.109, 0.325>, <0.067, 0.353>, <0.031, 0.362>, <0.030, 0.363> translate -y*0.363 } //----- // Mine //----- #declare Mine = union { object {MineBody} sphere {0, 1 scale <0.4, 0.14, 0.4> translate -y*0.91} #declare i = 0; #while (i<360) cylinder {0, -y*0.1, 0.02 translate <0.35,-0.91, 0> rotate y*i} #declare i = i+30; #end object {MineCollar scale <1.2, 2, 1.2> translate -y*0.92} object {MineCollar translate -y*2} object {MineCable} texture {txtMine} } //========== // Submarine //========== #declare Sc = 3; // general scaling parameter #declare SX = 6*Sc; // x scaling #declare SYbot = 10*Sc; // y scaling for the bottom #declare SYtop = 2*Sc; // y scaling for the top #declare SZfront = 20*Sc; // z scaling for the front #declare SZrear = 100*Sc; // z scaling for the rear //----------- // Main parts //----------- #declare Part1 = blob { // bottom front threshold 0.6 sphere {0, 1, 1} cylinder {-z*2, z, 0.04,-1 translate <-0.2,-0.3, 1> pigment {Black}} cylinder {-z*2, z, 0.04,-1 translate <-0.17,-0.18, 1> pigment {Black}} sphere {0, 1, 1 scale <0.1, 0.45, 1.05>} sphere {0, 1, 1 scale <0.3, 0.45, 0.8>} } #declare Part2 = blob { // top front threshold 0.6 sphere {0, 1, 1} sphere {0, 1, 1 scale <0.3, 0.45, 0.8>} sphere {0, 1, 1 scale <0.2, 1.2, 1.05>} } #declare Part3 = blob { // bottom rear threshold 0.6 sphere {0, 1, 1} cylinder {-x, 0, 1, 1 scale <0.5, 0.03, 0.02>> translate <0,-0.05, 0.45>} cylinder {-y, 0, 1, 1 scale <0.03, 0.2, 0.02> translate <0,-0.05, 0.45>} } #declare Part4 = blob { // top rear threshold 0.6 sphere {0, 1, 1} cylinder {-y, y, 2, 2 scale <0.03, 0.3, 0.012> translate <0, 0.5, 0.45>} sphere{0, 1, 1 scale <0.2, 1.2, 0.4>} cylinder {-x, 0, 1, 1 scale <0.2, 0.2, 0.04> rotate x*-10 translate <0, 1.5, 0.2>} cylinder {0, y, 0.2, 2 scale <0.6, 2.5, 0.4>*0.7 translate <0,-0.05, 0.16>} cylinder {0, y, 0.2, 2 scale <0.4, 2.5, 0.4>*0.7 translate <0,-0.05, 0.165>} cylinder {0, y, 0.2, 2 scale <0.2, 2.5, 0.4>*0.7 translate <0,-0.05, 0.17>} } //---- // Top //---- #declare HalfSubTop = union { difference { object {Part2} // top front plane {y, 0} plane {z, 0 inverse} plane {x, 0 inverse} scale <SX, SYtop, SZfront> } difference { object {Part4} // top rear plane {y, 0} plane {z, 0} plane {x, 0 inverse} scale <SX, SYtop, SZrear> } } #declare SubTop = union { object {HalfSubTop} object {HalfSubTop scale <-1, 1, 1>} texture {txtSubTop} } //------- // Bottom //------- #declare HalfSubBottom = union { difference { object {Part1} // bottom front plane {y, 0 inverse} plane {z, 0 inverse} plane {x, 0 inverse} scale <SX, SYbot, SZfront> } difference { object {Part3} // bottom rear plane {y, 0 inverse} plane {z, 0} plane {x, 0 inverse} scale <SX, SYbot, SZrear> } } #declare SubBottom = union { object {HalfSubBottom} object {HalfSubBottom scale <-1, 1, 1>} texture {txtSubBottom} } //-------------------- // Decorative elements //--------------------/span> #declare Balustrade = union { #declare rB1 = 0.02; #declare rB2 = 0.04; #declare yB = 1; #declare rB3 = yB*6; #declarerB4 = 3; #declare zB = 20; #declare zB2 = 8; #declare i = 0; #while (i<zB) cylinder {0, y*yB, rB1 translate z*i} #declare i = i+zB/12; #end cylinder {0, z*zB, rB2 translate y*yB} cylinder {0, z*zB, rB2 translate y*yB*0.3} cylinder {0, z*zB, rB2 translate y*yB*0.6} union { difference {torus {rB3, rB2 rotate z*90} plane {y, 0} plane {z, 0 inverse} plane {z, 0 rotate x*-45}} cylinder {0,-z*zB*0.1, rB2 translate y*rB3 rotate x*-45} translate y*(yB-rB3) } union { difference {torus {rB4, rB2} plane {x, 0 inverse} translate <0, yB, 0>} difference {torus {rB4, rB1} plane {x, 0 inverse} translate <0, yB*0.5, 0>} #while (i<180) cylinder {0, y*yB, rB1 translate -z*rB4 rotate y*i} #declare i = i+180/14; #end scale <0.4, 1, 1> translate z*(rB4+zB) } union { difference {torus {rB3, rB2 rotate z*90} plane {y, 0} plane {z, 0 inverse} plane {z, 0 rotate x*-65}} cylinder {0,-z*zB*0.1, rB2 translate y*rB3 rotate x*-65} translate y*(yB-rB3) scale <1, 1,-1> translate z*(zB+rB4*2) } } //----- // guns //----- #declare Guns0 = union { superellipsoid {<0.3, 0.3> translate z scale <0.8, 1, 4>} union { cone {0, 0.4, z*12, 0.3} union { cone {0, 0.3, z*1.5, 0.5} difference { sphere {0, 0.5} cylinder {-z, z, 0.3} translate z*1.5 } translate z*12 } translate z*8 } translate -z*3 } #declare Wheel = blob { threshold 0.6 sphere {0, 1.3, 1 scale <1, 1.2, 1>>} cylinder {0,-y*3, 0.8, 1} #declare Teta = 0; #while (Teta<360) cylinder {0, x*3.4, 0.4, 1 rotate y*Teta} cylinder {0, y, 0.4, 1 translate x*3 rotate y*Teta} sphere {0, 0.6, 1 translate x*3 rotate y*Teta} sphere {0, 0.4, 1 translate x*3 rotate y*(Teta+6)} sphere {0, 0.4, 1 translate x*3 rotate y*(Teta+12)} sphere {0, 0.4, 1 translate x*3 rotate y*(Teta+18)} sphere {0, 0.4, 1 translate x*3 rotate y*(Teta+24)} sphere {0, 0.4, 1 translate x*3 rotate y*(Teta+30)} sphere {0, 0.4, 1 translate x*3 rotate y*(Teta+36)} sphere {0, 0.4, 1 translate x*3 rotate y*(Teta+42)} sphere {0, 0.4, 1 translate x*3 rotate y*(Teta+48)} sphere {0, 0.4, 1 translate x*3 rotate y*(Teta+6)} sphere {0, 0.5, 1 translate x*3 rotate y*(Teta+60)} sphere {0, 0.5, 1 translate x*3 rotate y*(Teta+66)} #declare Teta = Teta+72; #end } #declare Guns1 = union { object {Guns0} object {Wheel rotate y*10 scale 0.7 rotate z*90 translate -x*1.5} } #declare Eye = union { torus {4.5, 0.5} difference { sphere {0, 4.3} box {-5, 5 scale <1, 1, 0.05>} box {-5, 5 scale <1, 1, 0.05> translate z} box {-5, 5 scale <1, 1, 0.05> translate z*2} box {-5, 5 scale <1, 1, 0.05> translate z*3} box {-5, 5 scale <1, 1, 0.05> translate z*4} box {-5, 5 scale <1, 1, 0.05> translate -z} box {-5, 5 scale <1, 1, 0.05> translate -z*2} box {-5, 5 scale <1, 1, 0.05> translate -z*3} box {-5, 5 scale <1, 1, 0.05> translate -z*4} scale <1, 0.7, 1> } } #declare Ring1 = union { cylinder {-0.2*x, 0.2*x, 1.2} torus {1.1, 0.1 rotate z*90 scale <2, 1, 1> translate -x*0.2} torus {1.1, 0.1 rotate z*90 scale <2, 1, 1> translate x*0.2} } #declare Elbow1 = intersection {torus {2, 1} plane {z, 0 inverse} plane {x, 0 inverse}} #declare Thingie = union { torus {1.5, 0.3 rotate z*90 translate -x} cylinder {-x, x, 1.5} superellipsoid {<0.2, 0.2> scale <1.5, 2, 2.5> translate x*2.5} object {Eye scale 1.5/7 rotate -x*90 translate <2.5, 0,-2.5>} object {Eye scale 1.5/7 rotate -x*90 translate <2.5, 0,-2.5> scale <1, 1,-1>} object {Eye scale 1.5/7 rotate -x*90 translate x*4} object {Eye scale 1.5/7 rotate -x*90 translate x*16} cylinder {x*4, x*16, 1.2} torus {1.9, 0.1 rotate z*90 translate x*16.5} cylinder {x*16.5, x*17.5, 2} torus {1.9, 0.1 rotate z*90 translate x*17.5} cylinder {x*17.5, x*23, 1.5} union { torus {0.5, 0.1} intersection {torus {2.5, 0.5 rotate x*90} plane {y, 0 inverse} plane {x, 0} translate x*2.5} torus {0.5, 0.1 translate -x*2.5 rotate z*-30 translate x*2.5} torus {0.5, 0.1 translate -x*2.5 rotate z*-60 translate x*2.5} torus {0.5, 0.1 translate -x*2.5 rotate z*-90 translate x*2.5} union { cylinder {0, 9*x, 0.5} cylinder {2*x, 5*x, 0.7} torus {0.5, 0.2 rotate z*90 translate x*2} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*2.3} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*2.6} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*2.9} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*3.2} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*3.5} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*3.8} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*4.1} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*4.4} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*4.7} torus {0.5, 0.2 rotate z*90 translate x*5} torus {0.5, 0.3 rotate z*90 translate x*8} cone {0, 0.7, x, 0.9 translate x*8} torus {0.9, 0.2 rotate z*90 translate x*9} translate <2.5, 2.5, 0> } translate <2.5, 2, 1.7> } union { torus {0.5, 0.1} intersection {torus {2.5, 0.5 rotate x*90} plane {y, 0 inverse} plane {x, 0} translate x*2.5} torus {0.5, 0.1 translate -x*2.5 rotate z*-30 translate x*2.5} torus {0.5, 0.1 translate -x*2.5 rotate z*-60 translate x*2.5} torus {0.5, 0.1 translate -x*2.5 rotate z*-90 translate x*2.5} union { cylinder {0, 9*x, 0.5} cylinder {3*x, 6*x, 0.7} torus {0.5, 0.2 rotate z*90 translate x*3} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*3.3} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*3.6} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*3.9} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*4.2} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*4.5} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*4.8} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*5.1} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*5.4} torus {0.7, 0.2 scale <0.2, 1, 1> rotate z*90 translate x*5.7} torus {0.5, 0.2 rotate z*90 translate x*6} torus {0.5, 0.3 rotate z*90 translate x*8} cone {0, 0.7, x, 0.9 translate x*8} torus {0.9, 0.2 rotate z*90 translate x*9} translate <2.5, 2.5, 0> } translate <2.5, 2,-1.7> } union { superellipsoid {<0.2, 0.2> scale <1, 1.3, 2.6>} object {Eye scale 1/7 rotate -x*90 translate z*-2.6} object {Eye scale 1/7 rotate -x*90 translate z*2.6} object {Eye scale 1/7 rotate y*90 translate <0, 1.3, 1.7>} object {Eye scale 1/7 rotate y*90 translate <0, 1.3,-1.7>} cylinder{x, x*3, 1} torus {1, 0.2 rotate z*90 translate x*3} intersection {torus {4.5, 1 rotate x*90} plane {y, 0 inverse} plane {x, 0 inverse} scale <0.5, 1, 1> translate <3,-4.5, 0>} torus {1, 0.3 scale <0.5, 4, 1> translate <3+2.25,-3, 0>} translate <15, 4.5, 0> } #declare Teta = 0; #while (Teta<360) union { box {<0,-0.1,-0.05>, <12, 0.1, 0.05> translate <4, 1.2, 0>} cylinder {-x, 2*x, 0.1 translate y*1.5} sphere {0, 0.2 translate <20, 1.5, 0>} sphere {0, 0.1 translate <16.8, 2, 0>} sphere {0, 0.1 translate <17.2, 2, 0> rotate x*10} cylinder {x*20, x*23, 0.18 translate y*1.5} rotate x*Teta } #declare Teta = Teta+20; #end translate x } #declare GunSupport = union { superellipsoid {<0.6, 0.6> translate y scale <0.3, 3, 1> translate -z*2} union { union { superellipsoid {<0.7, 0.7> translate y scale <1.5, 3.8, 1>} #declare i = 0; #while (i<6) sphere {0, 0.2 translate <-1, i+0.5, 0.8>} sphere {0, 0.2 translate <0, i+0.1, 1>} sphere {0, 0.2 translate <1, i+0.5, 0.8>} #declare i = i+0.7; #end rotate -x*10 translate z*0.6 } cylinder {y*4, y*9, 0.6} sphere {0, 1 scale <4, 1, 4>} } } #declare Guns = union { union { object {Thingie rotate y*180 scale 0.5 rotate y*-90 rotate z*45 translate <0, 4, 5>} superellipsoid {<0.6, 0.6> translate -z scale <0.6, 1, 3> translate -x*0.5} object {Guns1 translate -x*1.7} object {Guns1 translate -x*1.7 scale <-1, 1, 1>} rotate x*-20 translate y*10 } object {GunSupport} } #declare GunsBack = union { union { object {Thingie rotate y*180 scale 0.5 rotate y*-90 rotate z*45 translate <0, 4, 5>} superellipsoid {<0.6, 0.6> translate -z scale <0.6, 1, 3> translate -x*0.5} object {Guns1 translate -x*1.7} object {Guns1 translate -x*1.7 scale <-1, 1, 1>} rotate x*-5 translate y*10 } object {GunSupport} } //------------------------------- // snorkels and vertical thingies //------------------------------- #declare Snorkel1 = union { cone {0, 0.3, y*2, 0.25} cone {y*2, 0.25, y*3, 0.1} union { difference {sphere {0, 1 scale <0.3, 0.2, 0.3>} plane {y, 0 inverse}} difference {sphere {0, 1 scale <0.3, 0.6, 0.3>} plane {y, 0}} translate y*3 } scale <0.8, 1, 0.8> } #declare Snorkel2 = blob { threshold 0.6 cylinder {-y, y*4, 0.2, 1} sphere {0, 0.4, 1 scale <1, 1, 2> translate y*3.5} sphere {0, 0.3, 1 scale <3, 1, 1> translate y*2.5} scale <0.8, 1, 0.8> } #declare Snorkel3 = union { blob { threshold 0.6 cylinder {0, y*3.4, 0.25, 1 scale <1, 1, 3> } cylinder {0, y*5, 0.03, 1 translate <0, 0,-0.5>} } union { cylinder {0, y*4, 0.03} sphere {0, 0.1 translate y*4} translate <-0.1, 0, 0.5> } scale <0.8, 1, 0.8> } //------------------------- // lots of decorative stuff //------------------------- #declare nDeco = 13; #declare Deco = array[nDeco] #declare Deco[0] = union { cylinder {0, y*2, 0.2} torus {1, 0.2 rotate x*90 translate y*3} scale 0.5 } #declare Deco[1] = cone {-y*0.5, 0.2, y*4, 0.1} #declare Deco[2] = blob { threshold 0.6 cylinder {-x, x, 0.25, 1 scale <1, 1, 2>} cylinder {0,-y, 0.21, 1 translate -x*0.8} cylinder {0,-y, 0.21, 1 translate x*0.8} translate y*0.7 scale 1 } #declare Deco[3] = object {Deco[2] rotate y*90} #declare Deco[4] = torus {1, 0.2 rotate z*90} #declare Deco[5] = object {Deco[3] rotate y*90 scale <1, 1.4, 1>} #declare Deco[6] = union { cylinder {0, y*0.4, 0.1} sphere {0, 1 scale <0.1, 0.1, 0.5> translate y*0.4} } #declare Deco[8] = difference {sphere {0, 1} cylinder {-z, 0, 0.8} scale <2, 0.5, 2> translate -y*0.2} #declare Deco[9] = difference {sphere {0, 1} cylinder {-z, 0, 0.9} scale <2, 0.5, 4> translate -y*0.2} #declare Deco[7] = cone {0, 0.08, y*2, 0.03 scale <1, 1, 2>} #declare Deco[10] = sphere {0, 1 scale <0.2, 0.1, 0.4>} #declare Deco[11] = object {Deco[4] scale 1.2} #declare Deco[12] = object {Deco[5] scale 1.3} #declare Ladder = union { #declare i = 0; #while (i<9) object {Deco[5] scale 0.8 rotate z*90 translate y*i*0.8} #declare i = i+1; #end } #declare Decos = union { #declare rd = seed(4); #declare Start0 = -40; #declare End0 = 40; #declare nstep = 200; #declare i = 0; #declare k = 0; #while (i<1) #declare j = i; #declare Start = <-rand(rd)*5*(mod(k, 2)*2-1), 1, (1-j)*Start0+j*End0>; #declare Dir = y; #declare Norm1 = <0, 0, 0>; #declare Inter = trace(SubTop, Start, Dir, Norm1); #if (vlength(Norm1) != 0) #if (vlength(vcross(Norm1, y)) < 0.9) #declare n = int(rand(rd)*nDeco); object {Deco[n] scale 0.4 mOrient(Inter, Inter+Norm1)} #end #end #declare k = k+1; #declare i = i+1/nstep; #end } #declare Submarine = union { union { object {SubTop} object {Decos texture {txtSubTop}} object {Ladder translate <-1.5, 4, 40>} object {Ladder translate <1.5, 4, 40>} object {Guns rotate y*180 scale 0.3 translate <0, 4, 30>} object {GunsBack scale 0.3 translate <0, 4, 70>} union { object {Snorkel1 translate z*3} object {Snorkel2} object {Snorkel3 translate -z*2} scale 2*<1, 1.1, 1> translate <0, 10, 50> } object {Balustrade scale 2.5 translate <-4, 2, 5>} object {Balustrade scale 2.5 translate <-4, 2, 5> scale <-1, 1, 1>} union { object {Balustrade scale 2 translate <-3, 2, 5>} object {Balustrade scale 2 translate <-3, 2, 5> scale <-1, 1, 1>} rotate y*180 translate z*100 } texture {txtSub0} scale <1, 1.3, 1> } object {SubBottom} } //====== // Final //====== #declare posSub = <19, 5, 0>; #declare rotSub = -15; //------ // mines //------ union { light_source { object {Mine rotate y*80 scale 14} light_source {<-10,-20,-40> color rgb -4 shadowless} // negative light !!! translate <-110, 41,-205> global_lights on } light_group { object {Mine rotate -y*10 scale 8} light_source {<-10,-20,-40> color rgb -2 shadowless} translate <-75, 25,-165> global_lights on } object {Mine rotate y*125 scale 5 translate <105,-5,-155>} translate y*-8 } union { #declare rd = seed(0); #declare i = 0; #while (i<20) object {Mine rotate y*125 scale 3 translate <50+rand(rd)*(200+i*10), (0.5-rand(rd))*60, i*30>} object {Mine rotate y*150 scale 3 translate <-50-rand(rd)*(200+i*10), (0.5-rand(rd))*60, i*30>} object {Mine rotate y*10 scale 3 translate <50+rand(rd)*(200+i*10), (0.5-rand(rd))*140+50+i*10, i*30>} object {Mine rotate y*37 scale 3 translate <-50-rand(rd)*(200+i*10), (0.5-rand(rd))*140+50+i*10, i*30>} #declare i = i+1; #end rotate y*rotSub translate posSub translate -z*150 translate x*30 } //-------------------- // submarine and media //-------------------- union { object {Submarine scale 3/4 translate z*-10 translate y*10} sphere {0, 1 scale 410 hollow texture {pigment {Clear} finish {ambient 0 diffuse 0}} interior { media { scattering {5, 0.00034 eccentricity 0.7 extinction 0.8} absorption <255-23, 255-171, 255-239>*0.0005/255 intervals 3 method 3 } } } scale 4 rotate y*rotSub translate posSub }
Et voici ce que nous obtenons :
