[vtkusers] problems with transient unstructured volume rendering

Dominik Szczerba dominik at itis.ethz.ch
Wed Dec 16 15:03:26 EST 2009


David E DeMarle wrote:
> wrote:
>> I have set up an example here:
>>
>> http://www.cmake.org/Wiki/Unstructured_Transient_Volume_Rendering
>>
>> I do not believe the time source generates the right thing: the scalar
>> ranges do not make any sense to me, neither does what I see on the screen.
>> Please let me know if I do something wrong.
> 
> The label arrays are not very interesting in the source. Every
> point/cell gets its own label and that doesn't change over time. The
> X/Y/Z arrays are only interesting if the object is moving, as they are
> just the coordinates of the point/(centroid of)cell. The Value arrays
> vary over a sinusoid. Try this:
> 
>>>> for i in (0.1*s for s in xrange(0,10)):
> 	print "AT TIME " + str(i)
> 	ex.SetUpdateTimeStep(0,i)
> 	tse.Update()
> 	for j in range(0,tse.GetOutput().GetPointData().GetNumberOfArrays()):
> 		print tse.GetOutput().GetPointData().GetArray(j).GetName()
> 		tse.GetOutput().GetPointData().GetArray(j).GetRange()

Thanks for a clarification. I still think, thought, that the dataset of 
5 cells is too small to see anything. The examples in VTKData are way 
too large in contrary.

> 
> Also, be careful about use of GetScalars. I don't think I mark any of
> the arrays as the ActiveScalars, so you are better off coloring by a
> specific array.

How? SelectColorArray is not available for the volume mapper used.

> 
>> As to the mapper, David, please note I am not re-creating the mapper but
>> only the volume (actor).
> 
> Same effect, I think it is causing the lookup table range to be setup for you.

What lookup table? There is none associated with the volume mapper, but 
transfer functions. Any by blindly trying things around I discovered 
that the re-creation of the actor can be replaced by a single line:

		volume.GetProperty().Modified()

which delivers the right colors, but makes me even more confused: 1) why 
do I need to Modify() the volume property if it has not changed 2) If I 
misinterpret what Modify() should do and it must be called here, why is 
it not triggered automatically by reader.Modified()?

> 
>> Yes, indeed, it looks like color range is (not)
>> reset, but I can not find any appropriate functions to influence the
>> behavior - the transfer functions do not change. How would you force the
>> desired behavior other than re-creating the volume?
>>
> 
> I can't investigate the specifics of setting up the color controls at
> the moment sorry. You have to coordinate the transfer function, mapper
> and actor, and I don't keep the specific calls in my head. What you
> are trying to do though is query the range every frame and make sure
> it is used. A different alternative is to set the range ahead of time
> such that it covers the total range over all time. You either have to
> know that range apriori, or update to find it out.

I do not understand what you mean by setting such a range ahead. I do 
indeed know the global range I want to apply and I do so in the transfer 
function. Anything else?

> 
> Lastly, you generally want to set the time requested near the sink.
> The setting you ask for on the source will be overridden if something
> downstream asks for something different.

That is a good point, thanks.

bye
Dominik

