<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt">Hi David,<br><br>I'm setting the input to the vtkImageResliceMapper from a vtkImageImport object.&nbsp; However since I'm using SetInput instead of SetInputConnection shouldn't the update not matter?&nbsp; As I understand it, this would remove any reliance on the vtkImageImport object once its GetOutput method is invoked.&nbsp; However I tried your suggestion and called the Update function on the vtkImageImport object before the for loop and did not observe any performance increase.<br><br>Another thing I've noticed is that if I render two render windows simultaneously (one displaying the slice image, one displaying the full volume), the time is not simply the sum of the two separately.&nbsp; That is, if it takes 5 seconds to run the for loop with just the slice render window, and 4 seconds to run the for loop with just the
 volume render window, the time to run the for loop with both is not 9 seconds, but more like 14 seconds.&nbsp; This is another reason I would like to really up the speed, since ultimately we'd like to be able to show both views simultaneously.&nbsp; Maybe this new mystery sheds some light on the problem?<br><br>Wasn't quite sure what you meant about the vblank, but it sounds like you're saying there might be some kind of sleep call?<br><br>Thanks again for all the help, I'm at a loss here!<br><br>--Matt<br><div><span><br></span></div><div><br></div>  <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <hr size="1">  <font face="Arial" size="2"> <b><span style="font-weight:bold;">From:</span></b> David Gobbi &lt;david.gobbi@gmail.com&gt;<br> <b><span style="font-weight: bold;">To:</span></b> M W &lt;sonomw@yahoo.com&gt;
 <br><b><span style="font-weight: bold;">Cc:</span></b> "vtkusers@vtk.org" &lt;vtkusers@vtk.org&gt; <br> <b><span style="font-weight: bold;">Sent:</span></b> Thursday, August 29, 2013 5:47 AM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [vtkusers] vtkRenderer vs vtkRenderWindow performance<br> </font> </div> <div class="y_msg_container"><br>Hi Matt,<br><br>Are you using some kind of VTK image reader to load the image?<br>Make sure that the whole image is cached in memory by doing this<br>after you have set up the reader:<br><br>reader.Update();<br><br>Otherwise, it's possible that on each render, the reader is hitting<br>the disk to load the slices that are needed for that render.&nbsp; That<br>would be a big performance killer.&nbsp; Ideally, you should also call<br>Update() on whatever filter immediately precedes the mapper.<br><br>The fact that you get a max of 60fps after removing all actors<br>suggests that it might be waiting for
 a vblank every time it renders,<br>though I might be wrong about that.<br><br> - David<br><br>On Thu, Aug 29, 2013 at 1:10 AM, M W &lt;<a ymailto="mailto:sonomw@yahoo.com" href="mailto:sonomw@yahoo.com">sonomw@yahoo.com</a>&gt; wrote:<br>&gt; Hi David,<br>&gt;<br>&gt; Thanks for all the info!&nbsp; I've reimplemented our system using<br>&gt; vtkImageResliceMapper, but unfortunately the performance seems about the<br>&gt; same.&nbsp; Here's a (really) stripped-down version of what my test case looks<br>&gt; like now:<br>&gt;<br>&gt; mapper = vtk.vtkImageResliceMapper()<br>&gt; mapper.SetInput(input)<br>&gt; mapper.SetSlicePlane(plane)<br>&gt; actor.SetMapper(mapper)<br>&gt; renderer.AddActor(actor)<br>&gt;<br>&gt;<br>&gt; start_time = time.time()<br>&gt; for i in range(100)<br>&gt;&nbsp; &nbsp; &nbsp; mapper.SetSlicePlane(new plane)<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; renderWindow.Render()<br>&gt; end_time = time.time()<br>&gt; print 'Elapsed time = ',
 end_time - start_time<br>&gt;<br>&gt; Currently I'm getting about 15 fps, which is better, but would be great to<br>&gt; get above 30.&nbsp; An interesting thing I noticed is that even if I comment out<br>&gt; the AddActor line, the for loop still takes about 1.6 seconds to run.&nbsp; With<br>&gt; zero actors to render (I verify this before the loop by calling<br>&gt; VisibleActorCount) I would expect the loop to complete nearly<br>&gt; instantaneously.&nbsp; Any additional thoughts?&nbsp; Thanks again.<br>&gt;<br>&gt; --Matt<br>&gt;<br>&gt;<br>&gt; ________________________________<br>&gt; From: David Gobbi &lt;<a ymailto="mailto:david.gobbi@gmail.com" href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt;<br>&gt; To: M W &lt;<a ymailto="mailto:sonomw@yahoo.com" href="mailto:sonomw@yahoo.com">sonomw@yahoo.com</a>&gt;<br>&gt; Cc: "<a ymailto="mailto:vtkusers@vtk.org" href="mailto:vtkusers@vtk.org">vtkusers@vtk.org</a>" &lt;<a
 ymailto="mailto:vtkusers@vtk.org" href="mailto:vtkusers@vtk.org">vtkusers@vtk.org</a>&gt;<br>&gt; Sent: Tuesday, August 27, 2013 10:32 PM<br>&gt; Subject: Re: [vtkusers] vtkRenderer vs vtkRenderWindow performance<br>&gt;<br>&gt; Hi Matt,<br>&gt;<br>&gt; Are you reslicing the whole volume on each render?&nbsp; For it to be going<br>&gt; that slow, the vtkImageReslice class must be producing 200 output<br>&gt; slices for each render, which doesn't make sense because the renderer<br>&gt; is (I'm guessing) only displaying one slice at a time.&nbsp; In other<br>&gt; words, I think that if you reworked your pipeline you would probably<br>&gt; see things speed up by a factor of about 200.<br>&gt;<br>&gt; I recommend that you use vtkImageResliceMapper instead of<br>&gt; vtkImageReslice.&nbsp; See this wiki page for details:<br>&gt; <a href="http://www.vtk.org/Wiki/VTK/Image_Rendering_Classes"
 target="_blank">http://www.vtk.org/Wiki/VTK/Image_Rendering_Classes</a><br>&gt;<br>&gt; About the timings, please note that vtkRenderer::Render() is not a<br>&gt; user method and you should never, ever call it directly.&nbsp; It is only<br>&gt; meant to be called from the vtkRenderWindow.&nbsp; When you call it<br>&gt; directly as in your code example, it doesn't do what it is supposed to<br>&gt; do, so the time you are getting for it is invalid.&nbsp; I won't explain<br>&gt; any further than that.<br>&gt;<br>&gt; David<br>&gt;<br>&gt; On Tue, Aug 27, 2013 at 10:55 PM, M W &lt;<a ymailto="mailto:sonomw@yahoo.com" href="mailto:sonomw@yahoo.com">sonomw@yahoo.com</a>&gt; wrote:<br>&gt;&gt; Hi all, I'm relatively new to VTK and am having some issues with<br>&gt;&gt; performance.&nbsp; I am trying to achieve interactive slicing of a roughly<br>&gt;&gt; 200x200x200 vtkVolume using vtkImageReslice, displayed through a 640x480<br>&gt;&gt; wxVTKRenderWindow in
 Python.&nbsp; This is all working great, but it's slow,<br>&gt;&gt; maybe 5 - 10 frames per second, making the application difficult to use.<br>&gt;&gt; I'm running this on a Windows 7 / Intel Core i7 / nVidia Geforce GTX<br>&gt;&gt; laptop.<br>&gt;&gt;<br>&gt;&gt; The main bottleneck is the call to the wxVTKRenderWindow Render function.<br>&gt;&gt; Out of curiosity, I timed the speed of the Render function of the<br>&gt;&gt; vtkRenderer directly, and this was nearly an order of magnitude faster.<br>&gt;&gt; Is<br>&gt;&gt; this to be expected?&nbsp; I figured the bulk of the work would be in the<br>&gt;&gt; vtkRenderer.&nbsp; I'm fairly new to all of this so I'm not quite clear on what<br>&gt;&gt; work is performed by the<br>&gt;&gt; renderer/rendercollection/renderwindow/interactor,<br>&gt;&gt; but is there a way to get the vtkRenderWindow Render to better match the<br>&gt;&gt; speed of the vtkRenderer Render?<br>&gt;&gt;<br>&gt;&gt; I get very smooth
 results rotating the entire volume within the<br>&gt;&gt; wxVTKRenderWindow, so it seems somewhat unexpected that rendering a single<br>&gt;&gt; slice is so much slower.<br>&gt;&gt;<br>&gt;&gt; My test case looks something like this:<br>&gt;&gt;<br>&gt;&gt; start_time = time.time()<br>&gt;&gt; for i in range(100):<br>&gt;&gt;&nbsp; &nbsp; &nbsp; self.sliceRenderer.Render()<br>&gt;&gt;&nbsp; &nbsp; &nbsp; #self.sliceRenderWindow.Render()<br>&gt;&gt; end_time = time.time()<br>&gt;&gt; print 'Elapsed time = ', end_time - start_time<br>&gt;&gt;<br>&gt;&gt; Any ideas?&nbsp; Thanks!<br>&gt;&gt;<br>&gt;&gt; --Matt<br>&gt;<br>&gt;<br><br><br></div> </div> </div>  </div></body></html>