Blender Git Loki
Git Commits -> Revision 70aa80b
Revision 70aa80b by William Leeson (cycles-x) September 6, 2021, 10:47 (GMT) |
Cycles PMJ adaptive sampling working poorly with many bounces for Cycles-X This fixes T79190 Problem: The is correlation at the edges of the image tiles due to using the same hash twice with and xor. Also the PMJ sampling pattern when used with xor scrambling does not generate a good sample set which is causing the rays to not sample the higher dimensions correctly. Solution: Use a different pixel hash to avoid clashes with hash used during path tracing. Also, uses Cranley-Patterson rotation (which matches the Sobol sampling scheme) with the PMJ sampling scheme instead of using xor scrambling which was resulting in a bad sample set. The number of samples drawable from the PMJ sampler is also increased by using all the PMJ sample sets instead of just one. Issues: The new samples produce images with more noise than the original PMJ sets and also the Sobol sets. This unfortunately is not avoidable as the nature of jitter sampling produces more noise as there is little correlation between sample sets. To alleviate this to some extent the Cranley-Patterson rotation method from the Sobol sample generate is used as it has some degree of correlation due to the simple hash used. Reviewed By: brecht, sergey, LazyDodo Maniphest Tasks: T79190 Differential Revision: https://developer.blender.org/D12213 |
Commit Details:
Full Hash: 70aa80b683812754b49b8b52820564074c1dd6a7
Parent Commit: 41ce217
Lines Changed: +188, -120
9 Modified Paths:
/intern/cycles/kernel/kernel_jitter.h (+102, -102) (Diff)
/intern/cycles/kernel/kernel_random.h (+31, -6) (Diff)
/intern/cycles/kernel/kernel_textures.h (+1, -1) (Diff)
/intern/cycles/kernel/kernel_types.h (+3, -2) (Diff)
/intern/cycles/render/integrator.cpp (+3, -2) (Diff)
/intern/cycles/render/jitter.cpp (+0, -6) (Diff)
/intern/cycles/render/scene.h (+1, -1) (Diff)
/intern/cycles/test/util_math_test.cpp (+13, -0) (Diff)
/intern/cycles/util/util_math.h (+34, -0) (Diff)
/intern/cycles/kernel/kernel_random.h (+31, -6) (Diff)
/intern/cycles/kernel/kernel_textures.h (+1, -1) (Diff)
/intern/cycles/kernel/kernel_types.h (+3, -2) (Diff)
/intern/cycles/render/integrator.cpp (+3, -2) (Diff)
/intern/cycles/render/jitter.cpp (+0, -6) (Diff)
/intern/cycles/render/scene.h (+1, -1) (Diff)
/intern/cycles/test/util_math_test.cpp (+13, -0) (Diff)
/intern/cycles/util/util_math.h (+34, -0) (Diff)