  | 
  
    
Submitted by , posted on 04 March 2001
   | 
    | 
 
 
 
 
  
Image Description, by 
  
  
In previous IOTDs, many people asked what algorithm Terragen is
using to calculate its textures. Since i didn't dare to post YALS
(Yet Another Landscape Screenshot), i prefered to send this one (which
is a top view of my terrain) with a short description of how i'm texturing
it (i don't know if Terragen does the same thing, but the results look quite
similar).
  
First, before you ask:
  
1. It is realtime rendered, and actually quite fast (there is
around 8000 triangles in this frame). I expect 150 fps on a P2-400+GeForce.
Brute-force method: no LOD (yet).
  
2. It is not using a Terragen's texture. Terrain textures are completely
procedurally generated.
  
3. No demo yet, but i'm working on one. Still needs a few weeks of
work.
  
Now, some words about the technic:
  
I'm using a set of 3 parameters: elevation, slope and exposition/
orientation for each texel. Designers can use a script language to describe
how to texture-map the terrain. It is done, as Terragen, with materials
layers. To each layer is associated a texture map (grass, rock, mud),
some conditions about the elevation, slope and exposition, and for each
parameter, a min/max blending coefficient too.
  
The influence (ranging from 0.0 to 1.0) of a given layer is calculated,
for a texel, by interpolating the 3 blending coefficients. Then, we get
the final color of the texel with a standard n-blending function.
  
It is also possible to specify specific texture maps for some texels,
as shown with the muddy road in the shot.
  
A simple script example would be:
  
Grass {
        Slope {
                angle_min:0             # min angle condition (degrees)
                angle_max:31            # max angle condition (degrees)
                blend_min:0.9           # blending for min angle
                blend_max:1.0           # blending for max angle
        }
}
Sand {
        Slope {
                angle_min:31            # min angle condition (degrees)
                angle_max:90            # max angle condition (degrees)
                blend_min:0.8           # blending for min angle
                blend_max:1.0           # blending for max angle
        }
        Elevation {
                height_min:0.0          # min height (in meters)
                height_max:10.0         # max height (in meters)
                blend_min:1.0           # elevation blending is identiy
                blend_max:1.0
        }
}
Rock {
        Slope {
                angle_min:31            # note that these are the same
                angle_max:90            # parameters than for sand. Only
                blend_min:0.8           # the elevation condition
                blend_max:1.0           # changes.
        }
        Elevation {
                height_min:10.0         # min height (in meters)
                height_max:10.0+        # max height: above 10 meters
                blend_min:1.0           # elevation blending is identiy
                blend_max:1.0           # too
        }
}
I let you, as an exercise, imagine what sort of terrain this would result
in :)
  
 | 
 
 
 
  
 
 |