Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2014-02-26 21:47:50 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2014-02-26 21:47:50 +0400
commite1e247a99b480f81fb76332525002fbc7f776f12 (patch)
tree8279780b0185681378c5ae36edae2a869351ba46
parent49e8cfd809fe578a20ef266469362b157620729c (diff)
Fix T38710: volume render issue with transparent surfaces.
-rw-r--r--intern/cycles/kernel/kernel_random.h3
-rw-r--r--intern/cycles/kernel/kernel_volume.h9
2 files changed, 10 insertions, 2 deletions
diff --git a/intern/cycles/kernel/kernel_random.h b/intern/cycles/kernel/kernel_random.h
index ef397269ec2..31cb6ff6abd 100644
--- a/intern/cycles/kernel/kernel_random.h
+++ b/intern/cycles/kernel/kernel_random.h
@@ -120,6 +120,9 @@ ccl_device_inline float path_rng_1D(KernelGlobals *kg, RNG *rng, int sample, int
/* Cranly-Patterson rotation using rng seed */
float shift;
+ /* using the same *rng value to offset seems to give correlation issues,
+ * we could hash it with the dimension but this has a performance impact,
+ * we need to find a solution for this */
if(dimension & 1)
shift = (*rng >> 16) * (1.0f/(float)0xFFFF);
else
diff --git a/intern/cycles/kernel/kernel_volume.h b/intern/cycles/kernel/kernel_volume.h
index 4d058763f22..ec0c3114213 100644
--- a/intern/cycles/kernel/kernel_volume.h
+++ b/intern/cycles/kernel/kernel_volume.h
@@ -536,12 +536,17 @@ ccl_device VolumeIntegrateResult kernel_volume_integrate_heterogeneous(KernelGlo
ccl_device_noinline VolumeIntegrateResult kernel_volume_integrate(KernelGlobals *kg,
PathState *state, ShaderData *sd, Ray *ray, PathRadiance *L, float3 *throughput, RNG *rng)
{
+ /* workaround to fix correlation bug in T38710, can find better solution
+ * in random number generator later, for now this is done here to not impact
+ * performance of rendering without volumes */
+ RNG tmp_rng = cmj_hash(*rng, state->rng_offset);
+
shader_setup_from_volume(kg, sd, ray, state->bounce);
if(volume_stack_is_heterogeneous(kg, state->volume_stack))
- return kernel_volume_integrate_heterogeneous(kg, state, ray, sd, L, throughput, rng);
+ return kernel_volume_integrate_heterogeneous(kg, state, ray, sd, L, throughput, &tmp_rng);
else
- return kernel_volume_integrate_homogeneous(kg, state, ray, sd, L, throughput, rng);
+ return kernel_volume_integrate_homogeneous(kg, state, ray, sd, L, throughput, &tmp_rng);
}
/* Volume Stack