380 likes | 513 Views
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.
E N D
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
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
Mesh extrusion Algorithm Overview CPU • Computed once • Extrude a shell from the surface triangular mesh • Divide each shell prism into three tetrahedra
Mesh extrusion Tetrahedra sorting Algorithm Overview CPU • Alpha blending involves sorting • Sorting tetrahedra with the SXMPVO algorithm
Mesh extrusion Tetrahedra sorting Ray creation Algorithm Overview CPU • Vertex shader • Defines an object-space ray within each tetrahedron GPU
Mesh extrusion Tetrahedra sorting Ray creation Color integration Rendering loop Algorithm Overview CPU • Per pixel, maps object ray in • texture space • 3D texture sampling by ray marching • Accumulate color in frame buffer GPU
Mesh Processing • We map tetrahedra on base mesh • Defines a tetrahedral shell in which the 3D texture is mapped
Mesh Processing • Affine transformation from object space to texture space • Ptex = Mobj->tex Pobj
E B C F D A Tetrahedra Sorting • Alpha blending requires sorting • SXMPVO: graph of « behind » relations [Cook et al. 2004] G
Tetrahedra Sorting • Adjacent faces : object space E B C F D A G
Tetrahedra Sorting • Non-adjacent faces using A-buffer : screen space E B C F D A G
Tetrahedra Sorting • Non-adjacent faces using A-buffer : screen space E B C F D A G
G A B D E C A F F G E C D B G E B C F D A F E G D C B A Tetrahedra Sorting • Depth-first traversal
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 IB2 B 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 • Uniform sampling • DDA grid traversal • Brute force uniform sampling worked best in our test cases (3D textures 512x512x32) • Fixed number of iterations • User defined, trade-off for quality • Main bottleneck : sorting on CPU
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