Changelog

v0.28.0

Released 2023-06-06

Additions:
  • added soft_body_flags::immobile_particles
Changes:
  • improvement internal memory management performance

v0.27.1

Released 2023-06-02

Fixes:
  • fixed triangle collision constraints not being generated correctly when a scene had multiple soft bodies
  • fixed some log message typos
Changes:
  • increased internal default buffer size for stim::environment
  • downgraded id-related log messages from 'warning' to 'verbose'

v0.27.0

Released 2023-06-01

Fixes:
  • fixed spurious assert when no position constraints are generated for a soft body
Removals:
  • removed unnecessary UE4_COMPAT overloads in mesh_reader

v0.26.1

Released 2023-05-29

Fixes:
  • fixed regression when regenerating new cache binaries

v0.26.0

Released 2023-05-29

Fixes:
  • fixed cache reader race condition
Changes:

v0.25.3

Released 2023-05-26

Additions:

v0.25.2

Released 2023-05-24

Additions:
  • added typedefs scalar_type and vector_type to plane, bounding_box, bounding_sphere
  • added diagnostics to detect dangling stim::simulations at stim::environment destruction

v0.25.1

Released 2023-05-18

Fixes:
  • fixed memory alignment bug in solver
Additions:

v0.25.0

Released 2023-05-10

Fixes:
  • minor simulation::update() performance fixes
Additions:
  • enabled simple deletion-based cutting (experimental)
Changes:
  • increased internal mesh triangle limit to 75000 (up from 25000)

v0.24.0

Released 2023-05-03

Fixes:
  • fixed race condition in stim::force_feedback_emitter
  • fixed incorrect behaviour when multiple force_feedback_emitters are associated with a rigid body
Removals:

v0.23.0

Released 2023-04-03

Additions:

v0.22.0

Released 2023-03-22

Additions:
  • added STIM_INJECT_MEMBERS_MESH_READER
Fixes:
  • fixed spurious 'non-uniform scaling' errors for set_transform() and set_substep_transform()
  • fixed collision test performance regression

v0.21.0

Released 2023-01-19

Fixes:
  • fixed soft-bodies becoming pitted and misshapen around mesh edges
  • fixed soft-body recovery from rigid-body collision being sloppy
Additions:
  • added debug_draw_groups::defaults
  • added debug_ui_groups::defaults
  • added configuration switches for injecting member functions into some public API types:
    • STIM_INJECT_MEMBERS_BOUNDING_BOX
    • STIM_INJECT_MEMBERS_BOUNDING_SPHERE
    • STIM_INJECT_MEMBERS_DURATION
    • STIM_INJECT_MEMBERS_MATRIX
    • STIM_INJECT_MEMBERS_PLANE
    • STIM_INJECT_MEMBERS_SPAN
    • STIM_INJECT_MEMBERS_STRING_VIEW
    • STIM_INJECT_MEMBERS_VECTOR
    • STIM_INJECT_MEMBERS_MESH_DESCRIPTION

v0.20.1

Released 2023-01-09

Fixes:
  • fixed collision regression introduced in v0.20.0

v0.20.0

Released 2023-01-09

Additions:

v0.19.1

Released 2022-12-15

Additions:
  • added additional diagnostics to add_object(force_feedback_emitter)

v0.19.0

Released 2022-12-13

Fixes:
Additions:
  • added soft_body_flags::pin_in_place

v0.18.0

Released 2022-12-05

Fixes:
  • fixed spurious assert pt.z <= box_.tester.max.z
Additions:
  • added force_feedback_emitter_handle
  • added force_feedback_emitter_description
  • added force_feedback_emitter_flags
  • added workspace_description
  • added simulation_description::workspace
  • added debug_draw_flags::bounding_spheres
Changes:
  • ⚠️ re-ordered the members of debug_draw_flags for future-proofing purposes
Removals:
  • removed rigid_body::force_feedback()
  • removed simulation_description::workspaces

