Merge branch 'master' into blender2.8
Conflicts: source/blender/blenkernel/BKE_blender_version.h
This commit is contained in:
@@ -79,7 +79,8 @@ openvdb::GridBase *OpenVDB_export_vector_grid(
|
||||
const int res[3],
|
||||
float fluid_mat[4][4],
|
||||
openvdb::VecType vec_type,
|
||||
const bool is_color,
|
||||
const bool is_color,
|
||||
const float clipping,
|
||||
const openvdb::FloatGrid *mask)
|
||||
{
|
||||
using namespace openvdb;
|
||||
@@ -92,15 +93,15 @@ openvdb::GridBase *OpenVDB_export_vector_grid(
|
||||
|
||||
grid[0] = FloatGrid::create(0.0f);
|
||||
tools::Dense<const float, tools::LayoutXYZ> dense_grid_x(bbox, data_x);
|
||||
tools::copyFromDense(dense_grid_x, grid[0]->tree(), TOLERANCE);
|
||||
tools::copyFromDense(dense_grid_x, grid[0]->tree(), clipping);
|
||||
|
||||
grid[1] = FloatGrid::create(0.0f);
|
||||
tools::Dense<const float, tools::LayoutXYZ> dense_grid_y(bbox, data_y);
|
||||
tools::copyFromDense(dense_grid_y, grid[1]->tree(), TOLERANCE);
|
||||
tools::copyFromDense(dense_grid_y, grid[1]->tree(), clipping);
|
||||
|
||||
grid[2] = FloatGrid::create(0.0f);
|
||||
tools::Dense<const float, tools::LayoutXYZ> dense_grid_z(bbox, data_z);
|
||||
tools::copyFromDense(dense_grid_z, grid[2]->tree(), TOLERANCE);
|
||||
tools::copyFromDense(dense_grid_z, grid[2]->tree(), clipping);
|
||||
|
||||
Vec3SGrid::Ptr vecgrid = Vec3SGrid::create(Vec3s(0.0f));
|
||||
|
||||
@@ -165,4 +166,19 @@ void OpenVDB_import_grid_vector(
|
||||
}
|
||||
}
|
||||
|
||||
openvdb::Name do_name_versionning(const openvdb::Name &name)
|
||||
{
|
||||
openvdb::Name temp_name = name;
|
||||
|
||||
if (temp_name.find("_low", temp_name.size() - 4, 4) == temp_name.size() - 4) {
|
||||
return temp_name.replace(temp_name.size() - 4, 4, " low");
|
||||
}
|
||||
|
||||
if (temp_name.find("_old", temp_name.size() - 4, 4) == temp_name.size() - 4) {
|
||||
return temp_name.replace(temp_name.size() - 4, 4, " old");
|
||||
}
|
||||
|
||||
return temp_name;
|
||||
}
|
||||
|
||||
} /* namespace internal */
|
||||
|
||||
@@ -36,10 +36,12 @@
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
#define TOLERANCE 1e-3f
|
||||
|
||||
namespace internal {
|
||||
|
||||
/* Verify that the name does not correspond to the old format, in which case we
|
||||
* need to replace the '_low' ending with ' low'. See T53802. */
|
||||
openvdb::Name do_name_versionning(const openvdb::Name &name);
|
||||
|
||||
openvdb::Mat4R convertMatrix(const float mat[4][4]);
|
||||
|
||||
template <typename GridType, typename T>
|
||||
@@ -48,7 +50,8 @@ GridType *OpenVDB_export_grid(
|
||||
const openvdb::Name &name,
|
||||
const T *data,
|
||||
const int res[3],
|
||||
float fluid_mat[4][4],
|
||||
float fluid_mat[4][4],
|
||||
const float clipping,
|
||||
const openvdb::FloatGrid *mask)
|
||||
{
|
||||
using namespace openvdb;
|
||||
@@ -60,7 +63,7 @@ GridType *OpenVDB_export_grid(
|
||||
typename GridType::Ptr grid = GridType::create(T(0));
|
||||
|
||||
tools::Dense<const T, openvdb::tools::LayoutXYZ> dense_grid(bbox, data);
|
||||
tools::copyFromDense(dense_grid, grid->tree(), (T)TOLERANCE);
|
||||
tools::copyFromDense(dense_grid, grid->tree(), static_cast<T>(clipping));
|
||||
|
||||
grid->setTransform(transform);
|
||||
|
||||
@@ -87,13 +90,19 @@ void OpenVDB_import_grid(
|
||||
{
|
||||
using namespace openvdb;
|
||||
|
||||
if (!reader->hasGrid(name)) {
|
||||
std::fprintf(stderr, "OpenVDB grid %s not found in file!\n", name.c_str());
|
||||
memset(*data, 0, sizeof(T) * res[0] * res[1] * res[2]);
|
||||
return;
|
||||
openvdb::Name temp_name = name;
|
||||
|
||||
if (!reader->hasGrid(temp_name)) {
|
||||
temp_name = do_name_versionning(temp_name);
|
||||
|
||||
if (!reader->hasGrid(temp_name)) {
|
||||
std::fprintf(stderr, "OpenVDB grid %s not found in file!\n", temp_name.c_str());
|
||||
memset(*data, 0, sizeof(T) * res[0] * res[1] * res[2]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
typename GridType::Ptr grid = gridPtrCast<GridType>(reader->getGrid(name));
|
||||
typename GridType::Ptr grid = gridPtrCast<GridType>(reader->getGrid(temp_name));
|
||||
typename GridType::ConstAccessor acc = grid->getConstAccessor();
|
||||
|
||||
math::Coord xyz;
|
||||
@@ -109,15 +118,15 @@ void OpenVDB_import_grid(
|
||||
}
|
||||
}
|
||||
|
||||
openvdb::GridBase *OpenVDB_export_vector_grid(
|
||||
OpenVDBWriter *writer,
|
||||
const openvdb::Name &name,
|
||||
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,
|
||||
const bool is_color,
|
||||
const openvdb::FloatGrid *mask);
|
||||
openvdb::GridBase *OpenVDB_export_vector_grid(OpenVDBWriter *writer,
|
||||
const openvdb::Name &name,
|
||||
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,
|
||||
const bool is_color,
|
||||
const float clipping,
|
||||
const openvdb::FloatGrid *mask);
|
||||
|
||||
|
||||
void OpenVDB_import_grid_vector(
|
||||
|
||||
@@ -39,7 +39,7 @@ int OpenVDB_getVersionHex()
|
||||
OpenVDBFloatGrid *OpenVDB_export_grid_fl(
|
||||
OpenVDBWriter *writer,
|
||||
const char *name, float *data,
|
||||
const int res[3], float matrix[4][4],
|
||||
const int res[3], float matrix[4][4], const float clipping,
|
||||
OpenVDBFloatGrid *mask)
|
||||
{
|
||||
Timer(__func__);
|
||||
@@ -53,6 +53,7 @@ OpenVDBFloatGrid *OpenVDB_export_grid_fl(
|
||||
data,
|
||||
res,
|
||||
matrix,
|
||||
clipping,
|
||||
mask_grid);
|
||||
|
||||
return reinterpret_cast<OpenVDBFloatGrid *>(grid);
|
||||
@@ -61,7 +62,7 @@ OpenVDBFloatGrid *OpenVDB_export_grid_fl(
|
||||
OpenVDBIntGrid *OpenVDB_export_grid_ch(
|
||||
OpenVDBWriter *writer,
|
||||
const char *name, unsigned char *data,
|
||||
const int res[3], float matrix[4][4],
|
||||
const int res[3], float matrix[4][4], const float clipping,
|
||||
OpenVDBFloatGrid *mask)
|
||||
{
|
||||
Timer(__func__);
|
||||
@@ -76,17 +77,17 @@ OpenVDBIntGrid *OpenVDB_export_grid_ch(
|
||||
data,
|
||||
res,
|
||||
matrix,
|
||||
clipping,
|
||||
mask_grid);
|
||||
|
||||
return reinterpret_cast<OpenVDBIntGrid *>(grid);
|
||||
}
|
||||
|
||||
OpenVDBVectorGrid *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 bool is_color, OpenVDBFloatGrid *mask)
|
||||
OpenVDBVectorGrid *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 float clipping,
|
||||
const bool is_color, OpenVDBFloatGrid *mask)
|
||||
{
|
||||
Timer(__func__);
|
||||
|
||||
@@ -105,6 +106,7 @@ OpenVDBVectorGrid *OpenVDB_export_grid_vec(
|
||||
matrix,
|
||||
static_cast<VecType>(vec_type),
|
||||
is_color,
|
||||
clipping,
|
||||
mask_grid);
|
||||
|
||||
return reinterpret_cast<OpenVDBVectorGrid *>(grid);
|
||||
|
||||
@@ -49,22 +49,20 @@ enum {
|
||||
struct OpenVDBFloatGrid *OpenVDB_export_grid_fl(
|
||||
struct OpenVDBWriter *writer,
|
||||
const char *name, float *data,
|
||||
const int res[3], float matrix[4][4],
|
||||
const int res[3], float matrix[4][4], const float clipping,
|
||||
struct OpenVDBFloatGrid *mask);
|
||||
|
||||
struct OpenVDBIntGrid *OpenVDB_export_grid_ch(
|
||||
struct OpenVDBWriter *writer,
|
||||
const char *name, unsigned char *data,
|
||||
const int res[3], float matrix[4][4],
|
||||
struct OpenVDBFloatGrid *mask);
|
||||
struct OpenVDBIntGrid *OpenVDB_export_grid_ch(struct OpenVDBWriter *writer,
|
||||
const char *name, unsigned char *data,
|
||||
const int res[3], float matrix[4][4], const float clipping,
|
||||
struct OpenVDBFloatGrid *mask);
|
||||
|
||||
struct OpenVDBVectorGrid *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 bool is_color,
|
||||
struct OpenVDBFloatGrid *mask);
|
||||
struct OpenVDBVectorGrid *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 float clipping,
|
||||
const bool is_color,
|
||||
struct OpenVDBFloatGrid *mask);
|
||||
|
||||
void OpenVDB_import_grid_fl(
|
||||
struct OpenVDBReader *reader,
|
||||
|
||||
@@ -68,6 +68,8 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel):
|
||||
col.prop(domain, "time_scale", text="Scale")
|
||||
col.label(text="Border Collisions:")
|
||||
col.prop(domain, "collision_extents", text="")
|
||||
col.label(text="Empty Space:")
|
||||
col.prop(domain, "clipping")
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Behavior:")
|
||||
|
||||
@@ -972,20 +972,20 @@ static int ptcache_smoke_openvdb_write(struct OpenVDBWriter *writer, void *smoke
|
||||
|
||||
smoke_turbulence_export(sds->wt, &dens, &react, &flame, &fuel, &r, &g, &b, &tcu, &tcv, &tcw);
|
||||
|
||||
wt_density_grid = OpenVDB_export_grid_fl(writer, "density", dens, sds->res_wt, sds->fluidmat_wt, NULL);
|
||||
wt_density_grid = OpenVDB_export_grid_fl(writer, "density", dens, sds->res_wt, sds->fluidmat_wt, sds->clipping, NULL);
|
||||
clip_grid = wt_density_grid;
|
||||
|
||||
if (fluid_fields & SM_ACTIVE_FIRE) {
|
||||
OpenVDB_export_grid_fl(writer, "flame", flame, sds->res_wt, sds->fluidmat_wt, wt_density_grid);
|
||||
OpenVDB_export_grid_fl(writer, "fuel", fuel, sds->res_wt, sds->fluidmat_wt, wt_density_grid);
|
||||
OpenVDB_export_grid_fl(writer, "react", react, sds->res_wt, sds->fluidmat_wt, wt_density_grid);
|
||||
OpenVDB_export_grid_fl(writer, "flame", flame, sds->res_wt, sds->fluidmat_wt, sds->clipping, wt_density_grid);
|
||||
OpenVDB_export_grid_fl(writer, "fuel", fuel, sds->res_wt, sds->fluidmat_wt, sds->clipping, wt_density_grid);
|
||||
OpenVDB_export_grid_fl(writer, "react", react, sds->res_wt, sds->fluidmat_wt, sds->clipping, wt_density_grid);
|
||||
}
|
||||
|
||||
if (fluid_fields & SM_ACTIVE_COLORS) {
|
||||
OpenVDB_export_grid_vec(writer, "color", r, g, b, sds->res_wt, sds->fluidmat_wt, VEC_INVARIANT, true, wt_density_grid);
|
||||
OpenVDB_export_grid_vec(writer, "color", r, g, b, sds->res_wt, sds->fluidmat_wt, VEC_INVARIANT, true, sds->clipping, wt_density_grid);
|
||||
}
|
||||
|
||||
OpenVDB_export_grid_vec(writer, "texture coordinates", tcu, tcv, tcw, sds->res, sds->fluidmat, VEC_INVARIANT, false, wt_density_grid);
|
||||
OpenVDB_export_grid_vec(writer, "texture coordinates", tcu, tcv, tcw, sds->res, sds->fluidmat, VEC_INVARIANT, false, sds->clipping, wt_density_grid);
|
||||
}
|
||||
|
||||
if (sds->fluid) {
|
||||
@@ -999,33 +999,33 @@ static int ptcache_smoke_openvdb_write(struct OpenVDBWriter *writer, void *smoke
|
||||
OpenVDBWriter_add_meta_fl(writer, "blender/smoke/dx", dx);
|
||||
OpenVDBWriter_add_meta_fl(writer, "blender/smoke/dt", dt);
|
||||
|
||||
const char *name = (!sds->wt) ? "density" : "density low";
|
||||
density_grid = OpenVDB_export_grid_fl(writer, name, dens, sds->res, sds->fluidmat, NULL);
|
||||
const char *name = (!sds->wt) ? "density" : "density_low";
|
||||
density_grid = OpenVDB_export_grid_fl(writer, name, dens, sds->res, sds->fluidmat, sds->clipping, NULL);
|
||||
clip_grid = sds->wt ? clip_grid : density_grid;
|
||||
|
||||
OpenVDB_export_grid_fl(writer, "shadow", sds->shadow, sds->res, sds->fluidmat, NULL);
|
||||
OpenVDB_export_grid_fl(writer, "shadow", sds->shadow, sds->res, sds->fluidmat, sds->clipping, NULL);
|
||||
|
||||
if (fluid_fields & SM_ACTIVE_HEAT) {
|
||||
OpenVDB_export_grid_fl(writer, "heat", heat, sds->res, sds->fluidmat, clip_grid);
|
||||
OpenVDB_export_grid_fl(writer, "heat old", heatold, sds->res, sds->fluidmat, clip_grid);
|
||||
OpenVDB_export_grid_fl(writer, "heat", heat, sds->res, sds->fluidmat, sds->clipping, clip_grid);
|
||||
OpenVDB_export_grid_fl(writer, "heat_old", heatold, sds->res, sds->fluidmat, sds->clipping, clip_grid);
|
||||
}
|
||||
|
||||
if (fluid_fields & SM_ACTIVE_FIRE) {
|
||||
name = (!sds->wt) ? "flame" : "flame low";
|
||||
OpenVDB_export_grid_fl(writer, name, flame, sds->res, sds->fluidmat, density_grid);
|
||||
name = (!sds->wt) ? "fuel" : "fuel low";
|
||||
OpenVDB_export_grid_fl(writer, name, fuel, sds->res, sds->fluidmat, density_grid);
|
||||
name = (!sds->wt) ? "react" : "react low";
|
||||
OpenVDB_export_grid_fl(writer, name, react, sds->res, sds->fluidmat, density_grid);
|
||||
name = (!sds->wt) ? "flame" : "flame_low";
|
||||
OpenVDB_export_grid_fl(writer, name, flame, sds->res, sds->fluidmat, sds->clipping, density_grid);
|
||||
name = (!sds->wt) ? "fuel" : "fuel_low";
|
||||
OpenVDB_export_grid_fl(writer, name, fuel, sds->res, sds->fluidmat, sds->clipping, density_grid);
|
||||
name = (!sds->wt) ? "react" : "react_low";
|
||||
OpenVDB_export_grid_fl(writer, name, react, sds->res, sds->fluidmat, sds->clipping, density_grid);
|
||||
}
|
||||
|
||||
if (fluid_fields & SM_ACTIVE_COLORS) {
|
||||
name = (!sds->wt) ? "color" : "color low";
|
||||
OpenVDB_export_grid_vec(writer, name, r, g, b, sds->res, sds->fluidmat, VEC_INVARIANT, true, density_grid);
|
||||
name = (!sds->wt) ? "color" : "color_low";
|
||||
OpenVDB_export_grid_vec(writer, name, r, g, b, sds->res, sds->fluidmat, VEC_INVARIANT, true, sds->clipping, density_grid);
|
||||
}
|
||||
|
||||
OpenVDB_export_grid_vec(writer, "velocity", vx, vy, vz, sds->res, sds->fluidmat, VEC_CONTRAVARIANT_RELATIVE, false, clip_grid);
|
||||
OpenVDB_export_grid_ch(writer, "obstacles", obstacles, sds->res, sds->fluidmat, NULL);
|
||||
OpenVDB_export_grid_vec(writer, "velocity", vx, vy, vz, sds->res, sds->fluidmat, VEC_CONTRAVARIANT_RELATIVE, false, sds->clipping, clip_grid);
|
||||
OpenVDB_export_grid_ch(writer, "obstacles", obstacles, sds->res, sds->fluidmat, sds->clipping, NULL);
|
||||
}
|
||||
|
||||
return 1;
|
||||
@@ -1104,25 +1104,25 @@ static int ptcache_smoke_openvdb_read(struct OpenVDBReader *reader, void *smoke_
|
||||
|
||||
OpenVDB_import_grid_fl(reader, "shadow", &sds->shadow, sds->res);
|
||||
|
||||
const char *name = (!sds->wt) ? "density" : "density low";
|
||||
const char *name = (!sds->wt) ? "density" : "density_low";
|
||||
OpenVDB_import_grid_fl(reader, name, &dens, sds->res);
|
||||
|
||||
if (cache_fields & SM_ACTIVE_HEAT) {
|
||||
OpenVDB_import_grid_fl(reader, "heat", &heat, sds->res);
|
||||
OpenVDB_import_grid_fl(reader, "heat old", &heatold, sds->res);
|
||||
OpenVDB_import_grid_fl(reader, "heat_old", &heatold, sds->res);
|
||||
}
|
||||
|
||||
if (cache_fields & SM_ACTIVE_FIRE) {
|
||||
name = (!sds->wt) ? "flame" : "flame low";
|
||||
name = (!sds->wt) ? "flame" : "flame_low";
|
||||
OpenVDB_import_grid_fl(reader, name, &flame, sds->res);
|
||||
name = (!sds->wt) ? "fuel" : "fuel low";
|
||||
name = (!sds->wt) ? "fuel" : "fuel_low";
|
||||
OpenVDB_import_grid_fl(reader, name, &fuel, sds->res);
|
||||
name = (!sds->wt) ? "react" : "react low";
|
||||
name = (!sds->wt) ? "react" : "react_low";
|
||||
OpenVDB_import_grid_fl(reader, name, &react, sds->res);
|
||||
}
|
||||
|
||||
if (cache_fields & SM_ACTIVE_COLORS) {
|
||||
name = (!sds->wt) ? "color" : "color low";
|
||||
name = (!sds->wt) ? "color" : "color_low";
|
||||
OpenVDB_import_grid_vec(reader, name, &r, &g, &b, sds->res);
|
||||
}
|
||||
|
||||
|
||||
@@ -553,6 +553,8 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
|
||||
|
||||
smd->domain->coba = NULL;
|
||||
smd->domain->coba_field = FLUID_FIELD_DENSITY;
|
||||
|
||||
smd->domain->clipping = 1e-3f;
|
||||
}
|
||||
else if (smd->type & MOD_SMOKE_TYPE_FLOW)
|
||||
{
|
||||
|
||||
@@ -1756,6 +1756,24 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
|
||||
}
|
||||
}
|
||||
|
||||
if (!MAIN_VERSION_ATLEAST(main, 279, 3)) {
|
||||
if (!DNA_struct_elem_find(fd->filesdna, "SmokeDomainSettings", "float", "clipping")) {
|
||||
Object *ob;
|
||||
ModifierData *md;
|
||||
|
||||
for (ob = main->object.first; ob; ob = ob->id.next) {
|
||||
for (md = ob->modifiers.first; md; md = md->next) {
|
||||
if (md->type == eModifierType_Smoke) {
|
||||
SmokeModifierData *smd = (SmokeModifierData *)md;
|
||||
if (smd->domain) {
|
||||
smd->domain->clipping = 1e-3f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
/* Fix for invalid state of screen due to bug in older versions. */
|
||||
for (bScreen *sc = main->screen.first; sc; sc = sc->id.next) {
|
||||
|
||||
@@ -217,6 +217,9 @@ typedef struct SmokeDomainSettings {
|
||||
char use_coba;
|
||||
char coba_field; /* simulation field used for the color mapping */
|
||||
char pad2;
|
||||
|
||||
float clipping;
|
||||
float pad3;
|
||||
} SmokeDomainSettings;
|
||||
|
||||
|
||||
|
||||
@@ -900,6 +900,14 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
|
||||
RNA_def_property_struct_type(prop, "ColorRamp");
|
||||
RNA_def_property_ui_text(prop, "Color Ramp", "");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "clipping", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "clipping");
|
||||
RNA_def_property_range(prop, 0.0, 1.0);
|
||||
RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 3);
|
||||
RNA_def_property_ui_text(prop, "Clipping",
|
||||
"Value under which voxels are considered empty space to optimize caching or rendering");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
|
||||
}
|
||||
|
||||
static void rna_def_smoke_flow_settings(BlenderRNA *brna)
|
||||
|
||||
Reference in New Issue
Block a user