I've been playing with 'facets' and 'crackle' of late. I've turned up a
bug (or two) (*).
Documenting now - partly so I can think through what I'm seeing as I write.
The crackle pattern and facets perturbation maintain thread local
storage so information can be cached in a thread safe way.
The issue, I think, is that that storage is set up to work with one
crackle and/or facets use per thread and no more.
Once we run >1 of either in the same thread they share the thread local
storage. This >1 usage per thread happens, for example, when we layer
textures both based upon crackle.
See the two attached scene files which result in images like those
attached when things go wrong. (Using v3.7 beta 2 and the not yet
released yuqk R15 for the renders)
1) Things don't always go wrong. The problem is flaky. Scene renders
with artifacts often later run cleanly and visa versa. The two scene
files attached are good at having problems.
2) The v38 scene uses 'repeat <>' and the yuqk one 'ip_strength <>' -
which twiddles with the strength of the noise used to push the point per
cube around inside the cube for the pseudo random-ish point set. My
guess at the moment is these features turn over the thread crackle cache
more often.
3) I've only seen the buggy results when the text output reports less
than 100% cache hits. For example:
Crackle Cache Queries: 960000
Crackle Cache Hits: 888124 ( 93 percent)
4) The problem seems slightly worse - with more of a render block
signature - when multiple threads are used. This doesn't really line up
with my best guess as to the issue! At the moment I think this probably
a secondary bug where maybe the cache is supposed to be cleared at
render block end, but it isn't, or similar. Might be a secondary thread
safety issue too.
5) I've not looked at the v3.7 code as yet for these issue(s).
---
I know. The yuqk fork's tearing result looks kinda cool - wish it
reflected intent... :-)
Bill P.
(*) - There are a couple other minor bugs too in crackle with offset and
<=0 metric settings patched / fixed in the yuqk fork.
Post a reply to this message
Attachments:
Download 'crackle2_v38.pov.txt' (2 KB)
Download 'crackle2_v38_00.jpg' (224 KB)
Download 'crackle2_yuqk.pov.txt' (2 KB)
Download 'crackle2_yuqk2.jpg' (315 KB)
Preview of image 'crackle2_v38_00.jpg'
Preview of image 'crackle2_yuqk2.jpg'
|