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:
authorCampbell Barton <ideasman42@gmail.com>2012-02-01 13:31:13 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-02-01 13:31:13 +0400
commit4aa82806effa9e114f14f88d7b2da23b0a2bcca6 (patch)
tree6741012808ab0c83f96ff7e52c8168cb62b8c8b7 /intern/cycles
parent35678eaae52a8436469b06307eaaf4d8503863f1 (diff)
parented0d2b5e9205fc99ed38957f01acaa62c3811333 (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.h3
-rw-r--r--intern/cycles/kernel/kernel_path.h7
-rw-r--r--intern/cycles/kernel/kernel_shader.h2
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