POV-Ray : Newsgroups : povray.binaries.images : Light Fading Documentation Error Server Time: 18 Aug 2017 05:02:47 GMT
 Light Fading Documentation Error (Message 1 to 6 of 6)
 From: Cousin Ricky Subject: Light Fading Documentation Error Date: 25 Dec 2016 19:43:03 Message: <58602147\$1@news.povray.org>
```It is well known that POV-Ray's light_source attenuation does not use
true Newtonian fading (prior to 3.7.1, anyway).  To mitigate this, the
3.7 user manual suggests the formula

Intensity_Factor = function (LD,FD,FP) {pow(1+(LD/FD),FP)/2}

where Intensity_Factor() is a multiplier for the light source color, LD
is the nominal fade distance, FD is a very small number to serve as the

The user manual section in question is at

Back when POV-Ray 3.7.0 was being finalized, I noticed that this formula
seemed to be incorrect, and I posted my concern to to p.d.i in March
2013.  I proposed that the proper formula is {(1+pow(LD/FD,FP))/2}.
James was skeptical, saying that he correctly copied the formula from
his source, but didn't check the math.  I had checked the math, but no
further action was taken.

I finally got around to creating a test scene.  It is to be rendered as
an animation in 4 frames.

--------------------[BEGIN CODE]--------------------
// +kff4
#version 3.7;

#include "screen.inc"
#include "strings.inc"

global_settings
{ assumed_gamma 1
{ count 2000
error_bound 0.5
pretrace_start 16 / image_width
pretrace_end 1 / image_width
recursion_limit 2
}
}

Set_Camera (<0, 1, -5.6713>, <0, 0.50065, -0.02203>, 31.5100)

box
{ -<7, 9, 7>, <7, 9, 7> hollow
pigment { rgb 1 }
}

plane
{ y, 0
pigment { checker rgb 0.05 rgb 1 }
}

#declare LD = 1;
#declare FD = 0.25;
#declare s_Functions = array[4][2]
{ { "pow(1+(LD/FD),2)/2", "(3.7 manual)" },
{ "(1+pow(LD/FD,2))/2", "(my correction)" },
}

#switch (frame_number)

#range (1, 2)
light_source
{ LD * y, rgb Parse_String (s_Functions [frame_number - 1][0])
}
#break

#case (3)
sphere
{ LD * y, FD
pigment { rgb 1 }
finish { ambient 0 diffuse 0 emission pow (LD / FD, 2) }
}
#break

#case (4)
light_source
{ LD * y, rgb 1
}
#break

#end

Screen_Object
( text
{ ttf "cyrvetic" s_Functions [frame_number - 1][0] 0.0001, 0
pigment { red 1 }
finish { diffuse 0 emission 1 }
scale 0.075
},
<0, 1>, <0.02, 0.02>, yes, 1
)
Screen_Object
( text
{ ttf "cyrvetic" s_Functions [frame_number - 1][1] 0.0001, 0
pigment { red 1 }
finish { diffuse 0 emission 1 }
scale 0.075
},
<1, 1>, <0.02, 0.02>, yes, 1
)
---------------------[END CODE]---------------------

The nominal fade distance (LD) for all frames is from the light source
to the floor.

- Image light_fade_formula1.png uses the formula from the user manual.
Note that I hard-coded the FP parameter as 2, as I have yet to use
any other value, and don't foresee any future change to that trend.

- Image light_fade_formula2.png uses the formula I derived from the
internal attenuation equation as documented in that same section of
the user manual.  Again, the FP parameter is hard-coded as 2.

only.  The radius of the glowing sphere is FD, and its emission
value is the square of the LD/FD ratio.  Aside from the radiosity
artifacts, this is the benchmark for physical realism.

- As a second control, image light_fade_formula4.png uses the
from the light source to the floor.

My formula (frame 2) is closest to the radiosity-only control (frame 3)
at all distances from the light source.  The user manual formula (frame
1) is noticeably brighter.  The traditional method (frame 4) is a tad
brighter than frame 1 at the back wall, but matches frames 2 and 3
directly beneath the light source.

Frame 4 is correct, by definition, directly beneath the light source
(though nowhere else); and frame 3 is a physical simulation that is
theoretically correct at all points.  Since frame 2 matches all these
points, and frame 1 does not, my formula appears to produce the correct
results.  Also, substituting LD for FD should yield a multiplier of one.
This is indeed the case with my formula, but not with the user manual
formula.  I therefore conclude that my formula is the correct one, and
the suggested formula in the documentation should be amended accordingly.

P.S. I had always assumed that the reason POV-Ray used an attenuation
formula that maxed out at 2 was to cope with limited dynamic range.  But
with CLipka's recent gamma thread and the brightness of the back wall in
frame 4, it occurred to me that this might be another non-linear gamma hack.
```

