Locked Update, unlocked Framerate - interpolation latency

Started by
14 comments, last by L. Spiro 6 years, 11 months ago

Glad to hear that this solution isn't that uncommon. :)

I'm currently running my racing physics at 600Hz, so <2ms of added interpolation latency.

That's a lot. o.O

I'm curios now: what are the "common" tickrates used for games? (I know that this will depend heavily on the genre and gametype and has to be determined individually for each game.)

Given that the this approach requires the CPU to be fast enough in order to process X amount of ticks per second (otherwise we would have a CPU bottleneck and the game would slow down) you need to make sure that every operation (physics, collission detection, AI, etc...) can be crammed into 1/600 of a second in order to run properly (at the desired speed), am i right? (Such a high tickrate wouldn't cope well with open world games which have way to much random variables influencing the load on the CPU?)

Advertisement
Yeah, tickrates that high are not common.
I would guess that 30 or 60 would be common just because they're going to be close to the render rate...
I've seen RTS games go extremely low, such as 10, and simulations go as high as 1000. I've also seen FPS go as low as 20, but also sort player actions by timestamp to achieve better than the 50ms temporal resolution that it should give you.
You can also use multiple tickrates for each system. In another iteration of my racing game, I ticked physics at 60Hz, but the tyre/road interactions at 720Hz (which is an integer multiple, so no need to interpolate between the two systems), as they're one part that really needs accurate integration.

If your tickrate is 60fps then you don't even need interpolation on most monitors. Just present the latest state of your simulation on each vsync, bingo. You can use interpolation to support higher refresh rates, and then being one frame behind at 120hz and up really isn't a big deal.

It's worth remembering that a 600Hz update doesn't necessarily have to be "for each object, update everything about it, and repeat 600 times in a second". It can be something more like, "put all your physics stuff in vectors, then perform 600 vectorised operations that each simulate 1/600th of a second". You might not be able to do that for the entirety of your updates, but perhaps for more of it than you think.

And obviously if one game can easily handle 100 actors at 60Hz, it makes sense that some other game can handle 10 actors at 600Hz. In fact the latter case is probably faster because there are fewer potential interactions to consider (and because the smaller amounts of data make it more cache friendly).

Forza Motorsports 2 has a physics update rate of 360 per second.

http://invisiblestudio.blogspot.no/2007/05/forza-motorsport-2-physics-and-frame.html

Hello to all my stalkers.

The only solution i'm able to come up with with regards to interpolation is making the game update at a very high (fixed) rate (like 200 ticks per second.) in order to reduce the latency as much as possible.

That is typical of racing games or any type of twitch input game with low logical-update overhead such as in fighting games.

As mentioned by Kylotan, LOD updates may be applied to nearby objects (skeletons on actors are typically updated less frequently as they get farther away, etc.)
What overall method you use depends on how you work several systems together based on the demands of the game.
The speed at which you set your update is a tradeoff between how much work an update needs to do, how twitch-responsive your game needs to be, and how much slight graphical artifacts bother you/your audience.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

This topic is closed to new replies.

Advertisement