[Bf-blender-cvs] [d0effe8] openvdb: Add an 'is_color' metadata to set an rgba socket for color grids

Kévin Dietrich noreply at git.blender.org
Fri Jun 5 14:08:54 CEST 2015


Commit: d0effe8683db05a27325683f3d642c9febae04d2
Author: Kévin Dietrich
Date:   Thu Jun 4 16:34:36 2015 +0200
Branches: openvdb
https://developer.blender.org/rBd0effe8683db05a27325683f3d642c9febae04d2

Add an 'is_color' metadata to set an rgba socket for color grids

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

M	intern/cycles/render/nodes.cpp
M	intern/openvdb/intern/openvdb_dense_convert.cpp
M	intern/openvdb/intern/openvdb_dense_convert.h
M	intern/openvdb/openvdb_capi.cpp
M	intern/openvdb/openvdb_capi.h
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/nodes/shader/nodes/node_shader_openvdb.c

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

diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index be56045..2b02d63 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -4401,7 +4401,7 @@ void OpenVDBNode::compile(SVMCompiler& compiler)
 
 		int type = NODE_VDB_FLOAT;
 
-		if(out->type == SHADER_SOCKET_VECTOR) {
+		if(out->type == SHADER_SOCKET_VECTOR || out->type == SHADER_SOCKET_COLOR) {
 			type = NODE_VDB_FLOAT3;
 		}
 
diff --git a/intern/openvdb/intern/openvdb_dense_convert.cpp b/intern/openvdb/intern/openvdb_dense_convert.cpp
index c299679..e7f61df 100644
--- a/intern/openvdb/intern/openvdb_dense_convert.cpp
+++ b/intern/openvdb/intern/openvdb_dense_convert.cpp
@@ -67,7 +67,7 @@ void OpenVDB_export_vector_grid(OpenVDBWriter *writer,
                                 const float *data_x, const float *data_y, const float *data_z,
                                 const int res[3],
                                 float fluid_mat[4][4],
-                                VecType vec_type)
+                                VecType vec_type, const bool is_color)
 {
 
 	math::CoordBBox bbox(Coord(0), Coord(res[0] - 1, res[1] - 1, res[2] - 1));
@@ -109,6 +109,7 @@ void OpenVDB_export_vector_grid(OpenVDBWriter *writer,
 	vecgrid->setTransform(transform);
 	vecgrid->setIsInWorldSpace(false);
 	vecgrid->setVectorType(vec_type);
+	vecgrid->insertMeta("is_color", BoolMetadata(is_color));
 
 	writer->insert(vecgrid);
 }
diff --git a/intern/openvdb/intern/openvdb_dense_convert.h b/intern/openvdb/intern/openvdb_dense_convert.h
index 0006d8b..019c3f1 100644
--- a/intern/openvdb/intern/openvdb_dense_convert.h
+++ b/intern/openvdb/intern/openvdb_dense_convert.h
@@ -102,7 +102,7 @@ void OpenVDB_export_vector_grid(OpenVDBWriter *writer,
                                 const float *data_x, const float *data_y, const float *data_z,
                                 const int res[3],
                                 float fluid_mat[4][4],
-                                openvdb::VecType vec_type);
+                                openvdb::VecType vec_type, const bool is_color);
 
 
 void OpenVDB_import_grid_vector(OpenVDBReader *reader,
diff --git a/intern/openvdb/openvdb_capi.cpp b/intern/openvdb/openvdb_capi.cpp
index 3120487..b69b481 100644
--- a/intern/openvdb/openvdb_capi.cpp
+++ b/intern/openvdb/openvdb_capi.cpp
@@ -53,7 +53,17 @@ void OpenVDB_get_grid_names_and_types(const char *filename,
 		for (size_t i = 0; i < *num_grids; ++i) {
 			GridBase::ConstPtr grid = (*grids)[i];
 			grid_names[i] = strdup(grid->getName().c_str());
-			grid_types[i] = strdup(grid->valueType().c_str());
+
+			/* XXX - this is blender specific, for external files it might crash if
+			 * it doens't find a "is_color" metaValue, cases where it doens't crash
+			 * are when the vector grids are at the end of the grid vector.
+			 */
+			if (grid->valueType() == "vec3s" && grid->metaValue<bool>("is_color")) {
+				grid_types[i] = strdup("color");
+			}
+			else {
+				grid_types[i] = strdup(grid->valueType().c_str());
+			}
 		}
 	}
 	catch (...) {
@@ -92,11 +102,12 @@ void OpenVDB_export_grid_ch(OpenVDBWriter *writer,
 void OpenVDB_export_grid_vec(struct OpenVDBWriter *writer,
                              const char *name,
                              const float *data_x, const float *data_y, const float *data_z,
-                             const int res[3], float matrix[4][4], short vec_type)
+                             const int res[3], float matrix[4][4], short vec_type, const bool is_color)
 {
 	internal::OpenVDB_export_vector_grid(writer, name,
 	                                     data_x, data_y, data_z, res, matrix,
-	                                     static_cast<openvdb::VecType>(vec_type));
+	                                     static_cast<openvdb::VecType>(vec_type),
+	                                     is_color);
 }
 
 void OpenVDB_import_grid_fl(OpenVDBReader *reader,
diff --git a/intern/openvdb/openvdb_capi.h b/intern/openvdb/openvdb_capi.h
index 570c68c..8424275 100644
--- a/intern/openvdb/openvdb_capi.h
+++ b/intern/openvdb/openvdb_capi.h
@@ -77,7 +77,7 @@ void OpenVDB_export_grid_ch(struct OpenVDBWriter *writer,
 void OpenVDB_export_grid_vec(struct OpenVDBWriter *writer,
                              const char *name,
                              const float *data_x, const float *data_y, const float *data_z,
-                             const int res[3], float matrix[4][4], short vec_type);
+                             const int res[3], float matrix[4][4], short vec_type, const bool is_color);
 
 void OpenVDB_import_grid_fl(struct OpenVDBReader *reader,
                             const char *name, float **data,
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index b8cf5aa..0c631de 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -3171,10 +3171,10 @@ static void OpenVDB_export_smoke(SmokeDomainSettings *sds, struct OpenVDBWriter
 		}
 
 		if (fluid_fields & SM_ACTIVE_COLORS) {
-			OpenVDB_export_grid_vec(writer, "Color", r, g, b, sds->res, sds->fluidmat, VEC_INVARIANT);
+			OpenVDB_export_grid_vec(writer, "Color", r, g, b, sds->res, sds->fluidmat, VEC_INVARIANT, true);
 		}
 
-		OpenVDB_export_grid_vec(writer, "Velocity", vx, vy, vz, sds->res, sds->fluidmat, VEC_CONTRAVARIANT_RELATIVE);
+		OpenVDB_export_grid_vec(writer, "Velocity", vx, vy, vz, sds->res, sds->fluidmat, VEC_CONTRAVARIANT_RELATIVE, false);
 		OpenVDB_export_grid_ch(writer, "Obstacles", obstacles, sds->res, sds->fluidmat);
 	}
 
@@ -3192,10 +3192,10 @@ static void OpenVDB_export_smoke(SmokeDomainSettings *sds, struct OpenVDBWriter
 		}
 
 		if (fluid_fields & SM_ACTIVE_COLORS) {
-			OpenVDB_export_grid_vec(writer, "Color High", r, g, b, sds->res_wt, sds->fluidmat_wt, VEC_INVARIANT);
+			OpenVDB_export_grid_vec(writer, "Color High", r, g, b, sds->res_wt, sds->fluidmat_wt, VEC_INVARIANT, true);
 		}
 
-		OpenVDB_export_grid_vec(writer, "Texture Coordinates", tcu, tcv, tcw, sds->res, sds->fluidmat, VEC_INVARIANT);
+		OpenVDB_export_grid_vec(writer, "Texture Coordinates", tcu, tcv, tcw, sds->res, sds->fluidmat, VEC_INVARIANT, false);
 	}
 }
 
diff --git a/source/blender/nodes/shader/nodes/node_shader_openvdb.c b/source/blender/nodes/shader/nodes/node_shader_openvdb.c
index 7f32b52..e1e3c21 100644
--- a/source/blender/nodes/shader/nodes/node_shader_openvdb.c
+++ b/source/blender/nodes/shader/nodes/node_shader_openvdb.c
@@ -84,6 +84,9 @@ static void node_openvdb_get_sockets(Main *bmain, bNodeTree *ntree, bNode *node)
 		else if (STREQ(grid_types[i], "vec3s")) {
 			type = SOCK_VECTOR;
 		}
+		else if (STREQ(grid_types[i], "color")) {
+			type = SOCK_RGBA;
+		}
 		else {
 			continue;
 		}




More information about the Bf-blender-cvs mailing list