Download presentation
Published byRoland Wiggins Modified over 8 years ago
0
Acceleration Techniques for GPU-based Volume Rendering
1
Motivation Properties of real data sets Surface like structures
Surface illumination Images courtesy of Joe Kniss and volren.org Occlusions
2
Hardware accelerated rendering of totally invisible structures
Motivation Texture based volume rendering today: Hardware accelerated rendering of totally invisible structures only 2% of all fragments visible
3
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
4
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
5
Our Toolkit Stream Architecture Rasterizer User Textures …
Geometry Rasterizer Fragments User Textures … Early Z-Test … Fragment Shader … Render Texture
6
Raycaster Slicing (SBVR) vs. GPU-Raycaster (RC)
SBVR render proxy geometry (slices) RC render proxy geometry (faces)
7
Raycasting Using only one main pass for Raymarching
8
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)
9
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)
10
Ray Direction render into second texture
back faces of the bounding box subtract from entry-point texture to get ray direction (1,1,1) (0,1,0) (0,0,1) (1,0,1) (1,0,0) subtract (0,1,0) (0,0,0) (0,0,1) (1,0,0) (1,0,1)
11
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)
12
Raycasting Using multiple Raymarching passes
13
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;
14
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;
15
Raycasting Acceleration techniques Raycasting Early Ray Termination
Empty Space Skipping
16
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
17
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
18
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
19
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
20
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 < ) && (fEmpty<1)) ? 0 : 100; OUT.col = fLastVal; return OUT;
21
DEMOS Run on Intel Pentium IV 2.4GHz ATI Radeon 9800 Pro.
Microsoft Windows XP DirectX 9 Pixel/Vertex Shader 2.0
22
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 compute illumination with 3D gradient texture and write it to the final image
23
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
24
The End Thank you! Questions?
Download Slides at:
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.