v0.17.0

Released 2022-10-19

Fixes:
  • a bunch of minor bugfixes
Additions:
  • added object_constants::contact_distance
  • added rigid_body_handle::flags() setter
  • added stim::result::operator!
Changes:
  • ⚠️ prohibited non-uniform scaling in transforms
  • changed API of rigid_body_handle::force_feedback()

v0.16.1

Released 2022-08-25

Fixes:
  • fixed spurious assert in signed distance field
  • fixed minor rigid-body collision edge-cases
  • fixed debug ui race condition in memory pool

v0.16.0

Released 2022-08-24

Fixes:
  • fixed potential crash during mesh optimization
  • fixed potential deadlock during cached asset loading
  • fixed multiple issues with scenes having more than one soft-bodies
Changes:
  • improved rigid-soft collision contacts
  • slightly increased vertex welding distance threshold
  • minor performance improvements

v0.15.0

Released 2022-08-15

Fixes:
  • fixed bend constraint debug draw indicators rendering inverted or at weird angles
  • fixed errors and assertions when intersecting a rigid body with multiple soft-bodies
Additions:
  • added operator! for scalar_type
  • added internal support for UVs outside the range [0, 1]
Changes:
  • ⚠️ renamed plane::n to plane::normal
  • soft bodies now automatically do some triangle subdivision for extremely simple meshes
  • soft-body mesh_readers will now have the same triangle winding order as their original source mesh
  • increased internal mesh complexity automatic simplification threshold to 25000 tris

v0.14.0

Released 2022-08-02

Fixes:
  • fixed assert related to memory alignment in memory_pool.cpp
  • fixed incorrect behaviour when zero-initializing an object_to_world matrix
Additions:
  • added simulation_constants::units_per_meter
  • added simulation_constants::defaults()
  • added mesh_reader::operator()
  • added vector and span constructors to mesh_vertices_channel_description and mesh_indices_description
  • added STIM_UE4_COMPAT constructors to mesh_vertices_channel_description and mesh_indices_description
  • added vector and span overloads to mesh_reader::read_XXXX()
  • added STIM_UE4_COMPAT overloads to mesh_reader::read_XXXX()
  • added broadcast constructor to vector
  • added is_scalar_type<>
  • added all_scalar_types<>
Changes:
  • ⚠️ renamed mesh_index_description to mesh_indices_description
  • ⚠️ renamed mesh_vertex_description to mesh_vertices_description
  • ⚠️ renamed mesh_vertex_channel_description to mesh_vertices_channel_description
  • ⚠️ renamed mesh_vertex_scalar_description to mesh_vertices_scalar_description

v0.13.0

Released 2022-07-25

Fixes:
  • fixed signed distance field generation issues for completely planar meshes
  • fixed some spurious rigid-body collisions
Additions:
Changes:
  • ⚠️ renamed soft_body_mesh_reader to simply mesh_reader
  • ⚠️ leftover_mesh_reader() no longer returns a null reader when the mesh is empty (call mesh_reader::empty() instead)
  • leftover_mesh_reader() no longer requires the input mesh to remain alive after calling add_object()
  • meshes are no longer required to have a normals vertex channel
  • object_constants defaults should now be sensible in the general case
  • mesh_reader and rigid body collision optimizations
  • binary size improvements

v0.12.0

Released 2022-07-13

Fixes
  • fixed leftover_mesh_reader() causing simulation start failures in some circumstances
  • fixed leftover_mesh_reader() causing crashes when reading UVs in some circumstances
  • fixed spurious assert(cached->asset.has_value()) triggering in some circumstances
  • fixed various issues calculating bounding boxes for completely-planar meshes
  • fixed rare double-load situation when reading from the asset cache
