Real-Time Relief Mapping on Arbitrary Polygonal Surfaces Fabio Policarpo Manuel M. Oliveira Joao L. D. Comba
Overview Introduction Introduction Related Work Related Work Review of Relief Texture Mapping Review of Relief Texture Mapping Methods Methods Results Results Discussion Discussion
Introduction Represent surface detail using textures Represent surface detail using textures Apply to polygonal surfaces, allowing for deformation Apply to polygonal surfaces, allowing for deformation Allow self-occlusions and per-pixel lighting effects Allow self-occlusions and per-pixel lighting effects Introduction > Related Work > Relief Texture Mapping > Methods > Results Goals
Related Work Bump mapping Bump mapping Self-occlusions, shadows and silhouettes are not accounted for Self-occlusions, shadows and silhouettes are not accounted for Displacement mapping Displacement mapping Requires large amount of micro-polygons Requires large amount of micro-polygons Introduction > Related Work > Relief Texture Mapping > Methods > Results
Related Work View-dependent displacement maps View-dependent displacement maps Pre-computes distances to a reference surface Pre-computes distances to a reference surface Sampled along several view directions Sampled along several view directions Does not handle close up viewing well Does not handle close up viewing well Parallax Mapping Parallax Mapping Uses per-texel depth Texture coordinates along view direction are shifted based on depth Only good for irregular/noisy bumps No support for shadows Introduction > Related Work > Relief Texture Mapping > Methods > Results
Relief Texture Mapping Uses image warping techniques and per-texel depth to create the illusion of geometric detail Uses image warping techniques and per-texel depth to create the illusion of geometric detail Introduction > Related Work > Relief Texture Mapping > Methods > Results
Relief Texture Mapping Rendering of a height field requires a search for the closest polygon along the viewing ray Rendering of a height field requires a search for the closest polygon along the viewing ray Overcome through a two-pass method: Overcome through a two-pass method: Convert height field to conventional 2D texture using forward projection Convert height field to conventional 2D texture using forward projection Render texture as normal Render texture as normal Introduction > Related Work > Relief Texture Mapping > Methods > Results
Representing 3D objects Represent 3D geometry by relief texture mapping parallelepiped Represent 3D geometry by relief texture mapping parallelepiped Cannot be extended to arbitrary surfaces Cannot be extended to arbitrary surfaces Introduction > Related Work > Relief Texture Mapping > Methods > Results
Relief Mapping Polygonal Surfaces Uses modern graphics hardware Uses modern graphics hardware Because of fragment shaders, lighting is computed real-time Because of fragment shaders, lighting is computed real-time Introduction > Related Work > Relief Texture Mapping > Methods > Results
Mapping relief data Compute viewing direction, VD Compute viewing direction, VD Transform VD to tangent space of fragment Transform VD to tangent space of fragment Use VD’ and texture coords (s,t) to compute the texture coords where VD’ hits depth of 1 Use VD’ and texture coords (s,t) to compute the texture coords where VD’ hits depth of 1 Introduction > Related Work > Relief Texture Mapping > Methods > Results
Mapping relief data Compute the intersection between VD’ and the height- field surface using a binary search starting with A and B Compute the intersection between VD’ and the height- field surface using a binary search starting with A and B Perform the shading of the fragment using the attributes associated with the texture coordinates of the computed intersection point. Perform the shading of the fragment using the attributes associated with the texture coordinates of the computed intersection point. Introduction > Related Work > Relief Texture Mapping > Methods > Results
Binary Search Start with A-B line Start with A-B line At each step (8 steps): At each step (8 steps): Compute middle of the interval Compute middle of the interval Assign averaged endpoint texture coordinates and depth Assign averaged endpoint texture coordinates and depth Use averaged tex coords to access depth map Use averaged tex coords to access depth map If stored depth value is less than computed depth value, the point is inside the surface If stored depth value is less than computed depth value, the point is inside the surface Proceed with one endpoint in and one out Proceed with one endpoint in and one out Introduction > Related Work > Relief Texture Mapping > Methods > Results
Linear Search To find first point under surface, start at A, advance ray by δAB To find first point under surface, start at A, advance ray by δAB δ is a function of the angle between VD’ and interpolated fragment normal δ is a function of the angle between VD’ and interpolated fragment normal No more than 32 steps are taken in their implementation No more than 32 steps are taken in their implementation Proceed with binary search (with less iterations) Proceed with binary search (with less iterations) Introduction > Related Work > Relief Texture Mapping > Methods > Results
Shadowing Visibility problem Visibility problem Determine if light ray intersects surface Determine if light ray intersects surface Do not need to know the exact point Do not need to know the exact point Introduction > Related Work > Relief Texture Mapping > Methods > Results
Dual Depth Relief Textures Represent opaque, closed surfaces with only one texture Represent opaque, closed surfaces with only one texture Second “back” layer is not used for rendering, but as a constraint for ray- height-field intersection Second “back” layer is not used for rendering, but as a constraint for ray- height-field intersection Introduction > Related Work > Relief Texture Mapping > Methods > Results
Dual Depth Relief Textures Introduction > Related Work > Relief Texture Mapping > Methods > Results Results
Dual Depth Relief Textures Introduction > Related Work > Relief Texture Mapping > Methods > Results Storage Two depthmaps and a normal map can be stored in one texture Two depthmaps and a normal map can be stored in one texture Since normals are unit length, you can store just x and y and use the other two components for depth values Since normals are unit length, you can store just x and y and use the other two components for depth values Compute run-time Compute run-time Rendering is the same as described, except a point is in the represented object if front_depth <= point depth <= back_depth Rendering is the same as described, except a point is in the represented object if front_depth <= point depth <= back_depth
Results Introduction > Related Work > Relief Texture Mapping > Methods > Results Most objects rendered with 512x512 relief texture Most objects rendered with 512x512 relief texture 800x600 resolution at 85 fps 800x600 resolution at 85 fps Written in Cg Written in Cg 3GHz PC w/ 512 MB memory on NVIDIA GeForce 6800GT w/ 256 MB memory 3GHz PC w/ 512 MB memory on NVIDIA GeForce 6800GT w/ 256 MB memory
Results Introduction > Related Work > Relief Texture Mapping > Methods > Results
Results
Results
Results
Results
Results
Conclusion Provided method for mapping relief textures to arbitrary surfaces in texture space, allowing deformation Provided method for mapping relief textures to arbitrary surfaces in texture space, allowing deformation Provides correct shadowing, self-occlusion, and interpenetration with correct lighting Provides correct shadowing, self-occlusion, and interpenetration with correct lighting Presented an efficient ray-heightfield intersection algorithm Presented an efficient ray-heightfield intersection algorithm Extended relief maps with dual-depth textures Extended relief maps with dual-depth textures