Developer postOriginal post (opens in a new tab)

Dev Blog: Latency, Tickrate and Physics

Hey, Server guy again. Today I want to talk to you about how to deal with updates and latency in the massive universe that the Server will need to support.

Latency (aka that mysterious force that disconnects you)

Latency in an MMO or large player base server is actually really hard to deal with. You’ll have people with barely 8ms ping and then you’ll have people with 300ms or more – usually in the same place too.

One way of dealing with this is reducing the required updates per second. Another is to use a history buffer in which you can look up previous states of anything ever – whatever you need you can probably find an earlier instance of it there. The second one requires a lot of tuning to get right and usually you want to stay within the range of 150-250ms to not make it seem unfair to players.

Sirius Online is going to use a history buffer of exactly 200ms – with sub-steps of about 20ms resolution. This allows us to allow players with less high speed internet to hit targets without it feeling abnormal while still feeling real enough to not have it seem detached.

The Tickrate (aka Updates per Second)

Basically Tickrate means how often an Application updates it’s internal state. Most games have this at 60, 30 or 20, but with clever coding you can go much lower reaching 10 or even 5. Sirius Online will be using a Tickrate of 10 for the time being.

“But wait!”, I hear you say. “Won’t that degrade accuracy?”
This is a good point, but since we have a history buffer available we can just look back in time to any previous position.

Now that alone does not solve the problem. To solve the problem of accuracy you need to split physics simulation into multiple steps, which unfortunately can’t be done easily. Remember the history buffer? We can use this to increase accuracy in physics.

Physics

Lastly, I want to talk about the physics that will be on the Server. We won’t rely on per-vertex collisions, but will rely on approximate collisions using Boxes and Spheres. This is accurate enough to not be noticeable and works well for our purposes.

For the client, we’ll keep per-vertex collisions where possible. Since it is only a visual effect that is affected, the gameplay should be nearly the same.

Last words

And that was another Dev Blog. I’ll keep you updated if anything exciting happens.

- Xaymar

Read on Digital Dawn Studios