Additions:
  • added debug_draw_groups::axes
  • added additional result<> constructors
  • added simulation::debug_dump_profiler()
  • added _sv UDL operator for string_view
  • added _s, _ms, _us, _ns UDL operators for duration
  • added max_solve_time optional parameter to simulation::update
  • added log warning when simulation 'explodes'
  • added global mesh simplification pass for all meshes with more than 12000 triangles (with a log warning)
Changes:
  • ⚠️ greatly simplified executor_interface
  • general improvements to result<> API
  • changed duration backing type to long long
  • reduced binary size of a number of cached assets
  • general performance improvements
Deprecations & Removals:
  • ⚠️ depecated _ssv operator - it will be removed in the next release!
  • removed internal max timestep limit
  • removed stim:: and stim::api:: type name prefixes from log messages

v0.11.0

Released 2022-06-27

Fixes:
  • fixed spurious assertion during cutter initialization when no AABB was specified
Additions:
Changes:
  • improved rigid body collision performance
  • made result(bool) constructor explicit
  • internal refactors to reduce binary size

v0.10.0

Released 2022-06-09

Fixes:
  • lots of minor documentation fixes
Additions:
  • added STIM_UE4_COMPAT interop for span <=> TArray, TArrayView
  • added array constructor for span
  • added span -> const_span implicit conversion
  • added front() and back() to non-void spans
Changes:
  • switched to new solver
Removals:
  • removed environment_description::id

v0.9.0

Released 2022-05-24

Fixes:
  • fixed missing #include <cstring> for std::memcpy()
  • fixed scalar_type always assuming float was float32, double was float64, et cetera
Additions:
  • added STIM_UE4_COMPAT interop for mesh_description and friends
  • added ability to set mesh scalar data by callback
  • added to_scalar_type<> for getting the scalar_type value corresponding to a real C++ type
  • added to_real_type<> for getting the real C++ type corresponding to a scalar_type value
Changes:
  • made instantiating stim::environment mandatory (previously one would optionally be instantiated for you internally)

v0.8.3

Released 2022-05-13

Fixes:
  • fixed environment/simulation creation failure not producing an error message
  • fixed issues with Visual Studio Native Visualizer file stim.natvis
  • minor documentation fixes
Additions:

v0.8.2

Released 2022-05-05

Fixes:
  • fixed STIM_UE4_COMPAT causing some constructors to be deleted
Removals:
  • removed debug_draw_groups::oriented_bounding_boxes (merged with debug_draw_groups::bounding_boxes)

v0.8.1

Released 2022-04-08

Fixes:
  • fixed compiler errors in stim::vector when using STIM_UE4_COMPAT
  • fixed compiler errors in UE4 caused by use of __builtin_launder
  • fixed some members of debug_ui_groups having the wrong values
Additions:
  • added STIM_UE4_COMPAT functions for bounding_box and plane
  • added a number of convenience functions to bounding_box

v0.8.0

Released 2022-04-06

Additions:
  • added non-zero check operator bool() to vector, matrix and bounding_box
  • added plane
  • added cutter_description
  • added rigid_body_description::cutter
  • added debug_draw_groups::cutters
  • added basic arithmetic ops to vector
Changes:
  • made XXXXX_description::mesh members into pointers (rather than nested structs)
  • made vector and matrix single-pointer constructors explicit
  • rearranged some description struct members for consistency
  • renamed matrix column getter functions
  • workspaces that are completely contained by other workspaces will be ignored
Removals:
  • removed rigid_body_flags::cutter

v0.7.0

Released 2022-03-07

Fixes:
  • fixed winding order not being among the set of changes reported by soft_body_mesh_reader::changes()
  • fixed immobile rigid bodies and soft bodies being allowed outside of the workspace (now treated as an error)
  • minor documentation fixes
Additions:
  • added duration
  • added simulation::update() overload accepting a duration
  • added mesh_vertex_scalar_description
  • added soft_body_mesh_reader::winding_order()
  • added soft_body_handle::leftover_mesh_reader()
  • added mesh_traits::winding_order flag
