Artifacts and poor performance of ParaView with vtkOpenGLVolumeRayCastMapper with high values of ScalarOpacityUnitDistance

Is there a good overview of how OpenGL 2 volume rendering in VTK is currently implemented?

I’m reading through the code (e.g., vtkOpenGLGPUVolumeRayCastMapper.cxx), trying to understand performance and a few interesting artifacts, comparing to IndeX and OSPRay running the benchmark. From a quick code-read, it rasterizes volume sub-blocks. The GLSL fragment program ray marches within these blocks, and uses JITted code to classify, shade and then integrate the samples as necessary.

I’m trying to understand where artifacts (see attached) come from – as well as why performance degrades for large values of ScalarOpacityUnitDistance (>16).

Thanks to anyone who can give an overview and guidance.