Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D...

78
Volume Rendering using Graphics Hardware GPU Programming and Architecture

Transcript of Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D...

Page 1: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Renderingusing Graphics Hardware

GPU Programming and Architecture

Page 2: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

AgendaVolume Rendering Background

Volumetric DataOptical ModelAccumulation Equations

Volume Rendering on the CPURaymarching Algorithm

Volume Rendering on Graphics HardwareSlice-Based Volume RenderingStream Model for Volume Raycasting

Volume Rendering in CUDA

Page 3: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Thanks to…Jerry TessendorfTravis Gorkin

Page 4: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume RenderingOverview

Page 5: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Rendering DefinitionGenerate 2D projection of 3D data setVisualization of medical and scientific dataRendering natural effects - fluids, smoke, fireDirect Volume Rendering (DVR)

Done without extracting any surface geometry

Page 6: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volumetric Data3D Data Set

Discretely sampled on regular grid in 3D space3D array of samples

Voxel – volume elementOne or more constant data valuesScalars – density, temperature, opacityVectors – color, normal, gradientSpatial coordinates determined by position in data structure

Trilinear interpolationLeverage graphics hardware

Page 7: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 8: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 9: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 10: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 11: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 12: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 13: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 14: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 15: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 16: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 17: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 18: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 19: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 20: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 21: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 22: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 23: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 24: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 25: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel
Page 26: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Transfer FunctionMaps voxel data values to optical properties

Glorified color mapsEmphasize or classify features of interest in the dataPiecewise linear functions, Look-up tables, 1D, 2DGPU – simple shader functions, texture lookup tables

Page 27: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Rendering Optical ModelLight interacts with volume ‘particles’ through:

AbsorptionEmissionScattering

Sample volume along viewing raysAccumulate optical properties

Page 28: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Ray Marching1. Raycast – once per pixel2. Sample – uniform intervals along ray3. Interpolate – trilinear interpolate, apply transfer function4. Accumulate – integrate optical properties

Page 29: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Ray Marching Accumulation EquationsAccumulation = IntegralColor

dsTCC ii∫∞

=0

Total Color = Accumulation (Sampled Colors x Sampled Transmissivities)

AT −=1Transmissivity = 1 - Opacity

Page 30: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Ray Marching Accumulation EquationsDiscrete VersionsAccumulation = SumColor

Opacity

i

n

iiTCC ∑

=

=1

AT −=1Transmissivity = 1 - Opacity

)1(11∏=

−−=n

jjAA

)1(1

11∏∑−

==

−=i

jj

n

ii ACC

Page 31: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

CPU Based Volume RenderingRaycast and raymarch for each pixel in scene

Camera (eye) location:For Each Pixel

Look Direction:Cast Ray Along:Accumulate Color Along Line

Cx

n̂snxC ˆ+

Page 32: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

CPU Based Volume RenderingSequential ProcessMinutes or Hours per frameOptimizations

Space PartitioningEarly Ray Termination

Page 33: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volumetric ShadowsLight attenuated as passes through volume‘Deeper’ samples receive less illuminationSecond raymarch from sample point to light source

Accumulate illumination from sample’s point of viewSame accumulation equations

Precomputed Light TransmissivityPrecalculate illumination for each voxel centerTrilinearly interpolate at render timeView independent, scene/light source dependent

Page 34: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

GPU Based Volume RenderingGPU Gems Volume 1: Chapter 39

“Volume Rendering Techniques”Milan Ikits, Joe Kniss, Aaron Lefohn, Charles Hansen

IEEE Visualization 2003 Tutorial“Interactive Visualization of Volumetric Data on Consumer PC Hardware”

“Acceleration Techniques for GPU-Based Volume Rendering”

J. Krugger and R. Westermann, IEEE Visualization 2003

Page 35: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Rendering“Volume Rendering Techniques”

Page 36: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Slice-Based Volume Rendering (SBVR)No volumetric primitive in graphics APIProxy geometry - polygon primitives as slices through volumeTexture polygons with volumetric dataDraw slices in sorted order – back-to-frontUse fragment shader to perform compositing (blending)

Page 37: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volumetric DataVoxel data sent to GPU memory as

Stack of 2D textures3D texture

Leverage graphics pipeline

Instructions for setting up 3D texture in OpenGLhttp://gpwiki.org/index.php/OpenGL_3D_Textures

Page 38: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Proxy GeometrySlices through 3D voxel data3D voxel data = 3D texture on GPUAssign texture coordinate to every slice vertex

CPU or vertex shader

Page 39: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Proxy GeometryObject-Aligned Slices

Fast and simpleThree stacks of 2D textures – x, y, z principle directions

Texture stack swapped based on closest to viewpoint

Page 40: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Proxy GeometryIssues with Object-Aligned Slices

3x memory consumption Data replicated along 3 principle directions

Change in viewpoint results in stack swapImage popping artifactsLag while downloading new textures

Sampling distance changes with viewpointIntensity variations as camera moves

Page 41: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Proxy GeometryView-Aligned Slices

Slower, but more memory efficientConsistent sampling distance

Page 42: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Proxy GeometryView-Aligned Slices Algorithm

Intersect slicing planes with bounding boxSort resulting vertices in (counter)clockwise orderConstruct polygon primitive from centroid as triangle fan

Page 43: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Proxy GeometrySpherical Shells

Best replicates volume ray castingImpractical – complex proxy geometry

Page 44: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Sliced-Based Volume Rendering Steps

Page 45: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Rendering Proxy GeometryCompositing

Over operator – back-to-front order

Under operator – front-to-back order

1ˆ)1(ˆ+−+= iiii CACC

1ˆ)1(ˆ+−+= iiii AAAA

11ˆ)ˆ1(ˆ−− +−= iiii CCAC

11ˆ)ˆ1(ˆ−− +−= iiii AAAA

Page 46: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Rendering Proxy GeometryCompositing = Color and Alpha Accumulation EquationsEasily implemented using hardware alpha blending

OverSource = 1Destination = 1 - Source Alpha

UnderSource = 1 - Destination AlphaDestination = 1

Page 47: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Simple Volume Rendering Fragment Shadervoid main( uniform float3 emissiveColor,

uniform sampler3D dataTex, 

float3 texCoord : TEXCOORD0, 

float4 color : COLOR) 

float a = tex3D(texCoord, dataTex); // Read 3D data texture color = a * emissiveColor; // Multiply by opac

}

