Discrete Space, Voxelization and Distance Fields Jian Huang, CS 594, Spring 2002 Papers • Huang et al, ‘Accurate Voxelization of Polygonal Meshes’, IEEE Symposium on Volume Visualization, 1998 • Huang et al, ‘CDFR’, IEEE Conference on Visualization, 2001 Discrete Space • A 3D discrete space Z3 is a set of integer grid points in a 3D • Euclidean space denoted by S. A 3D grid point is a zero dimensional object defined by its Cartesian coordinate (x,y,z). • The Voronoi neighborhood of grid point p is the set of all points in the Euclidean space that are closer to p than to any other grid point. • The Voronoi neighborhood of a 3D grid point is a unit cube around it, known also as a voxel. Discrete Space • The aggregate of all voxels is a tessellation of 3D Euclidean space. • A voxel’s value is mapped into the set {0,1}: – voxels assigned the value “1'' are called “black'' or “non-empty'' voxels – those assigned the value “0'' are called “white'' or “empty'' voxels N-Adjacency • In 3D discrete space – Two voxels are 26-adjacent if they share a vertex or an edge or a face • 26 such adjacent voxels for any voxel – Two voxels are 18-adjacent if they share an edge or a face • 18 such adjacent voxels for any voxel – Two voxels are 6-adjacent if they share a face • 6 such adjacent voxels for any voxel • In 2D discrete space, similarly, 4-adjacency and 8adjacency. N-Neighborhood • The set of 2D pixels that are N-adjacent to the dark pixel where N {4, 8} • The set of 3D voxels that are N-adjacent to the voxel at the center where N {6, 18, 26} N-Path • An N-path is a sequence of black voxels such that consecutive pairs are N-adjacent • Two black voxels are said to be N-connected in S if there exists a connecting N-path consisting only of black voxels • A (closed) N-curve is an N-path P that either contains a single voxel or each voxel in P has exactly two N-adjacent voxels also in P • An open N-curve is an N-curve with two exceptions called endpoints, each of which has only one Nadjacent voxel in P Separability • In continuous space, it is impossible to pass from the region enclosed by a curve to the region outside the curve without crossing the curve itself. • In discrete space, however, the opposite is possible. • To avoid this discrepancy, define opposite types of connectivity for white and black sets. – Opposite types in 2D space are 4 and 8 – In 3D space, 6 is “opposite” to 26 and 18 Separability • Let A, B and C be three disjoint sets of voxels. A is said to N-separate B and C if any N-path P between a voxel in B and a voxel in C meets A • Separability is a topological property 4-separating and 8-separating curves Minimality • A voxel belonging to an N-separating surface is called an N-simple voxel if deleting it will not affect the surface separability. • A surface is N-minimal if it does not contain any N-simple voxels Examples of a 4-minimal curve (left), 8-simple point (center), and a 4-simple point (right). Voxelization • To convert continuous surface representations (e.g. polygon mesh, parametric surfaces) into voxel representations • Need to preserve separability and minimality Pixelizing a Line • For 4-separable or 8-separable, assuming the normal vector is normalized, need to include all pixels with distance to the line between: Voxelizing a Plane • For 6-separable or 26-separable, assuming the normal vector is normalized, all voxels with distance to the line between: abs(Ax + By + Cz + D) <= t Voxelizing a Polygon Mesh • Edges and vertices needs special handling for separability and minimality • Let t denote the desired connectivity distance, either t6 or t26. • Rc = L/2 for 6-separability, for 26-separability: Distance Field • Discrete distance field – Each element in a distance field specifies its minimum distance to a surface geometry – Positive and negative distances are used to distinguish outside and inside of the shape • negative values on the outside • positive values on the inside. Getting a Distance Field (1) • First, voxelize the 3D mesh to a binary surface volume [Kaufman, Cohen, Huang…] • Second, run a distance transform on the surface volume to obtain a solid distance volume – Euclidean Distance – Chamfer Distance • Face, edge, vertex sharing – Manhattan Distance • Face sharing Chamfer distance Getting a Distance Field (2) • Brute force: For every voxel in the volume, compute the minimal distance to the geometric surface – Euclidean distance • Doable with triangle meshes, but hard problem in general • Time consuming Hierarchical Distance Field • Distance fields can be stored hierarchically in Quadtree or Octree structures – Aka: adaptively sampled distance field (ADF) • Use a smaller voxel size in areas of higher details Disadvantages of Conventional Distance Fields • Need to choose an initial volume resolution (the high limit of error tolerance) – When the user picks a tighter tolerance, have to do everything from scratch again • The conventional distance volume is aliased – Real data sets are not smooth, thus not bandlimited Volume Anti-aliasing • Non binary pre-filtered volume [Sramek & Kaufmann] – Need higher order smoothing filters for reconstruction – No idea how much detail is gone in geometric sense • Not exactly sure about how geometric details are defined – Corners – Holes Impasse • Sampling rate is limited • Distance fields of complex geometric models are not band-limited • Impasse: would desire to keep all the geometric details in a volumetric distance field – Geometric details at <0.1% of an object’s dimension Observation • In spatial domain, if all that we want to capture are the distances to a set of finite polygons – Place an anchor point somewhere, and record the distances from the anchor to each of the finite polygons Need New Distance Field Representation • Generalize volume representation from a discretization of a continuous domain entity to a spatial data structure • Try to build a spatial data structure – Every voxel to have all the information necessary to capture the exact local distance field within the span of that voxel – To answer a query of ‘what’s the thickness of an interior point, pnt,’ we only have to deal with the corresponding local voxel CDFR • The spatial data structure is named: CDFR – A Complete Distance Field Representation • In the CDFR, deal with signed Euclidean distances from 3D points to finite triangles only • Each spatial point has a base triangle, which is used to determine the sign of the distance value Base Triangle • Need to decide which triangle is the base triangle of a point, pnt – If pnt is closest to a triangle which pnt orthogonally projects into, then this triangle is the base triangle – Otherwise, if pnt is closest to 2 triangles sharing an edge, then compute pntproj on this edge, connect pnt and pntproj to form a vector V – Otherwise, pnt is closest to several triangles sharing a common vertex, connect pnt and this vertex to form the vector V CDFR • In a CDFR, the center of each voxel serves as an anchor point that captures information for the local distance field in its span • First idea: each voxel stores the id of the base triangle of its center and the corresponding signed distance • Not enough – Don’t have the distance information for other locations in the span of each voxel How much information do we need on each voxel? • Theorem (please refer to paper) – No triangle can be the base triangle to any location in the span of a voxel, v, if its distance to the center of v is larger than thickness(v) + sqrt(3) x voxel_size Constructing a CDFR • First, pick an initial volume resolution – Only affect the performance, not accuracy • Second, voxelize the geometry into a surface volume – On each surface voxel, store those triangles that intersect that voxel – We store on each voxel a list of tuples: {triangle_id, signed distance} //CDD tuples • Third, an iterative contour-by-contour distance transform to obtain the final solid CDFR Distance Transform • Loop: – Each voxel not on the surface volume inherits the CDD list from its 26-neighbors – For all the new triangles that it sees, compute its distance to each new triangle – Update the curr_min_dist – Discard all CDD tuples that have a distance larger than curr_min_dist + sqrt(3)*voxelsize • This loop ends until no new updates take place in the CDFR Answering a Query • What is the minimal distance from an arbitrary 3D point to the surface geometry – Find out which voxel the point resides in, grab all triangles on that voxel – Compute the distance values from that point to all those triangles – The distance value with the minimal absolute value is what we want Extracting a Distance Contour • A ‘Dividing Cube’ algorithm • Extract a point-based distance contour of thickness, t, with an error tolerance, E. – Traverse the CDFR, grab all voxels with min_distance in the range: – Subdivide these voxels to size: – Compute the thickness values of all the subvoxels and extract all sub-voxels whose thickness are within [t - E/2, t + E/2] On Convex Test Models • 32x32x32 CDFR, 512 conventional res 3 On Concave Test Models • 32x32x32 CDFR, 512 conventional res 3 On Practical Parts • 128x128x128 CDFR, 1024 conventional res 3 On Practical Parts • 128x128x128 CDFR,1024 conventional res 3 Storage Size • Only store CDFR for surface and interior voxels. For exterior voxels, just store a tag denoting ‘empty’. • CDD list for each voxel takes: (5 + 4*triangle_cnt) bytes CDFR Storage Size and Construction Time • Connector, 242 triangles, (6.9, 2.0, 2.9) inches • Brevi, 1812 triangles, (38.1, 34.9, 96.0) inches Voxel Cnt (K) Avg tri/surf voxel Avg tri/int voxel CDFR Size (KB) Time (sec) 128 con 319 1.95 2.91 970 8 256 con 2,322 1.43 2.53 7,548 82 128 brevi 373 3.01 4.66 3,459 52 256 brevi 2,659 1.96 3.69 25,260 448 Testing Platform • SGI Octane with 300MHz R12000 processor, 512 MB memory Contour Extraction Time • Depends on which thickness you pick • For instance: brevi at 4 inches Extraction time (sec) 512 f-res 768 f-res 1024 f-res 128 CDFR 23.66 74.65 174.79 256 CDFR 9.25 28.29 64.46 • Higher CDFR resolution, trade storage for shorter extraction time. The Engine Cylinder Head • Can build a 250-res 37MBytes CDFR in 30 min • Can extract 0.137 mm accuracy at 8.5 mm thickness within 11 min (470K points, 1988x3500x1218) 2 frames/sec rendering of the pointbased model and sorted triangle mesh in semi-transparent mode.