diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-02-01 13:31:13 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-02-01 13:31:13 +0400 |
commit | 4aa82806effa9e114f14f88d7b2da23b0a2bcca6 (patch) | |
tree | 6741012808ab0c83f96ff7e52c8168cb62b8c8b7 /intern/cycles | |
parent | 35678eaae52a8436469b06307eaaf4d8503863f1 (diff) | |
parent | ed0d2b5e9205fc99ed38957f01acaa62c3811333 (diff) |
svn merge ^/trunk/blender -r43751:43819, need to look into changes made to editmesh_loop.c from this range still
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/kernel/kernel_emission.h | 3 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_path.h | 7 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_shader.h | 2 |
3 files changed, 5 insertions, 7 deletions
diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h index 513a453b585..2243858a403 100644 --- a/intern/cycles/kernel/kernel_emission.h +++ b/intern/cycles/kernel/kernel_emission.h @@ -116,7 +116,8 @@ __device bool direct_emission(KernelGlobals *kg, ShaderData *sd, int lindex, if(ls.shader & SHADER_CAST_SHADOW) { /* setup ray */ - ray->P = ray_offset(sd->P, sd->Ng); + bool transmit = (dot(sd->Ng, ls.D) < 0.0f); + ray->P = ray_offset(sd->P, (transmit)? -sd->Ng: sd->Ng); if(ls.t == FLT_MAX) { /* distant light */ diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h index 1a42cf1ed7e..05ee3212b4c 100644 --- a/intern/cycles/kernel/kernel_path.h +++ b/intern/cycles/kernel/kernel_path.h @@ -220,9 +220,7 @@ __device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample, R path_radiance_init(&L, kernel_data.film.use_light_pass); -#if defined(__EMISSION__) || defined(__BACKGROUND__) float ray_pdf = 0.0f; -#endif PathState state; int rng_offset = PRNG_BASE_NUM; @@ -344,9 +342,8 @@ __device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample, R path_radiance_bsdf_bounce(&L, &throughput, &bsdf_eval, bsdf_pdf, state.bounce, label); /* set labels */ -#if defined(__EMISSION__) || defined(__BACKGROUND__) - ray_pdf = bsdf_pdf; -#endif + if(!(label & LABEL_TRANSPARENT)) + ray_pdf = bsdf_pdf; /* update path state */ path_state_next(kg, &state, label); diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h index 0f04af1275d..7e0b0ff4d0f 100644 --- a/intern/cycles/kernel/kernel_shader.h +++ b/intern/cycles/kernel/kernel_shader.h @@ -300,7 +300,7 @@ __device_inline void _shader_bsdf_multi_eval(const ShaderData *sd, const float3 } } - *pdf = sum_pdf/sum_sample_weight; + *pdf = (sum_sample_weight > 0.0f)? sum_pdf/sum_sample_weight: 0.0f; } #endif |