Hi all (but esp @ken-martin ), we have some multiscale data we’re rendering that runs into problems with depth-buffer precision; we can’t fit the frustum to the entire dataset’s bounds without severe z-fighting due to a lack of depth-buffer resolution.
Our idea is to adapt this multi-frustum rendering scheme to VTK’s renderer. The idea is to render the scene with the frustum far away, then reset the depth buffer and re-render with the frustum closer – repeating the process a number of times dependent on the size of the scene bounds. This would be implemented as a new vtkRenderPass
subclass (say vtkDepthFrustumPass
). I assume the vtkDepthFrustumPass::Render()
method would internally re-render some other pass once for each set of hither/yon planes?
Does anyone have suggestions on how to do this? Specifically, my concerns are
-
I’m not sure how to arrange it relative to existing render passes, especially depth peeling. If we use depth peeling internal to each depth-frustum render, it looks like we should change
vtkOpenGLRenderer
'sDeviceRenderTranslucentPolygonalGeometry()
method to usevtkDepthFrustumPass
instead of the depth-peeling pass it currently uses as the outer layer? -
How could our new render-pass cull different props for each pass (based on whether the prop bounds overlap the current depth-range being rendered)?