Commit: 2d3d984be40c3283067a4a4112ec80d4e4896ff9
Author: Kévin Dietrich
Date: Sun Jun 7 00:57:28 2015 +0200
Branches: openvdb
https://developer.blender.org/rB2d3d984be40c3283067a4a4112ec80d4e4896ff9
Clip some low res grids based on the high res density.
Rationale is that in some cases the high resolution density is larger
than the low resolution one, so here we ensure there's enough data for
lookup during rendering for instance.
===================================================================
M source/blender/blenkernel/intern/smoke.c
===================================================================
diff --git a/source/blender/blenkernel/intern/smoke.c
b/source/blender/blenkernel/intern/smoke.c
index a922f9a..776559e 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -3142,11 +3142,34 @@ static void cache_filename(char *string, const char
*path, const char *fname, co
static void OpenVDB_export_smoke(SmokeDomainSettings *sds, struct
OpenVDBWriter *writer)
{
int fluid_fields = smoke_get_data_flags(sds);
- struct OpenVDBFloatGrid *density_grid = NULL;
+ struct OpenVDBFloatGrid *clip_grid = NULL;
OpenVDBWriter_add_meta_int(writer, "fluid_fields", fluid_fields);
+ if (sds->wt) {
+ struct OpenVDBFloatGrid *wt_density_grid;
+ float *dens, *react, *fuel, *flame, *tcu, *tcv, *tcw, *r, *g,
*b;
+
+ smoke_turbulence_export(sds->wt, &dens, &react, &flame, &fuel,
&r, &g, &b, &tcu, &tcv, &tcw);
+
+ wt_density_grid = OpenVDB_export_grid_fl(writer, "Density
High", dens, sds->res_wt, sds->fluidmat_wt, NULL);
+ clip_grid = wt_density_grid;
+
+ if (fluid_fields & SM_ACTIVE_FIRE) {
+ OpenVDB_export_grid_fl(writer, "Flame High", flame,
sds->res_wt, sds->fluidmat_wt, wt_density_grid);
+ OpenVDB_export_grid_fl(writer, "Fuel High", fuel,
sds->res_wt, sds->fluidmat_wt, wt_density_grid);
+ OpenVDB_export_grid_fl(writer, "React High", react,
sds->res_wt, sds->fluidmat_wt, wt_density_grid);
+ }
+
+ if (fluid_fields & SM_ACTIVE_COLORS) {
+ OpenVDB_export_grid_vec(writer, "Color High", r, g, b,
sds->res_wt, sds->fluidmat_wt, VEC_INVARIANT, true, wt_density_grid);
+ }
+
+ OpenVDB_export_grid_vec(writer, "Texture Coordinates", tcu,
tcv, tcw, sds->res, sds->fluidmat, VEC_INVARIANT, false, wt_density_grid);
+ }
+
if (sds->fluid) {
+ struct OpenVDBFloatGrid *density_grid;
float dt, dx, *dens, *react, *fuel, *flame, *heat, *heatold,
*vx, *vy, *vz, *r, *g, *b;
unsigned char *obstacles;
@@ -3158,11 +3181,13 @@ static void OpenVDB_export_smoke(SmokeDomainSettings
*sds, struct OpenVDBWriter
OpenVDBWriter_add_meta_fl(writer, "dt", dt);
density_grid = OpenVDB_export_grid_fl(writer, "Density", dens,
sds->res, sds->fluidmat, NULL);
+ clip_grid = sds->wt ? clip_grid : density_grid;
+
OpenVDB_export_grid_fl(writer, "Shadow", sds->shadow, sds->res,
sds->fluidmat, density_grid);
if (fluid_fields & SM_ACTIVE_HEAT) {
- OpenVDB_export_grid_fl(writer, "Heat", heat, sds->res,
sds->fluidmat, density_grid);
- OpenVDB_export_grid_fl(writer, "Heat Old", heatold,
sds->res, sds->fluidmat, density_grid);
+ 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);
}
if (fluid_fields & SM_ACTIVE_FIRE) {
@@ -3175,30 +3200,9 @@ static void OpenVDB_export_smoke(SmokeDomainSettings
*sds, struct OpenVDBWriter
OpenVDB_export_grid_vec(writer, "Color", r, g, b,
sds->res, sds->fluidmat, VEC_INVARIANT, true, density_grid);
}
- OpenVDB_export_grid_vec(writer, "Velocity", vx, vy, vz,
sds->res, sds->fluidmat, VEC_CONTRAVARIANT_RELATIVE, false, 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);
}
-
- if (sds->wt) {
- float *dens, *react, *fuel, *flame, *tcu, *tcv, *tcw, *r, *g,
*b;
- struct OpenVDBFloatGrid *wt_density_grid;
-
- smoke_turbulence_export(sds->wt, &dens, &react, &flame, &fuel,
&r, &g, &b, &tcu, &tcv, &tcw);
-
- wt_density_grid = OpenVDB_export_grid_fl(writer, "Density
High", dens, sds->res_wt, sds->fluidmat_wt, NULL);
-
- if (fluid_fields & SM_ACTIVE_FIRE) {
- OpenVDB_export_grid_fl(writer, "Flame High", flame,
sds->res_wt, sds->fluidmat_wt, wt_density_grid);
- OpenVDB_export_grid_fl(writer, "Fuel High", fuel,
sds->res_wt, sds->fluidmat_wt, wt_density_grid);
- OpenVDB_export_grid_fl(writer, "React High", react,
sds->res_wt, sds->fluidmat_wt, wt_density_grid);
- }
-
- if (fluid_fields & SM_ACTIVE_COLORS) {
- OpenVDB_export_grid_vec(writer, "Color High", r, g, b,
sds->res_wt, sds->fluidmat_wt, VEC_INVARIANT, true, wt_density_grid);
- }
-
- OpenVDB_export_grid_vec(writer, "Texture Coordinates", tcu,
tcv, tcw, sds->res, sds->fluidmat, VEC_INVARIANT, false, density_grid);
- }
}
static void OpenVDB_import_smoke(SmokeDomainSettings *sds, struct
OpenVDBReader *reader, bool for_display)
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs