SOFA is an open-source framework primarily targeted at real-time simulation, with an emphasis on medical simulation. It is mostly intended for the research community to help develop newer models and algorithms. SOFA is currently developed by 4 INRIA teams: Mimesis, Imagine,Defrost and Asclepios. Based on C++, the SOFA engine is build using a flexible plugin architecture. With its high level of modularity, SOFA appears to be an efficient tools for benchmarking and developping new training medical technologies.
The SOFA architecture relies on a multi-model representation which allows to have several representations (e.g. mechanical, thermal and visual) of the same object. Those different representatinons are connected together through a mechanism called mapping. With this features, it is also possible to have models of very different nature interacting together, for instance rigid bodies, deformable objects, and fluids.
Models & Algorithms
The SOFA engine provides many algorithms and physiological models. Here is a short list of the available codes in SOFA:
- Modeling of systems:
- Deformable models (mass-springs, linear, co-rotationnal and non-linear FEM),
- Rigid models: articulated bodies based on penalities or reduced coordinates,
- Fluid models: SPH, Eulerian formulation,
- Simulating collision:
- Collision models: spheres, triangular meshes, distance fields; with AABB-tree or octree bounding volume hierarchies,
- Collision detection methods: proximity, continuous,
- Collision response methods: (implicit) penalities, LCP-based constraints,
- Object interaction (probing, cutting, suturing, carving …),
- Integration schemes: Euler explicit, RK2, RK4, static, implicit Euler using PCG (Projected Conjugate Gradient)
- Linear system solvers: iterative solver (Conjugate Gradient), direct solvers,
- Parallelization methods:
- GPU computing using the CUDA API,
- Compatibility with VR / simulation devices (Geomagic®, ARTTrack™, Novint® Falcon™…),
- Visualization and simulation of medical images.
SOFA appears to be an ideal tool to reuse and easily compare a variety of methods. Using SOFA, you will also be able to create complex simulations by combining new algorithms with existing ones. To create your own application based on SOFA, your C++ components can be implemented within a private plugin. To share your contribution with the SOFA community, please refer to the Get Involved page.
Another key aspect of SOFA is the use of a scene-graph to organize and process the elements of a simulation while clearly separating the computation tasks from their possibly parallel scheduling. The description of a SOFA simulation can easily be done in an XML file. For even more flexibility, a Python plugin now allows to script your simulation using the Python language, thus making the benchmarking of your algorithms easier.
If you want read more about SOFA and its architecture, you can visit the Online Documentation of SOFA.
Find more information about the previous work and projects using SOFA: