220 likes | 371 Views
l. r. c. p. n. SOT: Compact Representation for Tetrahedral Meshes. Topraj Gurung & Jarek Rossignac. o. Tet Mesh Representations. Nodes. Geometry: Vertex location & attributes Connectivity (graph): Nodes References (links) Storing all links is prohibitive & unnecessary
E N D
l r c p n SOT: Compact Representation for Tetrahedral Meshes Topraj Gurung & Jarek Rossignac o
Tet Mesh Representations Nodes • Geometry: • Vertex location & attributes • Connectivity (graph): • Nodes • References (links) • Storing all links is prohibitive & unnecessary • SOT (introduced here): • Supports all these links • At constant compute cost • Stores only 4 Tr !!! ≈20 Tr Links 4 4 Boundary Star Adjacency Order T F TF TT F around E 26 3 E VT V 2 SOT
Connectivity representation vs compression Fr/Tr: references per Face/Tet. Fb/Tb: bits per Face/Tet. SOT
Outline • Corner table and Vertex & Opposite Table (VOT) extension • Corner Table [Rossignac01]: 6Fr • VOT [Bischoff&Rossignac 05 , Lage et al. 05]: 8 Tr • Wedge operators • Similar to half edges in Compact Half Faces [Lage05] • Mimics corner table operators for triangle meshes • Sorted Vertex & Opposite Table (SVOT): Free star • Support star references without increasing storage • 8 references per tet • Linear construction time • Sorted Opposite Table (SOT): • Same functionality as SVOT, but at half the storage cost: 4 Tr SOT
Corner Table for Triangle Meshes (review) • Compact data structure for triangle meshes • [Rossignac01] • Corner • 3 corners per triangle • Each incident on a vertex • Each associated with its opposite edge • Orientation: • Assume clockwise SOT
Corner Table for Triangle Meshes (review) • 6 references per triangle • 3 for vertex • 3 for opposite a 0 a 0 3 1 1 b 2 c 2 1 2 d 3 0 c b c 4 4 4 5 b 5 5 3 d SOT
Corner Table for Triangle Meshes (review) • What about traversing meshes? • Corner operators • current corner: c • next corner: n(c) • previous corner: p(c) • opposite corner: o(c) • right corner: r(c) • left corner: l(c) • swing corner: s(c) • Derived from corner table • requires constant time s(c) l(c) r(c) c p(c) n(c) o(c) SOT
Corners of tetrahedra • 4 corners per tetrahedron • Each associated with opposite facet • Orientation convention: • first corner sees opposite facet ccw 3 2 1 0 SOT
Vertex Opposite Table • Corner table extended to tet meshes • [Lage05, Bischoff&Rossignac05] • 8 references per tetrahedron • 4 references for vertices • 4 references for opposites • Vertex-to-star reference not available • 1 million tetrahedra = 34MB Vb 0 a 4 1 b 1 1 5 2 c 2 Vc 3 d 3 7 2 Ve 4 0 4 e 0 Va 5 b 5 6 3 6 d 6 7 c 7 Vd SOT
Wedge in Vertex Opposite Table • Traversing to neighboring tets in a consistent manner • E.g. how do you walk around an edge? • Wedge: • Ordered pair of corners within a tetrahedron • A wedge is not an edge • Edge = vertex to vertex • Wedge = corner to corner • 12 wedges per tetrahedron SOT
Wedge operators • Wedge operators: • constant cost implementation • Uses only the VOT information • Given current wedge: • mirror, next, previous wedges are defined in same tetrahedron • mirror: reverse direction of current wedge • next: CCW wedge relative to current wedge • previous: CW wedge relative to current wedge current mirror previous next SOT
Wedge operators l r left right current c • Access adjacent tets • left, right, opposite wedges • Mimic corner operators • n, p, o, l, r, s • as seen on link of v(c) • Wedge operators not stored at all • All easily composed from mirror, next and opposite • l(w) = o(n(w))… p n previous next opposite o SOT
Example: Usage of wedge operators:List all tetrahedra incident on a wedge • 1) cw = current wedge = red • 2) nw = next (cw) • 3) lw = left wedge = opposite(nw) • 4) swing left = next (lw) • 5) swing left. twice • 6) swing left. three times • 7) swing left. four times • 8) swing left. five times • Brings wedge back to initial wedge • Done! • [4]-[8] is a for loop • Record the tets wedge visits in for loop SOT
Vertex-to-star references • Query: Given a vertex ID, determine the tets incident on it. • Useful for determining • incident tets, • incident faces, • incident edges, • adjacent vertices • Vertex Opposite Table provides tetrahedron-to-vertex references, but not the vertex-to-star references • One solution: store an additional lookup table • nV additional references [Lage05] • We do it for free • No additional storage cost SOT
SVOT (Free vertex-to-tet reference) • Sorted Vertex Opposite Table • The order of tets in the VOT is arbitrary • We reorder the VOT so that • the 1st corner of vthtet is incident on vertex v • the corner c(v) of vertex v is 4v • Questions: • Is such an order always possible? • Is there a simple and efficient algorithm? SOT
Sort (Reorder) triangles 0 3 10 12 8 2 vertex i is mapped to ith triangle’s first corner 9 1 1 0:(x0,y0,z0) 7 9 1:(x1,y1,z1) 5 0 2 6 0 2:(x2,y2,z2) 2 4 3 11 3:(x3,y3,z3) 1 … 0 3 … SOT
SOT: Sorted Opposite Table • Sorted Vertex Opposite Table (SVOT) supports: • Vertex-to-tet refs and wedge operations at constant cost • Uses 8 Tr( same as VOT) • We propose an alternative: the SOT • Our Sorted Opposite Table offers a trade-off: • reduce storage by 50% (4 Tr) • but, increase of processing time of some corner and wedge operators • SOT retains the vertex-to-tet and other functionality of SVOT • SOT retain linear construction and linear operator cost • SOT reduces storage by discarding the vertex table completely • Store only the O table (+9 service bit per tet, hidden in O) • How is it possible to operate without the V table? • What are these service bits? SOT
SOT service bits? • Discard the V Table completely • Cache 2 service bits per corner (8 Tb) • To record the twist • how adjacent tets are glued at common face • Could store them as log2(3*3*3*3)=6.3 Tb • Needed to compute the o(w) • Use 1 additional bit per tet • to mark visited tets when walking on the link • To compute v(c) • Visit all incident corners SOT
Computing v(c) in SOT Find a triangle whose first corner is mapped to the the desired vertex SOT
Summary • VOT (Vertex & Opposite Table): 8 Tr • Natural extension of corner table to tet meshes • Wedges: Convenient operators for mesh traversal • Powerful, constant time • SVOT (Sorted Vertex & Opposite Table): 8 Tr • Linear cost reordering • Vertex-to-tet (star) references without additional cost • SOT (Sorted Opposite Table): 4 Tr • Discards Vertex table and hides service bits in Opposite table • Same functionality as SVOT • Possibly valuable when paging is the bottleneck SOT
Thanks! SOT