Download Important Concepts

yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts

Collision detection wikipedia, lookup

Overview of core principles behind real-time physics systems
Important concepts and aspects of use within game physics engines
Closing velocity, collision direction and contact normal, centre of mass,
springs, coefficient of restitution
Closing Velocity
The closing velocity is the total speed at which two objects are
moving together, calculated by finding the component of
velocity in the direction of one object to the other.
In game physics engines, by convention, it is more common to
use separating velocity (i.e. opposite direction but same
magnitude as closing velocity), given as:
Collision Direction and Contact Normal
The direction in which two objects are colliding is usually called the
“collision normal” or “contact normal.”
If two objects, body 1 and 2, are colliding then, by convention, the collision
normal is given from the first object’s perspective, i.e. from the first body’s
perspective the contact is incoming from the second body, i.e. the normal
Centre of Mass
The centre of mass (or “centre of gravity”) is the balance point of an object.
Any separating hyperplane passing through the centre of mass will result
in two volumes of equal mass.
The centre of mass of a sphere or cuboid of uniform density will be located
at the geometric centre point. The centre of mass isn’t always contained
within the object (e.g. a donut).
Springs have many uses within games,
including obvious examples such as a
car’s suspension, but also for
representing soft and/or deformable
bodies. Springs offer a good means of
modelling cloth, rope, etc.
Video not available in on-line slides
Springs: Hook’s Law
Hook’s law states that the force exerted by a spring is
linearly dependent upon the spring extension or
compression from its rest position, i.e. where l holds the
spring length, and l0 the rest length, and k is the spring
More generally:
Where d is a vector representing the current spring’s
The force exerted by the spring is equally applied at both
ends of the spring, but in opposite directions, i.e. the
spring acts to pull/push the objects together/apart in
equal measure but in opposite directions.
A problem with (stiff) springs
The application of Hook’s Law can be problematic if applied within an
engine that updates the world using discrete steps. A spring with a high
stiffness factor combined with a large extension/compression will result in
a large applied force. In reality, this force is instantaneous and decreases as
soon as the spring moves towards its resting length.
Using a discrete time step, there is a danger that the force applied over the
whole step will be sufficient to provide a ‘correction’ that results in an even
larger expansion/compression in the opposite direction, which in turn, will
result in an even greater ‘correction’ in the opposite direction, etc.
Coefficient of Restitution
When two objects collide, they compress together, and the deformation of
their surfaces causes forces to build up that bring the objects apart. From
the game physics engine’s point of view this happens instantaneously.
The vast majority of collisions behave in a dampened spring like manner as:
v’s is the separating velocity and c is the coefficient of restitution.
The coefficient of restitution depends on the
materials in collision (different pairs of
material will have different coefficients). If
the coefficient is 1.0, then the objects will
bounce apart with the incident speed. If
zero, then the objects coalesce and travel
Resolve order and resting contacts
An accelerative force acts to change
velocity over time. In some cases, e.g. a
fast collision, a force is applied over a
very short period of time (resulting in a
change of velocity).
This period of time is too brief to model
within the physics engine, hence an
‘instantaneous’ change in velocity is
known as an impulse.
For forces:
For impulses:
Resolution Order
If an object has two simultaneous contacts, and the engine uses an
iterative approach, then resolving one contact may change the other
contact. The order in which contacts are resolved is important.
A physically plausible approach is to resolve the most severe contact first
(i.e. the contact with the lowest separating velocity or highest
interpenetration) – this also helps avoid unnecessary work as correcting
one contact may entail that other points of contact become
separated/separating (and do not need to be further considered).
Contact 1
Contact 2
Resolution Order
A problem with this approach is when resolving one contact puts another
(previously resolved) contact back into collision.
For most systems, this can be managed by iterating over contacts until all
have been resolved (or an iteration limit reached).
The number of iterations should be at least the number of contacts (to give
them all a chance of getting seen at least once) and can be greater. More
iterations will be needed to resolve a complex, interconnected set of
Contact interpenetration
Resolution Order
Typically, contacts are resolved for closing velocity and interpretation in
separate passes, thereby permitting a different ordering when selecting
which contact is to be resolved (based on the separating velocity or
interpenetration depth). If the stages are combined then no one single
optimal ordering is likely possible.
Resting Contacts
Consider the simulation of a particle resting on the ground and subject to
gravity. In the first frame the particle accelerates downward, introducing a
non-zero velocity. In the second frame the position is updated, and the
velocity increases again. Now it has begun to interpenetrate with the
ground. The collision detector picks up on the interpenetration and
generates a collision.
The contact resolver looks at the particle, corrects the interpenetration
and applies a collision response from the contact with the ground (based
on closing velocity, material restitutions, etc.). The generated upward
velocity will be small, but it may be enough to be noticed given a long
frame time.
Resting Contacts
One approach (using micro collisions) towards solving the problem is:
Detecting the problem earlier (i.e. smaller velocity to correct) by returning
contacts that are nearly, but not quite interpenetrating.
If the particular object was stationary in the previous frame and the
generated velocity is only due to gravity, then consider it to be a resting
contact, and apply an impulse that will result in a zero separating velocity.
In effect, the series of micro-collisions keep the objects apart.
Resting Contacts
A more physically realistic approach to handling resting
contacts is to apply an upwards force from the ground,
pushing the object back so that its total acceleration in
the vertical direction becomes zero.
Whilst more realistic, this
approach is also considerably
more complex as there may
be multiple points of contact
between the body and the
ground (i.e. some means of
deciding how the resting
forces should be distributed
across the various points of
contact is needed).
Additional Reading
Consult the recommended course text book for:
• Development of a range of force generators, including one for gravity
and another for a drag force generator
• Development of spring based force generators – including basic spring,
anchored spring, elastic bungee generator, buoyancy force generator,
• Development of a cable and rod constraint class
• Development of a simple particle physics engine (based on
implementation of Netwon’s first and second laws) and a massaggregate physics engine
Directed physics reading
Directed reading
• Read Chapter 5 of Game Physics
Engine Development (pp69-79) on
adding forces.
• Read Chapter 6 of Game Physics
Engine Development (pp81-101) on
modelling springs.
Today we
 Range of
 Range of