Rafael Palomar, Oslo University Hospital / NTNU, Norway
Mauro Dominguez
Samuelle St-Onge, ETS Montreal
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.
Long-term Objective
Facilitate the development and debugging of GPU shaders for Slicer (see this branch of VTK that improves shader readability)
Extend the principles introduced in the PRISM module to surface rendering and other types of rendering (Adapt DisplayableManagers like in the volume rendering module?)
Integrate GPU filters in Slicer and connect them with volume rendering in such a way that filtered volumes do not have to be transfered back to CPU memory before rendering. See work by Kyle Sunderland on VTK GPU image filters (branch here).
Explore custom rendering to simplify integration with the vtk render process. Prior work includes:
Finish updating the PRISMRendering module to work with Slicer 5.
Enable opening shaders with tags in a text editor while running Slicer
Previous efforts by Simon Drouin were made to facilitate shader debugging by leaving tags in the shader code. Code is available in this branch.
In vtkShaderProgram class, debug functionality is available by setting the string variable FileNamePrefixForDebugging, which loads a shader from a file before rendering or dumps the shader to a file if doesn’t already exists. However, this functionality is private. Mappers should have public functions to enable this debugging mechanism.
Generalize the mechanism that allows the VolumeRendering module to store vtkShaderProperties in the display node to obtain the same behavior with the Models module.