Back to Projects List
PRISM Volume Rendering
Key Investigators
- Simon Drouin, ETS Montreal
- Steve Pieper, Isomics, Cambridge MA, USA
- Kyle Sunderland, PerkLab, Queen’s University, Canada
- Andrey Titov, ETS Montreal
- Rafael Palomar, Oslo University Hospital / NTNU, Norway
Project Description
The goal of this project is to enable the development of advanced 3D rendering techniques in Slicer. The goal is to facilitate access to GPU shaders and enable GPU-based filtering in Slicer by improving shader access multipass rendering in VTK and Slicer. The PRISM Module in Slicer will serve as a test environment for the new capabilities.
Objective
- Facilitate the development and debugging of GPU shaders for Slicer
- Extend the principles introduced in the PRISM module to surface rendering and other types of rendering
- Integrate work by Kyle Sunderland on VTK GPU image filters (see branch here) so that the filters are usable in Slicer
- Integrate GPU filters with volume rendering in such a way that filtered volumes do not have to be transfered back to CPU memory before rendering
Progress and Next Steps
- All parties met on Monday to discuss the required functionality in VTK and Slicer to enable more advanced rendering effects:
- The current VTK mechanism to modify shaders is limited
- It makes it difficult to combine different effects
- Development is difficult because the complete shader in not accessible
- Rafael: In Slicer, there is a need for a system that arbitrate the modification of shaders by different modules
- The Slicer shader property node is available only for volume rendering. The feature could easily be ported to surface rendering to facilitate the editing of surface shader
- Previous efforts by Simon Drouin were made to facilitate shader debugging. Code is available in this branch. The code still needs work to enable a debug mode where shader code can be kept in memory with additional tags to facilitate development.
Next steps
- Move vtkShaderProperties to the vtkMRMLDisplayNode level
- Explore custom rendering to simplify integration with the vtk render process. Prior work includes:
- Python scripted Actor/Mappers: https://www.slicer.org/wiki/Slicer3:Python:ScriptedActor
- SimpleMapper: https://github.com/IbisNeuronav/Ibis/tree/master/IbisVTK/vtkExtensions
Illustrations
Background and References
- PRISM Module GitHub repository.
- Original article about the PRISM framework that served as a basis to develop the PRISM module in Slicer
- Previous project weeks
- https://projectweek.na-mic.org/PW30_2019_GranCanaria/Projects/GLSLShaders/
- https://projectweek.na-mic.org/PW28_2018_GranCanaria/Projects/MultiVolumeRendering/