Changes:
  • renamed mesh_vertices_description to mesh_vertex_description
  • renamed mesh_indices_description to mesh_index_description
  • mesh vertex inputs are now per-scalar (rather than per-channel) to better support SoA contexts
  • soft bodies now discard mesh triangles that do not intersect the workspace
  • lifted restriction preventing soft_body_handle::leftover_mesh_reader() being called before simulation::start()
Removals:
  • removed raw int/float simulation::update() overloads
  • removed soft_body_mesh_reader::read_differential_positions()

v0.6.0

Released 2022-02-07

Fixes:
  • fixed soft-body mesh edges sometimes slowly floating over time
Additions:
  • added environment, environment_description, create_environment()
  • added debug_interface::slider()
  • added error parameter to cache_interface::read_end()
  • added error parameter to cache_interface::write_end()
  • added mesh_description::indexed()
  • added mesh_description::triangle_count()
  • added object_constants
  • added rigid_body_description::constants
  • added rigid_body_flags::immobile
  • added simulation_description::workspaces (multi-workspace span instead of single bounding_box)
  • added soft_body_description::constants
  • added soft_body_flags::mesh_simplification_(low|medium|high|disabled)
  • added volumetric_body_description::constants
  • added ABI checks for enums
  • added additional ABI checks for virtual interfaces
Changes:
  • improved rigid-body <=> soft-body collision
  • moved buffer, log, cache executor from simulation_description to environment_description
  • changed simulation::description to a pointer
  • renamed debug_draw_flags::workspace to debug_draw_flags::workspaces (plural)
Removals:
  • removed simulation_description::workspace

v0.5.0

Released 2021-12-11

Fixes:
  • fixed more ABI stability corner-cases
  • fixed some thread-safety issues
Additions:
  • added new (significantly faster) solver
  • added basic rigid-body collision
  • added simulation::create()
  • added rigid_body_flags::high_resolution_sdf
  • added STIM_STD_CHRONO_COMPAT
  • added ABI checks for virtual interfaces
  • added ABI check for float endianness
  • added debug_ui_interface::colour_begin()
  • added debug_ui_interface::colour_end()
  • added debug_ui_interface::button()
  • added debug_draw_groups::position_constraints
  • added debug_draw_groups::stretch_constraints
  • added debug_draw_groups::bend_constraints
  • added debug_draw_groups::collision_constraints
  • added debug_ui_groups::objects
  • added debug_ui_groups::solver
  • added operator== and operator!= for STIM_STD_STRING_(VIEW_)COMPAT
  • added lib::check_abi()
Changes:
  • renamed executor_interface::enqueue() overloads to enqueue_one() and enqueue_many()
  • renamed mesh_vertices_channel_description to mesh_vertex_channel_description
  • renamed mesh_data_type to scalar_type
  • renamed STIM_HALF_FLOAT_TYPE to STIM_FLOAT16_TYPE
  • removed close_loop parameter from debug_draw_interface::draw_poly_line()
  • renamed transform members to the more descriptive object_to_world

v0.4.0

Released 2021-17-08

Fixes:
  • fixed some incomplete C++ compiler feature checks in stim.h
  • fixed many ABI stability corner-cases using C ABI functions
Additions:
Changes:

v0.3.0

Released 2021-21-05

Fixes:
  • fixed lots of small documentation issues
Additions:
  • added soft_body_mesh_reader
  • added debug_draw_interface::can_draw()
  • added mesh update code to example app
  • added ability to call debug_draw in parallel batches
Changes:
  • removed explicit mesh IDs - these are now generated entirely dynamically
  • made mesh_vertices_channel_view::stride optional
  • made mesh_indices_view::stride optional
  • split example application code into smaller files
  • greatly improved debug build performance

v0.2.0

Released 2021-19-04

Fixes:
Additions:
Changes:

v0.1.0

Released 2021-31-03

  • First internal release.