- 735 Views
- Uploaded on

Download Presentation
## PowerPoint Slideshow about 'A Heightfield on an Isometric Grid' - Sophia

**An Image/Link below is provided (as is) to download presentation**

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript

A Heightfield on an Isometric Grid### A Heightfield on an Isometric Grid

Morgan McGuire and Peter Sibley

Brown University

The Isometric Heightfield

- 10% more accurate, subjectively smoother
- Practical for real applications
- GPU accelerated
- Drawback: requires resampling

Heightfield Benefits

- Represent scientific data at highest fidelity
- Practical
- Great for dynamic data
- Storage efficient for high-frequency data
- Simple!

Worst Case Ortho Fit

vs. Best

Musgrave’s Heightfield

- Shear axes to produce a parallelogram
- Equilateral tessellation

Grid Space

World Space

c

x

r

z

x

z

New Isometric Heightfield- New Mapping
- Shift odd rows ½ edge length
- Slide end vertices to make square tiles
- Border padding for computing vertex normals
- Drop-in replacement for ortho-heightfield

Grid Space

World Space

r

c

Related Work

- Musgrave 88
- Grid Tracing: Fast Ray Tracing for Height Fields
- Duchaineau et al 97
- ROAMing terrain: real-time optimally adapting meshes
- de Boer 00
- Fast Terrain Rendering Using Geometrical MipMapping
- Shankel 02
- Fast Heightfield Normal Calculation
- Middleton 01, 02
- Edge Detection in a Hexagonal-image Processing Framework
- Markov Random Fields for Square Hexagonal Textures

Signal Processing Analysis

- Underlying “true” function h(x, z)
- Heightfield approximation:
- Low-pass filter and sample
- y(x, z) at integer x, z
- Barycentric interpolation for non-integer x, z
- Reasons for poor fit:
- Aliasing from inadequate sampling
- Inappropriate reconstruction filter (i.e. triangles)

Experiment

- Approximate a 2D Sinusoid

h(x, z) = sin(f[x cosq + z sinq ] +f)

- Vary phase, angle, and frequency
- Error Metrics
- Elevation
- Shading
- Normal deflection
- Curvature
- Any function is a weighted sum of sinusoids
- Draw generalizations about arbitrary functions

Resampling

- Existing ortho-grid sampled data
- Reconstruct true continuous surface
- Filter and downsample on hex pattern
- Lossless if original was correctly sampled
- Artist created data
- Iso-heightfield as modeling primitive

Moving on the Surface

- We know elevation at vertices
- We need elevation between vertices
- Must exactly match rendered elevation!
- 4 cases, easily derived from Barycentric interpolation

H

L=(1-b)H+bI

J=(1-b)H + bG

P=(1-g)J+gL

I

G

D

E

P

F

I

G

H

Fast Vertex Normals- Indices of neighbors:
- Grid space edge vectors:
- Vertex normal contains 6 cross-products:

D

E

P

F

I

G

H

Fast Vertex Normals- Algebra dramatically simplifies:
- Operation count: 6 add, 1 mul
- Cheaper than 1 cross-product!

Normals in Vertex Shader

- 6 texture lookups (NV50?)
- Neighbor indices are the same for each tile
- Precompute and store in tex coord stream

const uniform mat4 K =

vec3 A(tex2D(d), tex2D(h), tex2D(i));

vec3 B(tex2D(g), tex2D(e), tex2D(f));

vec4 C(A – B, 1);

vec4 N = mul(K, C);

Precomputed outside vertex shader

Actual per-vertex work

Heightfield Tiles

- Page from disk
- Unit of LOD, texturing

Wake Island from Battlefield 1942 courtesy of Digital Illusions CE

Sub-sampled LOD

- Geo-mipmapping would be ideal
- Cannot afford to touch vertices on CPU
- Use subsampling
- Keep edges at maximum resolution
- Carefully alpha-blend transitions

Efficient Storage (NV20+)

- Pack x, z in int16 vertex stream
- Same for every tile
- Pack y in int16 texture coordinate stream
- Combine streams in vertex shader
- Modify y on CPU, upload a relatively small vertex array
- 2 bytes/vertex vs. 12 bytes/vertex

Efficient Storage (NV40)

- Put y in a texture
- SM 3 allows texture lookup in vertex shader!
- Modify y using render-to-texture
- Navier-Stokes
- Render deformations
- Tire tracks & footprints
- [insert your favorite GPU hack here]

Acknowledgements

- Advisor John F. Hughes
- Battlefield 1942 data courtesy of Digital Illusions CE
- Mars data from Dr. James Head III, Brown University
- Additional coding:
- Hari Khalsa
- Nick Musurca

Hardware and data made available by:

What about ROAM?

- Irregular tessellation:
- y(x, z) for a data-dependent set of samples
- Barycentric interpolation between samples
- Can produce a better fit
- Less aliasing: put samples where needed
- e.g. ROAM, Triangulated Irregular Networks
- Heightfields are still preferred for many applications…

Our Mapping (2)

- Grid to world space:
- Grid space to memory:
- Row and column sizes:
- Also tweak end-vertices on even rows
- Drop-in replacement for orthogonal heightfield
- Square tiles
- Convenient texture & normal mapping

H

L=(1-b)H+bI

J=(1-b)H + bG

P=(1-g)J+gL

I

G

Barycentric Interpolation- Simple equations exist for g, h, i, a, b
- 4 triangle orientations: {even row, odd row} x {up, down}

wG = b(1 – g) = b - a, wH = 1 -b, wI = bg = a

Example

- Given P = (c, r)
- Let
- Example: odd row, up triangle
- 3 other cases

g = p + C, h = p, i = g +1

b = v, a = u

Self-Shadowing is Hard

Problems:

- Shadow maps are expensive for terrain
- High fill rate
- Shadow volumes expensive for terrain
- High fill and vertex rate
- Pre-computation, horizon map no good for dynamic data

A Trick for Shadowing

- Constrain the sun orbit the z-axis
- i.e. moves strictly East-West
- (x0, z0) only be shadowed by (x0 – k, z0)
- Start at the sun end of the x-axis, iterate over vertices
- Incrementally compute the max shadowed elevation
- Works on ortho-heightfield too

Fast Shadow Volumes

- Terrain shadows other objects
- Other objects do not shadow terrain (use projective shadows, shadow maps, volumes, etc. for that)
- Iterates along rows, which are memory-aligned
- Almost free
- Compute shadowing inside the loop that uploads elevation to the graphics card

Future Work

- Compute true Geo-mipmapped LOD in hardware?
- LOD w/ normal maps
- Update shadow elevation in hardware?
- Experiments with deformation and destruction

Download Presentation

Connecting to Server..