Game Development Reference

In-Depth Information

hand, we do care about visual quality and stability, and we do care whether our

software runs fast or slow—and semi-implicit methods are usually fast.

The semi-implicit version of Euler integration goes like this:

v
(
t
+Δ
t
)=
v
(
t
)+
a
Δ
t,

x
(
t
+Δ
t
)=
x
(
t
)+
v
(
t
+Δ
t
)Δ
t.

By substitution, the second equation is equivalent to
x
(
t
)=
x
(
t −
Δ
t
)+
v
(
t
)Δ
t
,

a fact that together with the above leads us to the Verlet formulation.

11.2.4 Verlet Integration

As mentioned, Verlet integration is an example of a semi-implicit integration

method. The Verlet integration update step is just a reformulation of the expres-

sions given in the previous subsection:

Δ
t
)+
a
(
t
)(Δ
t
)
2
.

x
(
t
+Δ
t
)=2
x
(
t
)

−

x
(
t

−

Instead of storing the particles' positions
x
and velocities
v
as before, it suffices

to store the current position
x
(
t
) and the previous position
x
(
t

−

Δ
t
). Velocities

can then be calculated on the fly from
x
(
t
) and
x
(
t

−

Δ
t
) (if needed at all):

v
(
t
+Δ
t
)=(
x
(
t
+Δ
t
)

−

x
(
t
))
/
Δ
t.

This relation means that positions and velocities are always in sync.

Since
x
(
t
)

Δ
t
) is just the change in position from the last time frame,

the Verlet formula can be interpreted as follows:

−

x
(
t

−

1. Add to the current position the distance we just moved in the previous time

step.

2. Adjust the position to account for gravity and other forces.

3. The new velocity is directly proportional to the total step we just moved.

Be aware that because velocity is now given only implicitly by using the previous

positions of the particles, the time step needs to be kept constant between each

call to the numerical integrator. While it is possible to develop formulas that take

changing time steps into account, in my experience, the best way to handle larger

time steps is to simply call the integrator multiple times.