Announcement

Collapse
No announcement yet.

Smooth Sync: Sync your Transforms Smoothly across the network

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Smooth Sync: Sync your Transforms Smoothly across the network

    Click image for larger version  Name:	forumtitle.png Views:	1 Size:	51.1 KB ID:	1492483












    Link to Marketplace

    Hey! I didn't see any way to sync from client owned objects so I made this.

    It's a pretty simple setup. Just add the Smooth Sync component to your Actor and it will sync it's movement from the owner to the non-owners or from the server to client if there is no net owner.

    Videos:
    See Smooth Sync in Action
    Smooth Sync Overview


    Smooth Sync differs from Unreal's Replicate Movement in two key ways:

    1) Using custom interpolation, as described in detail here, it can be set up to your game's specific needs.

    2) Allow client owned objects to determine the position of Actors. This removes the need for client side prediction (or "player prediction") for certain Actors.



    Look at all of those features! Easy to ignore a lot of them too, they are just there if you need them.

    Click image for larger version  Name:	SmoothSyncUnrealImageOne1920x108045d7aac3b87c6b378ec89f4df9d339dd.png Views:	1 Size:	202.8 KB ID:	1492484



    Interpolation and Extrapolation

    Performs interpolation and extrapolation to handle lag.


    Highly Configurable

    Choose what you want to send and when you want to send it. Optionally compress floats to further reduce bandwidth. Customizable interpolation and extrapolation settings depending on your game's needs.


    Source Code

    The full source code is provided so you can see everything with detailed comments.


    Professional Support

    We have a consistent record of prompt and effective support. Contact us via email or forums any time and we will work with you to resolve any issue.


    We are game developers too so we know how important it is to have working products and to put out fixes fast.
    Let me know if you have any suggestions or comments. I want to make Smooth Sync the best it can be!


    Link to Marketplace


    Documentation
    Last edited by fuestrine; 01-17-2019, 04:24 AM.

  • replied
    GuacFrog
    No problem at all, feel free to ask questions any time.

    Smooth Sync won't send any information across the network if actors are not moving, but I'm honestly not sure how it'll fair. I've been meaning to try to figure out the limits for my Plugin anyway so I'll take a look at it sometime this week and get back to you.

    Leave a comment:


  • replied
    Originally posted by fuestrine View Post
    GuacFrog
    You are correct, the physics will only be simulated by one system. It can be either the server or any client, but not more than one system at once. The position, rotation, etc. will then be interpolated on all other systems.

    I'm not really sure how the other way would act unfortunately.
    Thanks for the time you have taken to address my concerns. One last point that I want to stress to make sure that we are on the same page (last question I promise ). You said it wouldn't work for thousands of objects, but what if the players only interact with a single object at a time (ie moves a box around the warehouse) and occasionally throws a box which might move around a few more. Do you think this plugin is still not suited for a situation like that? Thanks again for the time you have taken to respond.

    Leave a comment:


  • replied
    GuacFrog
    You are correct, the physics will only be simulated by one system. It can be either the server or any client, but not more than one system at once. The position, rotation, etc. will then be interpolated on all other systems.

    I'm not really sure how the other way would act unfortunately.

    Leave a comment:


  • replied
    Correct me if I am misunderstanding, but with this plugin, physics can't be simulated on both the client and server, but rather only by the server which then replicates the transforms and the client interpolates between them? Do you happen to know how that would perform as opposed to having a client and server simulation with the client correcting it's object's simulations?

    Leave a comment:


  • replied
    Originally posted by fuestrine View Post
    GuacFrog
    It does. I'm just not sure about thousands of objects at once. Also all of the physics objects would need to be determined by the same system. A game like Rocket League has all physics determined by the server, but they also have a fair bit of player-prediction/client-prediction which makes it seem like it isn't, which Smooth Sync doesn't have.
    Hmm. Thousands of objects in the warehouse but the player will only be interacting with 1 or two at a time. Would there be a way to use this plugin and optimize it so that it doesn't send information for every object but instead only the objects that have moved? Because most of the objects won't be moving on the server.

    Leave a comment:


  • replied
    GuacFrog
    It does. I'm just not sure about thousands of objects at once. Also all of the physics objects would need to be determined by the same system. A game like Rocket League has all physics determined by the server, but they also have a fair bit of player-prediction/client-prediction which makes it seem like it isn't, which Smooth Sync doesn't have.

    Leave a comment:


  • replied
    Originally posted by fuestrine View Post
    GuacFrog
    We haven't updated to 4.23 yet but we are planning on it when we get time. I'd expect we'd be able to get to it within a week.

    If you want to be notified when we release a 4.23 version, let me know.
    Oh, I see. I assumed that this plugin allowed replication of physics objects without lag / jumps.

    Leave a comment:


  • replied
    GuacFrog
    We haven't updated to 4.23 yet but we are planning on it when we get time. I'd expect we'd be able to get to it within a week.

    If you want to be notified when we release a 4.23 version, let me know.

    Leave a comment:


  • replied
    GuacFrog
    I don't think it would work for exactly what you are trying to do.

    Smooth Sync works by having one client (or non-client server) determine the position of an actor. If the actor tries to deviate from this on the non position determining client (or non-client server) the object will not move.

    I wouldn't count on Smooth Sync being able to handle potentially thousands of objects. It does seem to handle more objects at a lower send rate than Unreal's position replication does (like shown in the Smooth Sync trailer), but I wouldn't expect it to handle any super large amounts. Smooth Sync does take into account Unreal's Net Cull Distance Squared though for network optimization.

    Let me know if that helped at all.

    Leave a comment:


  • replied
    fuestrine Another quick question. Does this plugin support 4.23?

    Leave a comment:


  • replied
    fuestrine I am interested in your plugin. I have a couple of questions about it.

    The game that I am making takes place in a large warehouse with around 10 connected players (listen server), and there are potentially thousands of objects that simulate physics on the server. My issue with the default UE4 replicate movement is the fact that clients see and get teleported around when interacting with physics objects.

    My solution to this problem would be simulating physics on the client and the server, and having the server send the client the actor's' position and the client "nudges" the actor's position towards the server position. This way there is no teleporting as the client simulates everything, but it also means that the location and rotation of every object is the same across client and server.

    Does your plugin work in this manner? And will it be able to handle a large amount of objects? I planned on making optimizations such as only replicating the actor's transform if the player is within certain distance or looking the a certain direction.

    Let me know your thoughts, thanks!

    Leave a comment:


  • replied
    trshman
    a) I'm a little rusty on my Unreal concepts but basically, you can only replicate variables or call RPCs from owner actors to non-owner actors or from non-owner server actors to non-owner clients actors.

    I'm not sure exactly how it's determined in Unreal. I found this online that seems correct but I'm not entirely sure:
    "If I gather the information from this question correctly, anything spawned on the server outside of a PlayerController is considered Server owned. Everything spawned inside of a PlayerController (also on server side) is considered player owned. I'm only left to assume parts of persistent maps are unowned actors."

    You can also use SetOwner() to set the owner manually after spawning.

    b) Yes, you can use that to move the ball on the server. Or you can move it on the server any other way you like.
    Last edited by fuestrine; 09-08-2019, 10:15 AM.

    Leave a comment:


  • replied
    a) Can you explain the concept behind Owned and not owned actors. By what is is determinated?

    b) Can I still use "UFUNCTION(Server, Reliable, WithValidation) void ServerAddTorque(FVector Torque);" forcing the physics being done server side? Or is is it different scenario when using this plugin?

    Leave a comment:


  • replied
    trshman
    1) I'm not entirely sure how Unreal does their syncing. I'm pretty sure Unreal's syncing doesn't keep a buffer of states though like Smooth Sync does, so if there's an FPS drop or something I could see Unreal's syncing having issues. Also I don't think the position is solely determined by a single system, so your objects can become out of sync then it will correct to what it thinks it should be.
    Smooth Sync doesn't get out of sync in the same manner that Unreal's syncing does.

    2) I'm not sure if you are doing something wrong and if it'll fix your specific issue but Smooth Sync does work with rolling ball template. There's no one complaining about lag and the rolling ball template is shown with Smooth Sync in the tutorial video too.

    3) It works by sending positions over the network and lerping between them. For Owned Actors it sends transform from owner to non-owners (owner determined transform). For Unowned Actors it sends transform from from server to clients (server determined transform).

    Let me know if you have any other questions or if you want more explanation on anything.

    Leave a comment:

Working...
X