Releases: InteractiveComputerGraphics/splashsurf
v0.14.0
This release makes use of SIMD instructions on CPUs supporting either AVX2 and FMA or NEON instruction sets. This is currently implemented in the particle to grid levelset evaluation in the subdomain-based reconstruction. Currently, it is only supported for single-precision (f32) reconstructions. If the compact support per particle is relatively large compared to the marching cubes grid resolution (e.g. smoothing length of 2 and cube size of 0.5) speedups of ~5x with AVX and ~3x with NEON can be expected for the reconstruction itself.
- Lib: Implement AVX and NEON variants of f32 cubic spline kernel
- Lib: Implement AVX and NEON variants of particle to grid levelset evaluation in subdomain-based reconstruction
- CLI: Add
--simd=on/offCLI flag to enable/disable use of SIMD in kernels and levelset evaluation if supported by the CPU - Py: Add
simdargument toreconstruction_pipelineandreconstruct_surfaceto enable/disable use of SIMD in kernels and levelset evaluation if supported by the CPU
v0.13.0
- Py: Major refactor of the Python bindings, interface is much simpler and more "pythonic"
- Unified separate F64/F32 classes and functions and infer data type automatically
- Nearly all inputs, outputs and attributes are now zero-copy (e.g. mesh vertices and faces can be accessed as attributes without copies)
- Py: Add a function for a plain marching cubes reconstruction from a contiguous 3D array without any SPH interpolation
- Lib: Add support for "dense"
DensityMap(borrowed & owned) as input for the marching cubes triangulation, useful for the Python bindings - Lib: Replace usage of
DiscreteSquaredDistanceCubicKernelby standardCubicSplineKernelfor SPH interpolation (no noticeable performance difference) - Lib: Enforce that
Indextypes are signed integers implementing thenum_traits::Signedtrait. Currently, the reconstruction does not work (correctly) with unsigned integers. - Lib: Make most fields of
SurfaceReconstructionpublic, remove previous getter functions - CLI: Add some tests for the
reconstruction_pipelinefunction - CLI: Fix post-processing when particle AABB filtering is enabled
- Lib: Support subdomain "ghost particle" margins to be up to the size of the subdomain itself (previously limited to half the size)
- CLI/Lib: Option to automatically disable subdomain decomposition for very small grids
- Lib: Support for borrowed data in
MeshAttribute, avoids copies in CLI and Python package
v0.12.0
This release adds Python bindings for the CLI and library! See README for more details.
- CLI: Add a library target to the
splashsurfcrate to allow using high-level CLI functions from other crates - CLI: Add an argument
--mesh-cleanup-snap-distto limit the snapping distance along cube edges (relative to marching cube size) of the marching cubes cleanup step (default is to snap without limit) - CLI: Enable mesh cleanup by default if smoothing is enabled
v0.11.0
- CLI: Add a switch
--check_mesh_orientationto check if the mesh orientation is consistent (i.e. vertex normals have the same orientation as all adjacent face normals) - CLI: Support for reading point/particle attributes (integers, floats and vectors of floats) from BGEO files
- Lib: Remove octree-based domain decomposition (superseded by regular grid subdivision approach
--subdomain-grid) - CLI: Set
--subdomain-grid=onby default - CLI: Remove all arguments for octree-based domain decomposition
- CLI: Remove options to output some debug files (octree grid, density map, etc.)
- Lib: Fixed a rare bug where the "density map" did not always contain a full zero one-ring around the function values (See #215)
v0.10.0
This release implements "Weighted Laplacian Smoothing for Surface Reconstruction of Particle-based Fluids" (Löschner, Böttcher, Jeske, Bender; 2023), mesh cleanup based on "Mesh Displacement: An Improved Contouring Method for Trivariate Data" (Moore, Warren; 1991) and a new, more efficient domain decomposition (see README.md for more details).
- Lib: Implement new spatial decomposition based on a regular grid of subdomains (subdomains are dense marching cubes grids)
- CLI: Make new spatial decomposition available in CLI with
--subdomain-grid=on - Lib: Implement weighted Laplacian smoothing to remove bumps from surfaces according to paper "Weighted Laplacian Smoothing for Surface Reconstruction of Particle-based Fluids" (Löschner, Böttcher, Jeske, Bender 2023)
- CLI: Add arguments to enable and control weighted Laplacian smoothing
--mesh-smoothing-iters=...,--mesh-smoothing-weights=onetc. - Lib: Implement
marching_cubes_cleanupfunction: a marching cubes "mesh cleanup" decimation inspired by "Mesh Displacement: An Improved Contouring Method for Trivariate Data" (Moore, Warren 1991) - CLI: Add argument to enable mesh cleanup:
--mesh-cleanup=on - Lib: Add functions to
TriMesh3dto find non-manifold edges and vertices - CLI: Add arguments to check if output meshes are manifold (no non-manifold edges and vertices):
--mesh-check-manifold=on,--mesh-check-closed=on - Lib: Support for mixed triangle and quad meshes
- Lib: Implement
convert_tris_to_quadsfunction: greedily merge triangles to quads if they fulfill certain criteria (maximum angle in quad, "squareness" of the quad, angle between triangle normals) - CLI: Add arguments to enable and control triangle to quad conversion with
--generate-quads=onetc. - Lib: Support for reading and writing PLY meshes (
MixedTriQuadMesh3d) - CLI: Support for filtering input particles using an AABB with
--particle-aabb-min/--particle-aabb-max - CLI: Support for clamping the triangle mesh using an AABB with
--mesh-aabb-min/--mesh-aabb-max
v0.9.3
Version 0.9.3
- CLI: Make input filename/input sequence pattern a positional argument instead of separate arguments, arguments
--input-fileand--input-sequenceare removed - CLI: Introduce some short arguments:
-rfor--particle-radius,-lfor--smoothing-length,-cfor--cube-size,-tfor--surface-threshold - CLI: Add arguments
-s/--start-indexand-e/--end-indexto specify the first and last index to process for a sequence of files - CLI: Process sequences of files in natural sort order instead of alphabetical order
- CLI: Show progress bar when reconstructing a sequence of files
Version 0.9.2
- Lib: In the
UniformCartesianCubeGrid3d::from_aabbconstructor, re-align the min-coordinate of the AABB to multiples of the cube size by default. This way multiple frames of an animation will be automatically consistent in terms of marching cubes grid alignment without having to manually specify an AABB for the entire simulation.
v0.9.1
- CLI: Fix bug where no input sequence files were found if the sequence pattern path did not contain any "parent" path (e.g.
file_{}.vtkinstead of./file_{}.vtk)
v0.9.0
- Upgrade to Rust edition 2021
- Lib: Update to
nalgebra0.32.1 - Lib: Support for writing particles as JSON
- Lib: Support for writing particles as BGEO
- CLI: Support for new writers in
convertsubcommand - Lib: Rename
AxisAlignedBoundingBox*dtypedefs toAabb3dandAabb2d - Lib: Support reading VTU (VTK XML) files
- CLI: Support reconstruction of particles from VTU (VTK XML) files, including attributes
- CLI: Support for specifying an output pattern (e.g. "surface_{}.obj") using
--output-file/-owhen processing sequences of files, this allows to specify a different output format than VTK for sequences (which was the only available output format for sequences before) - CLI: Files belonging to a sequence are now detected by treating the placeholder "{}" as a "(\d+)" regex (i.e. any number of digits) and sorting the matching files lexicographically (previously, the tool just counted up from 1)
v0.8.0
- Lib: Update to
nalgebra0.29 - Lib: All the particle/mesh file IO code was moved from the
splashsurfbinary crate to thesplashsurf_libcrate. They are behind the optionaliofeature flag. This allows using the IO code in tests of the library itself (previously the code was duplicated). But these functions may also be helpful to library users building their own pipeline if they wan to to quickly test code by e.g. loading particle data from files. - Lib: Replace some unsafe blocks by using
bytemuckinstead - Lib: Redesign the API for SPH kernel functions
- Lib: Add module
sph_interpolationfor the interpolation of normals, scalar fields and vector fields to arbitrary points using SPH based interpolation - CLI: The
--output-normals=on/offargument was renamed to--normals=on/off - CLI: Add command line switch
--sph-normals=on/off(enabled by default) to toggle whether to use SPH interpolation (instead of area weighted triangle normals) to compute normals when--normalsis on - CLI: Support for writing surfaces meshes (including normals) to OBJ files directly from the
reconstructsubcommand (previously this was only supported for theconvertsubcommand) (See #29) - CLI: Support for specifying names of point attribute fields via the argument
--interpolate-attributes=...that should be interpolated to the reconstructed surface. Currently it is only possible to load these fields from VTK files and the interpolated values can also only be written if the output file format is VTK. - CLI: All
on/offarguments now require using an equal sign to set them. Primarily, this was done to prevent the CLI from accepting empty values which would be replaced by the respective default arguments. E.g. previously--normalswas equivalent to the default--normals=offwhich is quite confusing. Now the default is only applied when the argument is not provided at all while--normalsresults in an error and--normals=oncan be used to override the default.
v0.7.0
- Lib: Fix a bug that caused the neighborhood search results to be incomplete
- Lib: Update to
nalgebra0.27 with const generics and removed usage ofnalgebratypes that are deprecated - Lib: Add a "naive"
O(n^2)neighborhood search for testing purposes - Lib: Rename other neighborhood search functions to
neighborhood_search_spatial_hashingandneighborhood_search_spatial_hashing_parallel - CLI: Add a command line option
--output-normalsto thereconstructsub-command to write mesh normals to the output file. Note that currently the normals are only computed using an area weighted average of triangle normals. - CLI: Add JSON files as supported particle input file
- CLI: Change the
convertsub-command to allow both conversion of particle files and conversion of mesh formats. Instead of using the--inputoption you now have to either use the--particlesor--meshoption to specify the input file depending on whether you want to convert a particle or mesh file. For particlesVTK, BGEO, PLY, XYZ, JSON -> VTK, PLYis supported. For meshes onlyVTK, PLY -> OBJis supported. - CLI: Rename the command line option to specify a sequence of input files from
--input-sequence-patternto--input-sequence