Edit this page

NA-MIC Project Weeks

Back to Projects List

PRISM Volume Rendering

Key Investigators

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

  1. Facilitate the development and debugging of GPU shaders for Slicer (see this branch of VTK that improves shader readability)
  2. Extend the principles introduced in the PRISM module to surface rendering and other types of rendering (Adapt DisplayableManagers like in the volume rendering module?)
  3. 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).
  4. 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

PW37 Objective

  1. Finish updating the PRISMRendering module to work with Slicer 5.
  2. 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.
  3. Generalize the mechanism that allows the VolumeRendering module to store vtkShaderProperties in the display node to obtain the same behavior with the Models module.


Next Steps


Background and References