// Last edited on DATE TIME by USER
// Processed by remove-cam-lights

background{ color rgb < 1.0, 1.0, 1.0 > }

#declare tx_red =
texture{
  pigment{ color rgb < 0.90, 0.20, 0.20 > }
  finish{ diffuse 0.8 ambient 0.4 specular 0.5 roughness 0.005 }
}

#declare tx_blue =
texture{
  pigment{ color rgb < 0.30, 0.30, 1.0 > }
  finish{ diffuse 0.8 ambient 0.5 specular 0.7777777 roughness 0.005 }
}

#declare tx_green =
texture{
  pigment{ color rgb < 0.18, 0.80, 0.18 > }
  finish{ diffuse 0.8 ambient 0.4 specular 0.5 roughness 0.005 }
}

#declare tx_steel =
texture{
  pigment { rgb <0.55, 0.5, 0.45> }
  finish { metallic ambient 0.1 diffuse 0.65 specular 0.85 roughness 0.01 reflection 0.45 brilliance 1.5}
}

#declare tx_black =
texture{
  pigment{ color rgb < 0.60, 0.30, 0.60 > }
  finish{ diffuse 0.5 ambient 0.2 }
}

#declare tx_glass =
texture{
  pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 }
  finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 }
}

#declare tx_checkers =
texture{
  pigment{ checker color rgb < 0.10, 0.32, 0.60 >, color rgb < 1.00, 0.97, 0.90 > }
  finish{ diffuse 0.9 ambient 0.1 }
  scale 2.0
}

#declare zero = 0.0000001;
#declare rseed = seed(10);
#declare raio = 2.000;
#declare a1 = -((2*clock-1)*(2*clock-1))+1;
#declare a2 = -a1;

#declare p0 = <0,0,0>;
#declare p1 = <0.5,0.5*a1,2>;
#declare p2 = <1.5,1.5*a2,3>;
#declare p3 = <2*a1,2,1>;

#declare q0 = <2.5,2.5*a1,3>;
#declare q1 = <3,3*a2,1>;
#declare q2 = <3.5,3.5,1*a1>;
#declare q3 = <4*a1,5,1>;

#declare s0 = <0,0,0>;
#declare s1 = <-0.5,-0.5*a1,2>;
#declare s2 = <-1.5,-1.5*a2,3>;
#declare s3 = <-2*a1,-3,1>;

#declare t0 = <-2.5,-2.5*a2,3>;
#declare t1 = <-3*a1,-3,1>;
#declare t2 = <-3.5*a2,-3.5,1>;
#declare t3 = <-2,-5*a2,2>;

#declare v0 = <0,0,0>;
#declare v1 = <0.5,-0.5,2*a2>;
#declare v2 = <1.5,-1.5,3*a1>;
#declare v3 = <2,-2,1>;

#declare x0 = <2.5,-2.5,3>;
#declare x1 = <3,-3*a1,1>;
#declare x2 = <3.5,-3.5,1>;
#declare x3 = <4*a1,-4,0>;

#declare r0 = 1;
#declare r1 = 0.1;
#declare r2 = 0.2;
#declare r3 = 0.1;

#macro Interpola2(P0,P1,tt)
  ((1-tt)*P0 + tt*P1)
#end

#macro Interpola4(p0,p1,p2,p3,tt)

  #local p01 = Interpola2(p0,p1,tt);
  #local p12 = Interpola2(p1,p2,tt);
  #local p23 = Interpola2(p2,p3,tt);
  #local p012 = Interpola2(p01,p12,tt);
  #local p123 = Interpola2(p12,p23,tt);
  #local p0123 = Interpola2(p012,p123,tt);
  p0123
#end

#macro curva (p0,r0,p1,r1,p2,r2,p3,r3)

  #local tt = 0.0;
  #while (tt <= 1.0)
    object{ sphere { <0,0,0>, Interpola4(r0,r1,r2,r3,tt) }  translate Interpola4(p0,p1,p2,p3,tt) }
    #local tt = tt + 0.01;
  #end

#end

#macro tentaculo (p0,p1,p2,r0,q1,q2,q3,r1)

  #local raio0 = Interpola2(r0,r1,0);
  #local raio1 = Interpola2(r0,r1,0.16);
  #local raio2 = Interpola2(r0,r1,0.32);
  #local raio3 = Interpola2(r0,r1,0.5);
  #local raio4 = Interpola2(r0,r1,0.833);
  #local raio5 = Interpola2(r0,r1,0.666);
  #local raio6 = Interpola2(r0,r1,1.0);

  curva(p0,raio0,p1,raio1,p2,raio2,(p2+q1)/2,raio3)
  curva((p2+q1)/2,raio3,q1,raio4,q2,raio5,q3,raio6)
#end

#declare quatrotentaculos =
union {
  tentaculo (p0,p1,p2,r0,q1,q2,q3,r1)
  tentaculo (s0,s1,s2,r0,t1,t2,t3,r1)
  union { tentaculo  (v0,v1,v2,r0,x1,x2,x3,r1) rotate<0,0,180> }
  tentaculo (v0,v1,v2,r0,x1,x2,x3,r1)
}

union {
  box { <-20,-20,-1>, <+20,+20,0> texture{ tx_checkers }  }
  union {
    union {
      object {quatrotentaculos }
      object {quatrotentaculos rotate<0,0,235>}
      scale <1,1,-1>
      translate<0,0,4>
    }
    union {
      cylinder {<0,0,0>,<0,0,2>,1}
      sphere { <0,0,2> 1.2}
      cone {<0,0,2.5>,1.4,<0,0,4>,0}
      translate <0,0,4>
    }
    texture {tx_red}
  }
}

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 0.00 >;
#declare raio_cena = 14;
#declare dir_camera = < 5, 20, 23 >;
#declare dist_camera = 16.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)