610 likes | 810 Views
CSE 788 Fractal Terrains. Terrain Map. Height Map z = f(x, y) x and y are sampled on a 2D integer grid Real data : Satellite, Elevation maps Synthetic : Texture map, Noise functions. Terrain Map. Connect samples into a mesh. Terrain Map. Natural looking Model high detail Size
E N D
Terrain Map • Height Map z = f(x, y) x and y are sampled on a 2D integer grid • Real data : Satellite, Elevation maps • Synthetic : Texture map, Noise functions
Terrain Map • Connect samples into a mesh
Terrain Map • Natural looking • Model high detail • Size • Storage (Millions of polygons) • Rendering speed • Zoom-in, zoom-out (does not scale well) • Use textures to model detail? • Not real geometry (bump mapping at silhouettes) • Not scale independent • Repeated textures do not work well
Fake Terrain • Generate the heightfield • Random process • Reflects “realistic” terrain in some way
Random Terrain • Simple: • Terrain(x,y) = rand( MAX_HEIGHT ) • Results in random noise • Next step: • Smooth the terrain generated above • FIR filter:
Filtering • FIR (Finite Impulse Response) filter: • Pass a “window” over the data • Multiply data in window by weights • Result = d1*w1 + d2*w2+ … + dN*wN • Window + weights is called “filter kernel” • Larger window grabs more data
+dHeight Random Fault Lines • Repeatedly: • Create a line that crosses terrain • Add dHeight offset on one side of line • dHeighti = dHeight0 + (i/n)(dHeightn -dHeight0) • Select random endpoints to generate line • Compute “side of line” by plugging X,Y into line equation
More Realistic Faults • Apply FIR filter to faulted heightmap • Smooth out abrupt fault transitions: “Erosion”
Variations • Use a smoothstep function
Variations • Use a bump: • -d at distance R away • +d at zero. • Images from lighthouse3d • Used a cosine here.
Variations • Cosine Bump
Variations • Do not need to use a half-plane. Any function that splits space into two halves will work. • Radial functions • Etc.
Particle Deposition • Drop particles in areas where you want volcanic mountains • Particles flow downhill until they come to rest • Move the drop point to create interesting peaks
Particle Deposition • Flow computation • At given point, find lowest neighbor • If local geometry is not flat enough, move new particle on top of lowest neighbor • Roll down hill • “Flat enough” = 27 degrees or so • Check 3x3 pixel window or 5x5 to check neighbors.
Perlin Noise • Using a sampling of 2D perlin Noise provides smooth hills.
Terrain Coloring • Using a 1D texture map based on the altitude can provide many useful mapping.
Terrain Coloring • Striped 1D texture map.
Terrain Coloring • Using a 2D texture map provides richer detail, but is independent of the terrain.
Terrain Coloring • More advanced coloring is based on altitude and slope.
Rolling Hills • Scaling in one dimension gives smooth rolling hills.
Procedural Modeling With Fractals • Procedural Modeling • Compute geometry “on-the-fly” • Fractals • Model Natural Phenomena - Self Similarity • Mountains, fire, clouds, etc. • Scales to infinity • Add or “make up” natural looking details with mathematical tools
Fractals “Repetition of form over a variety of scales” • Mandelbrot set, Julia set
Two Fractal Properties • Self-similarity
Two Fractal Properties • Fractal Dimension • Euclidean dimensions : 1, 2, 3, 4, … • Fractal : 1.2342, 2.7656 • Measure of detail or roughness of a fractal D = (ln N)/(ln 1/s)
Midpoint Subdivision • Midpoint (recursive) subdivision
Midpoint Subdivision • Brownian Motion • Describes random movement of particles in a gas or fluid • Fractional Brownian Motion • Brownian Motion + Fractal Dimension • A useful model for natural phenomena
Fractional Brownian Motion • Fractional Brownian Motion • Equations are compute intensive • Approximate with “A family of 1D Gaussians ” • Zero mean • Standard Deviation : S = k2-iH H = fractal dimension (roughness)
Fractional Brownian Motion • Fractal dimension = roughness, I.e. H
Terrain Modeling Criteria • Input • Initial coarse mesh + stochastic parameters • Two criteria • Internal Consistency • Reproducibility : Model is independent of position and orientation • Associate “random numbers” to point index • External Consistency • Continuity between adjacent primitives
A B A B A B Fractal Mountains • Fournier & Fussell (1980) • Recursively subdivide geometry by random number d: –dHeight/2 < d < dHeight/2 • At each recursion: • dHeight *= 2-r • r=1 : self-similar • r>1 : large features early • r<1 : large features late
Triangle Subdivision • Subdivide a triangle into 4 triangles at edge midpoint
Quadrilateral Subdivision • Subdivide a quad into 4 quads at edge midpoints and a new center point.
Diamond-Square Subdivision • Alternate subdivision • Alleviates some creases on the grid.
Mesh Subdivision • Square-square Subdivision • Addresses “creasing problem” (slope discontinuities) • Subdivide parametric patches
Mesh Subdivision • Displacement is scaled by the recursion level. • | b – a | -rn • When do you stop the recursion? • Pixel resolution • Displace upward, or towards the normal to the surface? • Implies that it is not a height-map. • Could use Geometry Images here though.
Mesh Subdivision • External Consistency • Avoid tears between neighboring polygons • How do we compute the normals? • Average polygon normals at each vertex. • Propagate normals down the recursion • Cheaper : use the original mesh normals only
Ridged Fractal Terrains • To create sharp peaks, add an absolute value and flip the surface upside down. • Or, reflect about a maximum value. • Provides a volcano-like effect.
Multi-Fractal • This produces a ridged multi-fractal
More Controls • To create plateaus, add a min function to flatten out high areas.
More Controls • To create a plain, add a max function to flatten out low areas.
More Controls • Multiply by a Guassian to limit the mountain range.
More Controls • To create valleys, create a lower amplitude and rather smooth terrain to use as the max operator.