With subdivision, a tesselated surface generated using the A-Patch method can yield tearing artifacts that are a result of different resolutions of tesselation for continuous curves.
One method of doing this is to seal the tears between the surface patches by generating a triangle strip between the edge of one patch to that of an adjacent subdivided patch. Although this method does not generate the most attractive surfaces due to "cliff artifacts" (areas of the surface that have a sudden change in orientation and result in a section that does not look smooth), generate a tight concentration of vertices long the patch boundaries and may result in very asymmetrical triangles that do not render well, but removes the tearing artifacts between surfaces.
- For each body centered cubic lattice in the structure, determine its neighbours
- Scan through the cubic structure to determine level of subdivision
- If the neighbour's subdivision depth is greater than the current cubic lattice, then resolve edges
- Otherwise, skip to the next lattice in the structure
- To resolve two edges, obtain a list of points from both lattice sets and sort both by a common axis.
- Perform a process similar to merge-sort and generate new triangles with each new element merged. The set of triangles obtained will stitch the edges.
In addition to resolving the incongruous edges between A-Patches at differing levels of subdivision, I chose to implement a technique that will reduce the number of triangles that are generated to form small and/or low curvature surfaces. Since the sealing algorithm relies on a particular set of edge points to work properly, the effectiveness of the method had to be reduced. In general, as the number of tesselations increase for a particular A-Patch, the greater the increase in the ratio of optimized triangles to unoptimized triangles.
The premise of the method is to reduce the number of triangles by removing all of the non-edge points of the A-Patch tesselation and to generate a new set of triangles with one of the vertices being the barycentric centre of the shape. For a triangle/3-sided patch this means finding the point whose barycentric coordinate is (1/3, 1/3, 1/3), whereas for a quadrilateral it means finding an approximate point that is the combination of a corner reference point and two vectors that are determined by half the distance of the edges that is formed by the reference point and its two neighbouring corners.
- For each A-Patch determine the normals at each plot point of the tesselation and distance between the patch's corners
- If the distances are below a preset threshold or if the angle between any two normals is below a constraint, optimize the tesselation
- Otherwise, continue tesselating normally
- To optimize the number of triangles, find the approximate centroid of the patch (whether 3 or 4 sized) and connect all edge points to it.
Below are four screenshots demonstrating the difference between the unaltered subdivision and the one optimized by the algorithm.
A comparison between the two methods showing solid triangle geometry


A comparison between the two methods showing wire meshes

