POV-Ray / povray

The Persistence of Vision Raytracer: http://www.povray.org/
GNU Affero General Public License v3.0
1.35k stars 282 forks source link

v37/v38 photon interaction dropped with no_image qualified object. #373

Open wfpokorny opened 5 years ago

wfpokorny commented 5 years ago

Summary

Issue introduced in v3.6 to v3.7 work. For more information and a test scene see the povray-advanced-users post on 7 May 2019 by Albun with the subject: Photons, in version 3.6 to 3.7. See:

http://news.povray.org/povray.advanced-users/thread/%3C5cd57ec3%241%40news.povray.org%3E/

A couple of comments related to the proposed IsImageRay() update (what's in the branch below). First, the (primaryRay && !photonRay) || part comes due the photon shooting strategy code setting the initial photon rays as a primaryRay. Maybe these could be otherRay instead, but it's primaryRay today.

On the concern in changing IsImageRay(), in general, my thinking is the !photonRay additions are likely safe due those rays being used only during the depositing of photons. The photon gather mechanism is used during actual tracing. That said, IsImageRay() is used in the csg code which I might presume is also tangled in photon rays - review there are a good idea. When I next build my personal 'povr' I'll pick up the proposed change and test against the photon test cases I've been using in that pull #358 comment thread.

Edit 11 May 2019: Looking at the use IsImageRay() usage in the csg code, it was already not run with photon rays due !ray.IsPhotonRay() && ... in the overall conditional. Further, instead of waiting on the next compile of my 'povr', I compared v380 to the v380 + proposed IsImageRay results over a couple hours this morning for the 120+ pull #358 related photon test cases I have at the moment. While none of these have no_image qualifiers they did all match exactly.

Environment

Ubuntu 18.04 g++ 7.

Attach 3.6 scene with the no_image qualifier works in v3.6.1.

No scene with the no_image qualifier works in v3.7 or v3.8(up to 74b3ebe).

Render Settings

povray <scene> 

Scene

See attached:

the.pov.txt the36.pov.txt the36_wNoImage.pov.txt the_wNoImage.pov.txt

Output

v36_vs_v37_no_image

Suggested Solution

See:

https://github.com/wfpokorny/povray/tree/fix/photonNoImageIssue

wfpokorny commented 5 years ago

Given none of my regular photon test cases with csg used no_image, I create a set this morning. See attached scenes:

the_wDifferenceNoImage.pov.txt the_wIntersectionNoImage.pov.txt the_wMergeNoImage.pov.txt the_wUnionNoImage.pov.txt

All these did not work in v380 (at commit 74b3ebe) and needed the proposed change to work. See:

csgPhotonsNoImage

Think OK, but I admit to still being a little fuzzy on how the csg code interacts the photon shooting process.