3. Virtual Time Space -
Interpolation
Yahn
W. Bernier of Valve, made a presentation about Half-Life & Team
Fortress Networking at the Game Developer Conference in 2000
[Bernier]. The idea was that instead of trying to predict the future
(the principle of Dead Reckoning), why not make the past look like
the present? When a client has received all updates for all entities
in a scene, they are able to display an accurate and smooth animated
view of the scene.
That is why a delay, called Lag Compensation
Time (LCT), is introduced between the real action and the display
on the other side of the transmission pipeline. The higher the LCT,
the higher the number of updates received, the smoother the
movements: if an avatar reaches a position before the next
position is received from the server then it will have to stop and
wait.
This results in jerky start-stop movement, especially if the
position update rhythm varies, which is unavoidable when coming over
the Internet. The goal of the LCT is to ensure that this doesn't
happen, but the LCT needs to be as small as possible as it represents
a lag or temporal inconsistency.
If two players have
their screens side by side (Figure 3), they obviously will notice
that their display is shifted in time. In some other situations, it
may be noticed: for example, when two characters are trying to run
together at the same time, they will have the feeling the other one
is always behind, because their controlled character is not shifted
in time (that would be a terrible control experience!).
Figure 3: Lag Compensation Time and Interpolation
This raises the
problem of interaction between objects displayed in present time
space (the player's avatar) and objects displayed in a past time
space (remote characters, AI entities). One solution is to make the
LCT vary according to the distance from the player's avatar. This
idea is called temporal perception, or presentation time or sometimes
local perception filters and comes from the analogy with the
appearance of the stars in the sky: the farther the distance, the
longer the time the light takes to come to us [Singhal-Zyda].
Anyway,
if we want more accurate movement around the player’s avatar than
at distant sight, updates of entities in the immediate vicinity of
the observer should then have a higher priority than updates from
distant entities. The goal is to minimize the error magnitude:
a foreground entity (such as a melee adversary) may be displayed in a
strikingly wrong position with less than 1 meter of positional error,
while an entity farther away may not be perceptibly badly positioned
despite a positional error of several meters which may only
correspond to only a few pixels or less. With position updates that
are less frequent for distant entities, the required LCT is greater.
A flexible LCT allows one to minimise the lag for nearby characters
while still avoiding jerkiness for background characters
It means we need a way to
control the frequency of updates of viewed entities.
Time Synchronisation
Maintaining
times across several machines needs a synchronization mechanism.
Common synchronization schemes compute a delta between the local time
of the client machine and a reference time, and transmitting a
timestamp relative to the reference time. However, we noticed that
many consumer PCs had internal clocks with a different speed, leading
to desynchronization.
Moreover, for our server applications we
adopted a flexible time system based on “ticks” sent by a
conductor service, that would increase the current game cycle at a
rate that was sustainable by all server applications: if a service
had a sudden increase of workload, all services would wait for it,
avoiding a vicious circle of congestion. The client time
synchronization was thus based on the average time between two
received messages, assuming the server regularly sends a message to
each client.
|