13.07.2015 Views

CPU-GPU Algorithms for Triangular Surface Mesh Simplification

CPU-GPU Algorithms for Triangular Surface Mesh Simplification

CPU-GPU Algorithms for Triangular Surface Mesh Simplification

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>CPU</strong>-<strong>GPU</strong> <strong>Algorithms</strong> <strong>for</strong> <strong>Triangular</strong> <strong>Surface</strong> <strong>Mesh</strong> <strong>Simplification</strong> 3surface mesh is closed and that there is access to the entire mesh during thesimplification process. This excludes streaming input models.We propose three simplification algorithms, one of which runs on the <strong>CPU</strong>and two of which run on the <strong>GPU</strong>. We combine these algorithms into two<strong>CPU</strong>-<strong>GPU</strong> algorithms <strong>for</strong> mesh simplification. The algorithms are based onthe edge-collapse operation, as it is an extremely simple and small-scale operation,and it works even if there is no access to the entire mesh. The <strong>CPU</strong>algorithm visits every available element and per<strong>for</strong>ms the edge-collapse operationon the element if it is not yet marked as affected (defined in Section2), as does one of the <strong>GPU</strong> algorithms. The other <strong>GPU</strong> algorithm takes fulladvantage of the concurrency of the <strong>GPU</strong> and attempts to collapse a greaternumber of edges each iteration.In Section 2, we present our three mesh simplification algorithms: the <strong>CPU</strong>simplification algorithm, a naïve <strong>GPU</strong> simplification algorithm, and a <strong>GPU</strong>simplification algorithm based on reductions, which we combined into two<strong>CPU</strong>-<strong>GPU</strong> algorithms. We discuss the correctness of the algorithms, as well.In Section 3, we describe our experiments to test our <strong>CPU</strong>-<strong>GPU</strong> algorithms<strong>for</strong> various <strong>CPU</strong>-<strong>GPU</strong> workload splits and then discuss our results. In Section4, we conclude our work and discuss several possibilities <strong>for</strong> future work.2 <strong>Simplification</strong> <strong>Algorithms</strong>We propose three <strong>CPU</strong>- and <strong>GPU</strong>-based algorithms which work in tandemto simplify a mesh. We combine our algorithms to produce two <strong>CPU</strong>-<strong>GPU</strong>mesh simplification algorithms. The algorithms simplify meshes uni<strong>for</strong>mly andexhaustively, ensuring maximal simplification occurs. All proposed algorithmsrely on the edge-collapse operation, which is defined below. Additionally, thealgorithms are lossless, which means that the operations can be applied inreverse, and the original mesh can be recovered.Our simplification algorithms rely on the edge-collapse operation [14],which is defined as follows <strong>for</strong> an input mesh containing a set of verticesV and a set of elements T.For an edge e = (v 1 , v 2 ) shared by elements T 1 = (v 1 , v 2 , v 3 ) and T 2 =(v 4 , v 2 , v 1 ), define v m to be the midpoint of e. To collapse edge e, T 1 and T 2are removed from the mesh, and any references to v 1 or v 2 are updated torefer to v m . Figure 1 shows an edge-collapse operation on edge (v 1 , v 2 ).For the edge-collapse operation, the order of the vertices that make upan element does not matter. If additional in<strong>for</strong>mation, such as the originalpositions of v 1 and v 2 , is stored, the edge-collapse operation is reversible.There<strong>for</strong>e, compression or simplification algorithms based on this operationare lossless, and the original mesh can be recovered by reversing these steps.Our simplification algorithms allocate a portion of the mesh to the <strong>CPU</strong>and the rest of it to the <strong>GPU</strong> to be simplified. We propose an extremelysimple method <strong>for</strong> allocation. For a <strong>CPU</strong>-<strong>GPU</strong> split k% where 0 ≤ k ≤ 100

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!