// This work is licensed under the Creative Commons Attribution 3.0 Unported License.
// To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/
// or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View,
// California, 94041, USA.

// Persistence Of Vision Ray Tracer Scene Description File
// File: crackle3.pov
// Desc: crackle pattern demonstration scene
// Date: April 2001
// Auth: Christoph Hormann

// -w400 -h200
// -w512 -h256 +a0.3

#version 3.7;

global_settings { assumed_gamma 1.0 }

#include "colors.inc"

global_settings {
  // conditionally comply with gamma correction handling
  #if (version < 3.7)
    assumed_gamma 1.0
  #end
}

light_source {
   <1.6, 1.9, 2.7>*10000
   rgb 1.3
}

//-------------------------------------------------------------------------
// This scene uses a non-standard camera set-up. 
// (See CAMERA in the included documentation for details.) 
// If you are new to POV-Ray, you might want to try a different demo scene.
//-------------------------------------------------------------------------
camera {
   location    <7, 24, 12>
   direction   y
   sky         z
   up          z
   right       2.5*x
   look_at     <0.0, 0, 0.3>
   angle       30
}


sphere {
   <0, 0, 0>, 1
   texture {
      pigment {
         color rgb < 0.60, 0.70, 0.95 >
      }
      finish {
         diffuse 0
         ambient 1
      }
   }
   scale 100000
   no_shadow
   hollow on
}

plane {
   z, 0
   
   texture {
      pigment {
         crackle
         color_map {
            [ 0.0 color rgb<0.356, 0.321, 0.274> ]
            [ 0.1 color rgb<0.611, 0.500, 0.500> ]
            [ 0.4 color rgb<0.745, 0.623, 0.623> ]
            [ 1.0 color rgb<0.837, 0.782, 0.745> ]
         }
         warp { turbulence 0.6 }
      }
      finish {
         diffuse 0.6
         ambient 0.1
         specular 0.2
         reflection {
            0.2, 0.6
            fresnel on
         }
         conserve_energy
      }
   
   }
   
}

#macro Objs(Offs)

union {
   #local fn_Crack=
   function {
      pigment {
         crackle
         metric 2.5
         offset Offs
         color_map { [0 rgb 0][1 rgb 1] }
         scale 0.7
      }
   }
   
   
   #local T_Crack=
   texture {
      pigment {
         crackle
         metric 2.5
         offset Offs
         color_map {
            [ 0.0000 color rgb<0.2353, 0.1333, 0.4824> ]
            [ 0.1000 color rgb<0.5647, 0.4353, 0.8000> ]
            [ 0.2000 color rgb<0.6549, 0.4000, 0.8275> ]
            [ 0.3000 color rgb<0.7294, 0.4039, 0.8471> ]
            [ 0.7000 color rgb<0.9059, 0.5255, 0.8980> ]
            [ 0.8000 color rgb<1.0000, 0.6784, 0.8549> ]
            [ 0.9000 color rgb<0.9725, 0.6980, 0.5922> ]
            [ 0.9300 color rgb<0.9490, 0.7255, 0.4078> ]
            [ 0.9800 color rgb<0.9725, 0.7255, 0.3294> ]
            [ 1.0000 color rgb<0.3000, 0.2000, 0.8000> ]
         }
         scale 0.7
      }
      finish {
         ambient 0.1
         diffuse 0.7
         brilliance 1.3
         specular 0.3
      }
   }
   
   superellipsoid {
      <0.1, 0.1>
      scale <1.0, 1.0, 0.6>
      texture { T_Crack }
      translate <0.0, 3.0, 0.3>
   }
   
   superellipsoid {
      <0.1, 0.1>
      scale <1.0, 1.0, 0.6>
      
      texture {
         pigment { rgb <0.2, 0.8, 0.5> }
         finish {
            specular 0.5
            roughness 0.04
            diffuse 0.8
            brilliance 2.0
            ambient 0.1
         }
         normal {
            crackle 0.7
            metric 2.5
            offset Offs
            scale 0.7
         }
      }
      
      translate <0.0, -3.0, 0.3>
   }
   
   isosurface {
      function { z-fn_Crack(x, y, 0.6).red*0.35 }
      max_gradient 1.1 + (1-Offs)*0.4
      accuracy 0.001
      contained_by { box { <-1.0,-1.0,-0.6>,<1.0,1.0,1.1> } }
      
      texture {
         pigment { rgb <0.3, 0.2, 0.95> }
         finish {
            specular 0.5
            roughness 0.04
            diffuse 0.8
            brilliance 2.0
            ambient 0.1
         }
      }
      
      translate 0.6*z
   }
   
   object {
      text {
         ttf "crystal.ttf",
         concat("offset ", str(Offs,0,2)),
         0.1, 0
         
         rotate 90*x
         rotate 180*z
         scale 0.3
         translate <0.85, 4.01, 0.5>
         
         texture {
            pigment { color Red*0.8 }
         }
      }
   }
   
   translate -1*y
}
#end


object { Objs(0.0)  translate -5.0*x }
object { Objs(0.25) translate -2.5*x }
object { Objs(0.5)  translate  0.0*x }
object { Objs(0.75) translate  2.5*x }
object { Objs(1.0)  translate  5.0*x }
