POV-Ray : Newsgroups : povray.advanced-users : Invisible Photon Mapping : Re: Invisible Photon Mapping Server Time
26 Jun 2024 06:44:13 EDT (-0400)
  Re: Invisible Photon Mapping  
From: Quartz
Date: 3 Sep 2011 21:15:01
Message: <web.4e62d0b1c559cf212b8e18870@news.povray.org>
clipka <ano### [at] anonymousorg> wrote:
> I'd suggest radiosity with a very (/really/ very) high sample count,
> setting any objects other than the planet to "no_radiosity" to avoid
> wasting intersection tests on them for the sake of radiosity sampling.
> Needs POV-Ray 3.7 though.

Thanks a lot for your suggestions! With all of your help, I have achieved quite
satisfying results in v. 3.6.1 using radiosity by increasing the objects'
diffuse terms instead of the sample count. But I'm afraid things are about to
get a lot more complex...

The only remaining problem is, my scene includes an atmosphere around the planet
using interior & media. The moment I turn my atmosphere on, even if its diffuse,
extinction, & attenuation are all turned off and I have turned off media in the
global radiosity settings, my "caustics" disappear.

Do I need to follow your directions after all, about high sample counts in v.
3.7?

For clarity, below is my ACTUAL scene code, including the atmosphere. Apologies
for the bitmaps, which I cannot attach. The "atmos_layers" variable is used as a
kind of quality setting, since a photo-ready number of layers takes too long to
render while I'm actively working on the scene. Set it to zero to remove the
atmosphere.

--------

#local sun_radius      =   40.00; // units in megameters
#local eith_orbt_rdus  = 3000.00; // eithalica's orbit radius
#local aphelion_offset =   20.00; // distance of ephelion from
                                  // otherwise circular orbit
#local eith_radius     =    6.53; // eithalica is the planet's name
#local eith_moon_dist  =    6.00; // dist @ closest point between
                                  // eithalica's & moon's surfaces
#local eith_moon_rdus  =    6.22; // moon radius
#local eith_rotn_prod  =    4.70; // rotation period in hours
#local camr_dist       =    3.00; // multiplier for camera dist
#local eith_poso = radians(073);  // eithalica's orbital position
                                  // in radians counterclockwise
                                  // from positive x axis
#local eith_day  = (10/142)*4.70; // eith's rotational position in
                                  // hours - one full turn every
                                  // multiple of 4.70

#local atmos_color    = <5.4e-3,1.8e-2,3.6e-2>; // color that is reflected
#local atmos_twilight = 1-(1-<1.0,0.7,0.4>)*0.5; // color that is transmitted
#local atmos_layers   = 4;                      // granularity of model
#local atmos_thick    = eith_moon_dist*0.6;     // distance from planet surface
to atmosphere extremity
#local atmos_curve    = 2.5;                    // tightness of density curve
#local atmos_thresh   = 0.0;                    // density below which we won't
bother

#local eith_moon_posr = eith_radius+eith_moon_dist+eith_moon_rdus;
#local eith_rotn = (eith_day/4.7)*-360-degrees(eith_poso);
#local eith_posx =
cos(eith_poso)*(eith_orbt_rdus+aphelion_offset*0.5)-aphelion_offset*0.5;
#local eith_posz = sin(eith_poso)*eith_orbt_rdus;

camera
 {
 location <0,1,-0.1>*(eith_moon_posr+eith_moon_rdus)*(camr_dist+1.0) look_at 0
 right x*image_width/image_height
 rotate <0,eith_rotn,0>
 translate <eith_posx,0,eith_posz>
 angle 48
 }
light_source
 {
 0 color rgb 3.0
 /*looks_like
  {
  sphere
   {
   0,sun_radius
   texture {pigment {rgb 5} finish {ambient 1}}
   no_shadow
   }
  }*/
 }/*
sphere
 {
 0,1e2
 texture {pigment {rgbt <0,0,0,1>}}
 no_shadow
 hollow
 interior
  {
  media
   {
   emission <1.0e-2,5.0e-3,7.0e-4>
   intervals 1
   method 3
   samples 20
   }
  }
 }*/
sky_sphere {pigment {rgb <0,0,0>}}

global_settings
 {
 ambient_light 0
 radiosity {brightness 1.0 count 100 media off}
 max_trace_level 15
 }
#default {finish {ambient 1 diffuse 1.0}}

/*torus {eith_orbt_rdus,0.5 texture {pigment {rgb <1,0.3,0>} finish {ambient
1}}}
torus
 {
 eith_orbt_rdus,0.5 texture {pigment {rgb <1,1,0>} finish {ambient 1}}
 scale <(aphelion_offset*0.5+eith_orbt_rdus)/eith_orbt_rdus,1,1>
 translate <-aphelion_offset*0.5,0,0>
 }*/

