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
DeviceRenderTranslucentPolygonalGeometry()method to use
vtkDepthFrustumPassinstead 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)?