520 likes | 649 Views
Rendering Geometry with Relief 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
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)