Interactive Medical Simulation Toolkit (iMSTK) is a free, open source toolkit that allows faster prototyping of medical trainers and planners. Specifically, iMSTK brings together interdisciplinary technologies that are required to build physics-based simulation driving such applications. For a detailed introduction to iMSTK, we refer the readers to a 2-part blog series [part 1, part 2], which followed the release 1.0 in December 2018. The first release of the toolkit offered a functional architecture and working versions of all the component modules.

Release 2.0 offers improved functionality with many new features as well as refactored modules that address the ease-of-use, and extendability of the API. Specifically, we have added new features and greatly improved the features and efficiency of the physics, collision modules, and rendering modules.

Here are some release highlights:

  • New Rigid body dynamics support has been added through Physx backend. The current implementation supports simpler geometrical shapes (box, sphere, capsule, plane) as well as surface meshes and efficient collisions between them. Users can optionally control the motion of the objects through external devices supported in imstk.
  • Multithreading support
    • SMP support was added using Intel Thread Building Blocks (TBB)
    • Parallel utilities for loop-based parallelism for 1D as well as nested 2-level and 3-level loops were added
    • Parallelized collision detection, position-based dynamics (using graph coloring) and SPH modules.
  • Smoothed Particle Hydrodynamics (SPH) for fluids
    • Simulate fluids with varied viscosity and surface tension
    • Adds efficient neighbor search for arbitrarily distributed fluid particles
    • Please refer to the blog published about this work for further details.
  • Extended the simulation modes: Simulation engine can now be initialized in rendering, backend and backgroundRun modes to allow easy integration and simulation control from external applications (eg: 3D Slicer).
  • New Octree collision detection
    • Adds efficient loose octree data structure for broad phase collision detection
    • Parallel tree update using loop-based parallelism
    • Efficient memory management using memory pool
    • The readers may refer to a prior blog for more details about this feature
  • Improved Vulkan backend
    • New VR support for immersive VR applications
    • New lens distortion pass
  • New Debug rendering
    • Display additional geometric information (not part of scene objects) in order to help visualize and debug new functionality (see dynamic octree rendering above)
    • Arbitrarily add geometric primitives (points, lines, triangles) at run time
  • Improved on-screen text rendering
    • New functionality to add customized text that can be updated at runtime
    • Displays simulation frame rate in addition to rendering framerate
  • Improved CMake build and installation
    • Added support to install all components into a relocatable directory
    • Added support for building and running multiple configurations in Visual Studio
    • Fixed various bugs, including bitness mismatch, build errors
    • Added PhysX as an external dependency and removed ODE

Please refer to the release notes for a full list of new features, changes, and contributors. Please follow the links below to explore the toolkit.

  1. Website:
  2. Repository:
  3. Discourse:
  4. Documentation:
  5. Source documentation:

In addition, the best way to explore the newly added features is through the examples that ship with the code.

Future work

The upcoming releases will focus on two areas (a) improving the computational efficiency, and (b) integration with external software. We have boosted the performance of some key algorithms using multithreading on the CPU.  The upcoming work will add scene-level parallelism (allowing disconnected parts of the scene run in parallel) and further parallelize the serially executed modules such as finite element based deformation computation. To allow further scalability move the core computational blocks to run on the GPU.

With the goal of allowing applications with wider workflow requirements, we have already started efforts to integrate with Kitware’s other open-source software in the medial domain namely 3D Slicer and Pulse physiology engine (not included in the release 2.0). Further, we are in the process of integration with the Unity game engine that will accelerate the application development. We will publish blogs in due course about these integrations and also make them part of upcoming releases.

While the major focus is on the above-described aspects, we will continue to add features (esp. to the collision response module), perform bug fixes and improve the usability as needed. In view of these major planned improvements, discussion about coordinating smaller but more frequent releases is underway.


The work reported in this publication was supported, in part, by the following awards: NIDDK R44DK115332, NIBIB R44EB023121, NIDCR R44DE027595, NIAMS R44AR075481, NIBIB R01EB025247.

The content is solely the responsibility of the authors and does not necessarily represent the official views of the NIH and its institutes.

Leave a Reply