From f7062ff3ed55faa6c40c1de19113746b221a7a8f Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 3 Sep 2014 21:23:07 +0600 Subject: Fix T41693: Volumes get brightened with extra volume samples on GPU + BPT --- intern/cycles/kernel/kernel_path.h | 10 +++++----- intern/cycles/kernel/kernel_path_volume.h | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-) (limited to 'intern') diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h index 65755f0df12..b74822bc095 100644 --- a/intern/cycles/kernel/kernel_path.h +++ b/intern/cycles/kernel/kernel_path.h @@ -154,7 +154,7 @@ ccl_device void kernel_path_indirect(KernelGlobals *kg, RNG *rng, Ray ray, #ifdef __VOLUME_SCATTER__ if(result == VOLUME_PATH_SCATTERED) { /* direct lighting */ - kernel_path_volume_connect_light(kg, rng, &volume_sd, throughput, &state, L, 1.0f); + kernel_path_volume_connect_light(kg, rng, &volume_sd, throughput, &state, L); /* indirect light bounce */ if(kernel_path_volume_bounce(kg, rng, &volume_sd, &throughput, &state, L, &ray)) @@ -541,7 +541,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample, #ifdef __VOLUME_SCATTER__ if(result == VOLUME_PATH_SCATTERED) { /* direct lighting */ - kernel_path_volume_connect_light(kg, rng, &volume_sd, throughput, &state, &L, 1.0f); + kernel_path_volume_connect_light(kg, rng, &volume_sd, throughput, &state, &L); /* indirect light bounce */ if(kernel_path_volume_bounce(kg, rng, &volume_sd, &throughput, &state, &L, &ray)) @@ -897,7 +897,7 @@ ccl_device float4 kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in PathState ps = state; Ray pray = ray; ShaderData volume_sd; - float3 tp = throughput; + float3 tp = throughput * num_samples_inv; /* branch RNG state */ path_state_branch(&ps, j, num_samples); @@ -909,10 +909,10 @@ ccl_device float4 kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in if(result == VOLUME_PATH_SCATTERED) { /* todo: support equiangular, MIS and all light sampling. * alternatively get decoupled ray marching working on the GPU */ - kernel_path_volume_connect_light(kg, rng, &volume_sd, tp, &state, &L, num_samples_inv); + kernel_path_volume_connect_light(kg, rng, &volume_sd, tp, &state, &L); if(kernel_path_volume_bounce(kg, rng, &volume_sd, &tp, &ps, &L, &pray)) { - kernel_path_indirect(kg, rng, pray, tp*num_samples_inv, num_samples, ps, &L); + kernel_path_indirect(kg, rng, pray, tp, num_samples, ps, &L); /* for render passes, sum and reset indirect light pass variables * for the next samples */ diff --git a/intern/cycles/kernel/kernel_path_volume.h b/intern/cycles/kernel/kernel_path_volume.h index 9da1cfe7093..da2d5e6eca8 100644 --- a/intern/cycles/kernel/kernel_path_volume.h +++ b/intern/cycles/kernel/kernel_path_volume.h @@ -19,8 +19,7 @@ CCL_NAMESPACE_BEGIN #ifdef __VOLUME_SCATTER__ ccl_device void kernel_path_volume_connect_light(KernelGlobals *kg, RNG *rng, - ShaderData *sd, float3 throughput, PathState *state, PathRadiance *L, - float num_samples_adjust) + ShaderData *sd, float3 throughput, PathState *state, PathRadiance *L) { #ifdef __EMISSION__ if(!kernel_data.integrator.use_direct_light) @@ -51,7 +50,7 @@ ccl_device void kernel_path_volume_connect_light(KernelGlobals *kg, RNG *rng, if(!shadow_blocked(kg, state, &light_ray, &shadow)) { /* accumulate */ - path_radiance_accum_light(L, throughput * num_samples_adjust, &L_light, shadow, 1.0f, state->bounce, is_lamp); + path_radiance_accum_light(L, throughput, &L_light, shadow, 1.0f, state->bounce, is_lamp); } } #endif -- cgit v1.2.3