> 
>> Dominik
>>
>> David E DeMarle wrote:
>>> When you delete the mapper and make a new one each frame you are
>>> rescaling the color lookup table on every frame. Color tables are not
>>> automatically rescaled as time progresses and instead the ranges
>>> correspond to that from the first available time step. Automatic
>>> rescaling can be very misleading. A more intuitive approach would be
>>> to get a global range over all time and use that to scale, but the
>>> global range is prohibitively expensive to compute in general with
>>> large data so we do not do that.
>>>
>>> Does this explain the effect you are seeing?
>>>
>>> About the vtkTimeSourceExample, how are you getting the time range?
>>> Try this to exercise it:
>>>
>>> import vtk
>>> tse = vtk.vtkTimeSourceExample()
>>> ex = tse.GetExecutive()
>>> tse.UpdateInformation()
>>>
>>> #inspect available time range and time steps
>>> print ex.GetOutputInformation()
>>>
>>> #make it grow because bounds are easy to inspect
>>> tse.SetGrowing(1)
>>>
>>> ex.SetUpdateTimeStep(0,0.0)
>>> tse.Update()
>>> print(tse.GetOutput().GetBounds())
>>>
>>> #pick some other time inside the time range
>>> ex.SetUpdateTimeStep(0,0.5)
>>> tse.Update()
>>> print(tse.GetOutput().GetBounds())
>>>
>>>
>>>
>>>
>>> David E DeMarle
>>> Kitware, Inc.
>>> R&D Engineer
>>> 28 Corporate Drive
>>> Clifton Park, NY 12065-8662
>>> Phone: 518-371-3971 x109
>>>
>>>
>>>
>>> On Tue, Dec 15, 2009 at 4:08 PM, Dominik Szczerba <dominik at itis.ethz.ch>
>>> wrote:
>>>> Hmmm all I am getting at the output is ONE cell (hexa 8 points) with
>>>> several
>>>> scalars but all of them constant in time.
>>>>
>>>> I think I will need something a little more realistic to demonstrate the
>>>> problem.
>>>>
>>>> Or at least a small transient ImageData that can be triangulated.
>>>>
>>>> Dominik
>>>>
>>>> David E DeMarle wrote:
>>>>> That particular filter has only four parameters, produce data at
>>>>> discrete locations or analytically across the temporal domain, grow
>>>>> (vary number of cells or not), and x and y amplitude for it to move
>>>>> across over time.
>>>>>
>>>>> It produces at most 5 cells I think, so you will have to write some
>>>>> code if the bug is only exposed by higher resolution data. The point
>>>>> was to make something small and predictable to test vtk's support for
>>>>> time varying data.
>>>>>
>>>>> More details about time in VTK can be found here
>>>>> http://www.vtk.org/Wiki/VTK/Time_Support
>>>>>
>>>>> David E DeMarle
>>>>> Kitware, Inc.
>>>>> R&D Engineer
>>>>> 28 Corporate Drive
>>>>> Clifton Park, NY 12065-8662
>>>>> Phone: 518-371-3971 x109
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Dec 15, 2009 at 3:33 PM, Dominik Szczerba <dominik at itis.ethz.ch>
>>>>> wrote:
>>>>>> I will be happy to.
>>>>>>
>>>>>> While I download and compile CVS, would you kindly post an example how
>>>>>> to
>>>>>> generate such a transient dataset (at a desired resolution for
>>>>>> inaccurate
>>>>>> but fast rendering)?
>>>>>>
>>>>>> Dominik
>>>>>>
>>>>>> David E DeMarle wrote:
>>>>>>> In CVS, time source produces an unstrucured grid that changes over
>>>>>>> time. Can you reproduce the problem with that?
>>>>>>>
>>>>>>> David E DeMarle
>>>>>>> Kitware, Inc.
>>>>>>> R&D Engineer
>>>>>>> 28 Corporate Drive
>>>>>>> Clifton Park, NY 12065-8662
>>>>>>> Phone: 518-371-3971 x109
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Dec 15, 2009 at 3:25 PM, Dominik Szczerba
>>>>>>> <dominik at itis.ethz.ch>
>>>>>>> wrote:
>>>>>>>> I am quite happy with static unstructured volume rendering.
>>>>>>>>
>>>>>>>> The problems arise when I request subsequent timesteps:
>>>>>>>>
>>>>>>>>     while time<=timeEnd:
>>>>>>>>             executive = reader.GetExecutive()
>>>>>>>>             executive.SetUpdateTimeStep(0,time)
>>>>>>>>             reader.Modified()
>>>>>>>>             window.Render()
>>>>>>>>
>>>>>>>>
>>>>>>>> This results in changing but wrong colors in my volume. Don't know
>>>>>>>> exactly
>>>>>>>> what is rendered, but it is certainly different from rendering the
>>>>>>>> subsequent timestep from scratch. The situation is remedied with the
>>>>>>>> following code:
>>>>>>>>
>>>>>>>>     while time<=timeEnd:
>>>>>>>>             executive = reader.GetExecutive()
>>>>>>>>             executive.SetUpdateTimeStep(0,time)
>>>>>>>>             reader.Modified()
>>>>>>>>             renderer.RemoveVolume(volume)
>>>>>>>>             volume = vtkVolume()
>>>>>>>>             volume.SetMapper(volumeMapper)
>>>>>>>>             volume.SetProperty(volumeProperty)
>>>>>>>>             renderer.AddVolume(volume)
>>>>>>>>             window.Render()
>>>>>>>>
>>>>>>>> Looks like something is not reset, but my color/transfer functions
>>>>>>>> are
>>>>>>>> static (not changing with the changing scalar ranges).
>>>>>>>>
>>>>>>>> I could just shrug and go on, but this does not look fine to me so I
>>>>>>>> thought
>>>>>>>> I'd better ask if it is not a problem somewhere in VTK that should be
>>>>>>>> reported.
>>>>>>>>
>>>>>>>> Dominik
>>>>>>>>
>>>>>>>> PS. Following the great example of David D. I wanted to set up a wiki
>>>>>>>> example, but unfortunately I was unable to find a small (transient
>>>>>>>> unstructured) example dataset or an example code to generate one.
>>>>>>>> _______________________________________________
>>>>>>>> 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