SOFA v23.06


What’s new in SOFA v23.06

Cosserat needle insertion

The open-source Cosserat plugin models 1D beam using the Cosserat rod theory. This mechanical model computes the dynamics of the slender elements, interacting among themselves and with their environment. It is particularly well dedicated to the simulation of needles, catheters or wires. The plugin now includes open-source simulation examples modeling a needle insertion.

Read more about the with Cosserat plugin online.

New MatrixAssembly API

The former system assembly was presenting limitations, namely the absence of access to system matrices (M, B, K) for users, a complexified API, no indirect approach for the constraint resolution among others. A refactoring therefore started to overcome these limitations and this new matrix assembly API has been introduced in this release.

Read more about the new SOFA matrix assembly API online and see the python examples.

Increased multithreading

In #3548 and #3552, new tools were introduced to write multithreaded code more efficiently. As an example, a function sofa::simulation::parallelForEachRange() proposes a function applied to a range in parallel. Two ForceFields now rely on these new tools:

Plugin: Renderer for UnrealEngine5

The SofaUE5 plugin is a Unreal Engine 5 plugin allowing to render a SOFA simulation scene inside UE5. All SOFA VisualModel components present in the loaded simulation will be rendered inside UE5 engine as Actor with a GeneratedMesh instance. Experience your SOFA simulations using the UE5 rendering pipeline!

For more, contact and collaborate with InfinyTech3D.


Examples easier to find!

Now, the examples/Component/ folder has been refactored in order to follow the recent SOFA module architecture. Using the same structure for the namespaces, the code and the examples makes it easier for users to:

  • find an example
  • find the associated RequiredPlugin
  • deduce the #include when developing in SOFA
Better user experience

New changes will ease the design of your simulations:

  • [all] Give reason when component cannot be created #3682
  • [Core] Display flags spelling suggestion #3575
  • [SceneChecking] Add check when setting contactStiffness uselessly #3843
  • [Simulation] Suggest required plugin in the syntax of the scene loader #3799
New methods and data

For the collision detection, two interesting changes occured: one in the PenalityContactForceField allowing to account for its implicit contribution and the possibility to now access constraint forces in the same way in the LCPConstraintSolver and the GenericConstraintSolver. Note as well this post assisting on how to access the contact forces when using constraint resolution based on Lagrange multipliers.

  • [Collision.Response.Contact] Implement addKToMatrix for PenalityContactForceField #3626
  • [Constraint] Add data to access constraint forces in LCPCS #3796

Breaking changes

Main breaking changes are:

  • [all] Lifecycle v23.06 #3634, #3649, #3654, #3655
  • [Mapping] Adds template to RigidMapping #3680
  • [MultiThreading] Factorize task scheduler user #3607

Reminder – a documentation on making the transition in your code further to the SOFA-NG project.
Find all the breaking pull-requests introduced in this release.

SOFA v23.06 contributors

823 posts on GitHub Discussions
156 merged pull-requests
1564 clones of the repository
11 contributors on GitHub


Back to Top