acceleration techniques for gpu based volume rendering n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Acceleration Techniques for GPU-based Volume Rendering PowerPoint Presentation
Download Presentation
Acceleration Techniques for GPU-based Volume Rendering

Loading in 2 Seconds...

play fullscreen
1 / 25

Acceleration Techniques for GPU-based Volume Rendering - PowerPoint PPT Presentation


  • 131 Views
  • Uploaded on

Acceleration Techniques for GPU-based Volume Rendering. Motivation. Properties of real data sets. Surface like structures. Surface illumination. Images courtesy of Joe Kniss and volren.org. Occlusions. only 2% of all fragments visible. Motivation. Texture based volume rendering today:.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Acceleration Techniques for GPU-based Volume Rendering' - mohawk


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
motivation
Motivation

Properties of real data sets

Surface like structures

Surface illumination

Images courtesy of Joe Kniss and volren.org

Occlusions

motivation1

only 2% of all fragments visible

Motivation

Texture based volume rendering today:

Hardware accelerated renderingof totally invisible structures

our contribution
Our 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
our toolkit
Our 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
our toolkit1
Our Toolkit

Stream Architecture

Geometry

Rasterizer

Fragments

User Textures

Early Z-Test

Fragment Shader

Render Texture

raycaster
Raycaster

Slicing (SBVR) vs. GPU-Raycaster (RC)

SBVR  render proxy geometry (slices)

RC  render proxy geometry (faces)

raycasting
Raycasting

Using only one main pass for Raymarching

basic idea
Basic 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)
entry point
Entry 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)

ray direction

(0,1,0)

(1,1,1)

subtract

(0,0,1)

(1,0,0)

(1,0,1)

Ray 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)

basic idea1
Basic 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)
raycasting1
Raycasting

Using multiple Raymarching passes

ray marcher main passes
Ray 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)=C+t*DIR(x,y)

float3 fDirection = tex2D(sDirection, v.TexCoords.rg).rgb;

float3 fFrontVal = v.Color.rgb;

float3 fVolCoord = fFrontVal+fDepth*fDirection;

ray marcher main passes1
Ray 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 i=0;i<N;i++) {

fResultVal = under(tex3D(sVolume, fVolCoord),fResultVal);

fVolCoord += fStepSize*fDirection;

}

return fResultVal;

raycasting2
Raycasting

Acceleration techniques

Raycasting

Early Ray Termination

Empty Space Skipping

acceleration techniques
Acceleration Techniques

Terminate Rays on one of the following conditions:

  • it has left the volume
  • it has reached a certain opacity

Suspend a ray if:

  • it‘s traversing an empty region

this needs to be done on a per-fragment basis

 early Z-Test

acceleration techniques1
Acceleration 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
acceleration techniques2
Acceleration 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
ray marcher intermediate pass
Ray 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
ray marcher intermediate pass1
Ray 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 = fFrontVal+fDepth*fDirection;

float2 fMaxMin = tex3D(sEmptySpace, fVolCoord).rg;

float fEmpty = tex2D(sEmptyLookUp, fMaxMin);

OUT.depth = ((fLastVal.a < 0.9999) && (fEmpty<1)) ? 0 : 100;

OUT.col = fLastVal;

return OUT;

demos
DEMOS

Run on

  • Intel Pentium IV 2.4GHz
  • ATI Radeon 9800 Pro.
  • Microsoft Windows XP
  • DirectX 9
  • Pixel/Vertex Shader 2.0
iso surface raycasting
Iso-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
conclusion
Conclusion

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
the end
The End

Thank you!

Questions?

Download Slides at: http://wwwcg.in.tum.de/Research/Publications/Raycast/