Everything works now as intended. As long as I interpolate the rotation fast enough, there are only very few and short corrections, which the player won’t recognize. And this is only, if the character moves. If he stands still, there is no error, no correction.
I made a final video.
First, I show the relative offsets, by letting the platform interpolate to the servers position slowly.
You see now, server and client remain at correct offsets. But there are some corrections while I keep moving.
Then, I just turn up my rotational interpolation to show, what the player movement is look like, at 240ms rtt lag (120 in/out).
I didn’t touch replication settings like “MAXPOSITIONERRORSQUARED=3”. So you see, most of the time, even at higher lags, it maintains the (locDiff | locDiff) under 3, as long as I RInterp fast enough. The only jittering you see, is the replicated red wireframe server position, but that’s just debug information. Now I can use this for a commercial project, which involves trains and ships moving in multiplayer environments =)
This time only 720p. Upload times are crazy at 1080p^^
In another test, I set the addRelativeLocation to 12kdeltatime, which should be about 432 km/h | (((12.000 / 100) / 1000) * 3600) .
At rotationSpeed 12deltatime, there was the same experience as shown in the 2nd part of the video. Occational and short corrections, but nothing which the player will recognize.
Phew, now I know a lot better how CharacterMovementComponent works under the hood. The only last issue now would be the teleport, if you jump on a moving object. But I will change this teleport to a smooth correction, if I find out how.