Page 48: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Fragment Shader with Transfer Functionvoid main( uniform sampler3D dataTex, 

uniform sampler1D tfTex, 

float3 texCoord : TEXCOORD0, 

float4 color : COLOR

float v = tex3d(texCoord, dataTex); // Read 3D data color = tex1d(v, tfTex); // transfer function

}

Page 49: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Local IlluminationBlinn-Phong Shading Model

NsLdLa nhkInlkIkI )ˆˆ()ˆˆ( ⋅+⋅+=

Resulting = Ambient + Diffuse + Specular

Page 50: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Local IlluminationBlinn-Phong Shading Model

Requires surface normal vectorWhats the normal vector of a voxel?

NsLdLa nhkInlkIkI )ˆˆ()ˆˆ( ⋅+⋅+=

Resulting = Ambient + Diffuse + Specular

Page 51: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Local IlluminationBlinn-Phong Shading Model

Requires surface normal vectorWhats the normal vector of a voxel? GradientCentral differences between neighboring voxels

NsLdLa nhkInlkIkI )ˆˆ()ˆˆ( ⋅+⋅+=

Resulting = Ambient + Diffuse + Specular

xbackfront

xbottomtop

xleftrightIIgrad

2)(,

2)(,

2)()( −−−

=∇=

Page 52: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Local IlluminationCompute on-the-fly within fragment shader

Requires 6 texture fetches per calculation

Precalculate on host and store in voxel dataRequires 4x texture memoryPack into 3D RGBA texture to send to GPU

Page 53: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Local IlluminationImprove perception of depthAmplify surface structure

Page 54: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volumetric Shadows on GPULight attenuated from light’s point of viewCPU – Precomputed Light Transfer

Secondary raymarch from sample to light source

GPUTwo-pass algorithmModify proxy geometry slicingRender from both the eye and the light’s POV

Two different frame buffers

Page 55: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Two Pass Volume Rendering with ShadowsSlice axis set half-way between view and light directions

Allows each slice to be rendered from eye and light POV

Render order for light – front-to-backRender order for eye – (a) front-to-back

(b) back-to-front

Page 56: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

First Pass Render from eyeFragment shader

Look up light color from light buffer bound as textureMultiply material color * light color

Page 57: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Second passRender from lightFragment shader

Only blend alpha values – light transmissivity

Page 58: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volumetric Shadows

Page 59: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Scattering and TranslucencyGeneral scattering effects too complex for interactive renderingTranslucency result of scattering

Only need to consider incoming light from cone in direction of light source

Page 60: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Scattering and TranslucencyBlurring operation

Page 61: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Performance and LimitationsHuge amount of fragment/pixel operations

Texture accessLighting calculationBlending

Large memory usageProxy geometry3D textures

Page 62: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Rendering“Acceleration Techniques for GPU-Based

Volume Rendering”Krugger and Westermann, 2003

Page 63: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Raycasting on GPUStream model taken from work in GPU RaytracingRaymarching implemented in fragment program

Cast rays of sight through volumeAccumulate color and opacityTerminate when opacity reaches threshold

Page 64: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Raycasting on GPUMulti-pass algorithmInitial passes

Precompute ray directions and lengths

Additional passesPerform raymarching in parallel for each pixelSplit up full raymarch to check for early termination

Page 65: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Step 1: Ray Direction ComputationRay direction computed for each pixel

Stored in 2D texture for use in later steps

Pass 1: Front faces of volume bounding box

Pass 2: Back faces of volume bounding box

Vertex color components encode object-space principle directions

Page 66: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Step 1: Ray Direction ComputationSubtraction blend two texturesStore normalized direction – RGB componentsStore length – Alpha component

Page 67: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Fragment Shader RaymarchingDIR[x][y] – ray direction texture

2D RGBA values

P – per-vertex float3 positions, front of volume bounding boxInterpolated for fragment shader by graphics pipeline

s – constant step sizeFloat value

d – total raymarched distance, s x #stepsFloat value

Page 68: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Fragment Shader RaymarchingDIR[x][y] – ray direction texture

2D RGBA values

P – per-vertex float3 positions, front of volume bounding boxInterpolated for fragment shader by graphics pipeline

s – constant step sizeFloat value

d – total raymarched distance, s x #stepsFloat value

Parametric Ray Equation

r – 3D texture coordinates used to sample voxel data

]][[ yxDIRdPr ⋅+=

Page 69: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Fragment Shader RaymarchingRay traversal procedure split into multiple passes

M steps along ray for each passAllows for early ray termination, optimization

Optical properties accumulated along M stepsSimple compositing/blending operationsColor and alpha(opacity)

Accumulation result for M steps blended into 2D result texture

Stores overall accumlated values between multiple passes

Intermediate Pass – checks for early terminationCompare opacity to thresholdCheck for ray leaving bounding volume

Page 70: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

OptimizationsEarly Ray Termination

Compare accumulated opacity against threshold

Empty Space SkippingAdditional data structure encoding empty space in volumeOct-treeEncode measure of empty within 3D texture read from fragment shaderRaymarching fragment shader can modulate sampling distance based on empty space value

Page 71: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Performance and LimitationsMore physically-based than slice-based volume rendering

Guarantees equal sampling distances

Does not incorporate volumetric shadowsReduced number of fragment operations

Fragment programs made more complex

Optimizations work best for non-opaque data sets

Early ray termination and empty space skipping can be applied

Page 72: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume RenderingCUDA Example

Page 73: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Rendering in CUDANVIDIA CUDA SDK Code SamplesExample: Basic Volume Rendering using 3D Textureshttp://developer.download.nvidia.com/compute/cuda/sdk/website/samples.html#volumeRender

http://www.youtube.com/watch?v=n3h4dhpW20k

Page 74: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Rendering in CUDA3D Slicer – www.slicer.org

Open source software for visualization and image analysis

Funded by NIH, medical imaging, MRI data

Currently integrating CUDA volume rendering into Slicer 3.2

Page 75: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Volume Rendering in CUDA“Volume Raycasting with CUDA”

Jusub Kim, Ph.D. Dissertation, Univeristy of Maryland, College Park, 2008http://creator75.googlepages.com/cuda

Stream model for raycastingimplemented in CUDAEfficiently balance warps of threads and block sizes

Single instruction execution within warp of threadsAvoid memory conflicts with warps of threads

Page 76: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

Slicer

Page 77: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

References“Chapter 39. Volume Rendering Techniques”, GPU Gems Volume 1, Ikits, Kniss, Lefohn, Hansen, 2003http://http.developer.nvidia.com/GPUGems/gpugems_ch39.html

“Interactive Visualization of Volumetric Data on Consumer PC Hardware” IEEE Visualization 2003 Tutorial

http://www.vis.uni-stuttgart.de/vis03_tutorial/

“Acceleration Techniques for GPU-Based Volume Rendering” J. Krugger and R. Westermann, IEEE Visualization 2003http://wwwcg.in.tum.de/Research/data/Publications/vis03-rc.pdf

3D Slicer: Volume Rendering with CUDAhttp://www.slicer.org/slicerWiki/index.php/Slicer3:Volume_Rendering_Wit

h_Cuda

Page 78: Volume Rendering using Graphics Hardwarecis565/LECTURE2010/VolumeRenderi… · Volumetric Data `3D Data Set `Discretely sampled on regular grid in 3D space `3D array of samples `Voxel

References“Volume Raycasting with Cuda”, Jusub Kim, 2008http://creator75.googlepages.com/projectshttp://creator75.googlepages.com/cudachapter.pdf

“Production Volume Rendering”, Jerry Tessendorf, Slides presented at University of Pennsylvania, 2008“Real-Time Volume Graphics”, SIGGRAPH 2004http://old.vrvis.at/via/resources/course-volgraphics-2004/