[vtkusers] How to visualize thousands of actors with good performance

Affolter Martin martin.affolter at ntb.ch
Thu Sep 30 06:12:24 EDT 2010


Hi Rakesh,

Thanks for your message. No doubt, we could combine the polydata and reduce the number of pipelines. Manipulating the data is not a requirement. In our case, the data is manipulated in the geometry-kernel only. VTK is merely used to visualize and select already tessellated meshes, edges and vertices.

What is required is being able to pick each element as well as change its color (prehighlight, highlight), thickness and transparency.

I'd just like to know the alternatives (if any), before I consider rewriting our selection and highlighting mechanism... It would really be great, if we could find a solution to this.

Regards,
Martin

Von: rakesh patil [mailto:prakeshofficial at gmail.com] 
Gesendet: Donnerstag, 30. September 2010 09:06
An: Affolter Martin
Cc: Bill Lorensen; VTK Users
Betreff: Re: [vtkusers] How to visualize thousands of actors with good performance

Hi Martin,

This topic is quite interesting and helpful to others. If some more users can put into their ideas, then certainly, we can come to atleast a feasible solution, if not a perfect one..

I feel this can be implemented using single polydata, single mapper and single actor.

Now this depends on what you want to render. If it is only points, edges, and faces(elements) then, I think, displaying this using single actor must not be a problem. 

For altering position of a Point, one can adopt a technique which recently David implemented here:
http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/MoveAVertex

In order to change the colour of each element, one can adopt the color table and scalar array scheme as shown here:
http://www.paraview.org/Wiki/VTK/Examples/Cxx/PolyData/ColorCells

I doubt whether transparency can be achieved using this. 

Also a new point can be inserted into the existing pointset and also can be deleted. 

Hope this helps.

Warm Regards
Rakesh Patil
On Thu, Sep 30, 2010 at 11:50 AM, Affolter Martin <martin.affolter at ntb.ch> wrote:
Yes, the vtk Dlls are built in release configuration with debug information for the profiler (.pdb). We're using VisualStudio 2010.

Martin

Do you build these in Release configuration?

