Isometric SIGGRAPH 2004
description
Transcript of Isometric SIGGRAPH 2004
A Heightfield on an Isometric GridMorgan McGuire and Peter SibleyBrown University
A Heightfield on an Isometric Grid
The Isometric HeightfieldThe Isometric Heightfield
• 10% more accurate, subjectively smoother
• Practical for real applications
• GPU accelerated
• Drawback: requires resampling
MotivationMotivation
Traditional Ortho-HeightfieldTraditional Ortho-Heightfield
y-displacement
3D View
Grid
Heightfield BenefitsHeightfield Benefits
• Represent scientific data at highest fidelity
• Practical
• Great for dynamic data
• Storage efficient for high-frequency data
• Simple!
Worst Case Ortho FitWorst Case Ortho Fit
vs. Best
Musgrave’s HeightfieldMusgrave’s Heightfield
• Shear axes to produce a parallelogram• Equilateral tessellation
rrcSrc ,, r
c x
z
Grid Space World Space
New Isometric HeightfieldNew 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
c
rGrid Space World Space
1,1&2, rrcSrc
x
z
Related WorkRelated 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
AnalysisAnalysis
Signal Processing AnalysisSignal 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)
ExperimentExperiment
• Approximate a 2D Sinusoid
h(x, z) = sin(f[x cos + z sin ] +)• 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
Cleaner High Freq.Cleaner High Freq.
Ortho Iso
Smoother Low Freq.Smoother Low Freq.
Ortho Iso
Shaded
Smoother Low Freq.Smoother Low Freq.
Ortho Iso
Shaded
Curvature
Shading Error
Isometric: 25% more accurate shading.
(lower is better)
AlgorithmsAlgorithms
ResamplingResampling
• 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 SurfaceMoving 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
G I
L=(1-)H+IJ=(1-)H + G
P=(1-)J+L
Fast Vertex NormalsFast Vertex Normals
• Indices of neighbors:
• Grid space edge vectors:
• Vertex normal contains 6 cross-products:
D E
IP
F
H G
Cps
pisCphsCpg
pfsCpesCpd
11
11
0,,1sin,,
sin,,0,,1
sin,,sin,,
321
321
321
321
PyIyPIPyHyPH
PyGyPGPyFyPF
PyEyPEPyDyPD
PIPDPHPIPGPH
PFPGPEPFPDPEN
Fast Vertex NormalsFast Vertex Normals
• Algebra dramatically simplifies:
• Operation count: 6 add, 1 mul
– Cheaper than 1 cross-product!
yyyyy EHGDFIEHGDN ,4,2sin 364
D E
IP
F
H G
Normals in Vertex ShaderNormals in Vertex Shader
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);
0000
0011
4000
03
23
13
1
1TMV
Precomputed outside vertex shader
Actual per-vertex work
• 6 texture lookups (NV50?)
• Neighbor indices are the same for each tile– Precompute and store in tex coord stream
Fast Shadow VolumesFast Shadow Volumes
Heightfield TilesHeightfield Tiles Page from disk Unit of LOD, texturing
Wake Island from Battlefield 1942 courtesy of Digital Illusions CE
Triangle StripsTriangle Strips
Start
End
Sub-sampled LODSub-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
LOD MovieLOD Movie
Efficient Storage (NV20+)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)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]
ApplicationsApplications
VisualizationVisualization
GamesGames
AcknowledgementsAcknowledgements
• 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:
Elevation Error
Isometric: Same quality with 10% fewer polygons.
(lower is better)
What about ROAM?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)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
odd ,33
sin2 ;13 ;, RCRCCR
1,1&2, rrcSrc
rCcrc ,
Need Indices and WeightsNeed Indices and Weights
H
G I
P
Indices: g = ?, h = ?, i = ?
Weights: wG = , wH = ?, wI =
Barycentric InterpolationBarycentric Interpolation
• Simple equations exist for g, h, i, , • 4 triangle orientations: {even row, odd row} x {up, down}
H
G I
L=(1-)H+IJ=(1-)H + G
P=(1-)J+L
wG = 1 –, wH = 1 , wI =
ExampleExample
• Given P = (c, r)• Let• Example: odd row, up triangle
• 3 other cases
Crcprrvccu ,,
)( and )12mod( vur
g = p + C, h = p, i = g +1
= v, = u
Self-Shadowing is HardSelf-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 ShadowingA 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 VolumesFast 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 WorkFuture Work
• Compute true Geo-mipmapped LOD in hardware?
• LOD w/ normal maps
• Update shadow elevation in hardware?
• Experiments with deformation and destruction
Irregular SamplingIrregular Sampling
Regular
Irregular spacing captures shape better:
Irregular
General Ortho ProblemGeneral Ortho Problem