SOFA v26.06

download

What’s new in SOFA v26.06

Introduction of generic element-agnostic elasticity

This release introduces a modern, generic, and modular Finite Element Method (FEM) formulation for elasticity in SOFA (#5882). A single, unified codebase now enables the generation of elastic force field components for any element type and dimension, significantly improving code readability and maintainability. The implementation supports linear elasticity (both small strain and corotational approaches) and integrates seamlessly with existing workflows. The modular design ensures that the appropriate components are instantiated dynamically based on the topology, making it easier to align the code with theoretical equations.

Additionally, new element types are available such a pyramids and prisms elements (respectively, #6132 & #6062). CUDA-accelerated versions (#6071) of the elasticity components are now available in the SofaCUDA plugin, supporting both single and double precision for triangle and hexahedron elements.

Introduce multi-staged collision pipeline

The simulation framework now supports multiple collision pipelines within a single scene (#5841), replacing the previous monolithic approach. This enhancement enables grouping collision models with custom alarm and contact distances, mitigating tunneling artifacts during collisions. Users can now define different responses for specific groups of models, mix intersection types, and easily integrate custom pipelines.

Aliases are implemented for compatibility, a warning is now issued if no collision models are handled by any pipeline, ensuring better debugging and user awareness.

This work also provides new examples to demonstrate the flexibility and power of the multi-pipeline approach.

Mapping graph visitors

This release introduces a MappingGraph-based approach for core mechanical operations (#6087). The MappingGraph has been refactored to extract traversal logic into a dedicated MappingGraphAlgorithms class, with added support for parallel execution. A new feature enables exporting the mapping graph to DOT format for visualization, alongside comprehensive unit tests and documentation for the new graph-based traversal API. Benchmark results on scenes like TorusFall, fallingSOFA, and SofaScene demonstrate efficient performance.

This update also unlocks support for mapped masses in EulerExplicitSolver, a critical step toward full mapped mass compatibility.

SofaPython3 – Advanced examples

Several interesting examples have been added to the SofaPython3 plugin:

  • Introduce rigidification (#625): this is especially helpful when attaching rigid and soft parts together, or constraining the motion of some degrees of freedom based on a rigid frame
  • New utility to manage units of your simulation (#622): this Python project provides a class defining the unit system of your scene while allowing the user to define each parameter in any units
  • Couple SOFA and JAX (#557): this illustrates how to leverage JAX autodiff to implement the methods addDForce() and addKToMatrix() automatically
  • API has been extended to access SOFA as a server in RPyC remote procedure calls (#570)
  • Integrate meshing steps within your SOFA Python scripts using CGAL or Gmsh (#567)
 

SofaCUDA is now a meta-plugin of two plugins

SofaCUDA has been restructured as a meta-plugin (#5973), now comprising two distinct plugins: SofaCUDA.Core and SofaCUDA.Component. This separation isolates core tools and functionalities from specialized or instantiated components, streamlining dependencies for plugins that rely on SofaCUDA. As a result, external plugins can now depend solely on SofaCUDA.Core, reducing redundancy and improving modularity.

This change builds on previous GUI updates and enhances the plugin’s maintainability and scalability for future development.

Visualization in runSofa

A new set of generic classes has been introduced to render meshes composed of triangles, tetrahedra, or hexahedra (#5782). These classes are designed for reusability across the framework, such as in force fields or other visualization contexts. A dedicated component now enables the visualization of surface and volume meshes, mirroring the debug drawing capabilities of existing force fields.
Additionally, these draw classes are utilized to render objects when selected in the GUI, providing a consistent and flexible visualization experience. This feature enhances both debugging and user interaction with mesh-based simulations. A Gizmo and additional capturing (screenshots &s; videos) are now available!

Keyboard shortcuts and interactions changed in the new GUI. These have been updated in the documentation

Add pixi support

Pixi support is now available to streamline the development and continuous integration (CI) workflow (#5252). Pixi provides a standardized, cross-platform method for new developers to configure and build the project, ensuring consistency with other projects. It centralizes all dependencies in a single file, simplifies the activation of optional features, and includes a lock file to guarantee reproducible builds in CI environments.

Breaking changes

Main breaking changes are:

  • [Core] Rename BaseObject to BaseComponent #5934
  • [CMake] Remove Qt from all configurations #6072
  • [SofaCUDA] move Qt-related code #5968
  • [SofaCUDA] SofaCUDA is now a meta-plugin of two plugins: SofaCUDA.Core and SofaCUDA.Component #5973
  • [SofaCUDA] GUI: create extension to use Sofa.GUI with SofaCUDA #5971
  • [SofaCUDA] Reorganize files and components #5967
  • [Helper] ScopedAdvancedTimer: add a compile-time check on string argument in macros #6036

Find all the breaking pull-requests introduced in this release.

SOFA v26.06 contributors

194 posts on GitHub Discussions
236 merged pull-requests
8289 unique clones of the repository
18 contributors on GitHub

Back to Top