[Bf-blender-cvs] [b9d9d93] master: Fix T48162: GPU render gives wrong results in certain volume setups

Sergey Sharybin noreply at git.blender.org
Wed Apr 20 13:50:46 CEST 2016


Commit: b9d9d93ff9631a8a982822c24c8ab6898950dd1c
Author: Sergey Sharybin
Date:   Wed Apr 20 13:49:54 2016 +0200
Branches: master
https://developer.blender.org/rBb9d9d93ff9631a8a982822c24c8ab6898950dd1c

Fix T48162: GPU render gives wrong results in certain volume setups

ideally this part of code should be de-duplicated across __VOLUME_INTERSECT_ALL
and regular code.

===================================================================

M	intern/cycles/kernel/kernel_volume.h

===================================================================

diff --git a/intern/cycles/kernel/kernel_volume.h b/intern/cycles/kernel/kernel_volume.h
index ed4f6b2..c499773 100644
--- a/intern/cycles/kernel/kernel_volume.h
+++ b/intern/cycles/kernel/kernel_volume.h
@@ -1061,14 +1061,23 @@ ccl_device void kernel_volume_stack_init(KernelGlobals *kg,
 			/* 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) {
+			bool need_add = true;
+			for(int i = 0; i < enclosed_index && need_add; ++i) {
+				/* If ray exited the volume and never entered to that volume
+				 * it means that camera is inside such a volume.
+				 */
 				if(enclosed_volumes[i] == sd.object) {
-					is_enclosed = true;
+					need_add = false;
+				}
+			}
+			for(int i = 0; i < stack_index && need_add; ++i) {
+				/* 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