• Burlen Loring's avatar
    Surface LIC : parallelization & fine tuning features · ad4dddfc
    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
vtkOpenGLLightMonitor.cxx 6.12 KB