progressive meshes

12
EFFICIENT IMPLEMENTATION OF PROGRESSIVE MESHES HUGUES HOPPE Roopesh Jhurani

Upload: roopesh-jhurani

Post on 18-Aug-2015

28 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Progressive Meshes

EFFICIENT IMPLEMENTATION OF PROGRESSIVE MESHES

HUGUES HOPPE

Roopesh Jhurani

Page 2: Progressive Meshes

Progressive Meshes

1. Scheme for storing and transmitting arbitrary triangle meshes.

2. Efficient, Lossless, continuous resolution representation.

3. Better rendering, reduced transmission bandwidth, less storage requirement.

4. Overall geometry preservation with discrete and scalar attributes

5. Mesh Simplification

6. Provides smooth geomorphing of level of detail (LOD) approximations and reduced Popping.

7. Helps in progressive transmission.

8. Mesh compression

9. Allows selective refinement.

Page 3: Progressive Meshes

Progressive Mesh Representation

Page 4: Progressive Meshes

Terminology

Mesh tuple (K,V) where K is a simplical complex and V={v1,v2,v3,v4…vm} in R3 space.

Mesh geometry attributes: vertices

Mesh Surface appearance attributes: Discrete (Material Identifier for shader function), Scalar - diffuse color (r,g,b), normal (nx,ny,nz), and texture coordinates(u,v)

Mesh Corner -vertex face tuple(v,f)

Mesh expression =(K,V,D,S) where V specifies its geometry, D is the set of discrete attributes df associated with the faces f = {j,k,l} , and S is the set of scalar attributes S(v,f ) associated with the corners (v,f) of K.

Triangulation: Required for PMR to convert arbitrary shapes into trianlgles

Wedge: It is a set of vertex-adjacent corners whose attributes are same.

Page 5: Progressive Meshes

Terminology

Geomorphs : It’s a smooth visual transformation between any two meshes Mi and Mi+1 or vice versa. Its helps to remove popping in progressive meshes representation.

MG(α) where α is a blend parameter 0≤α≤1.

MG(0) looks like Mi and MG(1) looks like Mi+1

Progressive Transmission: M0 is transferred with vspliti records. Mn is formed only when all vsplit records are received as it provides lossless transmission.

Page 6: Progressive Meshes

Terminology

Mesh Compression: PM contains base Mesh M0 and approximations but still its space efficient. Instead of storing all three vertex indices (s i,li,ri) of vspliti, one need only store si and approximately 5 bits to select remaining two vertices. With similarity in attributes nearby vertices are predicted and delta encoding is used for storage efficieny.

Selective Refinement: PM allows refinement in selected areas. An initial mesh Mc is selectively refined by iterating through the list {vsplitc….vsplitn-1}, but only performing vspliti (si ,li, ri, Ai) if

(1) all three vertices {vsi ,vli ,vri} are present in the mesh, and

(2) REFINE(vsi ) which is a boolean callback function evaluates to TRUE.

Page 7: Progressive Meshes

Data Structures (Mesh representation)

n vertices mesh contains 2n faces and approx 6n corners. Attributes are not stored at corners due to large memory requirements and also because many corners adjacent to vertex share the same attributes. So attributes are stored only at vertices.

Fig.4 defines mesh data structure in which array of vertices, wedges, faces are present and where faces point to wedges, wedges point to vertices.

Page 8: Progressive Meshes

Data Structures (Progressive Mesh representation)

Fig. [5] is the data structure for progressive mesh representation

base_mesh stores information for the initial coarse mesh M0

vsplits array contains vertex split records to create original mesh.

Page 9: Progressive Meshes

Data Structures (Progressive Mesh Traversal)

P Mesh Read Stream (PMeshRStream): This class provides an interface to abstract PM data members. It can be used for three purposes:

1. Reading from a PM stored in memory (a PMesh).

2. Reading from a PM received progressively over an input stream.

3. Reading from an input stream while archiving to a PMesh.

PM iterator (PMeshIter): This class is used to iterate throught the PM sequence.

Page 10: Progressive Meshes

Data Structures (Progressive Mesh Traversal)

Vertex split transformation (PMeshIter::next()):

The member function PMeshIter::next() applies the next vertex split transformation to the current mesh. If this Vsplit record is not found in memory (in pmrs.pm), it is read on demand from the input stream.

Edge Collapse transformation (PMeshIter::prev()):

The member function PMeshIter::prev() moves through the PM sequence backwards by performing the edge collapse transformation that is the inverse of the previous vertex split.

Iteration to specified complexity(PMeshIter::goto())

The function PMeshIter::goto() supports iteration to a desired level of complexity, expressed as either number of vertices or number of faces, by simply invoking next() or prev() repeatedly.

Page 11: Progressive Meshes

References

“Efficient Implementation of Progressive Meshes”, Hoppe H. Elsevier Computers and Graphics, Vol. 22, No. 1, pp. 27 36

Page 12: Progressive Meshes

Thank you!!