Interactive Rendering of Meso-structure Surface Details using Semi-transparent 3D Textures Vision, Modeling, Visualization Erlangen, Germany November 16-18, 2005 Jean-François Dufort, Luc Leblanc, Pierre Poulin LIGUM, Université.
Download
Report
Transcript Interactive Rendering of Meso-structure Surface Details using Semi-transparent 3D Textures Vision, Modeling, Visualization Erlangen, Germany November 16-18, 2005 Jean-François Dufort, Luc Leblanc, Pierre Poulin LIGUM, Université.
Interactive Rendering of Meso-structure Surface
Details using Semi-transparent 3D Textures
Vision, Modeling, Visualization
Erlangen, Germany
November 16-18, 2005
Jean-François Dufort, Luc Leblanc, Pierre Poulin
LIGUM, Université de Montréal
Goals and Motivation
Hardware rendering semi-transparent details
Flexible
Arbitrary mesh and 3D texture
Mesh animation
Texture animation
Semi-transparency neglected in most applications
Important rendering features
Color blending because of semi-transparency
Filtering
Displaced silhouettes
Motivation
Motivation
Previous Work :
Bump and Parallax mapping
[Welsh 2004]
Previous Work :
Displacement Mapping
[Wang et al. 2003]
Adaptive tesselation [Moule and McCool 2002]
View-dependent displacement map [Wang et al. 2003]
Ray-tracing in height field [Hirche et al. 2003]
Previous Work :
3D Textures
Using proxy geometry
[Meyer and Neyret 1998]
[Lensch et al. 2002]
Generalized displacement maps
[Wang et al. 2004]
Shells maps
[Porumbescu et al. 2005]
[Wang et al. 2004]
Previous Work :
Volume Rendering
Data inside a grid
Regular
Tetrahedra [Kraus et al. 2004]
Ray marching
Plan
Algorithm overview
Mesh processing
Tetrahedra sorting
Vertex shader: Ray construction
Fragment shader: Opacity/color integration
Results
Conclusion and future work
Algorithm Overview
CPU
Mesh extrusion
• Computed once
• Extrude a shell from the surface triangular mesh
• Divide each shell prism into three tetrahedra
Algorithm Overview
CPU
Mesh extrusion
Tetrahedra sorting
• Alpha blending involves sorting
• Sorting tetrahedra with the SXMPVO algorithm
Algorithm Overview
CPU
Mesh extrusion
Tetrahedra sorting
Ray creation
• Vertex shader
GPU
• Defines an object-space ray within each tetrahedron
Algorithm Overview
CPU
Mesh extrusion
• Per pixel, maps object ray in
Tetrahedra sorting
Ray creation
texture space
GPU • 3D texture sampling by ray marching
• Accumulate color in frame buffer
Color integration
Rendering
loop
Mesh Processing
We map tetrahedra on base mesh
Defines a tetrahedral shell in which the 3D
texture is mapped
Mesh Processing
Mesh Processing
Mesh Processing
Affine transformation from object space to
texture space
Ptex = Mobj->tex Pobj
Tetrahedra Sorting
Alpha blending requires sorting
SXMPVO: graph of « behind » relations
[Cook et al. 2004]
B
E
C
F
D
A
G
Tetrahedra Sorting
Adjacent faces : object space
B
E
C
F
D
A
G
Tetrahedra Sorting
Non-adjacent faces using A-buffer : screen
space
B
E
C
F
D
A
G
Tetrahedra Sorting
Non-adjacent faces using A-buffer : screen
space
B
E
C
F
D
A
G
B
Tetrahedra Sorting
C
A
E
G
Depth-first traversal
B
E
C
D
F
G
A
F
E G D C B A
F
D
Ray Construction
Tetrahedra sent down the pipeline
Each vertex has
View vector
Plane equation of other three faces
Vertex shader computes ray intersection
with faces
Ray Construction : 2D Example
Red triangle rasterized
Vertices A and B, Planes F1 and F2
A
F1
F2
B
Ray Construction : 2D Example
Compute distance between A and other faces
from viewpoint
IA2
A
IA1
Ray Construction : 2D Example
Compute distance between B and other faces
from viewpoint
B
IB2
IB1
Ray Construction : 2D Example
Rasterization interpolates distances for each pixel covered
We keep the closest valid point
A
B
Color/Opacity Integration
Fragment shader picks closest valid
intersection point
Matrix Mobj->tex maps point in texture space
Defines texture ray in texture space
Ray marching
Color/Opacity Integration
3D normal map for
shading
Front-to-back blending
Alpha at sample
location is modified
based on distance
traveled by light in
object space
Performances
Implemented 2 schemes
Brute force uniform sampling worked best in
our test cases (3D textures 512x512x32)
Uniform sampling
DDA grid traversal
Fixed number of iterations
User defined, trade-off for quality
Main bottleneck : sorting on CPU
Results : Filtering
Results : Transparency
Results : Volumetric Shadows
Results : Simpler Opaque Case
Results : Real-time Video
Conclusion
We reached our goals
Interactive rendering of arbitrary 3D textures using GPU
Flexible: Semi-transparent and opaque
Rendering effects (transparency, volumetric shadows)
Allows animation of mesh and texture
However…
Not fast enough for real time
Improve performance with precomputation?
Faster sampling scheme?
Future Work
Level-of-detail framework
Geometric details filtering
Improve shading effects
Absorption within 3D texture
Light scattering
Thank you! Questions?