home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #7 / amigamamagazinepolishissue1998.iso / varia / povray3 / povray3_fpu / pov3demo / showoff / matches.pov < prev    next >
Text File  |  1997-12-12  |  7KB  |  230 lines

  1. // Persistence Of Vision raytracer version 3.0 sample file.
  2. // Several match sticks, one burning, and one about to burn.
  3. // By Dan Farmer 1996
  4. // Inspired by an Aladdin Software Security, Inc. advertisement photo
  5.  
  6. #version 3.0
  7. global_settings { assumed_gamma 2.2 }
  8.  
  9. #include "colors.inc"
  10. #include "textures.inc"
  11. #include "woods.inc"
  12.  
  13. // Rendering dimensions should be multiples of these values
  14. #declare Width =  9
  15. #declare Height = 10
  16. #declare Aspect = Width/Height
  17.  
  18. camera {
  19.    location  <0, 0,-35>
  20.    direction <0, 0, 1>
  21.    up        <0, 1, 0>
  22.    right   x * Aspect
  23.    look_at   <0, 0, 0>
  24.    angle 41 //45
  25. }
  26.  
  27. // Background plane.  Didn't use sky_sphere because I want gradient shadows
  28. plane { z, 60
  29.     inverse  // needed to get camera "outside" plane
  30.     pigment { green 0.3 }
  31.     finish { ambient 0 diffuse 0.3 }
  32. }
  33.  
  34. // A spotlight glancing off the left corner of the matchsticks
  35. // and highlighting the matchheads
  36. // The light is declared shadowless so that it won't interact with
  37. // the atmosphere or cast shadows on the background
  38. light_source {<-20, 30, -25> color White * 1.5
  39.     spotlight
  40.     point_at <10,0,0>
  41.     radius 10
  42.     falloff 11
  43.     shadowless
  44. }
  45.  
  46. // Background lighting (primarily illuminates the backplane)
  47. // The light is declared shadowless so that it won't interact with
  48. // the atmosphere or cast shadows on the background
  49. light_source {<20, 20,  0> color White * 2
  50.     spotlight
  51.     point_at <0, 0, 60>
  52.     radius  120
  53.     falloff 130
  54.     shadowless
  55. }
  56.  
  57. // Some haze to make the flame light sources glow
  58. #declare Atmosphere1 = atmosphere {
  59.     type 4
  60.     samples 30
  61.     distance 500
  62.     scattering 0.1
  63.     aa_level 8
  64.     aa_threshold 0.1
  65.     jitter 0.1
  66. }
  67.  
  68. // Several objects need to light up with the top of the matchstick
  69. // so use a constant so its easier to adjust everything
  70. #declare Match_Height = 14
  71.  
  72. #declare Match_Stick =
  73. superellipsoid { <0.25, 0.25>
  74.     // Underlying texture
  75.     texture {
  76.         T_Wood10            // light tan for soft match wood
  77.         rotate x*90         // align with length of match stick
  78.         scale 0.2
  79.         normal { bumps 0.3 scale <0.1, 0.2, 0.1> } // roughen the surface
  80.     }
  81.     // The waxy coating near the match heads
  82.     texture {
  83.         pigment {
  84.             gradient y
  85.             color_map {
  86.                 [-1.00  Clear ]
  87.                 [ 0.90  Clear ]
  88.                 [ 1.00  Black ]
  89.             }
  90.         }
  91.     }
  92.     scale <1, Match_Height, 1>
  93. }
  94.  
  95. // Match head is just several stacked, scaled blobby spheres
  96. #declare Match_Head =
  97. blob {
  98.     threshold 0.15
  99.     sphere { <0,Match_Height -1, 0>, 1.00, 1 }
  100.     sphere { <0,Match_Height,    0>, 1.40, 1 }
  101.     sphere { <0,Match_Height +1, 0>, 1.60, 1 }
  102.     sphere { <0,Match_Height +2, 0>, 1.80, 1 }
  103.  
  104.     pigment { Red }
  105.     finish { diffuse 0.3 }
  106.     normal {
  107.         bumps 0.6
  108.         scale 0.075
  109.     }
  110. }
  111.  
  112. // FadeDst controls the size of the flame element
  113. #declare FadeDst = 1.75 //2
  114.  
  115. // FadePwr determines spread of the glow
  116. #declare FadePwr = 3.25   //3
  117.  
  118. // The burning match is rotated after the flame is applied, so
  119. // the flame must first be counter rotated so that it'll still
  120. // be pointing directly upward
  121. #declare Burning_Match_Rotation = <0,0, 10>
  122.  
  123. // The match flame is an array of light sources.  I initially used
  124. // spheres to help me set up the positions and sizes (FadeDst ~= radius)
  125. // Flames are arranged in three columns.  The first is the major flame
  126. // on the leftmost (burning) match.  The last is the new flame bursting
  127. // from the match next to it, and the center column is just a little
  128. // "fill" between the two.
  129. #declare Flame =
  130. union {
  131.     light_source {<0, 14,   -1> Red    * 0.5 fade_distance FadeDst fade_power FadePwr * 1.25}
  132.     light_source {<0, 12,   -1> Red    * 1.0 fade_distance FadeDst fade_power FadePwr}
  133.     light_source {<0, 10,   -1> Red    * 1.2 fade_distance FadeDst fade_power FadePwr}
  134.     light_source {<0,  8,   -1> Red    * 1.2 fade_distance FadeDst fade_power FadePwr}
  135.     light_source {<0,  6,   -1> Orange * 1.3 fade_distance FadeDst fade_power FadePwr}
  136.     light_source {<0,  4,   -1> Orange * 1.4 fade_distance FadeDst fade_power FadePwr}
  137.     light_source {<0,  2,   -1> Yellow * 1.4 fade_distance FadeDst fade_power FadePwr}
  138.     light_source {<0,  0,   -1> Orange * 1.5 fade_distance FadeDst fade_power FadePwr}
  139.     light_source {<0, -0.45,-1> NeonBlue fade_distance 0.75 * FadeDst fade_power 1.5}
  140.  
  141.     light_source {< 2, 3,   -1> Orange * 0.8 fade_distance FadeDst fade_power FadePwr * 1.35}
  142.     light_source {< 2, 1,   -1> Yellow * 0.8 fade_distance FadeDst fade_power FadePwr}
  143.  
  144.     light_source {< 4,10,   -1> Red    * 0.5 fade_distance FadeDst * 0.5 fade_power FadePwr * 2.20}
  145.     light_source {< 4, 9,   -1> Red    * 0.5 fade_distance FadeDst * 0.5 fade_power FadePwr * 2.00}
  146.     light_source {< 4, 8,   -1> Red    * 1.0 fade_distance FadeDst fade_power FadePwr * 1.66}
  147.     light_source {< 4, 6,   -1> Orange * 1.0 fade_distance FadeDst fade_power FadePwr * 1.33}
  148.     light_source {< 4, 4,   -1> Yellow * 1.0 fade_distance FadeDst fade_power FadePwr}
  149.     light_source {< 4, 2,   -1> Orange * 1.0 fade_distance FadeDst fade_power FadePwr}
  150.  
  151.     rotate Burning_Match_Rotation    // counter-rotate for later match rotation
  152.     translate y*Match_Height
  153. }
  154.  
  155.  
  156. // Build a complete match
  157. #declare Match =
  158. union {
  159.     object { Match_Stick }
  160.     object { Match_Head pigment { Red } }
  161. }
  162.  
  163. // The burning match applies a new charred texture on the match stick,
  164. // recolors the match head a charred gray,
  165. // and adds the flame.  The flame is also dependant on the
  166. // position of the neighboring matchstick so be careful of changing it.
  167. #declare Burning_Match =
  168. union {
  169.     object { Match_Stick
  170.     texture {
  171.         pigment {
  172.             gradient y
  173.             color_map {
  174.                 [-1.00  Clear ]
  175.                 [ 0.80  Clear ]
  176.                 [ 0.90  BakersChoc ]
  177.                 [ 1.00  Gray10 ]
  178.             }
  179.         scale <1, Match_Height, 1>
  180.         }
  181.     }
  182.     }
  183.     object { Match_Head pigment { Gray10 } }
  184.     object { Flame }
  185. }
  186.  
  187. // This is the match adjacent to the burning one.  This match head
  188. // is partially burned.  The finish needs to be modified to
  189. // allow for the large amount of light coming from the flames.
  190. #declare Catching_Match =
  191. union {
  192.     object { Match_Stick }
  193.     object { Match_Head
  194.         pigment {
  195.             gradient y
  196.             color_map {
  197.                 [0.60 Red ]
  198.                 [0.65 Gray40 ]
  199.                 [0.75 Black ]
  200.             }
  201.             turbulence 0.3
  202.             rotate -z*15
  203.             translate -y*2
  204.             scale 4.2
  205.         }
  206.         finish { diffuse 0.2 ambient 0.15 brilliance 6 }
  207.     }
  208. }
  209.  
  210. // Put all matches together into a union that can be moved around
  211. // as needed
  212. union {
  213.     object { Burning_Match
  214.         rotate -Burning_Match_Rotation
  215.         translate <-14,-8, 0>
  216.     }
  217.     object { Catching_Match rotate -y*180 translate <-8,-6, 0> }
  218.     object { Match rotate  y*90  translate <-4,-3, 0> }
  219.     object { Match rotate  y*180 translate < 0, 0, 0> }
  220.     object { Match rotate -y*90  translate < 4, 3, 0> }
  221.     object { Match rotate  y*0   translate < 8, 6, 0> }
  222.     translate -y*12
  223.     translate x*1.5
  224. }
  225.  
  226. // Apply the atmosphere down here where its easy to turn on and off
  227. // by simply adding or removing comment marks.
  228. atmosphere { Atmosphere1 }
  229.  
  230.