POV-Ray : Newsgroups : povray.pov4.discussion.general : Better understanding of GitHub issue 377 Server Time
2 Dec 2024 18:59:26 EST (-0500)
  Better understanding of GitHub issue 377 (Message 1 to 3 of 3)  
From: William F Pokorny
Subject: Better understanding of GitHub issue 377
Date: 25 Jan 2024 10:49:36
Message: <65b28310$1@news.povray.org>
Better understanding of GitHub issue 377 regarding partial render 
differences as compared to full renders.

https://github.com/POV-Ray/povray/issues/377

https://news.povray.org/povray.binaries.images/thread/%3Cweb.5d07acb1d24138982bedecc40%40news.povray.org%3E/

(Unable to update the thread above due corruption from server crash some 
ago)

The differences highlighted in the forum post and issue above come down 
to jitter values both as external settings to antialiasing(AA) and 
internal random sampling (a kind of jitter too) part of method 3's AA 
algorithm.

All three methods are exposed to differences on partial renders when AA 
jitter is on. Method three is always exposed because internally it uses 
a random number stream to generate the samples even when the 
Stochastic_Seed=n / +SSn is used.

Excepting AA method 3, turning off jitter solves the full to partial 
render difference issues.

---
With jitter on and always with method three the following helps reduce 
the full render pixel to partial render pixel differences:

a) A smaller threshold value (and method 3 also confidence value).

b) Colors matter because the threshold difference is based on a 
calculated grey equivalent.

c) The new to yuqk minimum sample depth via Antialias_Min_Depth=n ini / 
+RMn settings help when >0.

d) The yuqk fork no longer use a fixed table in methods 1 and 2 when 
jitter is on. This method tends to be less sensitive to partial vs full 
renders, but this statement depends quite a lot on the block sizes and 
ordering used on the partial rendering versus the full rendering.

e) Method 3 will always be exposed to differences on partial renders 
versus full renders.

f) Method 2 (with jitter) the least exposed because of how is so 
drastically shrinks the non zero jitter value on depth/+r. Yes, it's 
also true the deeper the depth/+r settings with both methods 1 & 2 the 
less likely partial render to full render differences will show up.

g) Related to (f) the partial to full render differences are more likely 
to show up where yuqk's big jitter value is larger than 1.0.


Aside: As of writing this I'm unsure what happens with render 
continuations.  If the position in the random number streams are 
maintained in the state file, continuations should work without issue. 
Otherwise continued renders may well show differences when compared to 
renders not stopped and re-started.

Bill P.


Post a reply to this message

From: Thorsten
Subject: Re: Better understanding of GitHub issue 377
Date: 26 Jan 2024 07:20:33
Message: <65b3a391$1@news.povray.org>
On 25.01.2024 16:49, William F Pokorny wrote:
> Aside: As of writing this I'm unsure what happens with render 
> continuations.  If the position in the random number streams are 
> maintained in the state file, continuations should work without issue. 
> Otherwise continued renders may well show differences when compared to 
> renders not stopped and re-started.

Using a random sampling and then always expecting the same result is a 
user error, not a bug. The random effects may also depend on the thread 
settings, block size settings, hardware used, etc. because they are 
random. As such, clearly not a bug.

Thorsten


Post a reply to this message

From: William F Pokorny
Subject: Re: Better understanding of GitHub issue 377
Date: 26 Jan 2024 16:32:55
Message: <65b42507$1@news.povray.org>
On 1/26/24 07:20, Thorsten wrote:
> On 25.01.2024 16:49, William F Pokorny wrote:
>> Aside: As of writing this I'm unsure what happens with render 
>> continuations.  If the position in the random number streams are 
>> maintained in the state file, continuations should work without issue. 
>> Otherwise continued renders may well show differences when compared to 
>> renders not stopped and re-started.
> 
> Using a random sampling and then always expecting the same result is a 
> user error, not a bug. The random effects may also depend on the thread 
> settings, block size settings, hardware used, etc. because they are 
> random. As such, clearly not a bug.
> 
> Thorsten
> 
> 

:-) True as written. I agree well enough that I closed the github issue 
once I understood why the partially rendered regions where sometimes 
showing differences.

We should though, avoid setting a universal impression AA jitter should 
be avoided where users want repeatable render to render results. This 
especially true in the very latest yuqk release where the v3.8 method 3 
+ss mechanism has been extended to all three AA methods. Being able to 
use a good jitter and get repeatable results is effectively a new, 
desirable feature.


---
The AA / jitter reality across v3.6 -> v4.0 & my yuqk fork is 
complicated over time - as I think might reasonably be user expectations.

Speaking only of anti-aliasing / jitter affected results...

With the latest yuqk release - so long as +ss is set, the render 
pattern, step size and block size is held constant and we are doing full 
frame renders - results are repeatable no matter the number of threads 
used and no matter whether jitter is used or not (jitter of course 
always on or off).

A similar statement can be made for official releases and (non-buggy) 
method 3 (v3.8+) results using jitter or not. Methods 1 & 2 jitter 
onward in official v3.7 onward are mostly repeatable too (jitter is 
using a static table and jitter defaults on), but here the statement is 
weaker as is the quality of the AA when jitter is on.

Users expecting that a partially rendered region of a frame should match 
the same region when the frame is fully render isn't that much of a 
stretch, if they are seeing frame to frame repeatability. The same true 
for renders stopped and restarted via state files - though again, I 
don't myself know what is or is not happening with continued renders 
with respect to jitter / method 3(a).

Bill P.

(a) - If the continuations start after the last full block rendered in 
the context of the an identically ordered (and block numbered) render 
pattern, probably things work fine.


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.