#version unofficial megapov 0.6; #include "colors.inc" #include "stones.inc" global_settings{ max_trace_level 20 } //Camera & light stuff camera{angle 35 ultra_wide_angle location <2,3,-5>*.9*2 look_at 0} light_source{<2,3,-5>*.9 color .1 fade_distance 5 fade_power 2 shadowless} light_source{ <-10,20,-20> color .9 spotlight point_at <1,-1,0> falloff 6 radius 4 area_light .5*z,.5*x,3,3 circular orient adaptive 1 jitter } //Interpolation //GC - global current //GS - global start //GE - global end //TS - target start //TE - target end //Method - interpolation method: // Method = 0 - cosine interpolation // Method > 0 - exponential (1 - linear, etc) #macro Interpolate(GC,GS,GE,TS,TE,Method) (#if(Method!=0) (TS+(TE-TS)*pow((GC-GS)/(GE-GS),Method)) #else #local X=(GC-GS)/(GE-GS); #local F=(1-cos(X*pi))*.5; (TS*(1-F)+TE*F) #end) #end //Macro to create the "Menger sponge" fractal #declare D=sqrt(8)/2; #declare e=1.5; #declare e2=5; #declare SMax=3; #macro ISponge(p1,R,l) #if(l>1) ISponge(p1,R/3,l-1) ISponge(p1+R/3*x,R/3,l-1) ISponge(p1+R/3*z,R/3,l-1) ISponge(p1+R/3*2*x,R/3,l-1) ISponge(p1+R/3*y,R/3,l-1) ISponge(p1+R/3*z+R/3*2*x,R/3,l-1) ISponge(p1+R/3*2*z,R/3,l-1) ISponge(p1+R/3*2*z+R/3*x,R/3,l-1) ISponge(p1+R/3*2*z+R/3*2*x,R/3,l-1) ISponge(p1+R/3*y+R/3*2*x,R/3,l-1) ISponge(p1+R/3*y+R/3*2*z,R/3,l-1) ISponge(p1+R/3*y+R/3*2*z+R/3*2*x,R/3,l-1) ISponge(p1+R/3*2*y,R/3,l-1) ISponge(p1+R/3*2*y+R/3*x,R/3,l-1) ISponge(p1+R/3*2*y+R/3*2*x,R/3,l-1) ISponge(p1+R/3*2*y+R/3*z,R/3,l-1) ISponge(p1+R/3*2*y+R/3*z+R/3*2*x,R/3,l-1) ISponge(p1+R/3*2*y+R/3*2*z,R/3,l-1) ISponge(p1+R/3*2*y+R/3*2*z+R/3*x,R/3,l-1) ISponge(p1+R/3*2*y+R/3*2*z+R/3*2*x,R/3,l-1) #else #local L1=p1+R/6; #local L2=p1+; #local L3=p1+; #local L4=p1+; #local L5=p1+; #local L6=p1+; #local L7=p1+; #local L8=p1+; cylinder{vnormalize(L1)*Interpolate(vlength(L1),0,D,0,D,e),vnormalize(L2)*Interpolate(vlength(L2),0,D,0,D,e),R/3,1} cylinder{vnormalize(L2)*Interpolate(vlength(L2),0,D,0,D,e),vnormalize(L3)*Interpolate(vlength(L3),0,D,0,D,e),R/3,1} cylinder{vnormalize(L3)*Interpolate(vlength(L3),0,D,0,D,e),vnormalize(L4)*Interpolate(vlength(L4),0,D,0,D,e),R/3,1} cylinder{vnormalize(L4)*Interpolate(vlength(L4),0,D,0,D,e),vnormalize(L1)*Interpolate(vlength(L1),0,D,0,D,e),R/3,1} cylinder{vnormalize(L5)*Interpolate(vlength(L5),0,D,0,D,e),vnormalize(L6)*Interpolate(vlength(L6),0,D,0,D,e),R/3,1} cylinder{vnormalize(L6)*Interpolate(vlength(L6),0,D,0,D,e),vnormalize(L7)*Interpolate(vlength(L7),0,D,0,D,e),R/3,1} cylinder{vnormalize(L7)*Interpolate(vlength(L7),0,D,0,D,e),vnormalize(L8)*Interpolate(vlength(L8),0,D,0,D,e),R/3,1} cylinder{vnormalize(L8)*Interpolate(vlength(L8),0,D,0,D,e),vnormalize(L5)*Interpolate(vlength(L5),0,D,0,D,e),R/3,1} cylinder{vnormalize(L1)*Interpolate(vlength(L1),0,D,0,D,e),vnormalize(L5)*Interpolate(vlength(L5),0,D,0,D,e),R/3,1} cylinder{vnormalize(L2)*Interpolate(vlength(L2),0,D,0,D,e),vnormalize(L6)*Interpolate(vlength(L6),0,D,0,D,e),R/3,1} cylinder{vnormalize(L3)*Interpolate(vlength(L3),0,D,0,D,e),vnormalize(L7)*Interpolate(vlength(L7),0,D,0,D,e),R/3,1} cylinder{vnormalize(L4)*Interpolate(vlength(L4),0,D,0,D,e),vnormalize(L8)*Interpolate(vlength(L8),0,D,0,D,e),R/3,1} #end #end //Object to be used as the pattern #declare Object= blob{ threshold .5 ISponge(-1,2,4) translate 1 scale .5 } sky_sphere{pigment{bozo color_map{[0 rgb .3][1 rgb .6]} scale .4 turbulence .3}} //Create (F1) and tile (F2) the pattern #declare F1= function{pigment{object{Object rgb 0 rgb 1}}} #declare F2= function{F1(abs(x)-floor(abs(x)),abs(y)-floor(abs(y)),abs(z)-floor(abs(z)))} #declare Tex1= texture{ function{F2(x,y,z)} texture_map{ [0 T_Stone24] [1 T_Stone13] } } //Scene objects union{ plane{y,0} plane{-z,-.5+.125} sphere{0,1 scale <.6,1.5,.6> translate <2,0,-2>} cone{0,1,y*1.8,0 scale <1,1,.5> translate z*(.5-.125)} box{<-2+.1,0,-2+.1>,<-1-.1,1.8,-1-.1>} torus{.75,.2 translate <2,0,-2>} texture{Tex1 translate <0,-.25,0>} }