[quote=“martindevans, post:61, topic:3516”]
When a packet arrives integrate forward it’s contents by the latency time[/quote]
Problem is, the latency is not constant. Sure, it can be averaged over several updates — but it’s the per-update latency variance (sometimes referred to as Jitter) which is visibly disruptive.
Granted, we’re actually describing two different parts of a solution. I am suggesting buffering multiple network frames (typically 3 is enough to cover most networks’ expected jitter), so that you do not need to perform any extrapolation – which would be required if the expected update did not arrive in time due to a momentary increase in latency.
Essentially: You assume that each client is sending at a constant rate, i.e 20 updates per second, and then append these updates into a queue (production side of the queue), Simultaneously, you dispatch them out of queue to the client at the expected update rate (consumption side of the same queue). It’s just a delay line to ensure that the ‘next’ update is (almost) always available. If you were to buffer 3 updates worth, then the max jitter you can handle is 3x the update interval – in this example, 150ms latency variance.
The end result is that the buffer ‘releases’ updates to the local client at the exact rate of 20 updates per second.
Interpolation is definitely required, and is the next step. But you actually don’t need to simulate each sub-step (the deltas) as you described. Assuming these are all linear transformations, which I believe they are, you can simply take the expected time difference between two updates (50 ms), and back-solve for the initial velocity and acceleration that would be needed in frame A to get from there to frame B (so that you end up at the correct position and velocity in frame B).
Every time the aforementioned buffer releases an update (‘frame B’), you calculate those ‘how to get from frame A to frame B’ values (‘frame A’ being the previous update released from the buffer), then set the visible vessel’s current position to the position from update A, and its velocity and acceleration to the calculated ‘from a to b’ values, and then simply allow the physics engine to do all of the interpolation for you. Math dictates that 50 milliseconds from now, the vessel will be at the position and velocity specified in update B. (all of this applies to rotation and angular velocity / acceleration as well).
I hope that makes sense…
hahahah… moving us closer towards world peace, one docking approach at a time! 