[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