

Project Goals The goal of this project is to investigate the Active Surface Definition algorithm provided in SGI's Performer. The goal is do develop a viewer which implements the algorithm and then to develop the necessary logic to build quality ASD databases. SGI Performer is not used in this project, instead it is all developed from documentation on the algorithm.
ASD Algorithm Nice attributes of the algorithm are that only a vertex position and a morph vector needs to be store for each vertex. (Ignoring attributes.)
Viewer
ASD Generation from Regular Height fields


In this project, I took a top down approach to the LOD generation. Starting from two triangles, the algorithm add up to 3 vertices to each triangle on each LOD level to generate the next level. How does it do this? For each vertex it uses barycentric coordinates to determine the best edge to add it to, and to compute the height at that x,y position in the triangle. (In this case, I am using Z as altitude, not y.) For each edge it picks the vertex which has the largest variance between the real height at that point, and the computed height on the triangle. It adds these vertices for all the edges, computes their morph vectors, and we have the next LOD level. (This is essentially
an iterative TIN generation algorithm, using a Local Error Metric.) To the right you will see an animation of the results of this algorithm.
There are a couple short comings to this algorithm, which should be fixed. The first is that there is no "well formed" triangle criteria used when selecting the verts for an edge. Only the largest variance is used for an edge, which can cause some long sliver style triangles. The second is a result of the first. Due to the sliver triangles that can result, the LOD tree can be unbalanced causing more LOD levels than would necessary with a balanced tree. The question is whether adding the vertices with the most error or adding more vertices on each LOD level is more important. Odds are the latter, because the larger error vertices will probably get added in the first couple LOD levels anyways unless there is a large peak near one of the original triangle corners. I might revisit this sometime to fix it.


Summary
