|
In
its current form, this renderer uses a RTIN mesh, right triangulated
irregular network. It makes use of your basic hardware accelerated
triangle to compose a grid of polygons that will be subdivided to
a chosen level of quality. This kind of mesh has some very interesting
properties, mainly an hierarchical representation that maps triangles
into leaf nodes and clusters of these triangles into the parent
nodes recursively. This is very good. This means that this scheme
fits perfectly into a binary tree with a data structure composed
of reference pointers to the childs of any given node and all of
its neighboring nodes.
These
Binary Triangles Trees are not without constraints, one of them
is the need to force split a node in order to maintain mesh consistency.
This involves the need to perform some checks per node to see if
any neighbor needs to be split to keep the mesh from breaking. But
aside from that, there are only benefits, because it means we get
a perfect triangle mesh without any holes and without any T-junctions
whatsoever. Also and because of the nature of the triangles -- they
are all isosceles -- the common problem of sliver triangles is a
non issue.
Having
a mesh that is being dynamically altered poses some problems, if
one node of the binary tree changes its level of detail the mesh
will either lose or gain one vertex, this means that a popping artifact
will start to appear over the terrain as soon as vertices change
their height value while the player is busy changing the view position.
By design, this engine avoids any kind of popping by doing geomorphing
per vertex, that is the vertices are smoothly interpolated from
the parent's base edge height to the child's real height. This allows
a seamless transition from frame to frame without visually disturbing
artifacts.
All
these fundamental concepts together make up for a very effective
mesh rendering system.
|