Title: Acceleration Techniques for GPUbased Volume Rendering
1Acceleration Techniques for GPU-based Volume
Rendering
2Motivation
- Properties of real data sets
Surface like structures
Surface illumination
Images courtesy of Joe Kniss and volren.org
Occlusions
3Motivation
- Texture based volume rendering today
Hardware accelerated renderingof totally
invisible structures
4Our Contribution
- We use new GPU Features to
- Discard invisible fragments
- early ray termination
- empty space skipping
- Implement a high quality GPU Raycaster
- Accelerate the Raycaster
5Our Toolkit
- Programmable graphics hardware
- Arbitrarily programmable shaders
- Assembly language
- High level languages
- 32 Bit-Floating-point processing
- Input fp32 textures
- Arithmetic fp24-fp32
- Output fp32 render targets
- Early Z-Test
- Multiple dependent texture fetches
6Our Toolkit
Geometry
Rasterizer
Fragments
User Textures
Early Z-Test
Fragment Shader
Render Texture
7Raycaster
- Slicing (SBVR) vs. GPU-Raycaster (RC)
- SBVR ? render proxy geometry (slices)
- RC ? render proxy geometry (faces)
8Raycasting
- Using only one main pass for Raymarching
9Basic Idea
- Multi-pass approach
- Generate entry point
- first hit in local texture coordinates
- Compute ray direction
- ray direction in local texture coordinates
- Ray Marcher (simplified)
- Main pass (Ray traversal)
- Intermediate pass (Stopping criterion)
10Entry Point
- Render into 2D texture
- Front faces of the volume bounding box
- Texture coordinates as color components
(0,1,0)
(1,1,1)
(0,0,1)
(1,0,0)
(1,0,1)
11Ray Direction
- render into second texture
- back faces of the bounding box
- subtract from entry-point texture to get ray
direction
(0,1,0)
(0,0,0)
(0,0,1)
(1,0,0)
(1,0,1)
12Basic Idea
- Multi-pass approach
- Generate entry point
- first hit in local texture coordinates
- Compute ray direction
- ray direction in local texture coordinates
- Ray Marcher
- Main passes (Ray traversal)
- Intermediate pass (Stopping criterion)
13Raycasting
- Using multiple Raymarching passes
14Ray Marcher (Main passes)
- We know Entry point and ray direction
- Render front-faces
- set Color like before C
- set Texture coords to NDC (x,y)
- activate direction texture DIR
- a global counter t
- compute ray as r(t)CtDIR(x,y)
float3 fDirection tex2D(sDirection,
v.TexCoords.rg).rgb float3 fFrontVal
v.Color.rgb float3 fVolCoord
fFrontValfDepthfDirection
15Ray Marcher (Main passes)
- Integration along the ray
- use r(t) to access the volume
- integrate over multiple steps (N)
- combine with frame buffer contents
.. for (int i0iltNi) fResultVal
under(tex3D(sVolume, fVolCoord),fResultVal) fVol
Coord fStepSizefDirection return
fResultVal
16Raycasting
Raycasting
Early Ray Termination
Empty Space Skipping
17Acceleration Techniques
- Terminate Rays on one of the following
conditions - it has left the volume
- it has reached a certain opacity
- Suspend a ray if
- its traversing an empty region
- this needs to be done on a per-fragment basis
- ? early Z-Test
18Acceleration techniques
- Early-Z Restrictions
- on current GPUs early Z-Test only works if
- no clip or texkill operation is executed
- the Z-value is not changed in the shader
- the raymarching shader can not terminate himself
- Solution use intermediate pass to do the
ray-suspending/terminating
19Acceleration techniques
- Execute intermediate pass after every main
pass( N volume samples) - Access z-value only in this pass
- If ray is terminated or suspended set z-value
before main-pass-geometry - Reset depth behind it if ray is to be resumed
20Ray Marcher (intermediate pass)
- for early ray termination check accumulated
alpha - for empty space skipping check skip-volume
- Skip volume
- volume sampled down to 1/8 in every dimension
- every sample contains the minimum and maximum of
the 512 corresponding entries - Check Texture
- 2D lookup texture
- lookup(x,y)1 iff all values between x and y are
0 under the current transfer function
21Ray Marcher (intermediate pass)
- for early ray termination check accumulated
alpha - for empty space skipping check skip-volume
float4 fLastVal tex2D(sLastFrame,
v.TexCoords.rg) float3 fDirection
tex2D(sDirection, v.TexCoords.rg).rgb float3
fFrontVal v.Color.rgb float3 fVolCoord
fFrontValfDepthfDirection float2 fMaxMin
tex3D(sEmptySpace, fVolCoord).rg float
fEmpty tex2D(sEmptyLookUp, fMaxMin) OUT.depth
((fLastVal.a lt 0.9999) (fEmptylt1)) ? 0
100 OUT.col fLastVal return OUT
22DEMOS
- Run on
- Intel Pentium IV 2.4GHz
- ATI Radeon 9800 Pro.
- Microsoft Windows XP
- DirectX 9
- Pixel/Vertex Shader 2.0
23Iso-Surface Raycasting
- first 2 passes and intermediate passes remain
unchanged - global traversal order still front to back
- order within the main shader is back to front
- keep only last isovalue
- if isovalue was found computeillumination with
3D gradienttexture and write it to thefinal
image
24Conclusion
- Using current GPU features we showed how to
- Discard invisible fragments
- early ray termination
- empty space skipping
- Implement a high quality GPU Raycaster
- Accelerate that Raycaster
25The End
- Thank you!
- Questions?
- Download Slides at http//wwwcg.in.tum.de/Researc
h/Publications/Raycast/