Difference between revisions of "Project Week 25/Next Generation GPU Volume Rendering"

From NAMIC Wiki
Jump to: navigation, search
Line 10: Line 10:
 
* [http://perk.cs.queensu.ca/users/lasso Andras Lasso] (Queen's University, Canada)
 
* [http://perk.cs.queensu.ca/users/lasso Andras Lasso] (Queen's University, Canada)
 
* [http://www.sintef.no/en/all-employees/employee/?empId=541 Ole Vegard Solberg] (SINTEF, Norway)
 
* [http://www.sintef.no/en/all-employees/employee/?empId=541 Ole Vegard Solberg] (SINTEF, Norway)
* [https://www.kitware.com/alvaro-sanchez/ Alvaro Sanchez] (Kitware, USA <i>Remote attendance</i>)
+
* [https://www.kitware.com/alvaro-sanchez/ Alvaro Sanchez] (Kitware Inc., USA <i>Remote attendance</i>)
* [https://www.kitware.com/sankhesh-jhaveri/ Sankhesh Jhaveri] (Kitware, USA <i>Remote attendance</i>)
+
* [https://www.kitware.com/sankhesh-jhaveri/ Sankhesh Jhaveri] (Kitware Inc., USA <i>Remote attendance</i>)
  
 
==Project Description==
 
==Project Description==
Line 38: Line 38:
  
 
* [http://ibisneuronav.org Ibis Neuronav]/PRISM (Multi-volume ray-casting with programmable shaders in VTK)
 
* [http://ibisneuronav.org Ibis Neuronav]/PRISM (Multi-volume ray-casting with programmable shaders in VTK)
* Steve Pieper's volume processing on the GPU with [https://github.com/pieper/CommonGL OpenGL in VTK and GLSL] and with [http://afruehstueck.github.io/TF.html WebGL (With Anna Fruehstueck)] and [https://www.youtube.com/watch?v=wMkuwzA7RDo WebGL2] (see videos below)
+
* Steve Pieper's volume processing on the GPU with [https://github.com/pieper/CommonGL OpenGL in VTK and GLSL] and with [http://afruehstueck.github.io/TF.html WebGL (with Anna Fruehstueck)] and [https://www.youtube.com/watch?v=wMkuwzA7RDo WebGL2] (see videos below)
 
* [https://www.custusx.org/ CustusX ] (GPU volume slicing and compositing with multi-window context sharing)
 
* [https://www.custusx.org/ CustusX ] (GPU volume slicing and compositing with multi-window context sharing)
 
   
 
   
Line 44: Line 44:
 
|
 
|
 
<!-- Progress and Next steps (fill out at the end of project week) -->
 
<!-- Progress and Next steps (fill out at the end of project week) -->
TODO
 
 
|}
 
|}
  

Revision as of 12:40, 20 June 2017

Home < Project Week 25 < Next Generation GPU Volume Rendering


Back to Projects List


Key Investigators

Project Description

Objective Approach and Plan Progress and Next Steps

Develop a specification for the next generation of GPU volume processing and rendering in VTK and Slicer

The specification should support

  • Multiple input volumes for ray-casting and slice-based volume rendering
  • GPU-based volume slicing and compositing
  • Programmable volume rendering shader
  • Smart management of volumes in GPU memory
  • Possibility to run simple processing operations on the volume (e.g. Non-linear transforms)
  • Consider possible complications
    • GPU features not available / software only fallback
    • Volumes too big to for GPU memory

Compare the architectures of different existing projects where parts of the required functionality has been implemented:

Determine a sensible way to integrate all those contribution in VTK.

Illustrations

https://www.dropbox.com/s/bqg1fyd42z6lawn/prism-demo-simon-drouin-imic-2016.mp4?dl=0

3D Image Filters in WebGL2

Multivolume rendering and nonlinear transforms in WebGL2

Background and References

Some notes about sharing GLSL code between desktop OpenGL and WebGL

Schott M, Pascal Grosset AV, Martin T, Pegoraro V, Smith ST, Hansen CD. Depth of Field Effects for Interactive Direct Volume Rendering. Comput Graph Forum. 2011 Jun;30(3):941-50.

Volumetric shadows and light scattering:

Kniss J, Premoze S, Hansen C, Shirley P, McPherson A. A model for volume lighting and modeling. IEEE Trans Vis Comput Graph. 2003;9(2):150–62.

Ambiant occlusion (this one should be possible to do with ray casting, but not as efficient):

Hernell F, Ljung P, Ynnerman A. Local Ambient Occlusion in Direct Volume Rendering. IEEE Trans Vis Comput Graph. 2010 Jul;16(4):548–59.

Planning hangout June 13

(Simon, Jc, Alvaro, Sankhesh, Steve, Hina)

Recent features in VTK Volume Rendering (in master, blog post coming)

  • Volume peeling - translucent geometry with volumes in GPU ray cast mapper
  • Render to texture
  • 2D lookup tables (value and gradient magnitude)

Work in progress

  • Overlapping volumes - multiple inputs to mapper
  • vtk charts to work with 2D transfer functions

Slicer to migrate to latest version once cmake hierarchy is sorted out (Jc)

Questions / discussion points:

  • Ray cast vs view aligned plane-based algorithms
    • depth of focus, shadows, diffuse lighting...
    • How to integrate multiple features
  • Nonlinear transformation
  • Custom shaders
  • Dynamic shader generation in python
  • multiple components
    • RGBA
    • Independent components?
  • 2D lookup tables
  • Volumes that live on the GPU
    • sharing across contexts
    • use as input textures and render targets
    • tiling?
    • streaming?
  • Large volumes?
  • Mesa backend?
    • Offscreen support for OpenGL2 backend should work in VTK now