#local eith_texture = texture
 {
 pigment {rgb <0,0,0.4>}
 finish {specular 0.7}
 normal {agate scale 1e-3}
 };
union
 {
 // eithalica
 union
  {
  sphere
   {
   0,eith_radius texture {eith_texture}
   texture {pigment {image_map {png "./eithalica_tex.png" map_type 1}}}
   photons {target reflection on refraction off}
   }
  sphere
   {
   0,eith_radius+8e-2
   texture {pigment {image_map {png "./eithalica_clouds.png" map_type 1}}}
   photons {target reflection on refraction off}
   hollow
   }
  }

 // temalar
 union
  {
  sphere
   {
   0,eith_moon_rdus texture {eith_texture}
   texture {pigment {image_map {png "./temalar_tex.png" map_type 1}}}
   photons {target reflection on refraction off}
   }
  sphere
   {
   0,eith_moon_rdus+8e-2
   texture {pigment {image_map {png "./temalar_clouds.png" map_type 1}}}
   photons {target reflection on refraction off}
   hollow
   }
  translate <eith_moon_posr,0,0>
  }

 // chessol
 union
  {
  sphere
   {
   0,eith_moon_rdus texture {eith_texture}
   texture {pigment {image_map {png "./chessol_tex.png" map_type 1}}}
   photons {target reflection on refraction off}
   }
  sphere
   {
   0,eith_moon_rdus+8e-2
   texture {pigment {image_map {png "./chessol_clouds.png" map_type 1}}}
   photons {target reflection on refraction off}
   hollow
   }
  translate <eith_moon_posr,0,0>
  rotate <0,-120,0>
  }

 // siothum
 union
  {
  sphere
   {
   0,eith_moon_rdus texture {eith_texture}
   texture {pigment {image_map {png "./siothum_tex.png" map_type 1}}}
   photons {target reflection on refraction off}
   }
  sphere
   {
   0,eith_moon_rdus+8e-2
   texture {pigment {image_map {png "./siothum_clouds.png" map_type 1}}}
   photons {target reflection on refraction off}
   hollow
   }
  translate <eith_moon_posr,0,0>
  rotate <0, 120,0>
  }
 //torus {eith_moon_posr,0.1 texture {pigment {rgb <1,1,0>} finish {ambient 1}}}

 #local loop = 1;
 #while (loop <= atmos_layers)
  #local intensity = pow(1-(loop-1)/atmos_layers,atmos_curve);
  #if (loop = 1) #local gap = -1e-8; #else #local gap = +1e-8; #end
  #if (intensity > atmos_thresh)
   difference
    {
    merge
     {
     sphere {0,eith_radius+(loop/atmos_layers)*atmos_thick}
     sphere
{<eith_moon_posr,0,0>,eith_moon_rdus+(loop/atmos_layers)*atmos_thick}
     sphere
      {
      <cos(radians( 120))*eith_moon_posr,0,sin(radians( 120))*eith_moon_posr>,
      eith_moon_rdus+(loop/atmos_layers)*atmos_thick
      }
     sphere
      {
      <cos(radians(-120))*eith_moon_posr,0,sin(radians(-120))*eith_moon_posr>,
      eith_moon_rdus+(loop/atmos_layers)*atmos_thick
      }
     }
    merge
     {
     sphere {0,eith_radius+((loop-1)/atmos_layers)*atmos_thick+gap}
     sphere
{<eith_moon_posr,0,0>,eith_moon_rdus+((loop-1)/atmos_layers)*atmos_thick+gap}
     sphere
      {
      <cos(radians( 120))*eith_moon_posr,0,sin(radians( 120))*eith_moon_posr>,
      eith_moon_rdus+((loop-1)/atmos_layers)*atmos_thick+gap
      }
     sphere
      {
      <cos(radians(-120))*eith_moon_posr,0,sin(radians(-120))*eith_moon_posr>,
      eith_moon_rdus+((loop-1)/atmos_layers)*atmos_thick+gap
      }
     }
    texture {pigment {rgbt <0,0,0,1>} finish {diffuse 0.0*intensity}}
    hollow
    interior
     {
     media
      {
      scattering {1, atmos_color*intensity extinction 0}
      //ratio 0.1 intervals 1 method 3 samples 20
      collect off
      }
     //ior 1.01
     fade_color atmos_twilight
     fade_distance eith_moon_rdus*0.085/intensity
     fade_power 10.0
     }
    }
   #end
  #local loop = loop+1;
  #end
 rotate <0,eith_rotn,0>
 translate <eith_posx,0,eith_posz>
 }


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.