the most appropriate block size. More precisely an
error metric is used on the recursive walk made on
the quadtree to decide the most appropriate block
size for each region of the terrain. Higher levels of
the quadtree represent larger areas of the terrain with
lower detail. Lower levels of the quadtree represent
smaller areas of the terrain with greater detail. This
works recursively from the root node of the quadtree
to the leaf nodes where the underlying resolution of
the terrain is matched. In this method the number of
draw calls depends not only on the point of view but
also on the error metric. Also, a block can have
neighbours with different sizes, making any possible
correlation between blocks difficult to achieve.
4 UNIFYING THE APPROACHES
Making a comparison between these two approaches
will be surely flawed if they are seen as completely
different. The common point here is the underlying
spatial partitioning structure, the quadtree. With that
in mind we can differentiate the two methods by
assuming that each one represents a different way of
making the recursive walk on the quadtree. With a
block based simplification scheme the quadtree is
used only to identify the visible blocks, i.e. blocks
that are intersected or are contained in the frustum.
No level of detail is calculated at this stage and all
these blocks are at the same level in the quadtree as
they have the same block size. Therefore one
possible optimization is to stop the recursion sooner,
when we reach a node that is completely contained
in the frustum even if the resolution of that node
does not match the desired block size. For example,
if the first quadrant of the first level of the quadtree
is completely contained in the frustum, we can stop
the recursion for that branch adding all the blocks of
the desired block size that are contained in this
larger block. Finally for each one of these blocks we
have to choose the most appropriate level of detail
basing our decision on the error metric. With
quadtree based simplification the main difference
lies on the recursion which can stop sooner because
the level of detail evaluation is done for each node
of the quadtree so it is possible to choose larger
blocks and render them. These larger blocks have
the same number of vertices but the space between
those vertices is greater.
To unify this approaches even further we take
advantage of a very useful property in a regular grid
triangulation: every block can be described by a
scale and a translation factor. To make this property
useful we have to separate the elevation values from
the geometric description of the block. This is
achieved with two vertex streams. A vertex stream is
essentially an array of vertex component data. For
instance it is possible to assemble vertices from
several vertex streams, where each stream consists
of a component of the vertex (e.g., one stream
contains position info, another contains colour info,
another texture coordinate info, etc.). In our
approach the first stream contains the position of the
vertices and the second stream contains the elevation
values. Since we use canonical values for the
position of the vertices this vertex data is valid for
all the blocks of the terrain. Later when rendering,
we transform the canonical values in the vertex
shader to obtain the correct position of the block.
For that we only need a couple of uniform shader
parameters, in this case, the scale and the translation
associated with each block.
The main advantage of a multi-stream approach
is that it enables us to use vertex textures in
machines that support shader model 3.0. In this case,
the memory requirements are reduced since we only
need one stream with the geometric description of
the block because the elevation data is stored on a
texture. Without vertex textures we need to send the
elevation values in a second stream.
To connect the vertices in a block we need a list
of indices, however this list is different in each
method. With quadtree based simplification we only
need to describe a block since in this method the
geometrical structure of the block does not change,
only the area that it occupies. With block based
simplification we need to represent all the possible
levels of detail of a block. For example if we have a
5x5 block, like the one used in the previous figures,
we need to represent a 5x5, a 3x3 and 2x2 block.
This is done with different sequences of indices each
one representing one of the aforementioned levels of
detail.
5 ERROR METRIC
The error metric has a very important role to fulfil in
tiled block algorithms as it is used to decide when
the transition to lower/higher detail levels happens.
With block based simplification it is used to control
the level of detail of the block, i.e., when a
higher/lower detailed version of the block should be
used to represent the associated region on the terrain.
With quadtree based simplification it is used to
decide the number of blocks that should represent a
region of the terrain, more precisely when a block
can be substituted by its four more detailed children
BLOCK AND QUADTREE BASED SIMPLIFICATION IN TILED BLOCKS TERRAIN ALGORITHMS
207