[Bf-blender-cvs] [928a22e] openvdb: Added primitive type, some shell code.

Kévin Dietrich noreply at git.blender.org
Sun Nov 13 21:43:58 CET 2016


Commit: 928a22e66e016cdcd64348a5481a7b24a54397d3
Author: Kévin Dietrich
Date:   Thu Jan 28 19:12:23 2016 +0100
Branches: openvdb
https://developer.blender.org/rB928a22e66e016cdcd64348a5481a7b24a54397d3

Added primitive type, some shell code.

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

M	intern/cycles/blender/blender_object.cpp
M	intern/cycles/kernel/geom/geom_bvh_volume.h
M	intern/cycles/kernel/geom/geom_bvh_volume_all.h
M	intern/cycles/kernel/geom/geom_qbvh_volume.h
M	intern/cycles/kernel/geom/geom_qbvh_volume_all.h
M	intern/cycles/kernel/kernel_shader.h
M	intern/cycles/kernel/kernel_types.h

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

diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index 1159380..d77d197 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -347,8 +347,13 @@ Object *BlenderSync::sync_object(BL::Object b_parent,
 	
 	bool use_holdout = (layer_flag & render_layer.holdout_layer) != 0;
 	
-	/* mesh sync */
-	object->mesh = sync_mesh(b_ob, object_updated, hide_tris);
+	if(object_has_sparse_volume(b_ob)) {
+		object->mesh = NULL;
+	}
+	else {
+		/* mesh sync */
+		object->mesh = sync_mesh(b_ob, object_updated, hide_tris);
+	}
 
 	/* special case not tracked by object update flags */
 
diff --git a/intern/cycles/kernel/geom/geom_bvh_volume.h b/intern/cycles/kernel/geom/geom_bvh_volume.h
index c2bf664..3344098 100644
--- a/intern/cycles/kernel/geom/geom_bvh_volume.h
+++ b/intern/cycles/kernel/geom/geom_bvh_volume.h
@@ -92,8 +92,9 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
 	/* try to intersect with VDB volumes */
 	int num_volumes = kernel_data.tables.num_volumes;
 
-	for (int i = 0; i < num_volumes; i++) {
-		if (kg->float_volumes[i]->intersect(ray, isect)) {
+	for(int i = 0; i < num_volumes; i++) {
+		if(kg->float_volumes[i]->intersect(ray, isect)) {
+			isect->type = PRIMITIVE_VOLUME;
 			kernel_data.tables.density_index = i;
 			return true;
 		}
diff --git a/intern/cycles/kernel/geom/geom_bvh_volume_all.h b/intern/cycles/kernel/geom/geom_bvh_volume_all.h
index ed0af64..65855f5 100644
--- a/intern/cycles/kernel/geom/geom_bvh_volume_all.h
+++ b/intern/cycles/kernel/geom/geom_bvh_volume_all.h
@@ -95,6 +95,7 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
 
 	for(int i = 0; i < num_volumes; i++) {
 		if(kg->float_volumes[i]->intersect(ray, isect_array)) {
+			isect_array->type = PRIMITIVE_VOLUME;
 			kernel_data.tables.density_index = i;
 			isect_array++;
 			num_hits++;
diff --git a/intern/cycles/kernel/geom/geom_qbvh_volume.h b/intern/cycles/kernel/geom/geom_qbvh_volume.h
index e432495..06926d4 100644
--- a/intern/cycles/kernel/geom/geom_qbvh_volume.h
+++ b/intern/cycles/kernel/geom/geom_qbvh_volume.h
@@ -94,8 +94,9 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
 	/* try to intersect with VDB volumes */
 	int num_volumes = kernel_data.tables.num_volumes;
 
-	for (int i = 0; i < num_volumes; i++) {
-		if (kg->float_volumes[i]->intersect(ray, isect)) {
+	for(int i = 0; i < num_volumes; i++) {
+		if(kg->float_volumes[i]->intersect(ray, isect)) {
+			isect->type = PRIMITIVE_VOLUME;
 			kernel_data.tables.density_index = i;
 			return true;
 		}
diff --git a/intern/cycles/kernel/geom/geom_qbvh_volume_all.h b/intern/cycles/kernel/geom/geom_qbvh_volume_all.h
index 97b4dfe..4c03786 100644
--- a/intern/cycles/kernel/geom/geom_qbvh_volume_all.h
+++ b/intern/cycles/kernel/geom/geom_qbvh_volume_all.h
@@ -98,8 +98,9 @@ ccl_device uint BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg,
 	/* try to intersect with VDB volumes */
 	int num_volumes = kernel_data.tables.num_volumes;
 
-	for (int i = 0; i < num_volumes; i++) {
-		if (kg->float_volumes[i]->intersect(ray, isect_array)) {
+	for(int i = 0; i < num_volumes; i++) {
+		if(kg->float_volumes[i]->intersect(ray, isect_array)) {
+			isect_array->type = PRIMITIVE_VOLUME;
 			kernel_data.tables.density_index = i;
 			isect_array++;
 			num_hits++;
diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h
index 9a4d237..c8550d2 100644
--- a/intern/cycles/kernel/kernel_shader.h
+++ b/intern/cycles/kernel/kernel_shader.h
@@ -103,6 +103,9 @@ ccl_device_noinline void shader_setup_from_ray(KernelGlobals *kg,
 		triangle_dPdudv(kg, ccl_fetch(sd, prim), &ccl_fetch(sd, dPdu), &ccl_fetch(sd, dPdv));
 #endif
 	}
+	else if(ccl_fetch(sd, type) & PRIMITIVE_VOLUME) {
+		ccl_fetch(sd, shader) = kernel_tex_fetch(__vol_shader, ccl_fetch(sd, prim));
+	}
 	else {
 		/* motion triangle */
 		motion_triangle_shader_setup(kg, sd, isect, ray, false);
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index 01abd21..dd5b8ef 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -555,11 +555,12 @@ typedef enum PrimitiveType {
 	PRIMITIVE_MOTION_TRIANGLE = 2,
 	PRIMITIVE_CURVE = 4,
 	PRIMITIVE_MOTION_CURVE = 8,
+	PRIMITIVE_VOLUME = 16,
 
 	PRIMITIVE_ALL_TRIANGLE = (PRIMITIVE_TRIANGLE|PRIMITIVE_MOTION_TRIANGLE),
 	PRIMITIVE_ALL_CURVE = (PRIMITIVE_CURVE|PRIMITIVE_MOTION_CURVE),
 	PRIMITIVE_ALL_MOTION = (PRIMITIVE_MOTION_TRIANGLE|PRIMITIVE_MOTION_CURVE),
-	PRIMITIVE_ALL = (PRIMITIVE_ALL_TRIANGLE|PRIMITIVE_ALL_CURVE),
+	PRIMITIVE_ALL = (PRIMITIVE_ALL_TRIANGLE|PRIMITIVE_ALL_CURVE|PRIMITIVE_VOLUME),
 
 	/* Total number of different primitives.
 	 * NOTE: This is an actual value, not a bitflag.




More information about the Bf-blender-cvs mailing list