[Bf-blender-cvs] [ce44ffd] master: Cycles: Fix wrong camera-in-volume stack when camera ray hits volume domain twice
Sergey Sharybin
noreply at git.blender.org
Fri Apr 1 18:04:01 CEST 2016
Commit: ce44ffd74f749cebdaf2141486b4773bd98b0a41
Author: Sergey Sharybin
Date: Fri Apr 1 18:03:58 2016 +0200
Branches: master
https://developer.blender.org/rBce44ffd74f749cebdaf2141486b4773bd98b0a41
Cycles: Fix wrong camera-in-volume stack when camera ray hits volume domain twice
===================================================================
M intern/cycles/kernel/kernel_volume.h
===================================================================
diff --git a/intern/cycles/kernel/kernel_volume.h b/intern/cycles/kernel/kernel_volume.h
index 70a1856..3553cf7 100644
--- a/intern/cycles/kernel/kernel_volume.h
+++ b/intern/cycles/kernel/kernel_volume.h
@@ -1010,17 +1010,22 @@ ccl_device void kernel_volume_stack_init(KernelGlobals *kg,
ShaderData sd;
shader_setup_from_ray(kg, &sd, isect, &volume_ray);
if(sd.flag & SD_BACKFACING) {
- /* If ray exited the volume and never entered to that volume
- * it means that camera is inside such a volume.
- */
- bool is_enclosed = false;
- for(int i = 0; i < enclosed_index; ++i) {
- if(enclosed_volumes[i] == sd.object) {
- is_enclosed = true;
+ bool need_add = true;
+ for(int i = 0; stack[i].shader != SHADER_NONE; ++i) {
+ /* If ray exited the volume and never entered to that volume
+ * it means that camera is inside such a volume.
+ */
+ if(i < enclosed_index && enclosed_volumes[i] == sd.object) {
+ need_add = false;
+ break;
+ }
+ /* Don't add intersections twice. */
+ if(stack[i].object == sd.object) {
+ need_add = false;
break;
}
}
- if(is_enclosed == false) {
+ if(need_add) {
stack[stack_index].object = sd.object;
stack[stack_index].shader = sd.shader;
++stack_index;
More information about the Bf-blender-cvs
mailing list