[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