Skip to content
Snippets Groups Projects
diffuse_back.pov 4.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • // This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
    // To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
    // letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
    
    // Persistence of Vision Raytracer Scene Description File
    // File: diffuse_back.pov
    // Author: Christoph Lipka
    // Description: Demonstrates diffuse backside illumination
    //
    // -w640 -h480
    // -w800 -h600 +a0.3
    // 
    // Warning: this will take time!
    
    #version 3.7;
      
    #declare Photons=on;
    #declare Radiosity=on;
    
    global_settings {
      max_trace_level 25
    	assumed_gamma 2.2
      #if (Photons)
        photons {
          count 100000
        }
      #end
      #if (Radiosity)
        radiosity {
          pretrace_start 0.04
          pretrace_end   0.005
          count 1000
          nearest_count 10
          error_bound 0.5
          recursion_limit 2
          low_error_factor .25
          gray_threshold 0.0
          minimum_reuse 0.002
          brightness 1
          adc_bailout 0.01/2
          always_sample off
        }
      #end
    }
    
    #if (Radiosity)
      default {
        finish { ambient 0 }
      }
    #else
      default {
        finish { ambient 0.2 }
      }
    #end
    
    // ----------------------------------------
    
    #declare OverallBrightness      = 8;
    #declare OverallScale           = 100;
    
    camera {
    
      right     x*image_width/image_height // keep proportions with any aspect ratio
    
      location  < 1,1.6,-2.5>*OverallScale
      look_at   <-2.0,1.2,0>*OverallScale
    }
    
    light_source {
      vnormalize(<-500,200,-250>)*1000*OverallScale
      color rgb 1.3 * OverallBrightness
      area_light x*10*OverallScale,y*10*OverallScale, 9,9 adaptive 1 jitter circular orient
      photons {
        refraction on
        reflection on
      }
    }
    
    sky_sphere {
      pigment {
        gradient y
        color_map {
          [0.0 rgb <0.6,0.7,1.0>*OverallBrightness*0.5]
          [0.7 rgb <0.0,0.1,0.8>*OverallBrightness*0.5]
        }
      }
    }
    
    
    // ----------------------------------------
    
    plane { y, -10
      texture {
        pigment { color rgb <1.0, 0.8, 0.6> }
        finish { diffuse 0.5 }
      }  
    }
    
    #declare M_SolidWhite= material {
      texture {
        pigment { rgb 1 }
        finish { ambient 0 diffuse 0.8 specular 0.2 reflection { 0.2 } }
      }
    }
    
    // Room
    
    difference {
      box { <-3.1,-1,-4>, <3.1,3.5,4> }     // solid block
      box { <-3,-0.2,-3>, <3,2.5,3> }       // main room cutout
      box { <-3.2,0.3,-2>, <2.9,2,2> }      // window cutout
      texture { 
        pigment { color rgb <0.9, 0.9, 0.9> }
        finish { diffuse 1.0 }
      }
      scale OverallScale
    }
    
    // Window Bars
    
    union {
      cylinder { <-3.05,0, 1>, <-3.05,2, 1>, 0.05 }
      cylinder { <-3.05,0,-1>, <-3.05,2,-1>, 0.05 }
      material { M_SolidWhite }
      scale OverallScale 
    }
    
    // Baseboards
    
    #declare Baseboard = union {
      cylinder { <-3,0.1,0>, <3,0.1,0>, 0.025 }
      box { <-3,0,0>, <3,0.1,-0.025> }
      material { M_SolidWhite }
      translate z*3
    }
                                            
    union {                                        
      object { Baseboard }
      object { Baseboard rotate y*90 }
      object { Baseboard rotate y*180 }
      object { Baseboard rotate y*270 }
      scale OverallScale 
    }
    
    
    box { <-3,0,-3>, <3,-0.1,3>
      pigment { color rgb <1.0, 0.8, 0.6> }
      scale OverallScale
    }
    
    
    // Curtains
    
    #declare M_Curtains= material {
      texture {
        pigment { rgb <1.0,0.8,0.6> }
        finish {
          ambient 0
          diffuse 0.7,0.2
        }
      }
    }
    
    #declare Curtain= union {
      polygon{ 5, <0,0.1,2.0>, <0,0.1,0.1>, <0,2.45,0.1>, <0,2.45,2.0>, <0,0.1,2.0> material { M_Curtains } }          
      cylinder { <0,0.1,2.025>, <0,0.1,0.075>, 0.025 material { M_SolidWhite } }
      cylinder { <0,2.45,2.025>, <0,2.45,0.075>, 0.025 material { M_SolidWhite } }
      translate <-2.8,0,0>
      material { M_Curtains }
    }
    
    union {
      object { Curtain }
      object { Curtain scale <1,1,-1> }
      scale OverallScale 
    }
    
    // Screen
    
    #declare M_Screen= material {
      texture {
        pigment { rgbt <1,1,1, 0.01> }
        finish {
          ambient 0
          diffuse 0.55,0.45
          specular 0.2
          reflection { 0.2 }
        }
      }
    }
    
    #declare Screen = cylinder { <0,0,0>, <0,1.0,0>, 0.5
      open
      clipped_by { plane { x, 0.1 } }
      material { M_Screen }
    }
    
    union {
      object { Screen rotate y*45 translate <-2.25,0,2> }
      object { Screen rotate y*0  translate <-2.25,0,-1.0> }
      scale OverallScale 
    }
    
    // Glass Objects
    
    #declare M_Glass= material {
      texture {
        pigment {rgbt 1}
        finish {
          ambient 0.0
          diffuse 0.05
          specular 0.6
          roughness 0.005
          reflection {
            0.1, 1.0
            fresnel on
          }
          conserve_energy
        }
      }
      interior {
        ior 1.5
        fade_power 1001
        fade_distance 0.9 * 10
        fade_color <0.5,0.8,0.6>
      }
    }
    
    sphere {
      <0,1,0>, 1
      scale 0.2
      translate <-1.8,0,0.5>
      material { M_Glass }
      photons {  // photon block for an object
        target 1.0
        refraction on
        reflection on
      }
      scale OverallScale
    }
    
    cylinder {
      <0,0.01,0>, <0,2.5,0>, 1
      scale 0.2
      translate <-3.05,0.3,0.4>
      material { M_Glass }
      photons {  // photon block for an object
        target 1.0
        refraction on
        reflection on
      }
      scale OverallScale
    }