|
![](/i/fill.gif) |
First of all: I _really_ like Nathan's improvements for povray's radiosity.
I have always been a bit jealous to other rendering programs like radiance,
bmrt, etc. which can make very good-looking radiosity quite fast and with
very little effort from the user. Povray's radiosity has always been slow
and good results have been very hard to achieve. But now with Nathan's
modifications one can get very good results very fast and very easy. Thanks.
Now, to the problem:
This problem happens with surface normals and radiosity. (Man, this is
the third bug regarding normals I have found; I'm starting to get tired...)
I think that it's not an uvpatch-specific problem. I have not tested it but
I think that the same problem appears in the official version.
The problem is that surface normals are not taken into account in
radiosity calculations.
Usually radiosity makes visible the surface details that are not illuminated
by calculating light reflected from other surfaces. This means that if you have
a white sphere in a white room and the sphere is not directly illuminated,
it will be completely invisible without radiosity, but with radiosity it
becomes visible.
This, however, is not true for surface normals. If the changes in the
surface of an object are achieved by a normal modifier, they will not appear
nor they will be colored according to radiosity.
The following scene (for uvpov) demonstrates this. There are (again) two
gaps in the wall. The left one is a real gap and the right one is a "fake"
gap made with a normal modifier.
When rendered, we can notice two things:
1) The upper part of the left gap that is not directly illuminated becomes
visible by the effect of the radiosity while the right gap stays invisible.
2) The illuminated part of the left gap is tinted with the color of the
walls (left wall is red and right wall is blue) while the right gap is gray.
This has caused me serious problems before, but I didn't study this problem
carefully until now.
//---------------------------------------------------------------------------
global_settings
{ ini_option "+QR"
ini_option "Preview_Start_Size=8"
ini_option "Preview_End_Size=4"
radiosity
{ count 80
nearest_count 5
error_bound 1
recursion_limit 4
low_error_factor .5
gray_threshold 0.0
minimum_reuse 0.015
brightness 1.5
max_sample 2
adc_bailout 0.01/2
}
}
camera { location <-1.99,0,-1.99> look_at z*2 angle 40 }
light_source
{ <1.99,.99,-1.99>, 1
spotlight point_at <0,-1,2> radius 15 falloff 15
}
difference
{ box { <-2,-1,-2><2,1,2> inverse }
box
{ <-.1,-.9999,-.1><.1,.9999,.1>
rotate y*45 scale <1,1,.5> translate <-.5,0,2>
}
pigment { rgb 1 }
normal
{ gradient x 1 slope_map { [0 <0,1>][.1 <1,1>][.1 <1,0>][1 <1,0>] }
scale 1.8
}
}
box { <-1.999,-1,-2><-2,1,2> pigment { rgb x } }
box { <1.999,-1,-2><2,1,2> pigment { rgb z } }
//---------------------------------------------------------------------------
--
main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/
Post a reply to this message
|
![](/i/fill.gif) |