US20070085851A1 - Method of simulating dynamic objects using position based dynamics - Google Patents
Method of simulating dynamic objects using position based dynamics Download PDFInfo
- Publication number
- US20070085851A1 US20070085851A1 US11/368,407 US36840706A US2007085851A1 US 20070085851 A1 US20070085851 A1 US 20070085851A1 US 36840706 A US36840706 A US 36840706A US 2007085851 A1 US2007085851 A1 US 2007085851A1
- Authority
- US
- United States
- Prior art keywords
- vertex
- constraint
- constraints
- vertices
- velocity
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
- G06T13/20—3D [Three Dimensional] animation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/16—Cloth
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/21—Collision detection, intersection
Definitions
- Embodiments of the present invention relate generally to methods of simulating dynamic objects. More particularly, embodiments of the present invention relate to methods of simulating dynamic objects using position based dynamics.
- Contemporary video games tend to incorporate a variety of sophisticated effects designed to mimic the behavior of objects in the real world. These effects include, for example, simulated collisions, explosions, object deformations, and so on.
- One recent approach that game developers have used to generate these effects is to simulate the movement and interaction of objects using the laws of physics.
- a video game may model objects such as fluids, clothing, people, and so on, as collections of vertices that are animated by applying forces such as gravity, pressure, friction, viscosity, surface tension, mass-spring forces, and impact, to each vertex.
- Computational simulations that rely on the laws of physics are referred to in this written description as “physics simulations.”
- a virtual object that is susceptible to animation (e.g., movement or deformation) in a physics simulation is referred to in this written description as a “dynamic object.”
- a dynamic object is typically modeled as a collection of vertices, each having a position, a mass, and a velocity.
- the positions and velocities of the vertices are updated over time to simulate motion.
- the vertices may be connected together, i.e. constrained by topological.
- each vertex may be unconnected from the other vertices.
- FIG. 1 A conventional method of performing a physics simulation on a dynamic object is shown, for example, in Figure (FIG.) 1 .
- exemplary method steps are denoted by parentheses (XXX).
- the method comprises accumulating a plurality of forces at each vertex of a dynamic object ( 101 ).
- the method further comprises computing an acceleration for each vertex based the vertex's mass and the accumulated forces on the vertex ( 102 ).
- the acceleration is generally computed by Newton's second law of motion, which states that acceleration equals force divided by mass.
- the vertex's acceleration is then used to update the vertex's velocity (103), and finally, the vertex's new velocity is used to update its position ( 104 ).
- steps ( 101 ) through ( 104 ) are carried out at predetermined timesteps throughout the simulation. As such, changes in a vertex's velocity and position are generally calculated by respectively integrating the vertex's acceleration and velocity over each timestep.
- the method of FIG. 1 can use a variety of different numerical techniques to update the velocities and positions.
- some common techniques include various forms of implicit or explicit integration, and finite element method or finite difference approaches.
- impulses rather than forces to control vertex animation in the physics simulation. Because impulses directly impact velocities, using impulses allows velocities to be updated without performing an integration step on the accelerations. In other words, the impulses can be used instead of performing steps ( 101 ) and ( 102 ).
- a physics simulation for an interactive video game must be fast enough and realistic enough that a user can engage in meaningful interactions the game's virtual environment without awkward delays or strange visual effects such as interpenetrating or unusually expanding or contracting objects.
- vertex positions are directly manipulated instead of being updated by integration over a predetermined timestep.
- the velocity of each vertex is implicitly stored by current and previous (or current and next) positions of the vertex.
- Two conventional examples of how the vertex positions may be manipulated include (1) moving each vertex toward a predefined goal position defined by a rest state of the dynamic object, or (2) moving each vertex to a position that satisfies a predetermined positional constraint of the vertex.
- position based approaches to dynamic object simulation allow increased control over explicit integration, which prevents vertex positions from being adversely affected by numerical instability of the integration.
- vertex positions since the vertex positions are directly manipulated, the vertices can be easily attached to kinematic objects and they can be prevented from penetrating other objects.
- position based approaches tend to be easy to understand, to implement, and debug.
- embodiments of the present invention provide several position based techniques capable of manipulating the positions of vertices in a dynamic object based on a general set of constraints. Selected embodiments of the invention also address the problem of conserving linear and angular momentum in the dynamic objects by position projection. Further, in some embodiments of the invention, vertex velocities are represented explicitly to simplify the simulation of damping and friction.
- a method of simulating a dynamic object comprising a plurality of vertices comprises defining a current position and a current velocity for a vertex “v” among the plurality of vertices, generating an estimated next position for vertex “v” based on the current position and current velocity, updating the estimated next position based on a plurality of constraints, and after updating the estimated next position, computing a next position and a next velocity for vertex “v” based on the current position and estimated next position.
- a method of updating a position of a vertex associated with a dynamic object in a dynamic object simulation comprises projecting the vertex onto a constraint by updating a position of the vertex along a gradient of a constraint function associated with the constraint.
- a method of performing a cloth simulation comprises modeling a piece of cloth as a mesh, wherein nodes of the mesh define locations of vertices of a dynamic object.
- the method further comprises updating a position of a vertex “v” among the vertices by projecting vertex “v” onto a bending constraint and a stretching constraint using a Gauss-Seidel type iterative procedure.
- FIG. 1 shows a conventional method of simulating a dynamic object
- FIG. 2 illustrates a method of simulating a dynamic object according to one embodiment of the present invention
- FIG. 3 illustrates a set of two vertices whose positions is governed by a distance constraint
- FIG. 4 illustrates a method of simulating a dynamic object according to another embodiment of the present invention
- FIG. 5 shows a piece of cloth modeled by a triangular mesh
- FIG. 6 shows a collision involving a vertex and a simulated piece of cloth.
- embodiments of the present invention provide methods of simulating dynamic objects using a position-based approach.
- the position based-approach allows video game developers to generate realistic-looking animations while achieving the computational efficiency required for real-time interactive video games.
- embodiments of the invention are particularly suited to video games, embodiments of the invention can also be adapted for use in other application areas such as computer graphics, scientific modeling, computer generated imagery, and so on.
- Embodiments of the invention can be implemented in any of a variety of software configurations, or on any of a variety of computing platforms.
- a dynamic object simulation can be run as a single application on a general purpose central processing unit (CPU), or as a secondary application running in parallel with a main application.
- the dynamic object simulation is run as a secondary application, the secondary application may run on the same processor as the main application, or on another processor such as a physics processing unit, or another CPU.
- Several different software and hardware configurations for running a dynamic object simulation according to various embodiments of the present invention are disclosed, for example, in U.S. patent applications Ser. Nos. 10/715,459, 10/815,721, and 10/982,791.
- a dynamic object is modeled by a set of vertices, where each vertex is characterized by a position in a three dimensional (3D) virtual space, a velocity, and a mass.
- the position of each vertex is governed by a corresponding set of constraints such that when the dynamic object is simulated, the position of each vertex is updated in accordance with the constraints. Since a vertex's velocity is related to its change in position, each vertex's velocity is generally updated along with its position.
- FIG. 2 shows a simple example of how a dynamic object may be simulated according to one embodiment of the invention.
- a method of simulating a dynamic object comprises initializing a set of vertex parameters corresponding to a set of vertices of the dynamic object ( 201 ).
- the vertex parameters comprise a vertex position, a velocity, and a mass for each of the vertices.
- the method further comprises projecting the vertices onto the constraints to generate new vertex positions and velocities ( 202 ), and then replacing current vertex positions and velocities with the new vertex positions and velocities ( 203 ).
- the simulation then proceeds by repeating steps ( 202 ) and ( 203 ).
- a constraint refers broadly to any set of mathematical, geometrical, or algorithmic relationships used to determine a vertex's position.
- a constraint may define a desired distance or distance range between the positions of two vertices within the same dynamic object. Such a constraint is referred to as a “distance constraint.” Where the actual distance between the two vertices is the same as the desired distance or is within the desired distance range, the vertices are said to “satisfy” the distance constraint. Similarly, whenever the relationship defined by any type of constraint is true with respect to a particular vertex or vertex position, the vertex or vertex position is considered to “satisfy” the constraint.
- the vertices are “projected” onto the constraints by moving the vertices to new positions such that the vertices either satisfy or at least approximate the constraints.
- Equation form the process of projecting a vertex onto a constraint can be described as follows.
- C(p 1 + ⁇ p 1 , p 2 + ⁇ p 2 ) 0.
- vertex positions may also be governed by collision constraints, attachment constraints, linear momentum constraints, and angular momentum constraints, to name but a few.
- collision constraints define boundaries for a vertex's motion.
- the collision constraints may define limits at which a vertex will collide with another object or surface in the dynamic object simulation.
- a vertex is considered to satisfy a particular collision constraint whenever the vertex's position does not extend beyond the boundaries defined by the collision constraint.
- An attachment constraint requires a first vertex's position to be linked with a second vertex's position within the simulation. Based on the linking, whenever the position of the first vertex changes, the position of the second vertex also changes, or vice versa. Accordingly, attachment constraints can be used, for example, to bind the motion of one dynamic object to the motion of another dynamic object or a static object in a simulation.
- a simple way to implement an attachment constraint is to simply set a vertex's position to a static target position, or update the vertex's position at every timestep to coincide with the position to a target position on a kinematic object. To prevent other constraints related to the vertex from influencing the vertex's position, the inverse mass of the vertex can be set to zero.
- Linear and angular momentum constraints require that changes in vertex positions due to the internal constraints of a dynamic object conserve linear and angular momentum of the object.
- the term “internal constraints” here denotes constraints related entirely to components (e.g., vertices) within the dynamic object. For instance, distance constraints are generally considered to be internal constraints since they typically only involve vertices within the same dynamic object. In contrast, collision and attachment constraints are external constraints because they relate to external boundaries and objects.
- linear and angular momentum constraints take into account changed positions for all vertices in a dynamic object.
- m i denotes the mass of the i th vertex of the dynamic object
- ⁇ p i denotes a change in the i th vertex's position.
- Another way of stating relationship (1) is that the dynamic object's center of mass must stay the same after its vertex positions change in order for the dynamic object's linear momentum constraint to be satisfied.
- ⁇ i ⁇ r i ⁇ m i ⁇ ⁇ ⁇ ⁇ p i 0. ( 2 )
- r i denotes a distance from the i th vertex to an arbitrary center of rotation for the dynamic object.
- the dynamic object Whenever the changes in vertex positions due to internal constraints fail to satisfy the linear and/or angular momentum constraints, the dynamic object will behave as though acted on by “ghost” external forces. These “ghost” external forces will cause the object's center of mass to change and/or its vertices to rotate about the center of rotation.
- new positions for the vertices of a deformable object can be generated by first predicting the new positions and then using the constraints to modify the predicted new positions.
- FIG. 4 illustrates a method of simulating a dynamic object wherein predicted vertex positions are used to generate new vertex positions.
- the method comprises initializing a set of vertex parameters for a deformable object ( 401 ).
- the vertex parameters include a position, mass, and velocity for each vertex associated with the deformable object.
- the method further comprises computing new positions for the vertices based on their respective current velocities ( 402 ).
- the new positions are then modified based on constraints associated with the vertices ( 403 ).
- the vertex velocities are updated with the respective differences between the modified new positions and their corresponding current vertex positions, divided by a timestep ( 404 ).
- the vertex positions are updated with the respective modified new position estimates ( 405 ).
- a dynamic object is represented by a set of “N” vertices and “M” positional constraints.
- the object's motion is also governed by M coll collision constraints.
- each vertex i ⁇ [1, . . . , N] has a mass m i , a position x i , and a velocity v i .
- M] includes a cardinality n j , a function C j : R 3nj ⁇ R, a set of indices ⁇ i l , . . . i nj ⁇ , i k ⁇ [1, . . . N], a stiffness parameter k j ⁇ [0 . . . 1], and a type of either “inequality” or “equality”.
- a constraint j with type “equality” is satisfied if C j (x i l , . . . ,
- the stiffness parameter k j defines the strength of the constraint in a range from zero to one.
- lines (1)-(3), (7), (9)-(11), and (12)-(15) correspond to respective steps ( 401 ), ( 402 ), ( 403 ), and ( 404 )-( 405 ) in FIG. 4 .
- Lines (1)-(3) initialize the positions, velocities, and masses of the vertices.
- Line (5) computes an estimated velocity for each vertex based on the vertex's current velocity and any external forces acting on the dynamic object at the vertex's position.
- Line (7) computes an new position “p i ” for each vertex “i” in the dynamic object based on the vertex's current position x i and velocity estimate.
- Lines (9)-(11) modify new positions “p” by projecting the constraints onto the new positions, and then lines (12)-(15) update vertex positions x i and velocities v i based on the modified new positions.
- velocity estimates and new position estimates p i are computed using an explicit Euler integration step with a timestep ⁇ t.
- Line (5) takes external forces f ext (x i ) that cannot be converted into positional constraints and uses them to compute the velocity estimates.
- line (5) generally includes gravity as an external force, so that line (5) becomes v i ⁇ v i + ⁇ tg, where “g” stands for acceleration due to gravity.
- line (6) executes a velocity damping operation on the estimated velocities
- line (8) generates the M coll collision constraints
- line (16) uses friction and restitution coefficients to modify the velocities of any vertices affected by collisions.
- Lines (9)-(11) use an iterative process to modify new positions “p” so that they satisfy the “M” positional constraints and the “M coll ” collision constraints.
- One way to implement the iterative process is with Gauss-Seidel-type iteration.
- the Gauss-Seidel type iteration loops through the M+M coll constraints, and with each loop, it projects each vertex of the dynamic object onto a new location satisfying a single one of the constraints.
- the new vertex locations immediately become available to the iterative process, thus speeding up convergence.
- the vertices are projected onto the constraints in such a way that the linear and angular momentum of the dynamic object are conserved with respect to the internal constraints.
- C the concatenation [p l T , . . . p n T ] T .
- C is an internal constraint, it is independent of the rigid body modes of the dynamic object, i.e., translation and rotation. This means that rotating or translating the dynamic object does not change the function value of the constraint for each vertex.
- the gradient ⁇ p C is perpendicular to the rigid body modes because it is the direction of maximal change.
- Equation (5) defines a regular Newton-Raphson step for the iterative solution of a non-linear equation.
- constraints of the type “inequality” are satisfied as long as the constraint function C(p 1 , . . . , p n ) ⁇ 0, vertices are only projected onto an inequality constraint during the iterative process if the constraint's constraint function C(p 1 , . . . , p n ) ⁇ 0.
- stiffness parameter “k” there are many ways to incorporate stiffness parameter “k” into the dynamic object simulation.
- One way is to simply multiply each of position changes ⁇ p by k.
- the difference between ⁇ p with and without stiffness parameter “K” will depend non-linearly based on the number of loops that are performed.
- the difference between ⁇ p with and without stiffness parameter “k” will be ⁇ p(1 ⁇ k) n, .
- Line (8) of the simulation algorithm generates collision constraints for the dynamic object simulation.
- the number of collision constraints that are generated in each timestep varies according to the number of vertices that collide with other objects in the simulation. Colliding vertices are detected by testing each vertex “i” of the dynamic object to see whether a line segment between original position x i and new position p i enters another object. If the line segment enters a second object, the algorithm computes an entry point q c and a surface normal n c of the second object at entry point q c .
- the collision detection has failed at some point.
- This problem can be addresses by computing a surface point q s of the other object that is closest to new position p i , and the surface normal n s of the other object at surface point q s .
- Line (16) of the simulation algorithm handles friction and restitution for the collisions by damping the velocity of each colliding vertex in a direction perpendicular to surface normal n c or n s and reflecting the velocity of each colliding vertex in a direction toward surface normal n c or n s .
- This constraint function is independent of the rigid body modes of the objects, and therefore it will conserve the objects' linear and angular momentum.
- collisions can be defined in relation to other surfaces of simulated objects, including, for example, the plane of an arbitrary polygon or a curved surface.
- Line (6) of the simulation algorithm damps the velocities of each of the N vertices.
- r i x i ⁇ x cm ,r i is a 3 ⁇ 3 matrix with
- . . 1] is a damping coefficient.
- Lines (1) through (5) of the damping subroutine compute a global linear velocity x cm and angular velocity ⁇ for the dynamic object.
- Lines (6) through (9) of the damping subroutine damp individual deviations ⁇ v i from the global motion v cm + ⁇ r i .
- the velocities are globally dampened but without influencing the global motion of the vertices.
- Selected embodiments of the invention can be used to simulate cloth.
- a piece of cloth can be represented as a triangular mesh wherein each node of the mesh represents a vertex of a simulated dynamic object.
- the triangular mesh has a density p defined in mass per area (e.g., kg/m 2 ), and the mass of each vertex is set to the sum of one third of the area of each adjacent triangle times p.
- mass per area e.g., kg/m 2
- a scalar l 0 is an initial length of the edge and stretching stiffness k stretch is a global constraint typically defined by a user and defining a stretching stiffness of the piece of cloth.
- each pair of adjacent triangles in the mesh has a bending constraint, which is explained below with reference to FIG. 5 .
- FIG. 5 shows a piece of cloth modeled by a triangular mesh including first and second triangles (p 1 , p 3 , p 2 ) and (p 1 , p 2 , p 4 ), where p 1 through p 4 are the positions of respective first through fourth vertices of the mesh.
- First triangle (p 1 , p 3 , p 2 ) has a normal no 1
- second triangle (p 1 , p 2 , p 4 ) has a normal n 2 , with an initial dihedral angle ⁇ 0 between normals n 1 and n 2 .
- the initial dihedral angle between normals n 1 and n 2 is shown on the right side of FIG. 5 .
- a bending function for the first and second triangles is typically defined with a constraint function defined by the following equation (11)
- C bend ⁇ ( p 1 , p 2 , p 3 , p 4 ) ar ⁇ ⁇ cos ⁇ ( ( p 2 - p 1 ) ⁇ ( p 3 - p 1 ) ⁇ ( p 2 - p 1 ) ⁇ ( p 3 - p 1 ) ⁇ ⁇ ( p 2 - p 1 ) ⁇ ( p 4 - p 1 ) ⁇ ( p 2 - p 1 ) ⁇ ( p 4 - p 1 ) ⁇ ) - ⁇ 0 , ( 11 ) a bending stiffness k bend , and type “equality.”
- Another way to define the bending constraint between the first and second triangles is to specify a distance constraint between the vertices at positions p 3 and p 4 .
- a bending constraint defined in this way is dependent on the stretching of the cloth because the distance between the vertices at positions p 3 and p 4 depends on the length of the edges incident to these vertices.
- Vertices can be projected onto the stretching constraint using equations (9) and (10).
- vertices are generally projected onto the bending constraints by a slightly more complicated procedure such as the following.
- Collisions between a cloth object and a rigid body can be handled by testing a line segment between each cloth vertex's original and new position for intersection or penetration across a boundary of the rigid body as described above in relation to line (8) of the simulation algorithm. Likewise, cases where the line segment crosses the boundary or lies entirely within the rigid body can be handled as described above.
- an impulse m i ⁇ p i / ⁇ t can be applied to the rigid body at a contact point between a vertex “i” and the rigid body each time vertex “i” collides with the rigid body.
- the triangles defined by the vertices of a simulated piece of cloth may be so large that a rigid body may penetrate the cloth without colliding with any of the cloth's vertices.
- convex corners of rigid bodies may also be tested for collisions with the cloth triangles.
- FIG. 6 illustrates one way of handling self collision in a cloth simulation.
- a triangle defined by vertices at positions p 1 , p 2 , and p 3 and having a normal n is penetrated by a vertex q.
- the right side of FIG. 6 shows a side view of vertex q penetrating the triangle.
- C ⁇ ( q , p 1 , p 2 , p 3 ) ( q - p 1 ) ⁇ ( p 2 - p 1 ) ⁇ ( p 3 - p 1 ) ⁇ ( p 2 - p 1 ) ⁇ ( p 3 - p 1 ) ⁇ - h , ( 21 ) where h is the cloth thickness.
- vertex q enters the triangle from below, i.e., in the same direction as normal n as shown in FIG.
- t 1 i , t 2 i , and t 3 i are the three indices of the vertices belonging to each triangle “i,” and p t 1 i , p t 2 i and p t 3 i are the respective positions of those three vertices.
- V 0 represents an original volume of the closed mesh
- k pressure represents a pressure stiffness which determines how much the volume of the closed mesh is allowed to deviate from the original volume.
- the sum in constrain function (23) computes the actual volume of the closed mesh and compares it with the product of original volume V 0 and pressure stiffness k 0 .
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
Description
- This application claims the benefit of U.S. Provisional Application No. 60/727,857 filed on Oct. 19, 2005.
- 1. Field of the Invention
- Embodiments of the present invention relate generally to methods of simulating dynamic objects. More particularly, embodiments of the present invention relate to methods of simulating dynamic objects using position based dynamics.
- 2. Description of Related Art
- Contemporary video games tend to incorporate a variety of sophisticated effects designed to mimic the behavior of objects in the real world. These effects include, for example, simulated collisions, explosions, object deformations, and so on. One recent approach that game developers have used to generate these effects is to simulate the movement and interaction of objects using the laws of physics. For example, a video game may model objects such as fluids, clothing, people, and so on, as collections of vertices that are animated by applying forces such as gravity, pressure, friction, viscosity, surface tension, mass-spring forces, and impact, to each vertex. Computational simulations that rely on the laws of physics are referred to in this written description as “physics simulations.”
- A virtual object that is susceptible to animation (e.g., movement or deformation) in a physics simulation is referred to in this written description as a “dynamic object.” A dynamic object is typically modeled as a collection of vertices, each having a position, a mass, and a velocity. In a physics simulation, the positions and velocities of the vertices are updated over time to simulate motion. In some cases, such as a clothing simulation, the vertices may be connected together, i.e. constrained by topological. In other cases, such as fluid simulations, each vertex may be unconnected from the other vertices.
- A conventional method of performing a physics simulation on a dynamic object is shown, for example, in Figure (FIG.) 1. In this written description, exemplary method steps are denoted by parentheses (XXX). Referring to
FIG. 1 , the method comprises accumulating a plurality of forces at each vertex of a dynamic object (101). The method further comprises computing an acceleration for each vertex based the vertex's mass and the accumulated forces on the vertex (102). The acceleration is generally computed by Newton's second law of motion, which states that acceleration equals force divided by mass. The vertex's acceleration is then used to update the vertex's velocity (103), and finally, the vertex's new velocity is used to update its position (104). In general, steps (101) through (104) are carried out at predetermined timesteps throughout the simulation. As such, changes in a vertex's velocity and position are generally calculated by respectively integrating the vertex's acceleration and velocity over each timestep. - The method of
FIG. 1 can use a variety of different numerical techniques to update the velocities and positions. For example, some common techniques include various forms of implicit or explicit integration, and finite element method or finite difference approaches. - One variation of the method illustrated in
FIG. 1 uses impulses rather than forces to control vertex animation in the physics simulation. Because impulses directly impact velocities, using impulses allows velocities to be updated without performing an integration step on the accelerations. In other words, the impulses can be used instead of performing steps (101) and (102). - In designing and implementing physics simulations for video games, it is important to strike a balance between making the animations look as realistic as possible, and generating the animations fast enough to satisfy any real-time computational constraints of the games. For example, a physics simulation for an interactive video game must be fast enough and realistic enough that a user can engage in meaningful interactions the game's virtual environment without awkward delays or strange visual effects such as interpenetrating or unusually expanding or contracting objects.
- In practice, it can be difficult to simultaneously achieve both the speed and realism required by physics simulations in interactive video games. For example, some techniques used to generate highly accurate physics simulations (e.g., techniques used in precision scientific applications such as molecular modeling or protein folding) are too slow for interactive video games. On the other hand, some techniques used to generate fast physics simulations rely on unstable explicit integration techniques that can lead to overshooting and energy gain problems.
- As an alternative to conventional methods that use forces or impulses to update the vertex positions of dynamic objects, researchers have developed position based approaches based on position based dynamics. In position based approaches, vertex positions are directly manipulated instead of being updated by integration over a predetermined timestep. Typically, the velocity of each vertex is implicitly stored by current and previous (or current and next) positions of the vertex. Two conventional examples of how the vertex positions may be manipulated include (1) moving each vertex toward a predefined goal position defined by a rest state of the dynamic object, or (2) moving each vertex to a position that satisfies a predetermined positional constraint of the vertex.
- One advantage of position based approaches to dynamic object simulation is that they allow increased control over explicit integration, which prevents vertex positions from being adversely affected by numerical instability of the integration. In addition, since the vertex positions are directly manipulated, the vertices can be easily attached to kinematic objects and they can be prevented from penetrating other objects. Finally, position based approaches tend to be easy to understand, to implement, and debug.
- Recognizing the many advantages of position based approaches over conventional force or impulse based approaches to dynamic object simulation, embodiments of the present invention provide several position based techniques capable of manipulating the positions of vertices in a dynamic object based on a general set of constraints. Selected embodiments of the invention also address the problem of conserving linear and angular momentum in the dynamic objects by position projection. Further, in some embodiments of the invention, vertex velocities are represented explicitly to simplify the simulation of damping and friction.
- According to one embodiment of the invention, a method of simulating a dynamic object comprising a plurality of vertices, is provided. The method comprises defining a current position and a current velocity for a vertex “v” among the plurality of vertices, generating an estimated next position for vertex “v” based on the current position and current velocity, updating the estimated next position based on a plurality of constraints, and after updating the estimated next position, computing a next position and a next velocity for vertex “v” based on the current position and estimated next position.
- According to another embodiment of the invention, a method of updating a position of a vertex associated with a dynamic object in a dynamic object simulation is provided. The method comprises projecting the vertex onto a constraint by updating a position of the vertex along a gradient of a constraint function associated with the constraint.
- According to still another embodiment of the invention, a method of performing a cloth simulation is provided. The method comprises modeling a piece of cloth as a mesh, wherein nodes of the mesh define locations of vertices of a dynamic object. The method further comprises updating a position of a vertex “v” among the vertices by projecting vertex “v” onto a bending constraint and a stretching constraint using a Gauss-Seidel type iterative procedure.
- The invention is described below in relation to several embodiments illustrated in the accompanying drawings. Throughout the drawings like reference numbers indicate like exemplary elements, components, or steps. In the drawings:
-
FIG. 1 shows a conventional method of simulating a dynamic object; -
FIG. 2 illustrates a method of simulating a dynamic object according to one embodiment of the present invention; -
FIG. 3 illustrates a set of two vertices whose positions is governed by a distance constraint; -
FIG. 4 illustrates a method of simulating a dynamic object according to another embodiment of the present invention; -
FIG. 5 shows a piece of cloth modeled by a triangular mesh; and, -
FIG. 6 shows a collision involving a vertex and a simulated piece of cloth. - Exemplary embodiments of the invention are described below with reference to the corresponding drawings. These embodiments are presented as teaching examples. The actual scope of the invention is defined by the claims that follow.
- In general, embodiments of the present invention provide methods of simulating dynamic objects using a position-based approach. The position based-approach allows video game developers to generate realistic-looking animations while achieving the computational efficiency required for real-time interactive video games.
- Although several embodiments of the invention are particularly suited to video games, embodiments of the invention can also be adapted for use in other application areas such as computer graphics, scientific modeling, computer generated imagery, and so on.
- Embodiments of the invention can be implemented in any of a variety of software configurations, or on any of a variety of computing platforms. For example, a dynamic object simulation can be run as a single application on a general purpose central processing unit (CPU), or as a secondary application running in parallel with a main application. Where the dynamic object simulation is run as a secondary application, the secondary application may run on the same processor as the main application, or on another processor such as a physics processing unit, or another CPU. Several different software and hardware configurations for running a dynamic object simulation according to various embodiments of the present invention are disclosed, for example, in U.S. patent applications Ser. Nos. 10/715,459, 10/815,721, and 10/982,791.
- In selected embodiments of the invention, a dynamic object is modeled by a set of vertices, where each vertex is characterized by a position in a three dimensional (3D) virtual space, a velocity, and a mass. The position of each vertex is governed by a corresponding set of constraints such that when the dynamic object is simulated, the position of each vertex is updated in accordance with the constraints. Since a vertex's velocity is related to its change in position, each vertex's velocity is generally updated along with its position.
-
FIG. 2 shows a simple example of how a dynamic object may be simulated according to one embodiment of the invention. Referring toFIG. 2 , a method of simulating a dynamic object comprises initializing a set of vertex parameters corresponding to a set of vertices of the dynamic object (201). The vertex parameters comprise a vertex position, a velocity, and a mass for each of the vertices. The method further comprises projecting the vertices onto the constraints to generate new vertex positions and velocities (202), and then replacing current vertex positions and velocities with the new vertex positions and velocities (203). The simulation then proceeds by repeating steps (202) and (203). - Within the context of a position-based dynamic object simulation, the term “constraint” refers broadly to any set of mathematical, geometrical, or algorithmic relationships used to determine a vertex's position. For instance, a constraint may define a desired distance or distance range between the positions of two vertices within the same dynamic object. Such a constraint is referred to as a “distance constraint.” Where the actual distance between the two vertices is the same as the desired distance or is within the desired distance range, the vertices are said to “satisfy” the distance constraint. Similarly, whenever the relationship defined by any type of constraint is true with respect to a particular vertex or vertex position, the vertex or vertex position is considered to “satisfy” the constraint. In step (202) of
FIG. 2 , the vertices are “projected” onto the constraints by moving the vertices to new positions such that the vertices either satisfy or at least approximate the constraints. - In equation form, the process of projecting a vertex onto a constraint can be described as follows. Let C(p)=f(p) represent a constraint function for the positions “p” of a set of vertices. The vertices are projected onto a constraint with constraint function “C(p)” by determining some position changes “Δp” such that C(p+Δp)=0. For instance,
FIG. 3 shows a set of two (2) vertices with positions p1 and p2 which are governed by a distance constraint with the following constraint function: C(p1, p2)=|p1−p2|−d, where d is the desired distance between vertices p1 and p2. The distance constraint with constraint function C(p1, p2) is satisfied by modifying positions p1 and p2 by Δp1 and Δp2 such that C(p1+Δp1, p2+Δp2)=0. A more detailed description of how position changes Δp may be calculated is presented later in this written description. - In addition to distance constraints, vertex positions may also be governed by collision constraints, attachment constraints, linear momentum constraints, and angular momentum constraints, to name but a few.
- In general, collision constraints define boundaries for a vertex's motion. For example, the collision constraints may define limits at which a vertex will collide with another object or surface in the dynamic object simulation. A vertex is considered to satisfy a particular collision constraint whenever the vertex's position does not extend beyond the boundaries defined by the collision constraint.
- An attachment constraint requires a first vertex's position to be linked with a second vertex's position within the simulation. Based on the linking, whenever the position of the first vertex changes, the position of the second vertex also changes, or vice versa. Accordingly, attachment constraints can be used, for example, to bind the motion of one dynamic object to the motion of another dynamic object or a static object in a simulation. A simple way to implement an attachment constraint is to simply set a vertex's position to a static target position, or update the vertex's position at every timestep to coincide with the position to a target position on a kinematic object. To prevent other constraints related to the vertex from influencing the vertex's position, the inverse mass of the vertex can be set to zero.
- Linear and angular momentum constraints require that changes in vertex positions due to the internal constraints of a dynamic object conserve linear and angular momentum of the object. The term “internal constraints” here denotes constraints related entirely to components (e.g., vertices) within the dynamic object. For instance, distance constraints are generally considered to be internal constraints since they typically only involve vertices within the same dynamic object. In contrast, collision and attachment constraints are external constraints because they relate to external boundaries and objects.
- In general, linear and angular momentum constraints take into account changed positions for all vertices in a dynamic object. For instance, a linear momentum constraint for a dynamic object including several vertices is satisfied when the vertices change positions such that the following relationship (1) is true:
In relationship (1), mi denotes the mass of the ith vertex of the dynamic object, and Δpi denotes a change in the ith vertex's position. Another way of stating relationship (1) is that the dynamic object's center of mass must stay the same after its vertex positions change in order for the dynamic object's linear momentum constraint to be satisfied. Similarly, the angular momentum constraint for the dynamic object is satisfied when the vertices change positions such that the following relationship (2) is true:
In relationship (2), ri denotes a distance from the ith vertex to an arbitrary center of rotation for the dynamic object. - Whenever the changes in vertex positions due to internal constraints fail to satisfy the linear and/or angular momentum constraints, the dynamic object will behave as though acted on by “ghost” external forces. These “ghost” external forces will cause the object's center of mass to change and/or its vertices to rotate about the center of rotation.
- Throughout a dynamic object simulation, most of the constraints governing a dynamic object's vertex positions tend to stay the same. For instance, distance constraints generally do not change. However, an object's collision constraints generally vary based on the object's movement, and based on the movement of other objects in its environment.
- According to selected embodiments of the invention, new positions for the vertices of a deformable object can be generated by first predicting the new positions and then using the constraints to modify the predicted new positions.
FIG. 4 illustrates a method of simulating a dynamic object wherein predicted vertex positions are used to generate new vertex positions. - Referring to
FIG. 4 , the method comprises initializing a set of vertex parameters for a deformable object (401). The vertex parameters include a position, mass, and velocity for each vertex associated with the deformable object. The method further comprises computing new positions for the vertices based on their respective current velocities (402). The new positions are then modified based on constraints associated with the vertices (403). Next, the vertex velocities are updated with the respective differences between the modified new positions and their corresponding current vertex positions, divided by a timestep (404). Finally, the vertex positions are updated with the respective modified new position estimates (405). - The following exemplary simulation algorithm illustrates one way of implementing the method illustrated in
FIG. 4 . In the simulation algorithm, a dynamic object is represented by a set of “N” vertices and “M” positional constraints. In addition, the object's motion is also governed by Mcoll collision constraints. Among the vertices, each vertex iε[1, . . . , N] has a mass mi, a position xi, and a velocity vi. Among the constraints, each constraint jε[1, . . . , M] includes a cardinality nj, a function Cj: R3nj→R, a set of indices {il, . . . inj}, ikε[1, . . . N], a stiffness parameter kjε[0 . . . 1], and a type of either “inequality” or “equality”. A constraint j with type “equality” is satisfied if Cj(xil , . . . , - =0, and a constraint j with type “inequality” is satisfied if Cj(xi
l , . . . , - ≧0. The stiffness parameter kj defines the strength of the constraint in a range from zero to one. The simulation algorithm is defined as follows:
(1) for all vertices i (2) initialize xi=xi 0,vi=vi 0,wi=1/mi (3) endfor (4) loop (5) forall vertices i do vi vi+Δtwifext(xi) (6) damp velocities (v1, . . . ,vN) (7) forall vertices i do pi xi+Δtvi (8) forall vertices i do generateCollisionConstraints (xi→pi) (9) loop solverIterations times (10) projectConstraints (Ci, . . . ,CM+M coll , p1,...p2)(11) endloop (12) forall vertices i (13) vi (pi−xi)/Δt (14) xi pi (15) endfor (16) velocityUpdate (v1, . . . , vN) (17) endloop - In the simulation algorithm, lines (1)-(3), (7), (9)-(11), and (12)-(15) correspond to respective steps (401), (402), (403), and (404)-(405) in
FIG. 4 . Lines (1)-(3) initialize the positions, velocities, and masses of the vertices. Line (5) computes an estimated velocity for each vertex based on the vertex's current velocity and any external forces acting on the dynamic object at the vertex's position. Line (7) computes an new position “pi” for each vertex “i” in the dynamic object based on the vertex's current position xi and velocity estimate. Lines (9)-(11) modify new positions “p” by projecting the constraints onto the new positions, and then lines (12)-(15) update vertex positions xi and velocities vi based on the modified new positions. - In lines (5) and (7), velocity estimates and new position estimates pi are computed using an explicit Euler integration step with a timestep Δt. Line (5) takes external forces fext(xi) that cannot be converted into positional constraints and uses them to compute the velocity estimates. For example, line (5) generally includes gravity as an external force, so that line (5) becomes vi←vi+Δtg, where “g” stands for acceleration due to gravity.
- Of the remaining lines in the simulation algorithm, line (6) executes a velocity damping operation on the estimated velocities, line (8) generates the Mcoll collision constraints, and line (16) uses friction and restitution coefficients to modify the velocities of any vertices affected by collisions.
- Lines (9)-(11) use an iterative process to modify new positions “p” so that they satisfy the “M” positional constraints and the “Mcoll” collision constraints. One way to implement the iterative process is with Gauss-Seidel-type iteration. The Gauss-Seidel type iteration loops through the M+Mcoll constraints, and with each loop, it projects each vertex of the dynamic object onto a new location satisfying a single one of the constraints. In the Gauss-Seidel type iteration, the new vertex locations immediately become available to the iterative process, thus speeding up convergence.
- The new positions produced by the iterative process and applied to the dynamic object in lines (13) and (14) will never cause the vertices of the dynamic object to overshoot their equilibrium positions, and hence the simulation method defined by the algorithm is unconditionally stable.
- In the iterative process, the vertices are projected onto the constraints in such a way that the linear and angular momentum of the dynamic object are conserved with respect to the internal constraints. An illustration of how this can be done follows.
- Suppose we have a constraint “C” on positions p1, . . . , pn with a cardinality n and stiffness k. We let p be the concatenation [pl T, . . . pn T]T. Where C is an internal constraint, it is independent of the rigid body modes of the dynamic object, i.e., translation and rotation. This means that rotating or translating the dynamic object does not change the function value of the constraint for each vertex. The gradient ∇pC is perpendicular to the rigid body modes because it is the direction of maximal change. If the position changes Δp are chosen to be along ∇pC, linear and angular momenta are automatically conserved if all vertices have the same mass. We can derive a method for computing the position changes Δp when all vertices have the same mass as follows.
- We want to find position changes Δp such that C(p+Δp)=0. This equation can be approximated by the following equation (3):
C(p+Δp)≈C(p)+∇p C(p)·Δp=0 (3)
If Δp is restricted to be in the direction of ∇pC, then there is some scalar [ such that the following equation (4) is true:
Δp=λ∇ p C(p). (4)
By substituting equation (4) into equation (3), solving for λ, and then substituting the value for λ into equation (4), the following equation (5) can be derived for Δp:
Equation (5) defines a regular Newton-Raphson step for the iterative solution of a non-linear equation. - Based on the foregoing, the position change Δpi for an individual point pi can be computed by the following equation (6):
Δp i =−s∇pi C(pl, . . . , pn) (6)
where the same scaling factor “s” is defined for all vertices by the following equation (7):
Where each of the i vertices in the dynamic object has a different mass mi, the position change Δpi of each vertex “i” is weighted proportional to their inverse masses as in the following equation (8): - As an example of how the position changes can be computed, consider the constraint function C(p1, p2)=|p1−p2|−d illustrated in
FIG. 3 . The derivatives of the constraint function with respect to positions p1 and p2 are ∇p1 C(p1, p2)=n and ∇p2 C(p1,p2)=−n, respectively, with
Scaling factor “s” is therefore
and thus position changes Δp1 and Δp2 are computed according to the following equations (9) and (10): - Since constraints of the type “inequality” are satisfied as long as the constraint function C(p1, . . . , pn)≧0, vertices are only projected onto an inequality constraint during the iterative process if the constraint's constraint function C(p1, . . . , pn)<0. In contrast, constraints of the type “equality” are only satisfied when the constraint function C(p1, . . . , pn)=0 and therefore, vertices tend to always be projected onto the equality constraints.
- There are many ways to incorporate stiffness parameter “k” into the dynamic object simulation. One way is to simply multiply each of position changes Δp by k. However, if k is incorporated in this way for multiple loops of the iterative process, the difference between Δp with and without stiffness parameter “K” will depend non-linearly based on the number of loops that are performed. In equation form, if ns loops of the iterative process are performed, the difference between Δp with and without stiffness parameter “k” will be Δp(1−k)n,. In practice, it is desirable to be able to adjust position changes Δp according to a linear relationship with stiffness parameter k and independent of the number of loops of the iterative process. One way to form such a linear relationship is by multiplying each position change by k′ instead of k, where the value of k′ is defined by the following equation: k′=1−(1−k)1/n,. By substituting k′ for k, the difference between Δp with and without stiffness parameter “K” becomes Δp(1−k′)n,=Δp(1−k), which is a linear relationship in k.
- Line (8) of the simulation algorithm generates collision constraints for the dynamic object simulation. The number of collision constraints that are generated in each timestep varies according to the number of vertices that collide with other objects in the simulation. Colliding vertices are detected by testing each vertex “i” of the dynamic object to see whether a line segment between original position xi and new position pi enters another object. If the line segment enters a second object, the algorithm computes an entry point qc and a surface normal nc of the second object at entry point qc. Then, the simulation algorithm generates an inequality constraint with constraint function C(p)=(p−qc)·nc and stiffness k=1 and the inequality constraint is subsequently used to generate the modified new positions. On the other hand, if the line segment lies entirely inside another object, the collision detection has failed at some point. This problem can be addresses by computing a surface point qs of the other object that is closest to new position pi, and the surface normal ns of the other object at surface point qs. The simulation algorithm then generates an inequality constraint with constraint function C(p)=(p−qs)·ns and stiffness k=1, and the inequality constraint is subsequently used to generate the modified new positions.
- Line (16) of the simulation algorithm handles friction and restitution for the collisions by damping the velocity of each colliding vertex in a direction perpendicular to surface normal nc or ns and reflecting the velocity of each colliding vertex in a direction toward surface normal nc or ns.
- Collisions between the dynamic object and other dynamic objects (as opposed to collisions between the dynamic object and static objects) can be handled by inputting N vertices and M constraints corresponding to all of the objects into the simulation algorithm. Then, when any vertex with position p0 in one of the objects passes through the plane of a triangle defined by vertices with respective positions p1, p2, and p3 of another one of the objects, the simulation algorithm generates a constraint with constraint function C(p0, p1, p2 , p3)=±(p0−p1)·[(p2−p1)×(p3−p1)], which keeps the vertex with position p0 on the correct side of the triangle. This constraint function is independent of the rigid body modes of the objects, and therefore it will conserve the objects' linear and angular momentum. Although the plane of a triangle is used to test for collisions in this example, collisions can be defined in relation to other surfaces of simulated objects, including, for example, the plane of an arbitrary polygon or a curved surface.
- Line (6) of the simulation algorithm damps the velocities of each of the N vertices. The following damping subroutine illustrates one way to perform the damping:
(1) xcm = (Σiximi)/(Σimi) (2) vcm = (Σivimi)/(Σimi) (3) L = Σiri ×(mivi) (4) I = Σi{tilde over (r)}i{tilde over (r)}i τmi (5) ω = I−1L forall vertices i (7) Δvi = vcm +ω×ri − v1 (8) v1 vi + kdampingΔvi endfor
In the damping subroutine, ri=xi−xcm,r i is a 3×3 matrix with the property that {tilde over (r)}iv=ri×v, and kdampingε[0 . . . 1] is a damping coefficient. Lines (1) through (5) of the damping subroutine compute a global linear velocity xcm and angular velocity ω for the dynamic object. Lines (6) through (9) of the damping subroutine damp individual deviations Δvi from the global motion vcm+ω×ri. Where the damping coefficient is set to kdamping=1, only the global motion survives and the N vertices behave like a rigid body. For arbitrary values of kdamping, the velocities are globally dampened but without influencing the global motion of the vertices. - Selected embodiments of the invention can be used to simulate cloth. For example, a piece of cloth can be represented as a triangular mesh wherein each node of the mesh represents a vertex of a simulated dynamic object. The triangular mesh has a density p defined in mass per area (e.g., kg/m2), and the mass of each vertex is set to the sum of one third of the area of each adjacent triangle times p. Although this example uses a triangular mesh, those skilled in the art will understand that various different mesh topologies can be used to perform the cloth simulation.
- Each edge of the triangular mesh has a stretching constraint with a constraint function Cstretch(p1,p2)=|p1−p2|−l0, a stretching stiffness kstretch, and type “equality.” In the stretching constraint, a scalar l0 is an initial length of the edge and stretching stiffness kstretch is a global constraint typically defined by a user and defining a stretching stiffness of the piece of cloth. In addition, each pair of adjacent triangles in the mesh has a bending constraint, which is explained below with reference to
FIG. 5 . -
FIG. 5 shows a piece of cloth modeled by a triangular mesh including first and second triangles (p1, p3, p2) and (p1, p2, p4), where p1 through p4 are the positions of respective first through fourth vertices of the mesh. First triangle (p1, p3, p2) has a normal no1 and second triangle (p1, p2, p4) has a normal n2, with an initial dihedral angle φ0 between normals n1 and n2. The initial dihedral angle between normals n1 and n2 is shown on the right side ofFIG. 5 . A bending function for the first and second triangles is typically defined with a constraint function defined by the following equation (11)
a bending stiffness kbend, and type “equality.” - Another way to define the bending constraint between the first and second triangles is to specify a distance constraint between the vertices at positions p3 and p4 . However, a bending constraint defined in this way is dependent on the stretching of the cloth because the distance between the vertices at positions p3 and p4 depends on the length of the edges incident to these vertices.
- Vertices can be projected onto the stretching constraint using equations (9) and (10). On the other hand, vertices are generally projected onto the bending constraints by a slightly more complicated procedure such as the following.
- First, position p1 is set to zero so that equation (11) becomes Cbend(p1, p2, p3, p4)=ar cos(n1·n2)−χ0, where normal n1 is defined as
and normal n2 is defined as
The gradient of the constraint function is computed with respect to the positions of the first through fourth vertices as follows:
wherein, d=(n1 dot n2).
Next, using gradients of normalized cross products, the following components of a projection equation are computed:
Finally, the position changes for the first through fourth vertices can be computed according to the following projection equation (20): - Collisions between a cloth object and a rigid body can be handled by testing a line segment between each cloth vertex's original and new position for intersection or penetration across a boundary of the rigid body as described above in relation to line (8) of the simulation algorithm. Likewise, cases where the line segment crosses the boundary or lies entirely within the rigid body can be handled as described above. For dynamic interactions between the cloth and the rigid body, an impulse miΔpi/Δt can be applied to the rigid body at a contact point between a vertex “i” and the rigid body each time vertex “i” collides with the rigid body.
- In practice, the triangles defined by the vertices of a simulated piece of cloth may be so large that a rigid body may penetrate the cloth without colliding with any of the cloth's vertices. To address this problem, convex corners of rigid bodies may also be tested for collisions with the cloth triangles.
- Another problem to be addressed in a cloth simulation is collisions between different parts of the cloth, also called “self-collision.”
FIG. 6 illustrates one way of handling self collision in a cloth simulation. InFIG. 6 , a triangle defined by vertices at positions p1, p2, and p3 and having a normal n is penetrated by a vertex q. The right side ofFIG. 6 shows a side view of vertex q penetrating the triangle. Whenever such a penetration occurs from a direction facing the normal n, the simulation algorithm generates a constraint with the following constraint function:
where h is the cloth thickness. Where vertex q enters the triangle from below, i.e., in the same direction as normal n as shown inFIG. 6 , the simulation algorithm generates a constraint with the following constraint function:
Projecting vertex q onto the constraints associated with constraint functions (21) or (22) tends to keep vertex q on the correct side of the triangle while conserving the cloth's linear and angular momentum. - Where the piece of cloth being simulated comprises a closed triangular mesh, e.g., if the piece of cloth forms a “cloth balloon,” pressure inside the mesh can be modeled by generating an equality constraint with the following constraint function:
and a stiffness k=1. In constraint function (23), t1 i, t2 i, and t3 i are the three indices of the vertices belonging to each triangle “i,” and pt1 i , pt2 i and pt3 i are the respective positions of those three vertices. V0 represents an original volume of the closed mesh, and kpressure represents a pressure stiffness which determines how much the volume of the closed mesh is allowed to deviate from the original volume. The sum in constrain function (23) computes the actual volume of the closed mesh and compares it with the product of original volume V0 and pressure stiffness k0. Constraint function (23) yields the following gradients, which can be used to compute position changes Δpi according to equation (8): - The foregoing preferred embodiments are teaching examples. Those of ordinary skill in the art will understand that various changes in form and details may be made to the exemplary embodiments without departing from the scope of the present invention as defined by the following claims.
Claims (20)
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/368,407 US7616204B2 (en) | 2005-10-19 | 2006-03-07 | Method of simulating dynamic objects using position based dynamics |
PCT/US2006/036514 WO2007102845A2 (en) | 2006-03-07 | 2006-09-19 | Method of simulating dynamic objects using position based dynamics |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US72785705P | 2005-10-19 | 2005-10-19 | |
US11/368,407 US7616204B2 (en) | 2005-10-19 | 2006-03-07 | Method of simulating dynamic objects using position based dynamics |
Publications (2)
Publication Number | Publication Date |
---|---|
US20070085851A1 true US20070085851A1 (en) | 2007-04-19 |
US7616204B2 US7616204B2 (en) | 2009-11-10 |
Family
ID=37947754
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US11/368,407 Active 2027-08-14 US7616204B2 (en) | 2005-10-19 | 2006-03-07 | Method of simulating dynamic objects using position based dynamics |
Country Status (1)
Country | Link |
---|---|
US (1) | US7616204B2 (en) |
Cited By (48)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060262113A1 (en) * | 2005-03-23 | 2006-11-23 | Electronic Arts Inc. | Computer simulation of body dynamics including a solver that solves for position-based constraints |
US20080207300A1 (en) * | 2007-02-26 | 2008-08-28 | Constantinos Antonopoulos | Method for displaying a draw result as a race |
US20090018803A1 (en) * | 2007-07-13 | 2009-01-15 | Seoul National University Industry Foundation | Method of cloth simulation using linear stretch/shear model |
US20090141030A1 (en) * | 2007-12-04 | 2009-06-04 | Institute For Information Industry | System and method for multilevel simulation of animation cloth and computer-readable recording medium thereof |
US20090248778A1 (en) * | 2008-03-28 | 2009-10-01 | Magerlein Karen A | Systems and methods for a combined matrix-vector and matrix transpose vector multiply for a block-sparse matrix |
US20090248593A1 (en) * | 2008-03-26 | 2009-10-01 | David Putzolu | Combining speculative physics modeling with goal-based artificial intelligence |
US20100029390A1 (en) * | 2008-07-23 | 2010-02-04 | Jerome Hubert Wei | Method and system for simulations of dynamic motion and position |
US20110216070A1 (en) * | 2010-03-04 | 2011-09-08 | Pixar | Scale separation in hair dynamics |
US20110216074A1 (en) * | 2010-03-04 | 2011-09-08 | Pixar | Reorienting properties in hair dynamics |
US20110292053A1 (en) * | 2010-06-01 | 2011-12-01 | Microsoft Corporation | Placement of animated elements using vector fields |
US9449417B1 (en) | 2010-03-04 | 2016-09-20 | Pixar | Artistic simulation of curly hair |
US9589383B2 (en) | 2013-10-18 | 2017-03-07 | Nvidia Corporation | Unified position based solver for visual effects |
US9613449B2 (en) | 2013-10-18 | 2017-04-04 | Nvidia Corporation | Method and apparatus for simulating stiff stacks |
US9659396B1 (en) * | 2012-06-26 | 2017-05-23 | Pixar | Clothwarp rigging cloth |
CN106960459A (en) * | 2016-12-26 | 2017-07-18 | 北京航空航天大学 | The method relocated in role animation based on the dynamic (dynamical) covering technology of expanding location and weight |
US20180082460A1 (en) * | 2016-09-22 | 2018-03-22 | Autodesk, Inc. | Techniques for generating dynamic effects animations |
US9990754B1 (en) * | 2014-02-04 | 2018-06-05 | Electronic Arts Inc. | System for rendering using position based finite element simulation |
US10008020B1 (en) * | 2016-12-21 | 2018-06-26 | Chalmers Tekniska Högskola Ab | Method for interactive, real-time animation of soft body dynamics |
US10022628B1 (en) | 2015-03-31 | 2018-07-17 | Electronic Arts Inc. | System for feature-based motion adaptation |
US10055896B1 (en) * | 2011-12-22 | 2018-08-21 | Msc.Software Corporation | Interactive vertex manipulation system and methods for geometry repair |
US10096133B1 (en) | 2017-03-31 | 2018-10-09 | Electronic Arts Inc. | Blendshape compression system |
CN109446580A (en) * | 2018-09-29 | 2019-03-08 | 北京航空航天大学 | A kind of textile simulating method based on yarn model |
US10388053B1 (en) | 2015-03-27 | 2019-08-20 | Electronic Arts Inc. | System for seamless animation transition |
US10403018B1 (en) | 2016-07-12 | 2019-09-03 | Electronic Arts Inc. | Swarm crowd rendering system |
US20190370422A1 (en) * | 2018-06-05 | 2019-12-05 | Ziva Dynamics Inc. | Method and system for simulating deformation of a thin-shell material |
US10535174B1 (en) | 2017-09-14 | 2020-01-14 | Electronic Arts Inc. | Particle-based inverse kinematic rendering system |
US10726611B1 (en) | 2016-08-24 | 2020-07-28 | Electronic Arts Inc. | Dynamic texture mapping using megatextures |
US10792566B1 (en) | 2015-09-30 | 2020-10-06 | Electronic Arts Inc. | System for streaming content within a game application environment |
US10860838B1 (en) | 2018-01-16 | 2020-12-08 | Electronic Arts Inc. | Universal facial expression translation and character rendering system |
US10878540B1 (en) | 2017-08-15 | 2020-12-29 | Electronic Arts Inc. | Contrast ratio detection and rendering system |
US10902618B2 (en) | 2019-06-14 | 2021-01-26 | Electronic Arts Inc. | Universal body movement translation and character rendering system |
US20210089628A1 (en) * | 2019-09-19 | 2021-03-25 | Microsoft Technology Licensing, Llc | Minimization function for friction solving |
CN112581602A (en) * | 2020-12-09 | 2021-03-30 | 北京维盛视通科技有限公司 | Clothing dynamic simulation method and device, electronic equipment and storage medium |
CN113870296A (en) * | 2021-12-02 | 2021-12-31 | 暨南大学 | Image edge detection method, device and medium based on rigid body collision optimization algorithm |
US11217003B2 (en) | 2020-04-06 | 2022-01-04 | Electronic Arts Inc. | Enhanced pose generation based on conditional modeling of inverse kinematics |
CN114565705A (en) * | 2022-02-28 | 2022-05-31 | 百果园技术(新加坡)有限公司 | Virtual character simulation and live broadcast method, device, equipment and storage medium |
CN114925552A (en) * | 2022-07-19 | 2022-08-19 | 武汉亘星智能技术有限公司 | Cloth simulation method and system based on HPBD |
US11504625B2 (en) | 2020-02-14 | 2022-11-22 | Electronic Arts Inc. | Color blindness diagnostic system |
US11562523B1 (en) | 2021-08-02 | 2023-01-24 | Electronic Arts Inc. | Enhanced animation generation based on motion matching using local bone phases |
US11648480B2 (en) | 2020-04-06 | 2023-05-16 | Electronic Arts Inc. | Enhanced pose generation based on generative modeling |
US11670030B2 (en) | 2021-07-01 | 2023-06-06 | Electronic Arts Inc. | Enhanced animation generation based on video with local phase |
US11830121B1 (en) | 2021-01-26 | 2023-11-28 | Electronic Arts Inc. | Neural animation layering for synthesizing martial arts movements |
US11887232B2 (en) | 2021-06-10 | 2024-01-30 | Electronic Arts Inc. | Enhanced system for generation of facial models and animation |
US11972353B2 (en) | 2020-01-22 | 2024-04-30 | Electronic Arts Inc. | Character controllers using motion variational autoencoders (MVAEs) |
US12138543B1 (en) | 2020-01-21 | 2024-11-12 | Electronic Arts Inc. | Enhanced animation generation based on generative control |
US12169889B2 (en) | 2021-06-10 | 2024-12-17 | Electronic Arts Inc. | Enhanced system for generation of facial models and animation |
US12205214B2 (en) | 2022-02-23 | 2025-01-21 | Electronic Arts Inc. | Joint twist generation for animation |
US12236510B2 (en) | 2021-06-10 | 2025-02-25 | Electronic Arts Inc. | Enhanced system for generation of facial models and animation |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7660480B1 (en) * | 2006-02-10 | 2010-02-09 | Livermore Software Technology Corporation | Practical fast mesh-free analysis |
KR100914869B1 (en) * | 2007-05-29 | 2009-08-31 | (주)에프엑스기어 | System and Method for Real-Time Cloth Simulation |
US20100073383A1 (en) * | 2008-09-25 | 2010-03-25 | Sergey Sidorov | Cloth simulation pipeline |
TWI412948B (en) * | 2009-12-31 | 2013-10-21 | Ind Tech Res Inst | Collision simulating method of three dimensional object |
US9119655B2 (en) | 2012-08-03 | 2015-09-01 | Stryker Corporation | Surgical manipulator capable of controlling a surgical instrument in multiple modes |
US9226796B2 (en) | 2012-08-03 | 2016-01-05 | Stryker Corporation | Method for detecting a disturbance as an energy applicator of a surgical instrument traverses a cutting path |
KR102397265B1 (en) | 2012-08-03 | 2022-05-12 | 스트리커 코포레이션 | Systems and methods for robotic surgery |
US20150242546A1 (en) * | 2014-02-21 | 2015-08-27 | Inyong JEON | Method of Cloth Simulation using Constrainable Multigrid |
KR102399601B1 (en) | 2015-07-20 | 2022-05-18 | 삼성전자주식회사 | Method and apparatus of modeling based on particles for efficient constraints processing |
US10885242B2 (en) * | 2017-08-31 | 2021-01-05 | Microsoft Technology Licensing, Llc | Collision detection with advanced position |
US11270041B2 (en) | 2017-09-25 | 2022-03-08 | Nvidia Corporation | Position-based dynamics simulation |
CN118318251A (en) * | 2021-10-15 | 2024-07-09 | 数字王国虚拟人(美国)股份有限公司 | Method for simulating a quasi-static volume retention deformation |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060235659A1 (en) * | 2005-04-13 | 2006-10-19 | Alias Systems Corp. | Fixed time step dynamical solver for interacting particle systems |
US20060262113A1 (en) * | 2005-03-23 | 2006-11-23 | Electronic Arts Inc. | Computer simulation of body dynamics including a solver that solves for position-based constraints |
-
2006
- 2006-03-07 US US11/368,407 patent/US7616204B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060262113A1 (en) * | 2005-03-23 | 2006-11-23 | Electronic Arts Inc. | Computer simulation of body dynamics including a solver that solves for position-based constraints |
US20060235659A1 (en) * | 2005-04-13 | 2006-10-19 | Alias Systems Corp. | Fixed time step dynamical solver for interacting particle systems |
Cited By (74)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060262113A1 (en) * | 2005-03-23 | 2006-11-23 | Electronic Arts Inc. | Computer simulation of body dynamics including a solver that solves for position-based constraints |
US20080207300A1 (en) * | 2007-02-26 | 2008-08-28 | Constantinos Antonopoulos | Method for displaying a draw result as a race |
US20080207320A1 (en) * | 2007-02-26 | 2008-08-28 | Constantinos Antonopoulos | Method for displaying a draw result along with customized information |
US8795046B2 (en) | 2007-02-26 | 2014-08-05 | Intralot S.A.—Integrated Lottery Systems and Services | Method for displaying a draw result along with customized information |
US20090018803A1 (en) * | 2007-07-13 | 2009-01-15 | Seoul National University Industry Foundation | Method of cloth simulation using linear stretch/shear model |
US8140304B2 (en) * | 2007-07-13 | 2012-03-20 | Hyeong-Seok Ko | Method of cloth simulation using linear stretch/shear model |
US8115771B2 (en) * | 2007-12-04 | 2012-02-14 | Institute For Information Industry | System and method for multilevel simulation of animation cloth and computer-readable recording medium thereof |
US20090141030A1 (en) * | 2007-12-04 | 2009-06-04 | Institute For Information Industry | System and method for multilevel simulation of animation cloth and computer-readable recording medium thereof |
US20090248593A1 (en) * | 2008-03-26 | 2009-10-01 | David Putzolu | Combining speculative physics modeling with goal-based artificial intelligence |
US8280826B2 (en) | 2008-03-26 | 2012-10-02 | Intel Corporation | Combining speculative physics modeling with goal-based artificial intelligence |
US8069124B2 (en) * | 2008-03-26 | 2011-11-29 | Intel Corporation | Combining speculative physics modeling with goal-based artificial intelligence |
US9058302B2 (en) | 2008-03-28 | 2015-06-16 | International Business Machines Corporation | Combined matrix-vector and matrix transpose vector multiply for a block-sparse matrix |
US8175853B2 (en) * | 2008-03-28 | 2012-05-08 | International Business Machines Corporation | Systems and methods for a combined matrix-vector and matrix transpose vector multiply for a block-sparse matrix |
US20090248778A1 (en) * | 2008-03-28 | 2009-10-01 | Magerlein Karen A | Systems and methods for a combined matrix-vector and matrix transpose vector multiply for a block-sparse matrix |
US9539513B2 (en) * | 2008-07-23 | 2017-01-10 | Jerome Hubert Wei | Method and system for simulations of dynamic motion and position |
US20140038714A1 (en) * | 2008-07-23 | 2014-02-06 | Jerome Hubert Wei | Method and system for simulations of dynamic motion and position |
US20100029390A1 (en) * | 2008-07-23 | 2010-02-04 | Jerome Hubert Wei | Method and system for simulations of dynamic motion and position |
US9449417B1 (en) | 2010-03-04 | 2016-09-20 | Pixar | Artistic simulation of curly hair |
US20110216070A1 (en) * | 2010-03-04 | 2011-09-08 | Pixar | Scale separation in hair dynamics |
US8698810B2 (en) * | 2010-03-04 | 2014-04-15 | Pixar | Reorienting properties in hair dynamics |
US20110216074A1 (en) * | 2010-03-04 | 2011-09-08 | Pixar | Reorienting properties in hair dynamics |
US10163243B2 (en) | 2010-03-04 | 2018-12-25 | Pixar | Simulation of hair in a distributed computing environment |
US9098944B2 (en) * | 2010-03-04 | 2015-08-04 | Pixar | Scale separation in hair dynamics |
US8786609B2 (en) * | 2010-06-01 | 2014-07-22 | Microsoft Corporation | Placement of animated elements using vector fields |
CN102270353A (en) * | 2010-06-01 | 2011-12-07 | 微软公司 | Placement of animated elements using vector fields |
US20110292053A1 (en) * | 2010-06-01 | 2011-12-01 | Microsoft Corporation | Placement of animated elements using vector fields |
US10055896B1 (en) * | 2011-12-22 | 2018-08-21 | Msc.Software Corporation | Interactive vertex manipulation system and methods for geometry repair |
US9659396B1 (en) * | 2012-06-26 | 2017-05-23 | Pixar | Clothwarp rigging cloth |
US9589383B2 (en) | 2013-10-18 | 2017-03-07 | Nvidia Corporation | Unified position based solver for visual effects |
US9613449B2 (en) | 2013-10-18 | 2017-04-04 | Nvidia Corporation | Method and apparatus for simulating stiff stacks |
US9990754B1 (en) * | 2014-02-04 | 2018-06-05 | Electronic Arts Inc. | System for rendering using position based finite element simulation |
US10388053B1 (en) | 2015-03-27 | 2019-08-20 | Electronic Arts Inc. | System for seamless animation transition |
US10022628B1 (en) | 2015-03-31 | 2018-07-17 | Electronic Arts Inc. | System for feature-based motion adaptation |
US10792566B1 (en) | 2015-09-30 | 2020-10-06 | Electronic Arts Inc. | System for streaming content within a game application environment |
US10403018B1 (en) | 2016-07-12 | 2019-09-03 | Electronic Arts Inc. | Swarm crowd rendering system |
US10726611B1 (en) | 2016-08-24 | 2020-07-28 | Electronic Arts Inc. | Dynamic texture mapping using megatextures |
US20180082460A1 (en) * | 2016-09-22 | 2018-03-22 | Autodesk, Inc. | Techniques for generating dynamic effects animations |
US10467794B2 (en) * | 2016-09-22 | 2019-11-05 | Autodesk, Inc. | Techniques for generating dynamic effects animations |
US10008020B1 (en) * | 2016-12-21 | 2018-06-26 | Chalmers Tekniska Högskola Ab | Method for interactive, real-time animation of soft body dynamics |
CN106960459A (en) * | 2016-12-26 | 2017-07-18 | 北京航空航天大学 | The method relocated in role animation based on the dynamic (dynamical) covering technology of expanding location and weight |
US11295479B2 (en) | 2017-03-31 | 2022-04-05 | Electronic Arts Inc. | Blendshape compression system |
US10096133B1 (en) | 2017-03-31 | 2018-10-09 | Electronic Arts Inc. | Blendshape compression system |
US10733765B2 (en) | 2017-03-31 | 2020-08-04 | Electronic Arts Inc. | Blendshape compression system |
US10878540B1 (en) | 2017-08-15 | 2020-12-29 | Electronic Arts Inc. | Contrast ratio detection and rendering system |
US11113860B2 (en) | 2017-09-14 | 2021-09-07 | Electronic Arts Inc. | Particle-based inverse kinematic rendering system |
US10535174B1 (en) | 2017-09-14 | 2020-01-14 | Electronic Arts Inc. | Particle-based inverse kinematic rendering system |
US10860838B1 (en) | 2018-01-16 | 2020-12-08 | Electronic Arts Inc. | Universal facial expression translation and character rendering system |
US20190370422A1 (en) * | 2018-06-05 | 2019-12-05 | Ziva Dynamics Inc. | Method and system for simulating deformation of a thin-shell material |
CN109446580A (en) * | 2018-09-29 | 2019-03-08 | 北京航空航天大学 | A kind of textile simulating method based on yarn model |
US10902618B2 (en) | 2019-06-14 | 2021-01-26 | Electronic Arts Inc. | Universal body movement translation and character rendering system |
US11798176B2 (en) | 2019-06-14 | 2023-10-24 | Electronic Arts Inc. | Universal body movement translation and character rendering system |
US20210089628A1 (en) * | 2019-09-19 | 2021-03-25 | Microsoft Technology Licensing, Llc | Minimization function for friction solving |
US11875094B2 (en) * | 2019-09-19 | 2024-01-16 | Microsoft Technology Licensing, Llc | Minimization function for friction solving |
US12138543B1 (en) | 2020-01-21 | 2024-11-12 | Electronic Arts Inc. | Enhanced animation generation based on generative control |
US11972353B2 (en) | 2020-01-22 | 2024-04-30 | Electronic Arts Inc. | Character controllers using motion variational autoencoders (MVAEs) |
US11504625B2 (en) | 2020-02-14 | 2022-11-22 | Electronic Arts Inc. | Color blindness diagnostic system |
US11872492B2 (en) | 2020-02-14 | 2024-01-16 | Electronic Arts Inc. | Color blindness diagnostic system |
US11217003B2 (en) | 2020-04-06 | 2022-01-04 | Electronic Arts Inc. | Enhanced pose generation based on conditional modeling of inverse kinematics |
US11836843B2 (en) | 2020-04-06 | 2023-12-05 | Electronic Arts Inc. | Enhanced pose generation based on conditional modeling of inverse kinematics |
US11648480B2 (en) | 2020-04-06 | 2023-05-16 | Electronic Arts Inc. | Enhanced pose generation based on generative modeling |
US11992768B2 (en) | 2020-04-06 | 2024-05-28 | Electronic Arts Inc. | Enhanced pose generation based on generative modeling |
US11232621B2 (en) | 2020-04-06 | 2022-01-25 | Electronic Arts Inc. | Enhanced animation generation based on conditional modeling |
CN112581602A (en) * | 2020-12-09 | 2021-03-30 | 北京维盛视通科技有限公司 | Clothing dynamic simulation method and device, electronic equipment and storage medium |
US11830121B1 (en) | 2021-01-26 | 2023-11-28 | Electronic Arts Inc. | Neural animation layering for synthesizing martial arts movements |
US11887232B2 (en) | 2021-06-10 | 2024-01-30 | Electronic Arts Inc. | Enhanced system for generation of facial models and animation |
US12169889B2 (en) | 2021-06-10 | 2024-12-17 | Electronic Arts Inc. | Enhanced system for generation of facial models and animation |
US12236510B2 (en) | 2021-06-10 | 2025-02-25 | Electronic Arts Inc. | Enhanced system for generation of facial models and animation |
US11670030B2 (en) | 2021-07-01 | 2023-06-06 | Electronic Arts Inc. | Enhanced animation generation based on video with local phase |
US11562523B1 (en) | 2021-08-02 | 2023-01-24 | Electronic Arts Inc. | Enhanced animation generation based on motion matching using local bone phases |
US11995754B2 (en) | 2021-08-02 | 2024-05-28 | Electronic Arts Inc. | Enhanced animation generation based on motion matching using local bone phases |
CN113870296A (en) * | 2021-12-02 | 2021-12-31 | 暨南大学 | Image edge detection method, device and medium based on rigid body collision optimization algorithm |
US12205214B2 (en) | 2022-02-23 | 2025-01-21 | Electronic Arts Inc. | Joint twist generation for animation |
CN114565705A (en) * | 2022-02-28 | 2022-05-31 | 百果园技术(新加坡)有限公司 | Virtual character simulation and live broadcast method, device, equipment and storage medium |
CN114925552A (en) * | 2022-07-19 | 2022-08-19 | 武汉亘星智能技术有限公司 | Cloth simulation method and system based on HPBD |
Also Published As
Publication number | Publication date |
---|---|
US7616204B2 (en) | 2009-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7616204B2 (en) | Method of simulating dynamic objects using position based dynamics | |
Müller et al. | Position based dynamics | |
US7650266B2 (en) | Method of simulating deformable object using geometrically motivated model | |
Hiller et al. | Dynamic simulation of soft multimaterial 3d-printed objects | |
Lafleur et al. | Cloth animation with self-collision detection | |
Meyer et al. | Interactive animation of cloth‐like objects in virtual reality | |
Metaxas et al. | Dynamic deformation of solid primitives with constraints | |
US7363199B2 (en) | Method and apparatus for simulating soft object movement | |
Heidelberger et al. | Consistent penetration depth estimation for deformable collision response. | |
CN105069826B (en) | The modeling method of elastomeric objects amoeboid movement | |
US7091977B2 (en) | Animation method of deformable objects using an oriented material point and generalized spring model | |
US9443341B2 (en) | Efficient and stable approach to elasticity and collisions for hair animation | |
US20230061175A1 (en) | Real-Time Simulation of Elastic Body | |
TW200525429A (en) | Method and program solving LCPs for rigid body dynamics | |
Hiller et al. | Dynamic simulation of soft heterogeneous objects | |
Essa et al. | Physically-based modeling for graphics and vision | |
WO2007102845A2 (en) | Method of simulating dynamic objects using position based dynamics | |
Volino et al. | Interactive cloth simulation: Problems and solutions | |
Manolas et al. | A Computational Tool for the Analysis of 3D Bending-active Structures Based on the Dynamic Relaxation Method. | |
Kharevych et al. | 3D physics engine for elastic and deformable bodies | |
Kavan | Rigid body collision response | |
Desbrun et al. | Interactive animation of cloth-like objects for virtual reality | |
Bar-Lev et al. | Virtual marionettes: a system and paradigm for real-time 3D animation | |
Tournier et al. | Velocity-based adaptivity of deformable models | |
Yang | Rigid Bodies and Contacts |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: AGEIA TECHNOLOGIES, INC., MISSOURI Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:MULLER, MATTHIAS;HEIDELBERGER, BRUNO;HENNIX, MARCUS;REEL/FRAME:017653/0808 Effective date: 20060307 |
|
AS | Assignment |
Owner name: AGEIA TECHNOLOGIES, INC., CALIFORNIA Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:HERCULES TECHNOLOGY GROWTH CAPITAL, INC.;REEL/FRAME:020827/0853 Effective date: 20080207 Owner name: AGEIA TECHNOLOGIES, INC.,CALIFORNIA Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:HERCULES TECHNOLOGY GROWTH CAPITAL, INC.;REEL/FRAME:020827/0853 Effective date: 20080207 |
|
AS | Assignment |
Owner name: NVIDIA CORPORATION, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:AGEIA TECHNOLOGIES, INC.;REEL/FRAME:021011/0059 Effective date: 20080523 Owner name: NVIDIA CORPORATION,CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:AGEIA TECHNOLOGIES, INC.;REEL/FRAME:021011/0059 Effective date: 20080523 |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
FPAY | Fee payment |
Year of fee payment: 4 |
|
FPAY | Fee payment |
Year of fee payment: 8 |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 12TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1553); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Year of fee payment: 12 |