520 likes | 658 Views
This paper explores novel methods for rendering height-field representations with complex relief textures. It discusses how to effectively sample and reconstruct surfaces using texture, addressing efficiency in memory and GPU usage. The challenges of polygonalization, ray tracing, and interpolation techniques are examined, focusing on balancing speed and accuracy. Moreover, it presents our contributions, including an adapted traversal method that guarantees exact intersections with minimal iterations while maintaining high performance. We provide insights into the usability of these methods for large-scale geometry, from terrain to architectural details.
E N D
Rendering Geometry withRelief Textures L.Baboud X.Décoret ARTIS-GRAVIR/IMAG-INRIA
Height-field representation • What can we represent? • How to render it? • Fast ? • Exact? • Previous work • Our contributions
Height-field • Function from [0,1]2 to [0,1] • Represents a surface • Sampled in a texture • Memory/GPU efficient (a) Height texture (b) Reconstructed surface
Height-field • Function from [0,1]2 to [0,1] • Represents a surface • Sampled in a texture • Memory/GPU efficient (a) nearest • Theory: How do you reconstruct? • Practice: Which interpolation for texture lookups? (b) linear Refer to the paper for details
How to render? • Polygonalize • Simple & natural • Costly, not output sensitive • Aliasing -> LOD Small coverage • What if the object is not the “main” one? • Bump • Small objects Large coverage
How to render? • Polygonalize • Simple & natural • Costly, not output sensitive • Aliasing -> LOD • Ray-tracing • Slow? Feasible on GPU! • Output sensitive
Ray-tracing • Existing solution : VDM [Wang 2003] • Sampling in all viewing directions • Memory costly (4 Mb compressed for 128x128) • Use GPU capabilities instead
Principle (1/2) Top view 2D slice
Principle (2/2) • Comparing heights • Along ray • In the heightfield • Until we pass below
Policarpo [I3D 05] Binary search How many iterations? Is it correct?
Missed intersection Policarpo [I3D 05]
Policarpo [I3D 05] Fixed size steps Binary search Better but still potentially false
Policarpo [I3D 05] Fixed size steps Binary search Missed intersection Amounts to vertical slicing Size of steps along the ray depends on ray tilt
Tatarchuk [I3D06] • Varying size steps (between two bounds) • Depending on ray tilt
Use it for bump Conclusion on existing methods • Advantages : speed • Drawbacks : missed intersections (at grazing angles) Policarpo05 Tatarchuk06
Being exact, what for? • Intellectually rewarding • Usability large scale geometry • Terrain, buildings, architectural details • Objects (cars, etc.) How many polygons ?
Being exact, what for? • Intellectually rewarding • Usability large scale geometry • Terrain, buildings, architectural details • Objects (cars, etc.) Only 6 quads !
Being exact, is it hard? • Problem with constant steps • Can always miss intersections
Being exact, is it hard? • Problem with constant steps • Can always miss intersections • Travel slowly above empty space
Being exact, is it hard? • Problem with constant steps • Can always miss intersections • Travel slowly above empty space • Our contributions • Amanatides based approach • Failsafe approach • But requires preprocess solves
Adapted Amanatides traversal • We run along the ray on texel edges
Adapted Amanatides traversal • We run along the ray on texel edges • Advantages : • very simple iterations • exact intersection fragment shader main loop
Adapted Amanatides traversal • We run along the ray on texel edges • Advantages : • very simple iterations • exact intersection • Drawbacks : • potentially many iterations • texture resolution dependent
Adapted Amanatides traversal • Texture resolution dependent • Double resolution half speed • Ideally should depend on “variations” of heightfield, not sampling frequency • Binary search doesn’t have this drawback • Constant number of texture lookups
Analysis of binary search • At the moment we pass below • At least one intersection • But potentially several ? 2D slice
Analysis of binary search • At the moment we pass below • At least one intersection • But potentially several • Ideally : at most one intersection ? 2D slice How can we guarantee this? Precompute safety radius
What is safety radius ? • Local information Which step ? T Precomputed radius ? For any possible viewing ray passing above T Top view
considered texel Safety radius What is safety radius ? • Local information Viewing direction
What is safety radius ? • Local information • In 3D : for each texel : • Scan every direction • Keep the minimum radius
Various details • Textures • Can have different resolutions • Normal, color, height • Can be packed/compressed • Needs recent fragment shaders supporting dynamic loops
Results • Fast and exact • Height-field regularity dependent • Correct interaction with Z-buffer • Output sensitive
Height-field representation • What can we represent? • How to render it? • Fast ? • Exact? • Previous work • Our contributions
More than bump • Previous methods : small scale bump • Curved surfaces : warping considerations • VDM [Wang 03] • [Policarpo05] • We want to do large scale • Problem : limited expressiveness • orthogonal height-fields
Expressiveness of heightfields • Lack of samples on vertical sides
Projective height-fields • Similar to “cubist images” [Hanson 98] • Projective transforms preserve lines • Unmodified algorithm
Projective height-fields • Wasted fillrate • Many eventually discarded fragments • Easy to solve : clip the bounding box (b) clipped (a) not clipped
Conclusion • Remember fast and exact is possible! • Efficient representation • Small memory footprint • Automatic LOD • Two useful methods (dynamic/static)