<div dir="ltr">Same here, for the still rendering I use the minimal spacing value in all 3 directions divided by 2 (something to respect Shannon theorem but I'm not sure if it's relevant here ...)<br>During interaction I ended up hacking vtkOpenGLGPUVolumeRayCastMapper::ComputeReductionFactor() method to compute a sampling distance that really honor the wanted FPS. That make it easier to ensure a target FPS<br><br>Here is the diff from VTK 7.1 release<br><br>//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br><div>--- C:/VTK-7.1.0/Rendering/VolumeOpenGL2/vtkOpenGLGPUVolumeRayCastMapper.cxx<span class="gmail-Apple-tab-span" style="white-space:pre">     </span>Mon Nov 14 19:58:01 2016</div><div>+++ C:/VTK-7.1.0/Rendering/VolumeOpenGL2/vtkOpenGLGPUVolumeRayCastMapper.cxx<span class="gmail-Apple-tab-span" style="white-space:pre">   </span>Wed Mar 08 14:21:13 2017</div><div>@@ -2116,26 +2116,9 @@</div><div>   else</div><div>   {</div><div>     input->GetSpacing(this->CellSpacing);</div><div>-    vtkMatrix4x4* worldToDataset = vol->GetMatrix();</div><div>-    double minWorldSpacing = VTK_DOUBLE_MAX;</div><div>-    int i = 0;</div><div>-    while (i < 3)</div><div>-    {</div><div>-      double tmp = worldToDataset->GetElement(0,i);</div><div>-      double tmp2 = tmp * tmp;</div><div>-      tmp = worldToDataset->GetElement(1,i);</div><div>-      tmp2 += tmp * tmp;</div><div>-      tmp = worldToDataset->GetElement(2,i);</div><div>-      tmp2 += tmp * tmp;</div><div>-</div><div>-      // We use fabs() in case the spacing is negative.</div><div>-      double worldSpacing = fabs(this->CellSpacing[i] * sqrt(tmp2));</div><div>-      if(worldSpacing < minWorldSpacing)</div><div>-      {</div><div>-        minWorldSpacing = worldSpacing;</div><div>-      }</div><div>-      ++i;</div><div>-    }</div><div>+     // Approximate Shannon -> half the miniaml spacing</div><div>+    double minWorldSpacing = std::min(std::min(this->CellSpacing[0],</div><div>+                             this->CellSpacing[1]),this->CellSpacing[1]) / 2.;</div><div> </div><div>     // minWorldSpacing is the optimal sample distance in world space.</div><div>     // To go faster (reduceFactor<1.0), we multiply this distance</div><div>@@ -3113,7 +3096,6 @@</div><div> </div><div>   if ( this->TimeToDraw )</div><div>   {</div><div>-    double oldFactor = this->ReductionFactor;</div><div> </div><div>     double timeToDraw;</div><div>     if (allocatedTime < 1.0)</div><div>@@ -3137,30 +3119,17 @@</div><div>       timeToDraw = 10.0;</div><div>     }</div><div> </div><div>-    double fullTime = timeToDraw / this->ReductionFactor;</div><div>-    double newFactor = allocatedTime / fullTime;</div><div>-</div><div>-    // Compute average factor</div><div>-    this->ReductionFactor = (newFactor + oldFactor)/2.0;</div><div>-</div><div>-    // Discretize reduction factor so that it doesn't cause</div><div>-    // visual artifacts when used to reduce the sample distance</div><div>-    this->ReductionFactor = (this->ReductionFactor > 1.0) ? 1.0 :</div><div>-                              (this->ReductionFactor);</div><div>-</div><div>-    if (this->ReductionFactor < 0.20)</div><div>+    if ( timeToDraw == BigTimeToDraw )</div><div>     {</div><div>-      this->ReductionFactor = 0.10;</div><div>+      this->ReductionFactor = 1;</div><div>     }</div><div>-    else if (this->ReductionFactor < 0.50)</div><div>-    {</div><div>-      this->ReductionFactor = 0.20;</div><div>-    }</div><div>-    else if (this->ReductionFactor < 1.0)</div><div>+    else</div><div>     {</div><div>-      this->ReductionFactor = 0.50;</div><div>+      double l_wanted_fps = 1. / ( allocatedTime * 3. );</div><div>+      double l_current_fps = 1. / timeToDraw;</div><div>+      this->ReductionFactor *= l_current_fps / l_wanted_fps;</div><div>+      this->ReductionFactor = vtkMath::Round( this->ReductionFactor * 50. ) / 50.;</div><div>     }</div><div>-</div><div>     // Clamp it</div><div>     if ( 1.0/this->ReductionFactor > this->MaximumImageSampleDistance )</div><div>     {</div>//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br><br><div><br></div><div>Simon</div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-03-08 14:04 GMT+01:00 Elvis Stansvik <span dir="ltr"><<a href="mailto:elvis.stansvik@orexplore.com" target="_blank">elvis.stansvik@orexplore.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">2017-03-08 11:16 GMT+01:00 Simon ESNEAULT <<a href="mailto:simon.esneault@gmail.com">simon.esneault@gmail.com</a>>:<br>
> Hello Alvaro,<br>
><br>
> That's real good news to hear (about the down-sampling in X and Y), I find<br>
> it really difficult to tweak volume rendering only with sample distance,<br>
> especially during interaction.<br>
> Has the development began already ? Is there some branche where we can test<br>
> that feature ?<br>
><br>
> Also in that case would it be possible to add a final "gaussian smoothing<br>
> pass" or equivalent only on the 2D generated image (maybe only as an option)<br>
> ? I look like it is the case with FixedPointVolumeraycastMapper, the image<br>
> looks a bit blurred but sometimes it helps to see the structures<br>
<br>
</span>I'm also very interested in this. I'm using vtkGPUVolumeRayCastMapper,<br>
and I'm currently turning off the automatic adjustment of sample<br>
distance during interaction and resorted to doing my own simpler<br>
adjustment. I'm simply quadrupling the sample distance during<br>
interaction (for still rendering I use<br>
(spacingX+spacingY+spacingZ)/<wbr>6). I'd love to have another quality<br>
controlling knob to turn.<br>
<br>
Is there a MR up for it already? Will it be in 7.2?<br>
<span class="HOEnZb"><font color="#888888"><br>
Elvis<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
> Thanks<br>
> Simon<br>
><br>
><br>
> 2017-03-06 18:17 GMT+01:00 Alvaro Sanchez <<a href="mailto:alvaro.sanchez@kitware.com">alvaro.sanchez@kitware.com</a>>:<br>
>><br>
>> Hi Shark,<br>
>><br>
>> unfortunately there is no current plan of porting vtkVolumeTextureMapper3D<br>
>> to OpenGL2<br>
>> , as far as I know.  We will soon however support image down sampling in X<br>
>> and Y which<br>
>> should serve as additional knobs to tweak the performance of<br>
>> GPURayCastMapper in<br>
>> OpenGL2 (only sample distance can be currently adjusted).<br>
>><br>
>> Could you provide more detail on the size of the dataset you are rendering<br>
>> and your GPU<br>
>> specs?<br>
>><br>
>> Thanks,<br>
>> Álvaro<br>
>><br>
>> On Mon, Mar 6, 2017 at 10:30 AM, Shark <<a href="mailto:m.nunes@fratoria.com">m.nunes@fratoria.com</a>> wrote:<br>
>>><br>
>>> Hello,<br>
>>><br>
>>> I have been having some issues with vtkVolumeTextureMapper3D. I see it<br>
>>> has<br>
>>> been deprecated, however it is still available if I use the old openGL.<br>
>>><br>
>>> Since for software rendering with texture mapping is much faster than ray<br>
>>> casting, I would like to know if you are planning to have a Volume<br>
>>> Texture<br>
>>> Mapper for openGL 2, or if there is actually a new one that I am not able<br>
>>> to<br>
>>> find.<br>
>>><br>
>>> Best regards,<br>
>>> Shark<br>
>>><br>
>>><br>
>>><br>
>>><br>
>>> --<br>
>>> View this message in context:<br>
>>> <a href="http://vtk.1045678.n5.nabble.com/vtkVolumeTextureMapper3D-in-VTK-7-1-tp5742368.html" rel="noreferrer" target="_blank">http://vtk.1045678.n5.nabble.<wbr>com/vtkVolumeTextureMapper3D-<wbr>in-VTK-7-1-tp5742368.html</a><br>
>>> Sent from the VTK - Users mailing list archive at Nabble.com.<br>
>>> ______________________________<wbr>_________________<br>
>>> Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
>>><br>
>>> Visit other Kitware open-source projects at<br>
>>> <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
>>><br>
>>> Please keep messages on-topic and check the VTK FAQ at:<br>
>>> <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_<wbr>FAQ</a><br>
>>><br>
>>> Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>vtkusers</a><br>
>>><br>
>>> Follow this link to subscribe/unsubscribe:<br>
>>> <a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/vtkusers</a><br>
>><br>
>><br>
>><br>
>><br>
>> --<br>
>> Alvaro Sanchez<br>
>> Kitware, Inc.<br>
>> Senior R&D Engineer<br>
>> 21 Corporate Drive<br>
>> Clifton Park, NY 12065-8662<br>
>> Phone: 518-881-4901<br>
>><br>
>> ______________________________<wbr>_________________<br>
>> Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
>><br>
>> Visit other Kitware open-source projects at<br>
>> <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
>><br>
>> Please keep messages on-topic and check the VTK FAQ at:<br>
>> <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_<wbr>FAQ</a><br>
>><br>
>> Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>vtkusers</a><br>
>><br>
>> Follow this link to subscribe/unsubscribe:<br>
>> <a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/vtkusers</a><br>
>><br>
><br>
><br>
><br>
> --<br>
> ------------------------------<wbr>------------------------------<wbr>------<br>
> Simon Esneault<br>
> Rennes, France<br>
> ------------------------------<wbr>------------------------------<wbr>------<br>
><br>
> ______________________________<wbr>_________________<br>
> Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
><br>
> Visit other Kitware open-source projects at<br>
> <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
><br>
> Please keep messages on-topic and check the VTK FAQ at:<br>
> <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_<wbr>FAQ</a><br>
><br>
> Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>vtkusers</a><br>
><br>
> Follow this link to subscribe/unsubscribe:<br>
> <a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/vtkusers</a><br>
><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>------------------------------------------------------------------<br>Simon Esneault<div>Rennes, France<br>------------------------------------------------------------------</div></div></div></div>
</div>