POV-Ray

The Persistence of Vision Raytracer (POV-Ray).

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.

Attached to Project: POV-Ray
Opened by André Vitor de Lima Matos - 2013-11-16
Last edited by William F Pokorny - 2016-10-28

FS#313 - radiosity.cpp pov::RadiosityFunction::BeforeTile assertion failed

With 3.7.0 final, rendering attached files (for Computer Engineering college course),
which renders without issues in povray 3.6.1, fails with following error:

...
==== [Rendering...] ========================================================
povray: backend/lighting/radiosity.cpp:324: virtual void pov::RadiosityFunction::BeforeTile(int, unsigned int): Assertion `(pts >= PRETRACE_FIRST) && (pts <= PRETRACE_MAX)' failed.

Command line:

povray +K0.6500 \
+FN +Q9 +MB1 \
+W600 +H400 \
+AM1 +A0.0 +R2 \
+D +SP32 +EP4 \
+L/usr/share/povray-3.7/include \
+Imain.pov \
+Omain-0.6500.png

Using Arch Linux testing current:
Linux archmidi 3.12.0-1-ARCH #1 SMP PREEMPT Wed Nov 6 09:06:27 CET 2013 x86_64 GNU/Linux

Downstream bug report:
https://bugs.archlinux.org/task/37689

André Vitor de Lima Matos commented on Saturday, 16 November 2013, 11:48 GMT

Sorry, main.pov in bug report had a little typo due to vim (B). Follow fixed version, with .pov-state dump file generated.

Admin
Christoph Lipka commented on Saturday, 16 November 2013, 12:46 GMT

Thanks for submitting this bug report.

Can you confirm that avoiding mosaic pretrace (i.e. removing the +SP32 and +EP4 options) works around this issue?

André Vitor de Lima Matos commented on Saturday, 16 November 2013, 13:25 GMT

Hi. Thanks for you quick reply.
Confirming that removing given options avoid this issue.

Admin
Christoph Lipka commented on Saturday, 16 November 2013, 14:17 GMT

Preliminary fix submitted as change #6092.

Grimbert Jérôme commented on Monday, 31 March 2014, 16:14 GMT

Grepping the code for BeforeTile, it seems that all but one calls are using only one parameter, defaulting to pts=FINAL_TRACE) (and FINAL_TRACE is 255 a.k.a UCHAR_MAX / OT_PASS_FINAL ).

Instrumenting the code of tracetask, the radiosity is done via TraceTask::SimpleSamplingM0P which does not provide the second parameter. Hence the failure of assertion.

Grimbert Jérôme commented on Sunday, 11 May 2014, 11:10 GMT

I would suggest the following correction, because the mosaic preview at that time is the final render (as far as radiosity is concerned, the radiosity computation has been done previously).

The false/ true change is for the "isFinalTrace" member of RadiosityFunction / radiosity.

Did I misinterpret anything ?

--- a/smp/source/backend/scene/view.cpp       Sat Mar 08 17:08:19 2014 +0100
+++ b/smp/source/backend/scene/view.cpp       Sun May 11 13:03:01 2014 +0200
@@ -1094,7 +1094,7 @@
        {
                // do render with mosaic preview start size
                for(int i = 0; i < maxRenderThreads; i++)
-                       viewThreadData.push_back(dynamic_cast<ViewThreadData *>(renderTasks.AppendTask(new TraceTask(&viewData, 0, jitterscale, aathreshold, aadepth, aaGammaCurve, previewstartsize, false, false, highReproducibility))));
+                       viewThreadData.push_back(dynamic_cast<ViewThreadData *>(renderTasks.AppendTask(new TraceTask(&viewData, 0, jitterscale, aathreshold, aadepth, aaGammaCurve, previewstartsize, false, true/*false*/, highReproducibility))));
 
                for(unsigned int step = (previewstartsize >> 1); step >= previewendsize; step >>= 1)
                {
@@ -1109,7 +1109,7 @@
 
                        // do render with current mosaic preview size
                        for(int i = 0; i < maxRenderThreads; i++)
-                               viewThreadData.push_back(dynamic_cast<ViewThreadData *>(renderTasks.AppendTask(new TraceTask(&viewData, 0, jitterscale, aathreshold, aadepth, aaGammaCurve, step, true, ((step == 1) && (tracingmethod == 0)), highReproducibility))));
+                               viewThreadData.push_back(dynamic_cast<ViewThreadData *>(renderTasks.AppendTask(new TraceTask(&viewData, 0, jitterscale, aathreshold, aadepth, aaGammaCurve, step, true, true/*((step == 1) && (tracingmethod == 0))*/, highReproducibility))));
                }
 
                // do render everything again if the final mosaic preview block size was not one or anti-aliasing is required
William F Pokorny commented on Friday, 28 October 2016, 15:09 GMT

Now tracked on github as issue #137.

Sample code runs with our current 3.7.1, but code questions remain.

Loading...

Available keyboard shortcuts

Tasklist

Task Details

Task Editing