Senza l'uso di photons
Con l'uso di photons Alcuni effetti quali le caustiche
Questa tecnica
In breve, dei raggi di luce in quantita' discreta (fotoni) vengono tracciati dalle sorgenti luminose verso gli oggetti della scena, questi raggi passano attraverso o rimbalazno su alcuni degli oggetti e le intersezioni tra i raggi e gli oggetti vengono salvate in una mappa. Queste informazioni verranno in seguito utilizzate per stimare qual e' il contributo delle caustiche di riflessione e rifrazione sull'illuminazione di vari oggetti interessati. In una scena possiamo suddividere gli oggetti in alcune categorie:
photons{
target
reflection on
refraction on
}
Di solito un oggetto che genera caustiche non e' necessario che appartenga anche alla prima categoria, quindi e' possibile impostare anche collect off. In certi casi puo' essere necessario abilitare riflessione e rifrazione di fotoni anche su oggetti che non sono dei target, questo per permettere ai fotoni indiretti di continuare il loro cammino dopo aver colpito questi
oggetti. Dopo aver specificato i photons per gli oggetti e' necessario abilitare il photon mapping nella sezione global_settings della scena:
photons {
spacing <photon_spacing> | count <photons_to_shoot>
[gather <min_gather>, <max_gather>]
[media <max_steps> [,<factor>]]
[jitter <jitter_amount>]
[max_trace_level <photon_trace_level>]
[adc_bailout <photon_adc_bailout>]
[save_file "filename" | load_file "filename"]
[autostop <autostop_fraction>]
[expand_thresholds <percent_increase>, <expand_min>]
[radius <gather_radius>,<multiplier>,
<gather_radius_media>,<multiplier>]
}
global_settings {
photons {
spacing 0.02
}
}
#declare Photons=on;
#ifndef(Photons)
#declare Photons=off;
#end
global_settings {
assumed_gamma 1.0
max_trace_level 5
#if (Photons) // global photon block
photons {
spacing 0.02
}
#end
}
// ----------------------------------------
camera {
right x*image_width/image_height
location <0,2.5,-4.75>
look_at <0,0.65,0>
}
box{<-10,0,-10>,<10,15,10>
texture {
pigment { color rgb <1.0, 0.8, 0.6> }
}
}
light_source{
<9,14,9>
color rgb 1.3
spotlight
point_at <0,0,0>
radius 15
falloff 30
}
#declare p1=pigment {rgbt 1};
#declare p2=pigment {color rgbt <1,0.4,0.1,1>};
#declare in=interior {
ior 1.5
fade_power 1001
fade_distance 0.9
fade_color <0.5,0.8,0.6>
}
#declare fi=finish {
ambient 0.0
diffuse 0.05
specular 0.6
roughness 0.005
reflection {
0.1, 1.0
fresnel on
}
conserve_energy
}
#declare M_G1=material {
texture {
pigment {p1}
finish {fi}
}
interior{in}
}
#declare M_G2=material {
texture {
pigment {p2}
finish {fi}
}
interior{in}
}
#declare M_V= // Glass material
material {
texture {
pigment {rgbt <1,0.6,0.3,0.5>}
finish {
ambient 0.0
//diffuse 0.075
specular 0.25
roughness 0.005
reflection {
0.1, 0.6
fresnel on
}
conserve_energy
}
}
interior {
ior 1.34
fade_power 1001
fade_distance 0.9
fade_color <0.9,0.4,0.6>
}
}
#declare M_V1= // Glass material
material {
texture {
pigment {rgbt <1,0.9,0.8,0.75>}
finish {
ambient 0.0
//diffuse 0.075
specular 0.05
roughness 0.05
reflection {
0.1, 0.35
fresnel on
}
conserve_energy
}
}
interior {
ior 1.1
fade_power 2
fade_distance 1.5
fade_color <0.9,0.8,0.6>
dispersion 1.01
dispersion_samples 3
}
}
union{
union{
cylinder{0,<0,0.05,0>,0.75}
cylinder{<0,0.05,0>,<0,1,0>,0.06}
difference{
cone{<0,1,0>,0.1,
<0,2,0>,1
}
cone{<0,1.01,0>,0.01,
<0,2.01,0>,0.99
}
}
material { M_G1 }
}
difference{
cone{<0,1,0>,0.01,
<0,2,0>,0.99
}
box{<-2,1.9,-2>,<2,3,2>}
material { M_V }
}
photons {
target 1.0
refraction on
reflection on
}
translate<-1.2,0,0>
}
union{
difference{
cylinder{<0,0,0>, <0,2,0>,0.7}
cylinder{<0,0.2,0>,<0,3,0>,0.69}
material { M_G1 }
}
cylinder{<0,0.2,0>,<0,1.7,0>,0.69
material { M_V1 }
}
photons { // photon block for an object
target 1.0
refraction on
reflection on
}
translate<1.2,0,0>
}
#local i=0;
#while(i<5)
sphere{0,0.25
translate<-1.5+i*0.6,0.25,-2>
material{M_G2}
photons { // photon block for an object
target 1.0
refraction on
reflection on
}
}
#local i=i+1;
#end

