[Bf-cycles] Volumetric patch update

storm kartochka22 at yandex.ru
Wed Jan 8 11:52:17 CET 2014


Rebased after latest trunk changes, not finished, but it compile and
render few scenes. I turned off trunk __VOLUME__, need time and more
work to proper rebase to make both work same time w/o recompiling.

Bad news, i suspect that Markov Chain related algorithms in practice all
biased. Yes, even that Eric Veach et al. dissertation (MLT), Kelemen,
and all other. Somewhat bold claim, i know.

In short, to get proper frequency to sample some point, we need to
"walk" at least twice to all space, to "collect" information about all
other points. In reality, Veach use 250 "steps", Luxrender even less (i
think it have ~16 length chains with default 0.4 ratio). My testings was
in range 4 upto 10,000,000 and it show that real scenes too hard to
visit almost all points and keep bias low, using different steps and
mutation distributions, from uniform to Normal or Veach exponent. So,
even if we get eye catchy cool looking caustics, it just fancy
gradients, not robust solution. And with motion, things will go even
worse (flicker of that walker estimation noise)

Good news, caustics looks nice, and if you can live with bias, it
acceptable.

Other patch changes:

-due hackish way i use threads, MCMC/MLT "Mutations" fixed to 64x64
tiles, and you must use exact "Mutations"=4096. Dispersion must be 1
(was 0.02). You need to comment code at end of kernel_mlt.h and
recompile to use other tile size.

- few simple optimisations in MCMC only, use spectral on demand (only if
it surface that depend on it, glass only for now), and less redundant
data copied.

-get rid of initial pool, it big change. Now it only get average
brightness. Main MCMC algorithm changed to ERPT-like, modulating not
chain number but length of chain itself. So if it hit very bright
firefly, it will "crack" it, and if only in frame, process will be slow
as all other threads will wait. Need better treading support for that
case, maybe partial ERPT+length, but as you cannot spawn threads inside
OpenCL, that must be handled in high level, ad tile manager.

-volume sampling tweaks, trying to get milk in glasss, no big success,
for some reason brightness too low, maybe i overlook pdf somethere. Same
time rays in fog looks good.

I think that will be nice to get rid of all that kernel_mlt.h nightmare,
and rewrite to Kelemen/Luxrender sampler and maybe my current+separate
direct light, at least it will be usable. GIU change to extent trunk
"Path tracer" and "Branched" by "Kelemen MLT" and "Bidir". Current
kernel_mlt_h served good as tool to let me understand and see that
Markov Chain bias for low length chains.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: blender_cycles_volume_mlt_spectral_2.69.patch.bz2
Type: application/x-bzip
Size: 97963 bytes
Desc: not available
Url : http://lists.blender.org/pipermail/bf-cycles/attachments/20140108/ea13b899/attachment.bin 


More information about the Bf-cycles mailing list