|
|
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
|
|