Project 4: Direct Volume Rendering (BONUS problem)

Ryan Miller - millerrv@purdue.edu

Task 4 - Multidimensional transfer functions (dvr_medical_grad.py and dvr_cfd_grad.py)

I used the recommended Fixed Point volume ray cast mapper to achieve a visualization that features two dimensions: both the value from the previous tasks and the magnitude of the gradient. The pipeline I used is as follows:

vtkPiecewiseFunction() [value]--------|
vtkPiecewiseFunction() [gm]-----------|
                                      |--->vtkVolumeProperty()------>vtkVolume()------>vtkRenderer()
vtkColorTransferFunction() [value]----|                                  ^
vtkColorTransferFunction() [gm]-------|                                  |
                                                       vtkFixedPointVolumeRayCastMapper()
                                                                         |
                                                                         |
vtkStructuredPointsReader() [value]---|-->vtkImageAppendComponents()------
vtkStructuredPointsReader() [gm]------|

The resulting visualizations seem to contain more information than using the original files alone. The surfaces in both data types appear more finely detailed, with more ripples in the vortex break down, and more definition in the skull's structure. Perhaps by combining opacities from both files, the resulting images also appear brighter and less fuzzy than the original visualizations.

What are the benefits and the issues associated with this solution?

By using data from both files, we can visualize more information in one single image, thus conveying more information than the values alone. This is evident in the zoomed-in detail below, where gradient magnitude added what appears to be dense areas of muscle surrounding the skull, and better resolution overall for the vortex breakdown.

However, combining the two data sets also make occlusion more prevalent. In both cases I had to reduce the opacity in the opacity transfer functions in order to clearly see the data below the outer surface (such as the teeth for the skull or the recirculation bubbles in the vortex breakdown). Using two data sources also slowed down the visualization speed and required more memory. To realistically visualize the data, I had to increase the sampling distance from 0.01 in the first three tasks to 0.05 (head dataset) and 0.1 (vortex breakdown). On a more powerful computer, however, one could visualize the same data at finer sampling distance.