TM TM OpenGL Volumizer & Large Data Visualization Chikai J. - - PowerPoint PPT Presentation

tm
SMART_READER_LITE
LIVE PREVIEW

TM TM OpenGL Volumizer & Large Data Visualization Chikai J. - - PowerPoint PPT Presentation

TM TM OpenGL Volumizer & Large Data Visualization Chikai J. Ohazama, Ph.D. AGD Applied Engineering Overview TM Topics OpenGL Volumizer Parallel Volume Rendering Volume Roaming Performance Determination OpenGL Volumizer TM


slide-1
SLIDE 1

TM

slide-2
SLIDE 2

TM

OpenGL Volumizer & Large Data Visualization Chikai J. Ohazama, Ph.D.

AGD Applied Engineering

slide-3
SLIDE 3

TM

Overview

Topics

¥OpenGL Volumizer ¥Parallel Volume Rendering ¥Volume Roaming ¥Performance Determination

slide-4
SLIDE 4

TM

OpenGL Volumizer

Topics

¥Volume Rendering ¥OpenGL Volumizer ¥Code Example ¥Applications

slide-5
SLIDE 5

TM

Volume Rendering

Volume

Image

slide-6
SLIDE 6

TM

Volume Rendering

Advantages

¥Not necessary to explicitly extract surfaces from volume when rendering ¥Can change the Look Up Table (LUT) to bring out different objects within the volume

slide-7
SLIDE 7

TM

Volume Rendering

Disadvantages

¥Do not have explicit surfaces, therefore not straightforward to do computational operations

  • n objects within the volume

¥Much more computationally intensive to render volume since not dealing with a set of discrete

  • bjects
slide-8
SLIDE 8

TM

Features

¥Tetrahedral Volume Tesselation ¥Automatic Brick Management ¥Portability across Platforms

OpenGL Volumizer

slide-9
SLIDE 9

TM

OpenGL Volumizer

Triangle 2D Texture Texture Mapped Triangle Tetrahedron 3D Texture Volume Rendered Tetrahedron + + = =

slide-10
SLIDE 10

TM

Code Example

Basic Components

¥Initialize Appearance ¥Initialize Geometry ¥Render Volume

slide-11
SLIDE 11

TM

Initialize Appearance

voAppearanceActions::getBestParameters( interpolationType, renderingMode, dataType, diskDataFormat, internalFormat, externalFormat, xBrickSize, yBrickSize, zBrickSize);

Automatically calculates brick size and formats necessary for optimal volume rendering.

slide-12
SLIDE 12

TM

Initialize Appearance

voBrickSetCollection *aVolume = new voBrickSetCollection( xVolumeSize, yVolumeSize, zVolumeSize, xBrickSize, yBrickSize, zBrickSize, partialFormat, 1, internalFormat, externalFormat, dataType, interpolationType);

Creates the bricks, but does not read data or allocate memory.

slide-13
SLIDE 13

TM

Initialize Appearance

