|
|
I think I found a bug in povray regarding to blob lighting calculation.
The pov-code showing the bug is the following:
camera { location <0,50,-40> look_at 0 angle 35 }
light_source { <100,200,-100> 1 }
blob
{ threshold .1
sphere { -y*1000,1209,1 }
sphere { -y*5,10,.006 }
pigment { rgb <1,0,0> } finish { specular .5 }
}
The result can be seen at:
http://www.cs.tut.fi/~warp/blobtst1.jpg
The second (smaller) blob component renders just fine but the first
component renders obviously bad (the bug has nothing to do with the second
blob component, but I just put it there to show more clearly the bug in the
first component).
I extensively studied this bug.
The bug depends on:
1) The position of the camera.
If we move the camera, the bug effect changes position. For example,
if we set the y component of the camera to 40, ie:
camera { location <0,40,-40> look_at 0 angle 35 }
the result is:
http://www.cs.tut.fi/~warp/blobtst2.jpg
2) The position of the light source.
If we now move the light source a bit down, ie:
camera { location <0,40,-40> look_at 0 angle 35 }
light_source { <100,70,-100> 1 }
the result is:
http://www.cs.tut.fi/~warp/blobtst3.jpg
3) The number of light sources.
If we add another light source, ie:
camera { location <0,40,-40> look_at 0 angle 35 }
light_source { <100,70,-100> 1 }
light_source { y*100, 1 }
we can see that the bug appears for each light source separately:
http://www.cs.tut.fi/~warp/blobtst4.jpg
4) The radius of the blob components.
If we change the radius of the first component to about 300, ie:
sphere { -y*1000/4,1209/4,1 }
something very strange happens:
http://www.cs.tut.fi/~warp/blobtst5.jpg
If we set the radius smaller than about 160, ie:
sphere { -y*1000/8,1209/8,1 }
the bug completely disappears:
http://www.cs.tut.fi/~warp/blobtst6.jpg
--
main(i){char*_="BdsyFBThhHFBThhHFRz]NFTITQF|DJIFHQhhF";while(i=
*_++)for(;i>1;printf("%s",i-70?i&1?"[]":" ":(i=0,"\n")),i/=2);} /*- Warp. -*/
Post a reply to this message
|
|
|
|
It should be nice to know if this bug is happening to anyone else, or is
it just me?
--
main(i){char*_="BdsyFBThhHFBThhHFRz]NFTITQF|DJIFHQhhF";while(i=
*_++)for(;i>1;printf("%s",i-70?i&1?"[]":" ":(i=0,"\n")),i/=2);} /*- Warp. -*/
Post a reply to this message
|
|