Skip to content
Snippets Groups Projects
Commit 52bf5277 authored by Andrew Wilson's avatar Andrew Wilson :elephant:
Browse files

DOC: Release notes updated in docs, execution pipeline diagram updated

parent 8e48e645
No related branches found
No related tags found
No related merge requests found
......@@ -29,11 +29,14 @@ ModuleDriver is an abstract class which starts and stops a collection of Modules
driver->start();
Commonly, you will also find it useful to start the scene in a paused state.
By default the simulation starts when start is called. You may, however, pause and resume the SceneManager with:
::
sceneManager->pause();
sceneManager->resume();
Some simulators need a pause function, many don't ever pause and just run from the start of the app until closing, others implmenent their own concepts of state.
The Update Loop
......@@ -53,8 +56,8 @@ There are three execution modes:
Adaptive mode uses something we call sequential substepping. This is important for the update loop of the program. We measure the time a single iteration of physics+rendering takes and then compute how many steps of physics we should take to achieve real time. That is, if 2s pass. And we want 0.5s (desireted delta time/dt) updates. Then we will take 4 steps.
.. image:: media/Render.jpg
:width: 600
.. image:: media/pipeline.png
:width: 800
:alt: Alternative text
:align: center
......
Docs/source/media/Render.jpg

69.8 KiB

Docs/source/media/pipeline.png

19.6 KiB