voBrickSetCollectionIterator collectionIter(aVolume); for (voBrickSet * brickSet; brickSet = collectionIter();) { // iterate over all bricks within the brickCollection voBrickSetIterator brickSetIter(brickSet); for (voBrick * brick; brick = brickSetIter();) voAppearanceActions::dataAlloc(brick); }

Allocate memory for all copies of the volume.

slide-14
SLIDE 14

TM

Initialize Appearance

voBrickSetIterator brickSetIter(aVolume->getCurrentBrickSet()); for (voBrick * brick; brick = brickSetIter();) { int xBrickOrigin, yBrickOrigin, zBrickOrigin; int xBrickSize, yBrickSize, zBrickSize; void *vdata = brick->getDataPtr(); brick->getBrickSizes(xBrickOrigin, yBrickOrigin, zBrickOrigin, xBrickSize, yBrickSize, zBrickSize); getBrick(voldata, vdata, xBrickOrigin, yBrickOrigin, zBrickOrigin, xBrickSize, yBrickSize, zBrickSize, xVolumeSize, yVolumeSize, zVolumeSize); }

Load bricks into memory.

slide-15
SLIDE 15

TM

Initialize Geometry

static float vtxData[8][3] = { 0, 0, 0, xVolumeSize, 0, 0, xVolumeSize, yVolumeSize, 0, 0, yVolumeSize, 0, 0, 0, zVolumeSize, xVolumeSize, 0, zVolumeSize, xVolumeSize, yVolumeSize, zVolumeSize, 0, yVolumeSize, zVolumeSize, };

Define verticies.

slide-16
SLIDE 16

TM

Initialize Geometry

static int cubeIndices[20] = { 0, 2, 5, 7, 3, 2, 0, 7, 1, 2, 5, 0, 2, 7, 6, 5, 5, 4, 0, 7, };

Define Geometry.

slide-17
SLIDE 17

TM

Initialize Geometry

voIndexedTetraSet *aTetraSet = new

voIndexedTetraSet((float *) vtxData, 8, valuesPerVtx, cubeIndices, 20);

Construct the tetrahedral set.

slide-18
SLIDE 18

TM

Initialize Geometry

allVertexData = new voVertexData(100000, valuesPerVtx); aPolygonSetArray = new voIndexedFaceSet**[maxBrickCount]; for (int j1 = 0; j1 < maxBrickCount; j1++) { aPolygonSetArray[j1] = new voIndexedFaceSet*[maxSamplesNumber]; for (int j2 = 0; j2 < maxSamplesNumber; j2++) aPolygonSetArray[j1][j2] = new voIndexedFaceSet(allVertexData, boundFaceCount(tetraCount)); }

Create storage for transient polygons.

slide-19
SLIDE 19

TM

Render Volume

voGeometryActions::polygonize(

aTetraSet, aVolume->getCurrentBrickSet(), interleavedArrayFormat, modelMatrix[pset], projMatrix[pset], aVolume->getInterpolationType() == voInterpolationTypeScope::_3D ? voSamplingModeScope::VIEWPORT_ALIGNED : voSamplingModeScope::AXIS_ALIGNED, voSamplingSpaceScope::OBJECT, samplingPeriod, maxSamplesNumber, sampletemp, aPolygonSetArray[pset]);

Polygonize tetraset.

slide-20
SLIDE 20

TM

Render Volume

voSortAction aSortAction( aVolume->getCurrentBrickSet(), modelMatrix, projMatrix);

Sort Bricks.

slide-21
SLIDE 21

TM

Render Volume - Draw

for (brickNo = 0; brickNo < BrickCount; brickNo++) {

int brickSortedNo = aSortAction[brickNo]; voBrick *aBrick = aVolume->getCurrentBrickSet()->getBrick(brickSortedNo); if (!hasTextureComponent(interleavedArrayFormat)) voAppearanceActions::texgenSetEquation(aBrick); voAppearanceActions::textureBind(aBrick); for (int binNo = 0; binNo < samplesNumber ; binNo++) { voGeometryActions::draw( aPolygonSetArray[brickSortedNo][binNo], interleavedArrayFormat); } }

Render bricks.

slide-22
SLIDE 22

TM

Applications

Volume Roaming

slide-23
SLIDE 23

TM

Applications

Heterogenous Rendering (Surface and Volume Objects)

slide-24
SLIDE 24

TM

Applications

Region of Interest Volume Rendering

slide-25
SLIDE 25

TM

Applications

Multiple Volumes

slide-26
SLIDE 26

TM

Applications ¥Medical ¥Oil&Gas ¥Scientific Visualization

slide-27
SLIDE 27

TM

Parallel Volume Rendering

Topics

¥Basic Architecture ¥Scalability ¥Code Example

slide-28
SLIDE 28

TM

Basic Architecture

Types

¥Screen Decomposition ¥Data Decomposition

slide-29
SLIDE 29

TM

Screen Decomposition

PIPE 0 PIPE 3 PIPE 2 PIPE 1 Load Volume Assign Portion of Framebuffer to Pipes Render Portions in Parallel Composite Portions

slide-30
SLIDE 30

TM

Performance Scalability

Benefits

¥ Linear Increase in Texture Fill Rate ¥ Framebuffer portion transfer sizes decreases with increased number of pipes, therefore necessary read/write bandwidth is constant

slide-31
SLIDE 31

TM

Performance Scalability

Limitations

¥Larger the window size, slower the frame rate

slide-32
SLIDE 32

TM

Data Decomposition

PIPE 0 PIPE 3 PIPE 2 PIPE 1 Load Volume Assign Bricks to Pipes Render Bricks in Parallel Composite Bricks

slide-33
SLIDE 33

TM

No Latency Frame Composition

Rendering Setup:

¥Pre-Multiplication of Luminance by Alpha (achieved through TLUT) ¥Blending Function changed to:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

slide-34
SLIDE 34

TM

Performance Scalability

Benefits

¥Linear Increase in Texture Fill Rate ¥Linear Increase in Texture Memory ¥Linear Increase in Texture Load Rate

slide-35
SLIDE 35

TM

Performance Scalability

Limitations

¥ Read/Write Pixel Rate has significant effect on frame rate ¥ Larger the window size, slower the frame rate

slide-36
SLIDE 36

TM

Composition - Linear

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 R R R R R R R R R R R R R R R R W W W W W W W W W W W W W W W W 16 steps

slide-37
SLIDE 37

TM

Composition - Subdivision

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 R W R R R R R R R R R R R R R R R R W R W R W R W R W R W R W R W R W R W R W R W R W R W W 8 steps

slide-38
SLIDE 38

TM

Sample Code

¥Available on OpenGL Volumizer 1.1 release /usr/share/Volumizer/src/apps/Multipipe

slide-39
SLIDE 39

TM

Sample Code Example

mvInitMonster(numPipes, pipeList, winX, winY); mvLoadVolume(volume, x, y, z, MV_TRUNCATE); mvStartMonster(); mvRenderVolume(); mvClippingPlaneOff(); mvClippingPlaneOn(); mvSetLut(table);

slide-40
SLIDE 40

TM

Volume Roaming

Topics

¥Page based Volume Roaming ¥SubLoad based Volume Roaming

Note: All explanations will be done in 2D, but the implementation is done in 3D.

slide-41
SLIDE 41

TM

Volume Roaming - Page Based

Page based Volume Roaming

Move Region

  • f Interest

Region of Interest (dotted outline) Active Page Blocks (in green) Page Blocks that need to be paged in (in hash blue) Page Blocks that are no longer necessary (in hash red)

slide-42
SLIDE 42

TM

Volume Roaming - Page Based

Pros

¥Smooth traversal through volume. ¥No directional bias when traversing through the volume.

slide-43
SLIDE 43

TM

Volume Roaming - Page Based

Cons

¥Visible volume is only a fraction of volume loaded in texture memory. ¥Diagonal movements faults a significant portion of the cached volume. ¥Data must be reformatted into ÒbricksÓ. ¥Small bricks must be used to keep bandwidth requirements low.

slide-44
SLIDE 44

TM

Volume Roaming - Page Based

Cons (cont.)

¥Small bricks requires more tetrahedra, therefore increases polygonization time when using OpenGL Volumizer. ¥Small bricks decrease download bandwidth on Onyx2 Infinite Reality.

slide-45
SLIDE 45

TM

repeated texture t 1.0 2.0

Volume Roaming - SubLoad Based

SubLoad based Volume Roaming

Loaded Texture

repeated texture Rendered Portion

  • f Texture

s t 1.0 2.0 1.0 2.0

Loaded Texture

Rendered Portion

  • f Texture

s 1.0 2.0 Move Region

  • f Interest

SubLoaded Portion

  • f Texture

(in hashed blue)

slide-46
SLIDE 46

TM

Volume Roaming - SubLoad Based

Pros

¥Smooth traversal through volume. ¥Entire volume in texture memory is visible. ¥Only new part of the volume is uploaded into texture memory. ¥No reformatting of volume necessary (but maybe beneficial for disk-based volume roaming). ¥Minimal number of tetrahedras needed when using OpenGL Volumizer.

slide-47
SLIDE 47

TM

Volume Roaming - SubLoad Based

Pros (cont.)

¥Minimal number of tetrahedras needed when using OpenGL Volumizer.

slide-48
SLIDE 48

TM

Volume Roaming - SubLoad Based

Cons

¥Directional bias when traversing through volume. ¥Small subloads decrease download bandwidth on Onyx2 Infinite Reality (but on the otherhand, less bandwidth is needed for smooth traversal).

slide-49
SLIDE 49

TM

Performance Determination

Topics

¥Performance Criteria ¥Example: Volume fitting in Texture Memory ¥Example: Volume larger than Texture Memory ¥Example: Monster Mode Volume Rendering ¥Key Features

slide-50
SLIDE 50

TM

Performance Determination

Performance Criteria

¥Texture Fill-Rate ¥Texture Download Rate ¥Texture Memory Size

slide-51
SLIDE 51

TM

Performance Determination - Example

Volume fitting in Texture Memory

¥Limiting factor is Texture Fill-Rate Frame Rate = Fill-Rate Volume Size x Scale2

slide-52
SLIDE 52

TM

Performance Determination - Example

Volume fitting in Texture Memory

¥Onyx2 Infinite Reality - 1 pipe (4 RMs) ¥64 MV volume (512x512x256) ¥Scale = 1.0 Frame Rate = 450 Mpixels/s 64 Mvoxels x 1.02 = 7 fps

slide-53
SLIDE 53

TM

Performance Determination - Example

Volume larger than Texture Memory

¥Limiting factor is Texture Download Rate Frame Rate = Texture Download Rate Volume Size x Scale2

slide-54
SLIDE 54

TM

Performance Determination - Example

Volume larger than Texture Memory

¥Onyx2 Infinite Reality - 1 pipe (4 RMs) ¥128 MV volume (512x512x512) ¥Scale = 1.0 Frame Rate = 240 MB/s 128 MV x 1.02 = 2 fps

slide-55
SLIDE 55

TM

Performance Determination - Example

Monster Mode Volume Rendering

¥Screen Decomposition ¥Scales Fill-Rate ¥Texture Memory does not scale. Frame Rate = Fill-Rates x No. of Pipes Volume Size x Scale2

slide-56
SLIDE 56

TM

Performance Determination - Example

Monster Mode Volume Rendering

¥Data Decomposition ¥Scales Fill-Rate ¥Scales Texture Memory. Frame Rate = Fill-Rates x No. of Pipes Volume Size x Scale2 Texture Memory = No. of Pipes x Texture Memory Size

slide-57
SLIDE 57

TM

Performance Determination - Example

Monster Mode Volume Rendering

¥Onyx2 Infinite Reality - 16 Pipes (4 RMs) ¥1 GV volume ¥Data Decomposition Frame Rate = 450 x 16 1 GV x 1.02 Texture Memory = 16 x 64 MB = 1024 MB = 1 GB = 7 fps

slide-58
SLIDE 58

TM

Performance Determination

Key Features

¥3D Texture Mapping ¥Texture Look Up Table (TLUT)

slide-59
SLIDE 59