Hello,
This is actually my first post after being a lurker for quite some time here.
For the last couple of days I try to get my head around the concept of Overwatch's multiplayer architecture after watching the GDC 2017 talks by Timothy Ford ("Overwatch Gameplay Architecture and Netcode") and Dan Reed ("Networking Scripted Weapons and Abilities in Overwatch"). ( I hope someone here has Vault Access :D)
As usual with such complex systems Overwatch seems to combine different approaches to hide latency. Among others, the ones I am mostly interested in are, Command Frames and State Synchronization. I think I understood both concepts but I have problems adding them up.
1) Ford talks about the client being in the future by ~ half the RTT plus one command frame. This ensures that all commands sent from the client to the server tend to arrive when the server is actually at the tick referenced in the command. If that's correct my assumption would be the following:
- Server is at tick 1000.
- RTT is ~ 10 ticks -> around 10*16.6 ms.
- Client simulates tick 1005 and sends command associated with tick 1005.
<5 ticks later>
- Server is at tick 1005 and received a client command. (maybe its already queued in a buffer).
- Server applies command and sends state for tick 1006 (State_N + Input_N = State_N=1).
- RTT might still be 10 ticks.
- Client simulates tick 1010.
<5 ticks later>
- Server is at tick 1010...
- Client received State for tick 1005 and checks internal buffers for prediction.
Does that really apply? Does the client really simulate half-rtt in the future?
2) How do I handle ticks at the start of the game? My network layer requires a timestamp to work and I'd use ticks in the main game loop. Do I have something like a grace period until the client can calculate the required ticks to move to the future (by calling simulation.Tick(1/60f) for the number of ticks to be in the future)?
3) If I run the simulation at 60Hz and the network layer at say 20Hz. Do I have 60 Inputs that I send from Client to Server or 20?
I know, this is somewhat similar to other questions in this forum, but I feel like this particular talk has never been discussed?
Cheers,
poettlr