On Wed, Sep 29, 2010 at 3:24 AM, Affolter Martin <martin.affolter at ntb.ch> wrote:
> Sean
>
> Thanks for your reply.
>
> First some information on our Hard- and Software:
> VTK: v 5.6
> OS: Windows XP SP3
> CPU: Intel Core2 Quad 2.83 GHz
> RAM: 3.25 GB
> GPU: ATI radeon HD 3400 series (latest drivers)
>
> We're developing in Visual Studio 2010 which comes with a profiler. I profiled the application in "sample-mode" which means, the profiler looks at the stack in certain intervals and sums up the occurrence of the functions on the stack. Inclusive samples means the function is on the stack, exclusive samples means the function is being processed by the cpu.
>
> Following recorded data is during rotation only, using static mappers. The first part is the "hot path" shown in the summary. Subpaths (A) and (B) are listed in detail below:
>
>
> ----------------------------------Profiling results------------------------------->
>
> Function Name   Inclusive Samples       Exclusive Samples       Module Name
>
> ARinnotech.exe  9'232   0
> __CorExeMain_Exported at 0 9'230   0       mscoree.dll
> Unknown Frame(s)        9'194   0       UNKNOWN
> (A) ClassCAD.ManVTKView.HandleWindowMessage(native int,int32,native int,native int)     2'979   0       DotNetInterface.dll
> (B) vtkRenderWindow::DoStereoRender(void)       2'321   0       vtkRendering.dll
> (C) [atioglxx.dll]      1'004   165     atioglxx.dll
>
> (A) ClassCAD.ManVTKView.HandleWindowMessage(native int,int32,native int,native int)     2'979   0       DotNetInterface.dll
> StubHelpers::SetLastError(void) 2'979   0       clr.dll
> ClassCAD::VTKView::HandleWindowMessage(struct HWND__ *,unsigned int,unsigned int,long)  2'979   0       VTKGrEditor.dll
> ClassCAD::ClassCadInteractor::HandleWindowMessage(struct HWND__ *,unsigned int,unsigned int,long)       2'979   0       VTKGrEditor.dll
> vtkWin32RenderWindowInteractor::OnMouseMove(struct HWND__ *,unsigned int,int,int)       2'979   0       vtkRendering.dll
> vtkObject::InvokeEvent(unsigned long,void *)    2'978   0       vtkCommon.dll
> vtkSubjectHelper::InvokeEvent(unsigned long,void *,class vtkObject *)   2'978   0       vtkCommon.dll
> vtkCallbackCommand::Execute(class vtkObject *,unsigned long,void *)     2'977   0       vtkCommon.dll
> ClassCAD::InteractorStyleTrackballSelection::OnMouseMove(void)  2'977   0       VTKGrEditor.dll
> ClassCAD::InteractorStyleTrackballSelection::Rotate(void)       2'721   0       VTKGrEditor.dll
> vtkRenderer::ResetCameraClippingRange(void)     2'036   0       vtkRendering.dll
> vtkRenderWindowInteractor::Render(void) 684     0       vtkRendering.dll
> vtkRenderWindow::Render(void)   683     0       vtkRendering.dll
> vtkObject::InvokeEvent(unsigned long,void *)    673     0       vtkCommon.dll
> vtkSubjectHelper::InvokeEvent(unsigned long,void *,class vtkObject *)   673     504     vtkCommon.dll
>
> (B) vtkRenderWindow::DoStereoRender(void)       2'321   0       vtkRendering.dll
> vtkRendererCollection::Render(void)     2'321   0       vtkRendering.dll
> vtkRenderer::Render(void)       2'321   88      vtkRendering.dll
> vtkRenderer::AllocateTime(void) 2'223   38      vtkRendering.dll
> vtkFrustumCoverageCuller::Cull(class vtkRenderer *,class vtkProp * *,int &,int &)       2'163   151     vtkRendering.dll
> vtkActor::GetBounds(void)       2'000   129     vtkRendering.dll
> vtkPainterPolyDataMapper::GetBounds(void)       1'776   69      vtkRendering.dll
> vtkPainter::UpdateBounds(double * const)        570     488     vtkRendering.dll
> vtkPolyDataMapper::GetInput(void)       548     3       vtkRendering.dll
> vtkExecutive::GetNumberOfInputConnections(int)  289     106     vtkFiltering.dll
> vtkExecutive::InputPortIndexInRange(int,char const *)   144     69      vtkFiltering.dll
> vtkAlgorithm::GetNumberOfInputPorts(void)       75      75      vtkFiltering.dll
>
> <---------------------------------Profiling results-------------------------------
>
> Your stack trace and subpath B seem to start off identically but then different functions are consuming more cpu time... Maybe that's because of the static mappers. Do you see anything suspicious?
>
> What vtk Version do you use and how is the performance rotating your 10'000 actors scene?
>
> Regards
> Martin Affolter
>
> -----Ursprüngliche Nachricht-----
> Von: Sean McBride [mailto:sean at rogue-research.com]
> Gesendet: Dienstag, 28. September 2010 19:03
> An: Affolter Martin; 'Bill Lorensen'
> Cc: vtkusers at vtk.org
> Betreff: Re: [vtkusers] How to visualize thousands of actors with good performance
>
> On Tue, 28 Sep 2010 15:04:54 +0200, Affolter Martin said:
>
>>Thanks for your suggestion. I had tried static mappers before,
>>unfortunately without the Update()-call. Now I understand why the faces
>>didn't show the first time (only edges and vertices). Anyway I tried it
>>again just now. There is a slight performance increase noticable, but
>>still no match to the performance in VTK 4.4., where the scene (8000
>>actors) can be rotated smoothly.
>
> Have you tried profiling your app?  Where are the bottlenecks?
>
> (What OS are you on?  If Mac OS X, you can use Instruments.app to
> measure where your bottlenecks are.  I'm sure other OSes have similar tools.)
>
> In our case, when we have about 10000 actors, and rotate the scene, the
> heaviest stack trace is:
>
> main
> ...
> -[vtkCocoaGLView drawRect:]
> vtkRenderWindow::Render()
> vtkRenderWindow::DoAARender()
> vtkRenderWindow::DoFDRender()
> vtkRenderWindow::DoStereoRender()
> vtkRendererCollection::Render()
> vtkRenderer::Render()
> vtkOpenGLRenderer::DeviceRender()
> vtkRenderer::UpdateGeometry()
> vtkActor::RenderOpaqueGeometry(vtkViewport*)
> vtkOpenGLActor::Render(vtkRenderer*, vtkMapper*)
> vtkPolyDataMapper::Render(vtkRenderer*, vtkActor*)
> vtkPainterPolyDataMapper::RenderPiece(vtkRenderer*, vtkActor*)
> vtkDefaultPainter::Render(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkPainter::Render(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkPainter::RenderInternal(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkPainter::Render(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkOpenGLScalarsToColorsPainter::RenderInternal(vtkRenderer*, vtkActor*,
> unsigned long, bool)
> vtkPainter::RenderInternal(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkPainter::Render(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkOpenGLClipPlanesPainter::RenderInternal(vtkRenderer*, vtkActor*,
> unsigned long, bool)
> vtkPainter::RenderInternal(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkPainter::Render(vtkRenderer*, vtkActor*, unsigned long, bool)
> vtkOpenGLDisplayListPainter::RenderInternal(vtkRenderer*, vtkActor*,
> unsigned long, bool)
> gleCallList
>
> --
> ____________________________________________________________
> Sean McBride, B. Eng                 sean at rogue-research.com
> Rogue Research                        www.rogue-research.com
> Mac Software Developer              Montréal, Québec, Canada
>
>
>
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ

Follow this link to subscribe/unsubscribe:
http://www.vtk.org/mailman/listinfo/vtkusers




More information about the vtkusers mailing list