Attachments:

 From: clipka Subject: Re: Light Fading Documentation Error Date: 25 Dec 2016 21:02:05 Message: <586033cd\$1@news.povray.org>
```Am 25.12.2016 um 20:45 schrieb Cousin Ricky:

> It is well known that POV-Ray's light_source attenuation does not use
> true Newtonian fading (prior to 3.7.1, anyway).  To mitigate this, the
> 3.7 user manual suggests the formula
>
>   Intensity_Factor = function (LD,FD,FP) {pow(1+(LD/FD),FP)/2}
...
> Back when POV-Ray 3.7.0 was being finalized, I noticed that this formula
> seemed to be incorrect, and I posted my concern to to p.d.i in March
> 2013.  I proposed that the proper formula is {(1+pow(LD/FD,FP))/2}.

I haven't verified your claims regarding the test images, but from the
maths I come to the same conclusion as you do.

The docs say, "The following example, that takes the inverse of the
above formula [...]" -- here, "inverse" needs to be interpreted as
"reciprocal", i.e. the multiplicative inverse of the attenuation, not
some inverse function mapping the attenuation back to distance.

As such, this "inverse" is easily computed by swapping the numerator and
denominator of the attenuation formula.

> James was skeptical, saying that he correctly copied the formula from
> his source, but didn't check the math.  I had checked the math, but no
> further action was taken.

My geuss that it drowned in the height field related portion of the
thread, and I'd recommend you bring this to Jim's attention again.

> P.S. I had always assumed that the reason POV-Ray used an attenuation
> formula that maxed out at 2 was to cope with limited dynamic range.  But
> with CLipka's recent gamma thread and the brightness of the back wall in
> frame 4, it occurred to me that this might be another non-linear gamma
> hack.

My personal bet would be that it has nothing to do with gamma, but that
the author was a bit more afraid of divide-by-zero errors than necessary
in this case.

Or that person did indeed intend to model a light source of
non-infinitesimal size.
```
 From: Jim Holsenback Subject: Re: Light Fading Documentation Error Date: 26 Dec 2016 10:40:08 Message: <5860f388\$1@news.povray.org>
```On 12/25/2016 2:45 PM, Cousin Ricky wrote:
> I proposed that the proper formula is {(1+pow(LD/FD,FP))/2}.

apologies for missing that ... corrected
```
 From: Cousin Ricky Subject: Re: Light Fading Documentation Error Date: 26 Dec 2016 15:10:00 Message:
```Jim Holsenback <spa### [at] nothanksnet> wrote:
> On 12/25/2016 2:45 PM, Cousin Ricky wrote:
> > I proposed that the proper formula is {(1+pow(LD/FD,FP))/2}.
>
> apologies for missing that ... corrected

Thanks!
```
 From: Cousin Ricky Subject: Re: Light Fading Documentation Error Date: 31 Dec 2016 14:50:01 Message:
```clipka <ano### [at] anonymousorg> wrote:
> I haven't verified your claims regarding the test images, but from the
> maths I come to the same conclusion as you do.

After doing more extensive sampling of the radiosity frame, it appears to be
consistently slightly darker than frame 2, although they are still closer to
each other than any other two frames.
```
 From: clipka Subject: Re: Light Fading Documentation Error Date: 31 Dec 2016 16:57:58 Message: <5867e396\$1@news.povray.org>
```Am 31.12.2016 um 15:48 schrieb Cousin Ricky:
> clipka <ano### [at] anonymousorg> wrote:
>> I haven't verified your claims regarding the test images, but from the
>> maths I come to the same conclusion as you do.
>
> After doing more extensive sampling of the radiosity frame, it appears to be
> consistently slightly darker than frame 2, although they are still closer to
> each other than any other two frames.

Radiosity might be off by a constant factor, due to differences in how
brightness is expressed in light sources and how it is expressed in
emissive surfaces.

Might be a factor of 2, or pi, or 1/pi, or some such. I've never
formally analyzed this.
```