This is the legacy Bug Tracking System for the POV-Ray project. Bugs listed here are being migrated to our github issue tracker. Please refer to that for new reports or updates to existing ones on this system.

Details

Povray 3.7 has rendering artifact in meshes with polygons that meet at shallow angles. Please see the attached file.

The part of concern is the mesh2, which produces the partly-transparent faces of a shallow pyramid. The file result-3_6.png shows the output of povray-3.6, and the file result-3_7.png shows the output of povray-3.7. In 3.7, you can see a thin light-colored margin all around the base of the pyramid, especially thick under the top cylinder. In 3.6, this artifact is absent. For comparison purposes, I have inserted a “#version 3.6;” directive at the top of the file so that the output images are as close to each other as possible. However, the artifact is still present in 3.7 without this directive.

The attached scene file is only a small part of a much larger scene, where this artifact shows up in numerous very obvious places, where it doesn’t in 3.6. I have hunted in the documentation and online for ways to solve this problem, but haven’t found anything. Because of this, I am forced to stay with 3.6 for production use, which is quite unfortunate since I’d like to take advantage of the new features of 3.7.

History diving: MIN_ISECT_DEPTH was introduced with change #4117, 2006-04-03, from an issue with balcony.pov which did not render the liquid. SMALL_TOLERANCE (as 1e-3) was used in the previous code. The value of MIN_ISECT_DEPTH is just a tenth of it, pure magic.It has not been adjusted since that time.

The previous code tested for > SMALL_TOLERANCE. The new code tests for >= MIN_ISECT_DEPTH. (backend/scene/objects.cpp & backend/render/trace.cpp ;places are noted for [cjc] )

The value also replaced the tolerance for detecting the intersection of bounding boxes. (backend/scene/objects.cpp)

From my understanding, the tests for additional intersection (avoiding perfect hit) would be also fine with > MIN_ISECT_DEPTH, and MIN_ISECT_DEPTH to 0.0; Yet the bounding box need a fuzzy factor, so maybe SMALL_TOLERANCE should be back there (loosing a bit of performance, not even sure the noise of bounding box is that bad).

From looking at 3.6.1, the test to check that the distance was at least > SMALL_TOLERANCE was not even there.

Using imagemagick to compare the balcony scene ( compare -metric AE -fuzz 5% B36.png Bpatch.png -compose Src Delta_36_patch.png ), the sea is different (that's known and expectable, IIRC tied to noise generator; render done with +A0.01), and the glass is more similar to 3.6 with the previously suggested patch.

In 3.6, the shadow of the top of the glass is darker (in 3.7 the inside is white/clear), and the base of the shadow of the glass shows less the caustic (?) of the base of glass (or in 3.7, the base of the shadow of glass+liquid is brighter, unrealistic white).