Fix T48236: OpenVDB smoke cache glitches out with smokeless flames.
authorKévin Dietrich <kevin.dietrich@mailoo.org>
Fri, 22 Apr 2016 09:46:02 +0000 (11:46 +0200)
committerKévin Dietrich <kevin.dietrich@mailoo.org>
Fri, 22 Apr 2016 09:46:02 +0000 (11:46 +0200)
Issue was that before writing to disk grids are clipped against the
density field's tree to optimize for memory/disk space, which in the
case of simulations with no density field results in all grids having
empty trees.

For now avoid clipping against empty grids, but perhaps in the future it
can be interresting to have some UI parameters to let the user choose
the grid used for clipping.

intern/openvdb/intern/openvdb_dense_convert.cc
intern/openvdb/intern/openvdb_dense_convert.h

index d4f6277698895dc7943c6b6595263adaf8f13cce..ef52408bd937126a17f71a8b9697e9ed6dd7e3f9 100644 (file)
@@ -115,7 +115,8 @@ openvdb::GridBase *OpenVDB_export_vector_grid(
 
        vecgrid->setTransform(transform);
 
-       if (mask) {
+       /* Avoid clipping against an empty grid. */
+       if (mask && !mask->tree().empty()) {
                vecgrid = tools::clip(*vecgrid, *mask);
        }
 
index fd10334c4addf265492e3494b40fdba825db3f23..284fd1ceeaebd205ea730495064b6f0593cb3d78 100644 (file)
@@ -64,7 +64,8 @@ GridType *OpenVDB_export_grid(
 
        grid->setTransform(transform);
 
-       if (mask) {
+       /* Avoid clipping against an empty grid. */
+       if (mask && !mask->tree().empty()) {
                grid = tools::clip(*grid, *mask);
        }