-
Burlen Loring authored
* Parallelization: Support for Multiblock datasets and MPI parallel usage. Three compositing strategies are provided, with a heuristic to automatically make a reasonable selection between them. [1] INPLACE, [2] INPLACE_DISJOINT, [3] BALANCED. The inplace strategy processes data where it falls given its parallel domain decomposition and projection to the screen. For simple surfaces such as slices where ranks/blocks data does not overlap in screen space this is the most efficient approach. However where ranks/blocks data have large amount of screen space overlap, this approach has high communication/compositing and overhead and a large amount of redundant computation that's discarded. The inplace-disjoint strategy was designed to address these issues. It leaves data inplace as much as possible but will assign pixels to ranks uniquely eliminating redundant computation. The communication costs are the same as the inplace strategy however they are split into two temporally disjoint parts with computation in between which tends to reduce congestion and contention. The balanced strategy divides the screen into equally sized disjoint regions and assigns each rank a region. This strategy can suffer from load balancing issues, and because no account is made of the initial data distribution it may have higher communication/compositing costs than the others. The parallel implementations have been tested with IceT in ParaView. The compositors uses non-blocking mpi communications, MPI subarrays for describing non-contoguous memory extents, and communicates efficiently by pasing mpi gpu mapped memory via extensions made to vtkPixelBufferObject. An object factory is used to override the serial objects with their parallel counterparts when the parallel module is linked. * Contrast and Color Contrast Enhancement: The new contrast enhancement feature increases both dynamic range contrast while preserving patterns in the LIC. Contrast enhancment is implemented using histogram stretching. The color contrast enhancement is made in HSL space on the L channel to minimize color distortions. During the "enhanced" LIC mode contrast enhancement is also applied after the first pass of LIC compution. This helps strengthen streaking patterns. * Enhanced scalar color shading: A new mode has been added to the shader that shades surface geometry combining both LIC and scalar colors. The new shader produces bright colors without diminishing the visibility of the LIC by multiplying colored lit surface with computed LIC texture. The original blending implementation is left in place as it works well in many situations. * Noise texture customization: A new noise texture generator has been added to improve control over "streaking" in the convolved texture. The noise textures produced are fully customizable over 9 degrees of freedom. [1] Noise distribution (Gaussian, Uniform, Perlin); [2] Noise texture size [3] Noise grain size [4,5] Min/max noise values [6] Number of noise levels; [7] Impulse noise probability; [8] Impulse noise background color; [9] Noise generator seed * Fragment masking controls: The new fragment masking provides controls over the color and intensity of masked fragments and their blending with scalars. Fragments are masked by threshold |V|<t, where t is a user specified threshold value, and V are mask vectors. Masking vectors can be optionally projected onto the surface or passed through un-modified so that threshold is provided in the original vector units and matches scalar color shading. * Vector Normalization Control: The new vector normalization control lets the user turn on and off normalization in the integrator. Disabling normalization can help highlight relative strengths in strongly varying regions of a flow field by making the amount of smoothing that occurs during convolution proportional to the flow strength. * Antialiasing: An optional anti-aliasing stage was added. In some cases the CE and EE stages produce streaks with sharp jagged transitions from black to white. The AA stage can be used to soften the result and smooth sharp transitions. * Optimizations: The implementation has been split into 8 major steps with the result of each stage cached in a texture.[1] Vector projection and lighting calculation; [2] Gather; [3] Compositingand guard pixel generation; [4] LIC Computation; [5] Scatter; [6] Scalar coloring; [7] Color contrast enhance; [8] Depth test. During user interaction stages that do not have modfied paramters or input data can be skiped using the cahced result instead. This can save large amount of time for expensive operations such as projecting vectors, computing the LIC etc. Classes were added to simplify monitoring of various system paramters that would trigger an update, such as changes to lights, modelview or projection matrices, background color, etc. A new framebuffer object has been introduced, designed specifically for efficient buffer ping-pong, as well as efficiency improvements for setting shader unfiorms on inner parts of buffer ping-pong loops. * Porting and Testing: The code has been ported to Apple + ATI systems, and to OS Mesa with the gallium llvmpipe state tracker. A number of ctests have been introduced to excersize the new features. Parallel features have testing coverage in ParaView. Change-Id: I26f90a4e1e4e204289d38993d1e32fe5493b7a0d
ad4dddfc