......@@ -2,6 +2,241 @@
Releases
========
Release 4.0.0
-------------
**Announcement: iMSTK 4.0.0**
This release features major improvements to the simulation execution pipeline, geometry module, virtual reality support, and haptics. Extensive refactoring and numerous bug fixes were also made across the codebase to allow extensibility of certain classes, improve clarity, separate roles for different iMSTK libraries, and enforce consistent design and conventions across the toolkit.
Here is a comprehensive list of changes made for this release.
**New Features**
- Addition of Implicit Geometry
- SignedDistanceField
- CompositeImplicitGeometry
- All existing analytical geometries
- Addition of LevelSetModel (regular grids only)
- Addition of ImplicitGeometryCD & ImplicitGeometryCCD
- Addition of RigidBodyModel2
- Addition of Event system (addition of EventObject)
- Addition Imstk Data Arrays. DataArray+VecDataArray. Replacement throughout code.
- Addition of per cell and vertex mesh attributes. DynamicalModels use them.
- Addition of PBDPickingCH, for picking PBD vertices.
- New Geometry Filters. Including LocalMarchingCubes.
- Offscreen rendering support through VTK OSMesa
- New substepping and sequential execution mode for SimulationManager
**Improvements or Refactoring**
- SimulationManager and Module Refactor
- Refactor VTKRenderDelegates
- Topology changes supported
- New examples. Many fixed haptics and OpenVR examples.
- FemurCut
- PBDPicking
- SDFHaptics
- FastMarch
- RigidBodyDynamics2
- PBDCloth-Remap
- SPH-Obj-SDFInteraction
- Vessel
- imstkNew
- Refactor geometry base class transforms
- OpenVR, Keyboard, and Mouse Device Refactoring
- Control refactoring
- virtual update and visualUpdate functions for SceneObject
- virtual init and advance functions for Scene
- VRPN build toggle
- Geometry enums replaced with getTypeName polymorphic function
- DynamicalModel enums replaced with getTypeName polymorphic function
- Module unit tests
- VecDataArray + DataArray unit tests
- NRRD, MHD, & NII image file support through VTK
- Debug camera initializes to bounding box of initial scene
- Bounding box computation of many primitives added
- Laprascopic Tool Controller fixed + improved
- VisualObjectImporter can now read and flatten scene hierarchies.
- PBD performance improvements
- HapticDeviceClient accepts no name for default device
- ColorFunctions added to RenderMaterial for mapping scalars
- imstkCamera refactor, view matrix can now be set independently of focal point and position.
- VTKViewer split into VTKViewer and VTKOpenVRViewer, common base VTKAbstractViewer added.
- Mute, log, or display VTK logger options added to VTKAbstractViewer
- Shared RenderMaterials
**Bug Fixes**
- Capsule CD fixes
- OpenVR fixes
- Missing bounding box functions for some analytical shapes added
- Rigid body reset fixes
- Many virtual destructors added
**API Changes**
- OpenVR, Keyboard, and Mouse device refactoring: Mouse and Keyboard now provided under the same DeviceClient API as our haptic devices. You may acquire these from the viewer. They emit events, you can also just ask them about their state.
```cpp
std::shared_ptr<KeyboardDeviceClient> keyboardDevice = viewer->getKeyboardDevice();
std::shared_ptr<MouseDeviceClient> mouseDevice = viewer->getMouseDevice();
std::shared_ptr<OpenVRDeviceClient> leftVRController = vrViewer->getVRDevice
```
- Controls: Our controls are now abstracted. Any control simply implements a device. You may subclass KeyboardControl or MouseControl. We also provide our own default controls:
```cpp
// Add mouse and keyboard controls to the viewer
imstkNew<MouseSceneControl> mouseControl(viewer->getMouseDevice());
mouseControl->setSceneManager(sceneManager);
viewer->addControl(mouseControl);
imstkNew<KeyboardSceneControl> keyControl(viewer->getKeyboardDevice());
keyControl->setSceneManager(sceneManager);
keyControl->setModuleDriver(driver);
viewer->addControl(keyControl);
```
- Event System: Key, mouse, haptic, and openvr device event callback can be done like this now.
- You may alternatively use queueConnect as long as you consume it somewhere (sceneManager consumes all events given to it).
- Your own custom events may be defined in iMSTK subclasses with the SIGNAL macro. See [KeyboardDeviceClient](https://gitlab.kitware.com/iMSTK/iMSTK/-/blob/master/Source/Devices/imstkKeyboardDeviceClient.h) as an example.
```cpp
connect<KeyEvent>(viewer->getKeyboardDevice(), &KeyboardDeviceClient::keyPress,
sceneManager, [&](KeyEvent* e)
{
std::cout << e->m_key << " was pressed" << std::endl;
});
```
- Imstk Data Arrays: Data arrays and multi-component data arrays provided. They are still compatible with Eigen vector math.
```cpp
VecDataArray<double, 3> myVertices(3);
myVertices[0] = Vec3d(0.0, 1.0, 0.0);
myVertices[1] = Vec3d(0.0, 1.0, 1.0);
myVertices[2] = myVertices[0] + myVertices[1];
std::cout << myVertices[2] << std::endl;
```
- SimulationManager may now be setup and launched as follows:
```cpp
// Setup a Viewer to render the scene
imstkNew<VTKViewer> viewer("Viewer");
viewer->setActiveScene(scene);
// Setup a SceneManager to advance the scene
imstkNew<SceneManager> sceneManager("Scene Manager");
sceneManager->setActiveScene(scene);
sceneManager->pause(); // Start simulation paused
imstkNew<SimulationManager> driver;
driver->addModule(viewer);
driver->addModule(sceneManager);
driver->start();
```
- `VisualObject` typedef removed. Just use `SceneObject`.
- `HDAPIDeviceServer` renamed to `HapticDeviceManager`
- `HDAPIDeviceClient` renamed to `HapticDeviceClient`
**Contributors**
Andrew Wilson,
Venkata Sreekanth Arikatla,
Ye Han,
Harald Scheirich,
Bradley Feiger,
Jianfeng Yan,
Johan Andruejol,
Sankhesh Jhaveri
Release 3.0.0
-------------
**Announcement: iMSTK 3.0.0**
This release features major improvements to the computational workflow, physics, and rendering aspects of the toolkit. Major refactoring and bug fixes were made across the board to allow easy extension of classes, improve clarity and separation of roles of different imstk libraries and enforce consistency of design across the toolkit.
Here is a comprehensive list of changes made for this release.
**New Features**
* Introduction of configurable task-graph and task-based parallelism.
* Major upgrade to the rendering module (VTK backend)
* Upgrade to VTK 9.0
* Realistic fluid rendering using screen space fluids
* Faster particular rendering of fluids
* Addition of physically based rendering
* Addition of 3D image support and volume rendering
* Improved physics models for particle based dynamics: Addition of extended position based dynamics (xPBD)
* Addition of support for modeling 1D elastic structures with bending stiffness
* Addition of faster reduced order deformation models (Linux only)
* Addition of Reverse Cuthill–McKee algorithm (RCM) for mesh renumbering
* Major refactoring simulation manager: Improved time stepping policies, multiple scene management and scene controls, addition of async simulation mode
* Improved capabilities of the geometric utility module: addition of geometric processing filters, New tetrahedral mesh cover generation (based on ray-casting)
**Improvements or Refactoring**
* Upgrade external dependency from Vega 2.0 to 4.0 (finite element library backend)
* Clear majority of the warnings in imstk libraries
* Refactored examples: consistent naming, factoring out object addition into separate functions, use heart dataset, remove redundant mapping, Removed line mesh example
* New examples for scene management, volume rendering, task graph
* Renamed files to be consistent with class names
* Vulkan shader project removed for VTK backend
* Remove imstkVolumetricMesh dependency on vega volumetric mesh
* Easy configuration of finite element deformable object, viewer, renderer and simulation manager
* Concrete dynamcal models now derive from AbstractDynamicalModel
* Solvers are moved to models from scene
* Added default solvers for models
* SPHSolver is removed
* SceneObject class now has update calls
* DynamicalObject de-templatized
* Fix render window default title to imstk
* Replace external project download links with .zip versions
* Uses CHECK() instead of LOF(FATAL)/LOG_IF(FATAL) for simplicity
* imstkLogger is now a singleton
* Allow exclusion of files while building library targets
* Refactoring to use forward declarations where possible
* Templated solvers with matrix type
* Faster TetraToTriangle map
* Interactions are now specified explicitly
* PbdConstraints moved to Constraints library, PbdConstraints and PbdModel decoupled
* PbdModel performance improvements
* SPHModel performance improvements (using TaskGraph)
**Bug Fixes**
* Fix PhysX backend build issues on Ubuntu
* Fix imstkFind.cmake issues
* Fix imstkConfig.cmake issues
* PbdModel reset fix
* All Scene, SceneObjects reset correctly now
**API Changes**
* simulationManager::startSimulation() to simulationManager::start()
* CollisionGraph::addInteraction(std::shared_ptr<CollidingObject>, std::shared_ptr<CollidingObject>, CollisionDetection::Type, CollisionHandling::Type, CollisionHandling::Type) to CollisionGraph::addInteraction(std::shared_ptr<SceneObjectInteraction>())
* DynamicalModels now have default solvers
**Contributors**
Venkata Sreekanth Arikatla,
Andrew Wilson,
Jianfeng Yan,
Aaron Bray,
Sankhesh Jhaveri,
Johan Andruejol
Release 2.0.0
-------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment