I have dynamic scene what I would like to render in a VTK window (QT, VC++ 2015 application). Objects in the scene are pointcoulds with hundreds of thousands points. Scene consists of:
- House (~800,000 points),
- Car (~700,000 points),
- Tree (~1,500,000 points).
Pointclouds are constantly generated at 30 fps in 3 separate threads. In the end all 3 pointclouds are merged in a 3 million pointcloud and rendered with a typical VTK code: vtkPoints → vtkPolyData ->vtkPolyDataMapper → etc.
Problem is that performance is very poor and it hardly reaches 4 fps on my PC.
How can I parallelize rendering of separate data streams in a single VTK window? Multiple mappers? Multiple actors? vtkParallelRenderManager?
Or use graphics cards from multiple machines and eventually render to a single window?
Thanks!
Hello,
A naïve pipeline will never get high f.p.s. for millions of points, even for high-end graphics hardware. You have to use some large data management technique to achive that. You can test whether the vtkMaskPoints
(https://vtk.org/doc/nightly/html/classvtkMaskPoints.html) filter can improve rendering performance. You can also reduce point count during interaction and render all the points only when the camera stands still. Another approach is to use multi-resolution actors (vtkLODActor
).
take care,
PC
1 Like
Is there a way to provide multiple machine rendering. Every machine has a graphics card. I want to give it a try.
Thank you very much!
You seem to have a performance problem with point cloud rendering. Multiple graphics cards rendering is a far-fetched approach when it comes to interactive graphics. There are smarter ways to improve performance which I pointed above.
Still, if you are quite very firmly sure that is the only absolute single one way to solve your issue, please refer to this: Rendering on multiple GPUs? - #4 by jaswantp
best,
PC
A 30-60 f.p.s. of a few million points is perfectly doable in a single machine. You just have to scratch your head a little. Multiple node rendering for that figure is a quite inneficient solution. When I think rendering in a cluster I think of billions of elements.