Smooth Sync: Sync your Transforms Smoothly across the network

Yes, however, I encountered a new issue of de-sync that can be replicated (in my project)- issue1.mp4 - Google Drive

Adding a lag of 500ms (Net PtkLag=500) BEFORE spawning into a smooth-sync controlled pawn works perfectly fine, but adding the lag AFTER spawning causes major desync in a few seconds. See the video above for details. @

@e3pojedi
Raise your TimeCorrectionSpeed if you want snappier changes to consistently large lag spikes.

@e3pojedi
Ah, “in a few seconds”. I thought you said “for a few seconds”. I’ll see what I can find.

@e3pojedi
I don’t see this issue in the Vehicle Advanced template or Third Person template when I use Net PktLag=500 in the console after connecting. Do you have any other tips on how I might be able to replicate this issue? Try reverting back to default SmoothSync settings if you haven’t.

@e3pojedi

I’m just wondering, did you modify the fps limit in the project settings?
Because I had that exact desyncing problem which you described, with SmoothSync synchronized pawns, if I did so.
My solution was to remove the fixed fps limit in the project settings and just limit it via the t.maxfps command instead.

When turning off replicate movement on the third person character the player animations no longer replicate. Are there any simple solutions for this? Enjoying the plug-in so far, great work!

@tschmi22
I’ve been trying to rewrite everything to allow custom syncing of any variables but I ran into some walls.

So I ended up converting what I have now to do animations (it syncs MovementMode and velocity on movement components) but I didn’t really check everything to make sure it’s running perfectly since I’m in the middle of rewriting some things.

I’ll PM you a copy.

@e3pojedi
I think I came across an error in Smooth Sync that may cause the issue. I’m not sure on the solution yet, but I should have it done this weekend. I’ll message you again then.

Hey there,

So I also had the same issue that @e3pojedi discovered with the 500ms ping, after hours of debugging and going over the C++, at least on my occasion, it was related to extrapolation not working, usually around 400-500ms ping that’s when interpolation stopped working and extrapolation kicked in, but it never ran, because isSimulatingPhysics was always set to false since my character’s root component doesn’t have physics on. So I removed all mentions of isSimulatingPhysics and extrapolation started working again, which fixed the issue of massive desync, getting stuck in place during high ping, I’m using character movement with the smooth sync comp, if that helps anyone else.

For the animation issue, you simply need to use the latest velocity/rotation in the SmoothSync comp instead of get actor velocity/rotation, what I did was use the default methods in autonomous proxy and used the SmoothSync velocity as a simulated proxy.

Thanks for the plugin, very helpful.

EDIT: Scratch that, for some reason I can’t get extrapolation to work, I’ve modified the code to use character movement and disabled position updates so only extrapolation runs, it calls the event and applies the velocity but the simulated proxy stays in the same place always, I’ve noticed that this also affects rotation as well, so once the ping is over 500ms+ rotation stops working until you stop sending any inputs and rest kicks in, that’s when things are updated.

@BioXide
Sorry about the issue. I’ve got a solution already but it needs cleaning up. I plan on putting it on the Marketplace tomorrow. I’ve also got a fix for automatically using Velocity for running animations and I’m also syncing the MovementMode so that things like the jump animation plays in the Third Person Template.

Ah sweet, I was breaking my head last night with this haha

**Version 1.15 **has been submitted to the Marketplace.

Change Log:

  • New Feature! Added syncing of Movement Mode (animations).
  • New Feature! Added automatic syncing for velocity of Movement Controllers for animations like walking / running in Third Person Template.
  • Fix for owner time becoming off after some length of time which caused syncing to become erratic.

I know a lot of people have been waiting for the new feature of animation syncing and for a fix for time becoming off. I’ll message each of you after it becomes accepted. It’s usually about a day or two for them to accept it.

@Ramasurinen @e3pojedi @pDunkl @tschmi22 @BioXide
All of your problems should be fixed with the new version of Smooth Sync (1.15) that is available on the Marketplace. Change log is in the above comment.

You shouldn’t need work arounds any more for any of your problems or added features. Let me know if there are any outstanding issues after updating Smooth Sync.

Thank you, the update sounds very promising.
Your support for the plugin is just awesome!

Thanks! Very nice

Version 1.16 has been submitted to the Marketplace.

Change log:

  • Added option to not sync Movement Mode when using a Character Controller.
  • Now automatically sends a State if Movement Mode changes so that animations line up better.
  • Better comments and renamed some of the internal use variables.

Version 1.17 has been submitted to the Marketplace.

Change log:

  • Fix for setting velocity to angular velocity when compressed.
  • Fix for syncing chosen scene component’s primitive component.

Version 1.18 has been submitted to the Marketplace.

Change log:

  • Fix for if custom Scene Component To Sync is set before BeginPlay() is called.

Hi, Sorry to bother you but, i would like to know if it is possible to force smooth interpolation regardless of error distance. I am trying to smoothly rotate a vehicle, but movement is jittery and i am not sure which parameter to modify. Here is a short .avi showing the jittery rotation ShipMovement.avi - Google Drive

Thank you in advance!

@caryest
What is “error distance”?

Is this video showing single player and your locally owned vehicle? Smooth Sync works by syncing objects in a multiplayer setting.

If it’s a locally controlled vehicle, you probably are just rotating without using delta time. Do something like Rotation = Rotation + speed * deltaTime.