| 5751931 | Three dimensional graphical display of information | Cox et al. | ||
| 5793371 | Method and apparatus for geometric compression of three-dimensional graphics data | Deering | ||
| 5818463 | Data compression for animated three dimensional objects | Tao et al. | ||
| 5914721 | Visibility calculations for 3D computer graphics | Lim | ||
| 5929860 | Mesh simplification and construction of progressive meshes | Hoppe | ||
| 5945996 | System and method for rapidly generating an optimal mesh model of a 3D object or surface | Migdal et al. | ||
| 5966133 | Geomorphs and variable resolution control of progressive meshes | Hoppe | ||
| 5966134 | Simulating cel animation and shading | Arias | ||
| 5966140 | Method for creating progressive simplicial complexes | Popovic et al. | ||
| 6046744 | Selective refinement of progressive meshes | Hoppe | ||
| 6075540 | Storage of appearance attributes in association with wedges in a mesh data model for computer graphics | Hoppe | ||
| 6108006 | Method and system for view-dependent refinement of progressive meshes | Hoppe | ||
| 6137492 | Method and system for adaptive refinement of progressive meshes | Hoppe | ||
| 6151033 | Method and apparatus for producing animation data | Mihara et al. | ||
| 6222551 | Methods and apparatus for providing 3D viewpoint selection in a server/client arrangement | Schneider et al. | ||
| 6239805 | Method and apparatus for geometric compression of three-dimensional graphics data | Deering | 345/419 | |
| 6239807 | Method and system for multi-resolution texture mapping | Bossut | ||
| 6262737 | 3D mesh compression and coding | Li et al. | ||
| 6292194 | Image compression method to reduce pixel and texture memory requirements in graphics applications | Powell, III | 345/430 | |
| 6307557 | Decompression of three-dimensional graphics data including quantization, delta-encoding, and variable-length encoding | Deering | 345/428 |
This patent application claims priority to U.S. Provisional Patent Application No. 60/088,495, entitled Compression of Time Dependent Geometry, filed on Jun. 8, 1998 by Jerome E. Lengyel and Brian K. Guenter, and U.S. Provisional Application No. 60/131,437, entitled Compression of Time-Dependent Geometry, filed on Apr. 26, 1999, by Jerome E. Lengyel, which are hereby incorporated by reference in their entirety.
This patent application is related to co-pending patent applications filed concurrently herewith entitled COMPRESSION OF ANIMATED GEOMETRY USING BASIS DECOMPOSITION by Jerome E. Lengyel, Brian K. Guenter, and Henrique S. Malvar, and COMPRESSION OF ANIMATED GEOMETRY USING A HIERARCHICAL LEVEL OF DETAIL CODER by Jerome E. Lengyel, which are hereby incorporated by reference in their entirety.
The invention relates to computer generated graphics and more specifically relates to compression of time dependent geometric data.
In three-dimensional (3D) graphics, moving objects are modeled using 3D geometric models. These models are typically represented as sets of 3D coordinates that define the position of a mesh of surface elements representing the surface of an object in a 3D space. To render a scene containing 3D object models, the graphics rendering pipeline first performs a series of geometric transformations to transform models from their local coordinate space to global or “world” coordinates of the scene and then to viewing or “camera” coordinates of a 2D view space. It then converts the transformed geometry and its attributes (color, shading) to an array of pixel values representing an output image. This process is typically repeated for each image frame in an animation sequence as the object models move about the scene.
A moving graphical object is expressed in terms of time-dependent geometry. The mesh representing the 3D positions of a model moves and deforms over time to simulate the motion of a 3D object. There are a number of motion models used to describe the motion of 3D geometry in animation. Relatively simple objects can be modeled using geometric transformations on rigid bodies. However, increased computing capacity and the demand for more realistic animation has increased the demand for applications involving real-time playback of complex animated models.
Sophisticated authoring tools and modeling programs such as the Softimage modeling tool from Avid Technology, Inc., are capable of creating extremely complex time-dependent geometry. Free-formed deformation lattices, joint envelopes, and physical simulation, and other manipulations can create complex moving geometry sequences. As real-time applications demand more than simple rigid models with animated transformations, it becomes more critical to develop ways to efficiently store and playback complex animated models with real-time performance.
In addition to increasingly sophisticated authoring tools, advances in 3D capture systems are also likely to increase the complexity of time-dependent geometry used in 3D graphics applications. The term “3D capture” refers to the process of generating a digitized 3D model of a real object. Range scanners currently produce static geometry sets. However, as range-scanner accuracy and speed improves, there will be more sources of large time-dependent geometric meshes. Simulation is another source of rich animated geometry. Finite-element methods produce realistic and complex animations that are too expensive to compute in real time.
As the sources for complex time-dependent geometry become more prevalent, there is an increasing need for more efficient ways to store and transmit time-dependent geometry to reduce memory and bandwidth requirements. Researchers have studied ways to compress static geometry. Please see “Geometric Compression,” Michael F. Deering, pp. 13-20, SIGGRAPH '95; “Optimized Geometry Compression for Real-Time Rendering,” Mike M. Chow, pp. 347-354, Proceedings of IEEE Visualization, '97; “Real Time Compression of Triangle Mesh Connectivity”, Stefan Gumhold and Wolfgang Straβer, pp. 133-140, SIGGRAPH 98; “Geometric Compression Through Topological Surgery”, Gabriel Taubin and Jarek Rossignac, ACM Transactions on Graphics, Vol. 17, No. 2, April 1998, pp. 84-115; “Progressive Forest Split Compression”, Gabriel Taubin, Andre Gueziec, William Horn, and Francis Lazarus, pp. 123-132, SIGGRAPH 98; “Triangle Mesh Compression”, Costa Touma and Crag Gotsman, Proceedings of Graphics Interface '98, pp. 26-34; and “Description of Core Experiments on 3D Model Coding”, Frank Bossen (editor), ISO/IEC JTC!/SC29/WG11 MPEG98/N244rev1, Atlantic City, October 1998. While this research addresses compression of static geometry, more work needs to be done to develop ways to compress a moving 3D geometry stream.
In contrast to compression of 3D geometry, the fields of still image and moving image compression are well developed. A variety of techniques can be used to compress still images, such as run-length encoding, JPEG coding, etc. There are also many techniques for compressing image sequences such as MPEG, AVI, etc. Researchers have even presented techniques to use 3D geometry to assist in movie compression. See “Motion Compensated Compression of Computer Animated Frames,” Brian K. Guenter, Hee Cheol Yun, and Russell M. Mersereau, pp. 297-304, SIGGRAPH '93; “Polygon-Assisted JPEG and MPEG Compression of Synthetic Images,” Mark Levoy, pp. 21-28, SIGGRAPH '95; and “Accelerated MPEG Compression of Dynamic Polygonal Scenes,” Dan S. Wallach, Sharma Kunapalli, and Michael F. Cohen, pp. 193-197, SIGGRAPH '94.
In one respect, the traditional graphics rendering pipeline provides a form of compression of animated geometry in the case where an animated object is represented as a static, rigid body that is transformed using a series of animated transformation matrices. In this case, the time-dependent geometric model is reduced to a single mesh representing the rigid body and a series of animated transformation matrices that describe the rigid body's motion over time. This simple separation into coherent parts allows the encoding of a large family of time-dependent animations because moving objects can be constructed as hierarchies of rigid objects. While this is an effective way to compress a limited class of time-dependent geometry, it does not fully address the need for a more general and flexible approach for compressing more complex animated models. Some forms of complex motion are not well simulated using a hierarchy of rigid bodies and associated transformation matrices. In addition, some models are not constructed from rigid bodies, but instead, originate from a geometry source such as an authoring tool or 3D capture tool where the geometry is not expressed in terms of rigid bodies.
The invention provides methods for coding time-dependent geometry and animation. Aspects of these methods can be implemented in encoders and decoders of time-dependent meshes representing animated 3D objects as well as 3D animation that varies over a dimension other than time. These techniques can be used to store and transfer a 3D geometry stream more efficiently. This is useful within a computer system to reduce bandwidth between a host processor or storage device and a graphics rendering engine. It is also useful for reducing transmission bandwidth between computers on a local or wide area network. In addition, these techniques are useful in dynamic compression contexts, where a geometry stream is encoded within time constraints, such as applications where the geometry stream is generated, coded and then decoded for immediate playback.
In general, the compression methods of the invention code a geometry stream by solving for low-parameter models of the stream and encoding the residual. A compressor operates on a time-dependent geometry structure representing 3D positions of an object at selected time samples. In particular, the coders described below focus on compressing a matrix of vertex positions that represents the 3D positions of a mesh (the columns of the matrix) for series of time samples in an animation sequence (the rows in the matrix represent meshes at selected time samples). The compressor approximates the mesh for each time sample and encodes the residual between the approximated mesh and the actual mesh from a row in the matrix. The compressor encodes a coherent portion of the geometry or base mesh, the residual, and parameters used to approximate the mesh. The decompressor decodes the compressed geometry stream and reconstructs the mesh for selected time samples from the coherent portion, the residual and the parameters used to approximate each mesh.
One form of coder is referred to as a geometric transform coder, or more specifically, a mesh transform coder. This coder encodes a residual by determining the difference between each mesh in the input matrix and a transformed base mesh. A geometric transform is used to approximate the motion between a base mesh and the mesh for a current time sample. The geometric transform may be provided to the coder or derived by matching a base mesh to the mesh at each time sample. Similarly, the base mesh may be provided to the coder, or derived from the input matrix of vertex positions.
The above coding techniques may be extended to other forms of geometric data used in animation. For example, they apply to coding of texture coordinates.
Further features of the invention will become apparent with reference to the following detailed description and accompanying drawings.
Introduction
The time-dependent geometry that describes the motion of an animated 3D object can be expressed in the following matrix of 3D positions, P:
Each column in matrix P represents a 3D position, such as a vertex position in a 3D mesh. The rows represent increments of time, such as frames in an animation sequence. The superscript for each element in the matrix identifies a 3D position, and in this notation corresponds to the column number. The subscript for each element in the matrix identifies a time increment, and corresponds to the row number in the matrix. If the matrix P is considered to be continuous in space, then it conceptually has an infinite number of 3D positions (columns) that completely describe the 3D surface of an object. In actuality, there are a finite number of the 3D positions for each time increment in an animation, corresponding to the geometric level of detail of the animation at that time. If the matrix P is considered to be continuous in time, then there are conceptually an infinite number of rows. In a graphic rendering pipeline, of course, the 3D model is rendered into an output image at discrete times, and most likely at a periodic rate such as the frame rate. In some architectures, the update rate of an object can vary, and therefore, each row need not correspond to a frame in an animation sequence. In a more general representation, the rows simply correspond to time samples.
The matrix P can be factored into three components as shown in the following expression:
Component G is the polygon interpolation or surface patch interpolation implemented in the low-level graphics hardware. The component S is an interpolation of the matrix through time. In other words, the time interpolation component specifies the discrete times at which the 3D model is rendered to an output image. By controlling the level of spatial and temporal detail through the geometry and time interpolation functions, arbitrary space-time polytopes may be encoded using this formulation.
Since the time and geometry interpolation components are typically implemented in graphics rendering hardware, the compression techniques described below focus on the vertex position matrix, V.
Each column of the vertex position matrix, V, describes the motion of a single vertex.
The columns of the matrix V represent vertex positions. In particular, the superscript of each element in the matrix V identifies the vertex. The rows in the matrix V represent time samples. Subscripts of each element in the matrix V identify the time samples.
Generic Weighted Trajectories
All of the following techniques can be considered specializations of the following mesh animation approach:
Affine Transformations
In typical graphics architectures, the matrix V is factored into hierarchies of rigid objects. This is a smaller class of moving geometry than the more general V matrix above because it is limited to a specific type of motion, namely, a series of affine transforms performed on rigid bodies. To illustrate this concept, the special case of matrix V for rigid body motion can be expressed as:
In this case, the time-dependent geometric matrix for rigid bodies P
There are two primary types of graphics rendering architectures: immediate-mode architectures and retained-mode architectures. Immediate-mode architectures re-send the entire vertex and geometric connectivity matrices each frame. This process can require a great deal of bandwidth because the large amount of data that needs to be sent to a 3D geometry rendering subsystem for each frame. Retained-mode architectures, in contrast, send the vertex and geometric connectivity matrices just once for a sequence of frames, and encode the changing affine transformation used to instruct the 3D rendering subsystem how to modify the position of the rigid bodies for each frame.
In fact, the segmentation of the columns of the matrix V into sets of rigid bodies with coherent motion is a form of compression because it enables the frame-to-frame changes in position of the 3D geometry to be encoded in the affine transforms. However, it is rather limiting from the standpoint that this motion model applies only to rigid bodies whose motion can be defined in terms of affine transformations. The following sections describe methods of compressing a more general time-dependent matrix of vertex positions that is not limited to animated rigid bodies.
Free-Form Deformations
More general graphics architectures overcome this limitation on the motion of the rigid bodies by supporting more general parameterized deformations. Examples of more general 3D motion models include inverse-kinematic linkages with free-form deformation lattices. This form of motion model is used widely for character animation. The following expression illustrates how the general time-dependent geometry matrix is factored for this more general motion model. The factors of the time-dependent geometry matrix include a matrix of deformation functions F, a series of rigid bodies V, and corresponding series of geometry interpolation functions for each of the rigid bodies G.
The deformation functions in the matrix on the left typically have a small number of parameters that define the motion of a set of vertices that form a rigid body. These motion parameters for each deformation function are sometimes splined through time or are computed from user input to determine the position of a rigid body for a frame in an animation sequence. In the above expression, the multiplication of a deformation function F with a corresponding rigid body {circumflex over (V)} indicates the application of the deformation function F to the vertices of the rigid body.
Key Shapes
Another useful compression technique is to decompose the matrix into basis functions and weights. This technique goes by several names: principal component analysis or the KL-transform (Karhunen-Loeve).
This transformation maximally decorrelates the data and produces an orthonormal basis. However, the KL approach cannot capture non-linear transformations of the data. Imagine a rigid shape spinning around the z-axis while translating in x. There is no set of basis shapes that can be combined to capture this simple rotation plus translation.
Skinning
Another widely used technique is to use “skinning” weights βj on each vertex to determine how the moving “bone” coordinate frames C
Special-Case Weighted Trajectories
Time dependent geometry may also be represented through the motion of selected control points in a 3D space, along with an association between these control points and the vertices in a mesh. See co-pending U.S. patent application Ser. No. 09/093,590, entitled, “Method And System For Capturing And Representing 3d Geometry, Color And Shading Of Facial Expressions And Other Animated Objects,” by Brian Guenter, Cindy Marie Grimm, and Henrique Sarmento Malvar (Guenter et al.), which is hereby incorporated by reference in its entirety. In Guenter et al, the motion of the control points is applied to the associated vertices to deform the mesh. The motion of a control point from one frame to another is referred to as a trajectory.
While this use of control points is generally applicable to a variety of graphics applications, Guenter et al used control points to encode time-varying geometry representing a human face. Guenter et al recovered the motion of an actor's face by attaching fiducial “dots” and then using vision techniques to recover the motion of the dots. Guenter et al also captured a static 3D mesh representing the actor's face in a rest position using a conventional 3D capture system. Using these dots as control points, Guenter et al applied the movement of the dots to deform the mesh, as follows:
Guenter et al compress this factorization further by calculating the principal components of the dot trajectory matrix and then coding the resulting coefficients.
This encoding scheme uses key shapes for the dot trajectories and then applies the motion of the dots to the rest of the vertices.
Segmentation
The first step is to decide which columns of the vertex matrix V should be encoded in local coordinate systems. For certain classes of animation, the modeling package can provide this information. Several current animation packages use “bones” and “skinning”, in which coordinate frames are weighted to produce the final vertex position. For generic animations (output of simulations, shape cameras, etc.), we analyze the input vertex matrix for good decompositions. Automatic analysis is also useful if the number of “bones” needs to be changed for the run-time system. This clustering problem is common in learning, vector quantization, and other compression techniques. In our case, the vectors consist of the columns of the vertex matrix. The problem is to decide how many clusters are needed and which vertices should belong to each cluster. A further issue is to decide the class of deformation for each cluster.
The cluster segmentation problem is as follows: Given vertex matrix V, return number of clusters, ncluster, and a list of cluster assignments for each vertex. Multiple assignment is allowed, so that each vertex may belong to a set of clusters and have an associated weight. Each cluster has an associated time-varying coordinate frame C that is given or calculated based on the vertices that are members of the cluster.
The prototype segmentation algorithm uses a greedy clustering approach based on the triangles of the original mesh. A set of seed triangles is chosen at random. All of the triangles can be used as seed triangles, if desired, but the experiments below used approximately 10% of the original triangles in the mesh. The coordinate-frame trajectories of the seed triangles are compared and the clusters combined if within a given tolerance. The trajectories of the vertices are projected to the local coordinate system of each of the resulting clusters and classified according to the quality of the match throughout the trajectory.
Geometric Transform Coding
Geometric transform coding refers to a method for compressing time-dependent geometry by approximating the motion of 3D geometry with a geometric transform and then encoding the difference between transformed 3D geometry and the actual position of the 3D geometry for selected time samples throughout an animation sequence. These time samples correspond to the times in the animation sequence where the position of the object is updated (not necessarily every frame). The time-dependent geometry of an animation sequence is expressed as a series of 3D meshes, each identifying a set of vertex positions at a particular time sample in an animation. A specific example of this form of time-dependent geometry is the vertex position matrix V described above. The geometric transform coding method begins by selecting a base mesh. It then determines a geometric transform between the base mesh and each of the meshes in the animation. To compress time-dependent geometry, this method determines the difference between a transformed base mesh and the actual mesh, called the residual.
The geometric transform coding method is competitive with the special case where the time-dependent geometry is comprised of animated rigid bodies. In this special case, the base mesh corresponds to the rigid body and the geometric transform corresponds to motion model applied to the rigid body, such as an affine transformation or lattice free-form deformation. To demonstrate the concept, consider a block of vertices that are animated together, i.e. a block of columns that corresponds to a rigid body in either of the simpler classes of moving geometry, such as affine transformations or inverse kinematic linkages with free-formed deformation lattices. The residual in this case measures the distortion between the transformed base rigid body and the current mesh. The following expression illustrates the computation of the residual for the case where a deformation function F is applied to a rigid body {circumflex over (V)}.
If the time-dependent geometry for the animation sequence is created by applying the deformation function to a rigid body, then there will be no distortion. The geometric transform coding methods described below are more general because they can represent more general forms of motion and can be adapted to encode arbitrary meshes where the deformation function or the rigid body portions of the time-dependent geometry are not known at the time of coding.
To compress a given data set representing time-dependent geometry, the geometric transform method quantizes and encodes the deformation parameters, the base mesh or meshes, and the residual. When the time-dependent geometry matches one of the simpler subclasses (rigid body or lattice FFD), the residuals are zero and can be encoded with very low overhead.
The geometric coding method can be used alone, or in combination with other compression techniques described below to take advantage of the coherence in the time-dependent geometry matrix V. One way to further take advantage of the temporal and spatial coherence in the time-dependent geometry matrix is to identify and encode coherence among the rows and columns of the matrix V. The methods for coding time-dependent geometry described below improve upon the compression inherent in simpler motion modules, and yet are applicable to more complex motion models while still being compatible with current 3D graphics rendering architectures.
The base mesh in this encoder is intended to be a mesh of vertices representing a rigid body. However, in some implementations, the base mesh may not be provided to the coder and has to be derived from the stream of time-dependent geometry, V. In these circumstances, the base mesh may be calculated by using a row of the matrix V as the base mesh, by taking an average of several rows of V as the base mesh, or by pre-computing the base mesh that results in the smallest combined bandwidth for the transformation parameters and the residuals. The latter approach is a non-linear optimization of both the transformation parameters and the base mesh at the same time.
The geometric transforms (“Xfm”) illustrated as input to the compressor in
The compressor
The output of the compressor
The decompressor
The decompressor
Transformation Matching
In some applications, the time-varying transformation parameters are not available before the coding of the time-dependent geometry commences. This is especially the case in applications involving the coding of a more general matrix representing sets of time-dependent vertex positions that are not simply a rigid body transformed using a standard geometric transform such as an affine transformation or a free-form deformation. For these applications, the compressor derives a series of transformations that best match a base mesh to the current mesh for selected increments of time in an animation sequence. Below, we describe a coder that derives the transformation parameters for a matrix representing time-dependent geometry with general, arbitrary motion. The example that is described and illustrated refers specifically to deriving affine transformations, but the same approach can be applied to other motion models as well.
The inputs to the compressor
Like the base mesh, the transformation parameters can also be derived from the matrix of vertex positions. As shown in
The compressor
As in
The implementation of the transform match module
In the above expression, A
Another optimization is to use normal equations, which involves the accumulating and inverting of a 4×4 fitting matrix for the base mesh, and the matrix product of an n by 4 matrix with the fitting matrix. This approach is depicted mathematically in the following two expressions:
While the technique of normal equations is not as robust as solving the full system of equations to determine the transformation coefficients, it works reasonably well in practice. This approach is not as accurate as solving for the full system because information is lost when projecting to the smaller subspace. However, the transformation coefficients are only an approximation of the motion of a mesh, and therefore, the technique of normal equations is sufficiently accurate. To calculate the best matching affine transformation for each frame of a block of segmented vertices, the prototype employs the following method:
1) Using the rest shape V
2) For each frame j of the animation, compute the best matching affine transformation as A
3) When the group of vertices is degenerate (i.e. when all the points lie in a plane), then the V
If the geometric transformation used in the technique illustrated in
In the above expression, the residual parameters ΔV
The compressor
The decompressor operates on a quantized residual, quantized transform parameters, and the quantized base mesh. To reconstruct each mesh in the time-dependent geometry, an adder module
Mesh Feedback
As noted in the previous sections, the base mesh for some forms of time-dependent geometry is a pre-defined mesh representing a rigid body while in other applications, the mesh is derived from a general vertex of matrix positions. To take advantage of coherence of the time-dependent geometry over time, a geometric transform coder can be adapted to use the mesh of the previous frame as base mesh for the current frame. This approach adds a feedback loop that uses the mesh of the previous frame as a predictor of where the mesh will be in the current frame. It is important to note that this form of prediction is different than row prediction performed on the matrix of vertex positions because the transformation is in 3D coordinate space instead of N-dimensional vector space. However, as explained in further detail below, both row and column prediction can be used to further compress a matrix of 3D position data such as the residual or the base mesh.
In addition to computing the residual as in the other mesh coders, the compressor also reconstructs and maintains a copy of the re-constructed mesh from the previous time sample. Starting with an initial mesh as a predictor for the mesh of the first frame, the transform match module
The transform match module
The transformation module
A feedback loop in the compressor reconstructs the approximation of the current mesh and temporarily stores the approximate mesh of the current frame in memory
The decompressor
The inverse transform coding method described above and illustrated in
Column and Row Prediction and Sorting
Another way to exploit the geometric and temporal coherence in a matrix of time-dependent geometry is to perform prediction on the rows and columns of the matrix. As in the compression methods described above, a stream of time-dependent geometry can be expressed as a matrix of 3D geometric position data, where each row corresponds to a time sample such as a frame in an animation sequence, and each column is associated with a 3D position. The residual matrix that results from subtracting the original matrix from the compressed matrix (from using the methods described above) has the same form as the original matrix, and the compression techniques described in this section apply equally well to the residual matrix as to the original vertex matrix. Temporal prediction can be performed by pairing each row with another row or a reference row, computing the difference between each corresponding element in the two rows, and then encoding the difference between the rows by, for example, quantizing the difference values. Geometric prediction can be performed on the columns using a similar approach. Also, since the geometric connectivity among the 3D positions associated with each column is typically specified independently, the columns can be sorted such that the values of the corresponding elements in neighboring columns is as similar as possible.
For more general vertex matrices, the sort module
To compute this similarity measure:
1) Average each column in the matrix and store the result in a row vector, {overscore (V)}; and
2) Subtract the column mean value from each row, {circumflex over (V)}
The sorter may then use the resulting similarity measure to sort the columns.
In the prototype, the similarity between columns i and j is computed in two ways: raw column dot product, V
Row sorting can be done in a similar way to column sorting.
Vertices that move in similar paths are considered to be similar. This particular sort involves a linear sort on a 2D surface, so the best possible result is a path through the vertex matrix that fills the surface similar to a Peano curve, which is one class of “space-filling” curves. In other words, since the vertices lie on a 2D mesh, there is more coherence among neighbors than can be exploited than with a simple 1D sort, but a 1D sort can still improve the coherence and comes with low decompressor cost. A later section describes a sorting technique in more detail that improves coherence among the columns by clustering neighboring vertices via edge contractions.
The sort module
In addition to spatial prediction, the compressor
The compressor
To decompress the compressed data stream, the decompressor
While the above example in
Basis Decomposition Coder
Another method for compressing a matrix representing time-dependent geometry is to decompose the matrix into basis functions and weights using principal component analysis. Techniques for finding the best set of basis vectors for a matrix go by many names: PCA (principal components analysis), KL-transform (Karhunen-Loève), SVD (singular value decomposition.), etc. The SVD factors the vertex matrix V into UDW, where U and W are orthonormal matrices, and D=diag(s
The matrix on the left represents the weights, which are sometimes also referred to as coefficients. As in the original matrix of vertex positions, the matrix of the weights shown above has several rows corresponding to time increments and columns representing geometric positions. Similarly, the matrix on the right representing the mesh basis vectors includes a row for each time increment and columns representing basis vectors. If the number of important basis vectors is small, good compression can result by encoding and transmitting just the most important basis vectors, and then transmitting the weights per frame plus the residual from the rest of the basis vectors that were not encoded explicitly.
While principal component analysis can be performed on a full-size matrix of vertex positions for a 3D object, it is computationally expensive to decompose the full matrix, especially for complex objects. Thus, while one approach is to compute a full-sized singular value decomposition V=UDW with U of size nframe×nframe and W of size nvertex×nvertex, a better approach is to perform mesh simplification as a pre-processing step on the matrix and then perform basis decomposition. In this case, the original vertex matrix V is filtered down in space (using the Progressive Mesh approach) and time (using knot deletion or wavelet encoding) to a smooth version V
Another approach is to use an approximate SVD coder which can iteratively compute a small rank approximation to the singular value decomposition, V
To decompress the compressed data stream, the decompressor
Quantization
There are a variety of conventional quantization techniques that may be used to quantize the numbers representing components of the encoded time-varying geometry. To quantize the warp coefficients and residual, the compressor uses a three-range regular quantizer. See Allen Gersho and Robert M. Gray, “
Spacetime Level of Detail
Mesh simplification techniques can be used to convert a matrix of 3D time-dependent geometry into a hierarchy of mesh refinements. Some examples of mesh simplification techniques include progressive meshes as described in “Progressive Meshes,” Hugues Hoppe, pp. 99-108, SIGGRAPH '95 and “View-Dependent Refinement of Progressive Meshes,” Hugues Hoppe, pp. 189-198, SIGGRAPH '97. For more information on progressive meshes, see the following U.S. patent application Ser. No.: 08/586,593, entitled, “Encoding and Progressive Transmission of Progressive Meshes,” by Hugues Hoppe; Ser. No. 08/797,502, entitled, “Mesh Simplification and Construction of Progressive Meshes,” by Hugues Hoppe; Ser. No. 08/7907,501, entitled, “Geomorphs and Variable Resolution Control of Progressive Meshes,” by Hugues Hoppe; and Ser. No. 08/797,781, entitled, “Selective Refinement of Progressive Meshes,” by Hugues Hoppe, which are hereby incorporated by reference in their entirety.
Quadric error mesh simplification is described in “Surface Simplification Using Quadric Error Metrics,” Michael Garland and Paul S. Heckbert, pp. 209-216, SIGGRAPH '97.
Other mesh simplification techniques may be used as well, such as mesh simplification used in the MetaStream 3D file format from MetaCreations Corporation.
There are a number of benefits to using level-of-detail control in the compression of time-dependent geometry. By simplifying the mesh representing 3D geometry, level-of-detail control reduces the cost of encoding the time-dependent geometry considerably. The motion of the simplified geometry is a good approximation of the motion represented in the detailed mesh, and therefore, a simplified version of the geometry can be used to compute compression parameters such as affine transforms in a mesh transform coder and basis vectors in basis decomposition coder.
Another benefit of level-of-detail control is that it enables the compressor to change the topology of the mesh through time. Depending on where a particular 3D object is located in the scene and on how much it is changing, the time-dependent geometry of the object can be represented with higher or lower level-of-detail. Thus, a 3D object or a part of an object can be represented at varying levels of detail depending on its importance in an animation sequence at selected points in time.
By extending mesh simplification through time as well as space, an efficient representation of time-dependent geometry can be created. Specifically, mesh simplification can be extended to create a data structure representing time-dependent geometry as a pyramid in space and time. The pyramid represents the hierarchy of a 3D object's level-of-detail in both space and time. This space-time pyramid can be used as a form of compression because the hierarchical representation of the time-dependent geometry of an object is smaller than the original time-dependent geometry consisting of a mesh for each frame in an animation. The hierarchical representation is also efficient for transmission because refinement and coarsening records used to refine or coarsen the hierarchical representation can be transmitted instead of transmitting a mesh for each frame. As noted above, the hierarchical representation also makes other forms of compression described above more efficient because they can be designed to operate at the appropriate level of detail in the space-time pyramid.
Local Frames
As explained in further detail below, the hierarchical representation of the space-time pyramid can be represented using a series of expansion records. By encoding the expansion records in the local coordinates of the mesh surface, much of the motion can be carried along to the fine detail. This local encoding has a number of benefits, including hierarchical control of the mesh shape and hierarchical quantization (where the fine detail is coded with fewer bits). The benefits are similar to the benefits achieved in subdivision schemes, such as the ones described in “Interpolating Subdivision for Meshes with Arbitrary Topology”, Denis Zorin, Peter Schroeder, and Wim Sweldens, pp. 189-192, SIGGRAPH '96; “Interactive Multiresolution Mesh Editing”, Denis Zorin and Peter Schröder and Wim Sweldens, pp. 259-268, SIGGRAPH '97; and “Multiresolution analysis for Surfaces of Arbitrary Topological Type”, Michael Lounsbery, Tony D. DeRose, and Joe Warren, pp. 34-73, ACM Transaction on Graphics, volume 16, January 1997. However, in the context of time-dependent geometry, the coherence in the local coordinate system is even greater through time.
In the current implementation, the hierarchy of the space-time pyramid is created by factoring the matrix of time-dependent vertex positions into:
1) contracted sets of geometry, and 2) expansion records. The following expression shows how the matrix of vertex positions is factored into a matrix of contracted vertex columns and vertex expansions.
Each of the contracted vertex columns represents a delta between a pair of neighboring levels in the spatial hierarchy. The vertex expansions include an expansion record for each corresponding contracted vertex column indicating how the contracted vertex column can be expanded to restore to an approximation of the original matrix.
The vertex of matrix positions can also be factored into time expansions and a matrix of contracted vertex rows as set forth in the following expression:
In the above expression, the rows represent deltas between neighboring pairs of a hierarchy in the time dimension. The time expansions T include time expansion records corresponding to each contracted vertex row that define how the corresponding row can be expanded to restore it to an approximation of the original matrix.
Combining the concepts of the previous two expressions, the matrix of vertex positions can be factored into time expansions, a matrix of contracted vertex blocks, and vertex expansions as set forth in the following expression.
The contracted vertex blocks represent deltas between a neighboring column and row in the space-time hierarchy.
Refinement Basis Coding
The current implementation uses a mesh refinement technique to create a series of edge-contraction/vertex-split records. To decrease the level of detail of a mesh, edges interconnecting the vertex positions are collapsed to create a mesh with fewer vertices. Conversely, to increase the level of detail of a mesh, vertex positions are split into additional positions to create a more detailed mesh. By separating the sets of delta values from the topology of the mesh refinements, the implementation obtains a refinement matrix of the following form:
| Split | Split | Split | Split | |||||
| | ||||||||
| D | D | D | | . . . | D | D | D | D |
| . | . | |||||||
| . | . | |||||||
| . | . | |||||||
| D | D | D | D | . . . | D | D | D | D |
The matrix above represents a vertex expansion list. The top row of the matrix denotes splits in the spatial hierarchy of the time-dependent geometry. Subsequent rows in the matrix correspond to increments of time. Columns in the matrix correspond to delta values between neighboring levels of hierarchy in the spatial domain.
In the current implementation, the contraction coefficients run from right to left and, conversely, expansion coefficients run from left to right. Due to the structure of the refinement procedure, the magnitudes of the delta vectors stored at each element in the matrix decrease from left to right. Intuitively, this is because the first edges to be collapsed perturb the original mesh the least, by design. There is more signal strength on the left hand side of the matrix, and it becomes progressively smaller from left to right in the matrix.
The refinement matrix can be used to improve the efficiency of the compression methods described above, and specifically, the geometric transform method and the basis decomposition method. In a test case, for example, the current implementation of the mesh refinement method converted an original mesh having approximately 3000 vertices into a refinement matrix. The affine transformation coefficients computed in the prototype geometric transform coder and the basis vectors as computed in the prototype basis decomposition coder became more tractable by using only 300-1000 elements on the left hand side of the refinement matrix. In effect, this mesh simplification performs a low-pass filter on the mesh in the perceptual advantageous way.
The particular ordering of the elements in the expansion list is determined by the optimization criteria used during the mesh simplification process. The current implementation uses the quadric-error measure Progressive Mesh technique on the mesh of the first frame of the animation and applies the result to the rest of the rows in the original time-dependent matrix of the geometry data. This approach is reasonably fast and accurate. However, in the dynamic compression context, this particular ordering may not be optimal for the entire animation sequence. To find a more optimal ordering, the dependency graph of vertex splits can be used to re-order the expansion records with compression and fidelity measures such as the quadric-error measure used at the same time. In other words, the dependency graph of vertex splits determines which split columns can be reordered and which cannot due to dependencies on splits of vertices further to the left in the matrix. A more general approach would be to search for the particular Progressive Mesh (PM) expansion that gives the best compression/best visual quality. For a particular moment in time (in other words, for a given row in V), the Progressive Mesh approach finds the best sequence of vertex collapses to match the spatial geometry of the lower level of detail mesh to the spatial geometry of original mesh. For time-dependent geometry, to measure the quality of a particular PM requires summing the error in the geometry over the time dimension (in other words, over the rows of original vertex matrix V) for each level of detail of the PM.
For example, a PM can be computed for each row of V and then tested over all the rows of V for geometric accuracy. Or a PM can be computed for the average mesh obtained by taking the average of the columns of V.
Examples Illustrating Operation of the Space-time Coder
To help explain the space-time coder, take the example of a human character. From a distance, all that is needed is the translation and rotation of the whole body at low polygon count, with limbs rigidly fixed. As the character gets closer, the gross movement and shape of the limbs is needed to convey the proper perception of the motion. As the character gets even closer, the fine detail in the movement and shape of the face and other muscles becomes important. As the character then recedes, less detail is needed, in reverse order of the steps listed above. To achieve the appropriate gradual increase and then decrease in detail, the space-time codec transmits first a simple geometric representation of the model and a simple version of the animation.
Then, based on the viewpoint of the client, the server streams down spatial and temporal detail updates as needed.
In this context, the server refers to the system entity that acts as the source of time-varying geometry, and the client refers to the entity where playback occurs. Within this broad context, there is a wide range of potential applications to reduce bandwidth and memory requirements. The server and client may be software processes executing on the same or different processors. The server may be a software module executing on a host processor and the client may be a graphics co-processor in a computer system. The server may be software executing on a first computer, and the client may be a hardware device or software module executing in a second computer, which is connected to the first computer via a modem connection, a local area network or wide area network.
Derivation of the space-time pyramid
The input is a densely time-sampled set of meshes M(
The first step is to segment the mesh into factors that are animated independently and then combined with an animation expression. For the cube, the desired animation expression is:
where
Each of the k terms encodes a segment of the mesh with a different speed of rotation. The bottom segment matches the bottom of the cube and is stationary. Going from bottom to top, the speed of each segment gradually increases up to the top segment that matches the y-rotation of the top of the cube.
To obtain this animation expression from the raw input sequence, a list of geometric transform encoding steps is applied to the mesh. An example list is the mean-value trajectory of the current V matrix, then a series of affine-match geometric encodings. The mean of each row of the V matrix mesh gives the trajectory of the center of mass, which gives the Translation term of the animation expression. The translation of the cube is illustrated in the bottom animation sequence of FIG.
Then, a series of affine-match geometric transform encodings matches the rest of the vertices that are rotating about the y-axis. A y-rotation term that is matched to the entire vertex matrix will match well with the center of the cube, since the vertices near the center of the cube move with the average rotation. The encoding starts from the center of the y-axis, and then moves outwards up to the top and down to the bottom, based on the quality of the match to the next recovered term in the animation expression. This gives an animation expression of the form:
A simple algebraic simplification reduces this to the desired animation expression (A).
The detail terms can be encoded in space or in time, as described in the next two paragraphs. The job of the encoder is to choose, at each step in the encoding sequence, the dimension with the most coherence. This is performed by exploring both dimensions and choosing the detail smoothing with the best prediction.
The spatial dimension of each segment is coded using progressive mesh edge collapses using a typical mesh, which is either the first in the sequence or the initial unanimated mesh (also called the rest shape). An edge collapse combines two columns of V into a single column and encodes a delta to recover the original columns.
The temporal dimension of each segment is coded in two ways. For sparse and smooth data, the vertex positions and animation coefficients are splined through time. Higher level of detail is added by inserting a new spline vertex between two existing ones to give the motion a new local feature. One form of inserting such a vertex is called knot insertion. A time-edge collapse combines two rows in the current segment and encodes a row delta to recover the original rows. For dense animation, wavelets are used and higher level of detail is added with more detail coefficients. For smooth transitions between levels of detail, the client side representation is blended with the new detail coefficients while retaining the smoother coefficients.
Given a desired view-dependent resolution in space and time, checkpoints are saved and the encoding begins recursively in each dimension. This produces a pyramid lattice of meshes. The links between each node in the lattice are the series of updates needed to move from one to the other.
Examples of the data structures used in the space-time coder are provided below. The data structures are categorized based on whether they reside on the server or client, or are sent between the client and server during selective playback of a 3D-animation sequence.
Format of the client-side data structures:
The following data structures are used to represent animation in the client.
| //triangular mesh for a single point in parameter space | |
| struct Mesh { | |
| int m_vertex; | // number of vertices |
| int m_ndim; | // number of vertex dimensions (x, y, z + others) |
| float *m_avertex; | // nvertex * ndim array of vertices |
| int m_ntri; | // number of triangles |
| int (*m_aitri) [3]; | // triangle indices into m_av |
| }; | |
| // one dimensional spline | |
| struct Spline1D { | |
| int m_nsample; | // number of samples in time |
| struct Sample1D { | |
| float m_t; | // time value |
| float m_av[0] | // ndim array of values |
| } m_asample [0]// array of variably spaced samples | |
| }; | |
| // affinely transforrned segment | |
| struct AffineVertexSegment { | |
| // we have two gather/scatter dimensions: vertex indices and vertex values | |
| int m_nvertex; | // <= nvertex |
| int *m_aivertex; | // indices of affected vertices |
| int m_ndim; | // <= ndim of vertex |
| int *m_aidim; | // indices of affected dimensions |
| float *m_av; | // nvertex * ndim values of rest shape |
| Spline1D *m_xfm; | // ndim * (ndim + 1) sp lined coefficients of affine |
| transform | |
| Spline1D *m_avs; | // nvertex * ndim splined residuals |
| }; | |
| // affineiy transforrned mesh | |
| Struct MeshAffine1D { | |
| Mesh m_mesh; | // current mesh |
| int m_nsegment; | // number of affinely transformed segments |
| AffineVertexSegment *m_avs; // list of affineiy transformed segments | |
| }; | |
Format of the server-to-client data structures:
The server may communicate the following data structures to the client to update the animation on the client during selective playback.
| /* |
| // Textual representation of stream of update records. |
| // Connectivity updates |
| mesh imesh nvertex ndim // index and size of mesh |
| segiv imesh iseg seg_nvertex iv(0). . . iv(seg_nvertex-1) |
| // list of active vertices |
| segdim imesh iseg seg_ndim idim(0). . .idim(seg_ndim-1) // list of active |
| dimensions |
| triset imesh itri iv0 iv1 iv2 // triangie vertex indices |
| tridel imesh itri // delete indexed triangle |
| // Vertex initialization and deletion |
| vset imesh iv v(0) v(1) . . . v(ndim-1) |
| // initiaiize vertex position, normal, uv's, etc |
| voffset imesh iv ivsrc dv(0) dv(1) . . . dv(ndim-1) |
| // initialize vertex from previous |
| vertex |
| vdel imesh iv // delete indexed vertex |
| // Segment position/time updates |
| segxfm imesh iseg t xfm(0) . . . xfm(seg_ndim * (seg_ndim + 1) − 1 |
| segresid imesh iseg iv t dv(0) . . . dv(seg_ndim-1) |
| */ |
| // update structures |
| struct UpdateTriangle { |
| int m_itriangie; // index of triangle to add/update |
| int m_aivertex[3]; // list of vertex indices |
| }; |
| struct UpdateDeleteTriangle { |
| int m_itriang1e; |
| }; |
| struct UpdateSetvertex { |
| int m_ivertex; // index of vertex to add/set |
| fioat m_afvertex([0]; // size ndim array of vertex values |
| }; |
| struct UpdateOffsetVertex { |
| int m_ivertex; // index of vertex to add/offset |
| int m_ivertexSource; // index of source vertex |
| float m_adfvertex[0]; // size ndim array of delta vertex values |
| }; |
| struct UpdateDeleteVertex { |
| int m_ivertex; // index of vertex to delete |
| }; |
| struct UpdateSegmentActiveVertices { |
| int m_isegment; // index of segrnent to add/update |
| int m_nvertex; // number of active vertices in list |
| int m_aivertex[0]; // list of active vertex indices |
| }; |
| struct UpdateSegementActiveDimensions { |
| int m_isegment; // index of segment to update |
| int m_ndim; // number of active dimensions |
| int m_aidim[0]; // list of active dimensions |
| }; |
| struct UpdateSegmentXfm |
| int m_isegment; // index of segment to update |
| float m_t; // parameter position |
| float m_afxfm[0]; // size seg_ndim * (seg_ndim + 1) array of xfm values |
| }; |
| struct UpdateSegmeentResidual } |
| int m_isegiment; // index ot segment to update |
| int m_ivertex; // index of vertex within segment |
| float m_t // parameter position |
| float m_afvertex[0]; // size seg_ndim array of vertex values |
| }; |
| // Typed union of all the update structures |
| struct Update |
| int m_cb; // size of whole update record |
| int m_type; // type of |
| union |
| UpdateTrianqle triset; |
| UpdateDeleteTriangle tridel; |
| UpdateSetVertex vset; |
| UpdateoffsetVertex voffset; |
| UpdateDeleteVertex vdel; |
| UpdateSegmentActiveVertices segiv; |
| UpdateSegsentActiveDimensions segdim; |
| UpdateSegmentXfm segxfm; |
| UpdateSegmentResidual segresid; |
| }; |
| }; |
Format of the server-side data structures:
The following data structures are maintained on the server in connection with the selective playback of animation in the client.
| struct UpdateBlock { | ||
| // directions to move to get to the next level of detail | ||
| #define TIME_FINE | 0 | |
| #define TIME_COARSE | 1 | |
| #define TIME_NEXT | 2 | |
| #define TIME_PREV | 3 | |
| #define SPACE_FINE | 4 | |
| #define SPACE_COARSE | 5 | |
| #define SPACE_X | 6 | |
| #define SPACE_Y | 7 | |
| #define SPACE_Z | 8 | |
| UpdateBlock *m_pStep[9]; // blocks of update records | ||
| corresponding to finer and coarser levels of detail in space and time | ||
| int m_nupdate; // number of update records in this | ||
| block | ||
| Update **m_apupdate; // array of pointers to update | ||
| records | ||
| }; | ||
| struct ServerMeshAffine1D { | ||
| MeshAffine1D m_meshClient; // the server keeps | ||
| track of what the ciient has to compute the appropriate update sequences | ||
| UpdateBlock *m_pUpdateBlock; // current position in the | ||
| space-time pyramid | ||
| }; | ||
During transmission of animation, the following communication takes place between the server and the client:
| server → client | spatial resolution, current view | |
| server ← client | spatial update records (e.g., progressive- | |
| mesh style vertex splits and edge | ||
| collapses) | ||
| server → client | temporal resolution, current time | |
| interval | ||
| server ← client | temporal update records (parameter | |
| curve knot insertion and deletion, or | ||
| blocks of wavelet detail coefficients) | ||
The client sends the server the current viewpoint of a segment along with the desired spatial resolution. The spatial resolution indicates the geometric level of detail at which the client will render the segment. In response, the server provides the spatial update records that enable the client to extract the desired geometric level of detail from the space-time pyramid.
To specify the rate at which the segment is updated, the client sends the temporal resolution and current time interval to the server. In response, the server sends the temporal update record(s) that enable the client to extract the desired temporal level of detail from the space-time pyramid.
Encoding Across Other Dimensions
Time has been used throughout this document as a representative dimension. Instead of just playing back a linear sequence, this dimension may be used for interactive controls. For example, the detailed animation of an elbow bending (with bulging muscle, sliding skin, etc.) is parameterized by the joint angle of the elbow. By allowing the user to specify the joint angle, and decompressing the animation sequence appropriately, the user can control the highly detailed animation. This is useful in interactive applications such as games.
In this particular example, the animation of the bending elbow may be represented in a space-angle matrix structure. Each column represents a position in the 3D mesh of the elbow object and the rows represent an angular position of the elbow joint. Like time, the joint angle may be represented in a hierarchical fashion from a low level of detail (e.g., few joint angle samples) to a high level of detail (e.g., many joint angle positions representing detailed bending of the elbow). During selective playback, the client requests an appropriate level of detail for angular motion, and in response, the server sends the corresponding update records for the joint angle dimension (either coarsening or refining) to animate the movement of the elbow at the appropriate level of detail. For example, the user may specify the angular position of the elbow joint through an input device, such as ajoy stick. The client then calculates the angular position and sends it to the server, which returns the appropriate update record.
A similar approach may be used to encode 3D animation along other dimensions (e.g., rotational motion about some axis, translation motion along an axis, movement along a curved path, etc.).
Combined Compression of Texture and Geometry
In addition to the vertex positions, each vertex may also be associated with other data, such as texture coordinates, which may be compressed using the same techniques described for the 3D vertex positions. In a texture map operation, a graphics rendering system maps a 2D image to the surface of a 3D object. The texture coordinates for each vertex of the object represent the corresponding position of that vertex in the 2D texture space. When computing pixels in an output image, the graphics rendering system uses the texture coordinates to locate the appropriate texture sample or samples in the texture image for each pixel. Depending on the form of the texture map operation, the graphics rendering system may filter texture samples before applying the resulting color values to the output pixel. The texture coordinates may be expressed in a similar matrix form as a mesh of 3D vertex positions, except that texture coordinates represent a position in 2D rather than 3D space. Because of the similarity of the structures, the same compression techniques applied to a matrix of time-varying 3D geometry also apply to matrix of texture coordinates.
Typically, texture coordinates are static, but this is not required. For example, an image of the ripples of water in a river can be made to move downstream by simply animating the texture coordinates. In particular, the texture coordinates for a particular vertex may be expressed as a function of time. The combination of animated geometry and animated textures is compelling for a large class of visual effects. New applications of changing texture coordinates may arise given the foundation of animated geometry compression.
A representation for level of detail preferably should include both geometry coordinates and texture images. If the geometric level of detail is low, it is sufficient to use a corresponding low level of detail for the texture images. The spatial resolution of a texture image may be encoded in hierarchical fashion with varying levels of spatial resolution, possibly corresponding to geometric levels of detail in the space-time pyramid. In the context of selective playback, the server may initially send the lower detail coefficients of the texture images, and then send higher levels of detail as necessary to refine the texture image for viewpoints where finer detail is desired. By combining the update of both image and geometry, tradeoffs can be made depending on which is more important at a given resolution. For animated texture images, this tradeoff may be made in temporal as well as spatial detail.
Higher-Order Surfaces for Temporal and Spatial Encoding
In the initial presentation of the densely sampled vertex matrix, V, the two interpolation matrices S (through time) and G (through space) were assumed to be defined by the graphics system to get the continuous position matrix, P=S V G. However, if S and G are initially given as constant interpolation or linear interpolation, it is useful to derive higher-order interpolators S′ and G′ from V, particularly since modem graphics hardware includes support for higher order geometric interpolation, such as spline and subdivision surfaces.
Estimating the best S′ and G′ is done from the bottom up. First, small neighborhoods in time and space are chosen at random and fit with the local best matching spline surface of a given order. Then, by repeatedly growing and coalescing the neighborhoods with the best match to the next level up, a local greedy optimum for S′ and G′ is found. This is similar to the triangle segmentation described previously, but uses the spatial coordinates as well as the temporal to decide the extent of the matched region.
Even if the higher-order interpolators do not match precisely, they can be used as predictors of how the surface moves in time or changes spatially from point to point. A residual, R=S V G−S′ V′ G′, can be used to recover the original matrix, P=S′ V′ G′+R.
Displacement-Map for Encoding of Residual
Most graphics hardware includes texture mapping hardware to efficiently map a 2D color image to the surface geometry of a shape. Modem graphics hardware also includes “bump” mapping, where the 2D image perturbs the normals of the shape rather than the color to get interesting lighting effects. Some modem graphics hardware also includes “displacement” mapping, where a 2D image of offsets perturbs the positions of the shape.
By transforming the residual of the time-dependent geometry coder to the local coordinates of the surface, displacement mapping can be used to apply the residual to the decompressed surface. The time-dependent residual can be computed by blending multiple residuals encoded as displacement maps. Since the graphics system has high-speed data paths and fast vertex processors, the graphics system is an effective place to apply the final residual correction to the decompressed shape. This is a particularly effective technique when combined with the higher-order surface encoding mentioned previously.
Example Implementation
The current implementation uses a combination of the compression methods above to compress a matrix of vertex positions representing time-dependent geometry.
As shown in
The set of pair contractions that result are then applied to the rest of the rows of the original time-dependent vertex matrix, V, to produce the refinement matrix as shown in block
The simplified meshes from block
In the current implementation, each of the meshes in the time-dependent matrix of vertex positions, V, is represented in its local coordinate system. While this improves the coherence of the motion of the meshes through time, it can also increase the computational complexity of the compressor. Since the meshes in the refinement matrix are represented in local coordinates, they need to be transformed to global coordinates (in other words, the mesh needs to be transformed). In the current implementation, this is addressed by re-simplifying each of the meshes in their new coordinates once the affine transform coefficients are calculated.
An alternative way to convert the refinement matrix to the new coordinate systems is to transform the delta values in the expansion records from their respective local coordinate systems to the new global coordinate system. Block
Next, the compressor computes a residual as the difference between each of the meshes and a transformed base mesh, computed using the affine transformation coefficients corresponding to each mesh. Both the affine transformation coefficients and the simplified base mesh are quantized and then dequantized as shown in quantizer blocks
To further compress the time-dependent geometry, the current implementation supports basis decomposition coding as an option. Note that the quantized residual (the quantization block
The basis decomposition block
In the case where basis decomposition is performed on the refinement matrix of the residual, the weights are passed through a column and row predictor as shown in Blocks
While the compressor encodes the entire refinement hierarchy representing the time-dependent geometry stream, it is not necessary to transmit the entire hierarchy at run time to the decoder. Instead, only those spatial refinements that are needed for a given viewpoint in an animation need to be sent and updated. Similarly, temporal refinements are only necessary to the extent that a change in the position of the geometry is visible in the animation. The transmitter
If the compressor has used prediction (either row or column) on the base mesh or on the weights of the base mesh and residual, the decompressor performs inverse prediction
Mesh reconstruction block
Transform block
Compression of Trajectories
As explained above, the geometric data used to define the motion of the 3D model can be represented as a series of deformation vectors for 3D reference points associated with the 3D model. See Guenter et al. The deformation vectors can be represented in matrix form—e.g., the columns of the matrix correspond to intervals of time and the rows correspond to deformation vectors for the 3D reference points. This matrix can be coded efficiently by decomposing the matrix into basis vectors and coefficients. The coefficients can be coded using temporal prediction. Quantization and entropy coding can also be used to code the basis vectors and coefficients.
The decomposition block (
Depending on the form of the geometric data and matrix used to store it, it is possible to use prediction on either the columns or the rows of the coefficient matrix.
The output of the entropy coding modules (
In other applications not requiring immediate transfer of the deformation data, the compression of the deformation vectors still provides advantages. Specifically, the compressed data requires less storage space and reduces memory bandwidth requirements.
There are a variety of methods for decomposing a matrix into basis vectors and coefficients. Below, we describe one example of how principal component analysis can be applied to compress a matrix representing time varying position of the 3D model.
If we represent our dataset as a matrix A, where frame i of the data maps column i of A, then the first principal component of A is
The u that maximizes Equation 3 is the eigenvector associated with the largest eigenvalue of A A
The data in the A matrix can be projected onto the principal component basis as follows:
Row i of W is the projection of column A
Similarly, A can be reconstructed exactly from W by multiplication by the basis set:
The most important property of the principal components for our purposes is that they are the best linear basis set for reconstruction in the l
where
is the Frobenius norm defined to be
will be minimized if U
We can compress a data set A by quantizing the elements of its corresponding W and U matrices and entropy coding them. Since the compressed data cannot be reconstructed without the principal component basis vectors, both the W and U matrices have to be compressed. The basis vectors add overhead that is not present with basis sets that can be computed independent of the original data set, such as the DCT basis.
For data sequences that have no particular structure, the extra overhead of the basis vectors would probably out-weigh any gain in compression efficiency. However, for data sets with regular frame to frame structure, the residual error for reconstruction with the principal component basis vectors can be much smaller than for other bases. This reduction in residual error can be great enough to compensate for the overhead bits of the basis vectors.
The principal components can be computed using the singular value decomposition (SVD) method described in Strang,
where the columns of U are the eigenvectors of A A
While we have illustrated one type of principal component analysis, other forms of principal component analysis can be used to compress geometry data. Another form of principal component analysis if referred to as the KL transform (Karhunen-Loeve).
Compression of Deformation Vectors of 3D Markers
The geometric data has the long term temporal coherence properties mentioned above since the motion of the face is highly structured. In one test case using this implementation, the overhead of the basis vectors for the geometric data was fixed because there were 182 markers on the 3D object being captured. In this case, the maximum number of basis vectors is 182*3 since there are three numbers, x, y, and z, associated with each marker. The basis vector overhead steadily diminishes as the length of the animation sequence increases.
The geometric data is mapped to matrix form by taking the 3D offset data for the ith frame and mapping it the ith column of the data matrix A
There is significant correlation between the columns of projection coefficients because the motion of the 3D reference points is relatively smooth over time. We can reduce the entropy of the quantized projection coefficients by temporally predicting the projection coefficients in column i from column i−1, i.e., c
For our data set, only the projection coefficients associated with the first 45 principal components, corresponding to the first 45 rows of W
As noted above, the basis vectors can be compressed further by quantizing them. In our implementation, the basis vectors are compressed by choosing a peak error rate and then varying the number of quantization levels allocated to each vector based on the standard deviation of the projection coefficients for each vector. This form of quantization is sometimes referred to as scalar quantization (SQ). SQ is a quantization method that involves converting real numbers to integers via rounding. In SQ, a rounding function (e.g., round(.)) converts a real number to an integer as in the following examples: the number 4.73 is approximated by round(4.73)=5, the number 3.21 is approximated by round(3.21)=3, and the number −6.1 is approximated by round(−6.1)=−6. Note that rounding has an approximation error that varies between −0.5 and 0.5, i.e. its maximum absolute value is 0.5. The possible values of the round(.) function are also called quantization levels.
Consider an example where x
1) Look at all x
2) Set a maximum relative error (the “peak error rate”) d. For example, d=0.001 means a maximum relative error of 0.1%.
3) Scale all x
4) Now quantize the values by rounding to the nearest integer: u
5) Scale back the quantized values by the inverse of A, i.e. compute v
Note that the quantized v
Note that there is a one-to-one relationship between the v
Finally, for a given set of images, the values u
Alternative forms of quantization can be used. For example, the numbers x
In practice, for the data generated in our test case, there would be little improvement in using VQ—maybe 20% better compression at most.
As noted, the predicted coefficients and quantized basis vectors can be compressed further using entropy coding such as arithmetic or Huffman coding. Entropy coding compresses the geometric data further by assigning shorter codes to samples that occur more frequently and longer codes to samples that occur less frequently.
We visually examined animation sequences with W
Decompression
The geometry data is decoded by performing the coding steps in reverse. First, an entropy decoder reconstructs the basis vectors and coefficients from the variable length codes. Next, the coefficients are reconstructed from the predicted coefficients An inverse quantizer then restores the coefficients and basis vectors. The original matrix of deformation vectors is then reconstructed from the basis vector and coefficent matrices.
Segmentation and Geometric Transforms as Deformation Trajectory Encoder
Guenter et al are given a set of deformation controls as input to their system (e.g., by the positions of the fluorescent dots on the face or body of the actor). The techniques described in this section estimate the deformation controls given the raw vertex matrix. Given an intial vertex matrix, V, and then applying the segmentation and geometric transform coding techniques described above results in a factorization of the form V=A B, where A is a set of trajectories and B is a set of influence weights. For example, for the affine geometric coder, the lefthand side is a set of time-dependent affine transforms and the right side is the set of initial base meshes,
Interpreted geometrically, A is a set of time varying deformation controls. For the affine example, the controls are a set of points that define a rotation, scale, and skew around a translation center near the original surface.
Operating Environment
The prototype was implemented on two systems:
1) A workstation from Silicon Graphics, Inc.
a. Indigo2 model with a 150 MHz MIPS R4400 processor and 128 MB memory running the IRIX 5.3 operating system.
b. Extreme graphics co-processor running OpenGL.
2) A Gateway2000 computer from Gateway, Inc.
a. E5000 model with a 300 MHz Intel Pentium II processor and 128 MB memory running the Microsoft Windows 98 operating system.
b. Diamond Multimedia Viper550 graphics card using NVIDIA RivaTNT graphics chipset running the Microsoft DirectX multimedia API.
FIG.
A number of program modules may be stored in the drives and RAM
A monitor
The computer
When used in a LAN networking environment, the computer
| TABLE 1 | |||||||
| Example Compression Results | |||||||
| Affine | Vertex | Quantized | Gzip | Amortized | |||
| Quantization | Quantization | SNR | Size | Compression | Size | Compression | Bandwidth |
| (bits) | (bits) | (dB) | (bytes) | Ratio | (bytes) | Ratio, Gzip | (Kbytes/s) |
| 10 | 4 | 27.69 | 1962000 | 7.4 | 433734 | 33 | 63.5 |
| 12 | 4 | 31.33 | 1990800 | 7.3 | 467153 | 31 | 68.4 |
| 14 | 4 | 32.06 | 2019600 | 7.2 | 510058 | 28 | 74.7 |
| 16 | 4 | 32.11 | 2048400 | 7.1 | 526982 | 27 | 77.2 |
| 10 | 8 | 28.00 | 3780000 | 3.8 | 1004086 | 14 | 147.1 |
| 12 | 8 | 33.90 | 3808800 | 3.8 | 1036927 | 14 | 151.9 |
| 14 | 8 | 39.77 | 3837600 | 3.8 | 1079085 | 13 | 158.1 |
| 16 | 8 | 43.37 | 3866400 | 3.8 | 1096496 | 13 | 160.6 |
| NA | 16 | 46.93 | 7272000 | 2.0 | 6654007 | 2.2 | 974.7 |
Table 1 shows the results in a codec in which geometric transform coding (Affine-Match) with residual row prediction compresses the time-dependent vertex matrix which is then followed by entropy coding (using the Lempel-Ziv approach of GNU's gzip). The table is sorted by ratio of the uncompressed floating point vertex matrix (of size 14544000 bytes=400 frames*3030 vertices/frame*3 coord/vertex*4 bytes/coord) to the compressed mesh. For comparison, the last row shows the raw vertex matrix quantized to 16 bits.
| TABLE 2 | ||||||||
| Chicken | Face | |||||||
| Size | Startup | Bandwidth | Size | Startup | Bandwidth | |||
| (Mbytes) | Ratio | (KBytes) | (Kbyte/s) | (Mbytes) | Ratio | (Kbytes) | (Kbyte/s) | |
| Uncompressed | 13.9 | 1 | 66.4 | 2,130.5 | 21.7 | 1 | 36.8 | 622.3 |
| MPEG4 (static) | 2.7 | 5 | 1.6 | 409.3 | 3.8 | 6 | 0.6 | 107.8 |
| Guenter et al | — | — | — | — | 1.2 | 19 | ˜1000 | 5.0 |
| Affine Match | 0.5 | 27 | 57.9 | 68.6 | 3.9 | 6 | 51.3 | 109.7 |
| Affine Match (applied to face dot trajectories) | 0.7 | 33 | 74.4 | 16.7 | ||||
Table 2 shows a comparison among various compression techniques. These results reflect high compression for the affine match technique when the animated model is close to an affinely transformed model (Chicken column, bottom row.) The experimental compressor of MPEG4 is not designed to exploit the animation of the hierarchy. For the face example, the generic affine match compressor applied to the full vertex matrix does worse than the MPEG4 experimental coder applied to each frame. When applied to the dot trajectories the affine match compressor does a better job. This shows that the compressor must search through a larger class of animation models than just the affine match to find the best matching encoder.
Alternatives
While the invention is illustrated with reference to several possible implementations, it is important to note that the invention is not limited to the scope of these specific implementations. Implementations of the invention may incorporate one or more of the novel coding methods described above. In addition, the coding methods described above may be used in combination with other coding methods. Frequency domain coders such as Discrete Cosine Transform (DCT), wavelet/zero-tree coders may be applied to matrices of representing time-varying geometric data, including a matrix of vertex positions, a matrix of deformation vectors or trajectories, and a matrix of the residual. These forms of coding may be particularly effective when applied to the residual matrix in the coding methods described above. After the geometric structure is removed (e.g., the affinely transformed base mesh is removed from the current matrix of vertex positions), frequency domain coders may be applied to the residual matrix. In addition to frequency domain coders, entropy coders and quantization may be used to further compress data in the varying geometry stream.
The compression techniques may be applied across other dimensions rather than just space and time as noted above.
In view of the many possible embodiments to which the principles of the invention may be applied, it should be recognized that the implementations discussed above are only examples of the invention and should not be taken as a limitation on the scope of the invention. Rather, the scope of the invention is defined by the following claims. I therefore claim as my invention all that comes within the scope and spirit of these claims.