Networked Physics with PhysX

I think this is an important thread with good information. I would like to add that I got bone replication working quite nicely across the network using the technique of rewinding the physics, and replicating the server’s version of the bone state to everyone.

One tip is when you are applying the BoneTransforms on the client you receive from the server, ensure you use ETeleportType::None. The other types just got jitter for me. IE:

SetBodyTransform(FVector NewLoc, ETeleportType::None);

Note that setting bone transforms at runtime is only exposed to C++ right now.

Also, you don’t necessarily need to update the entire hierarchy of bones, just the most important structural ones.

For example, you probably have no need to replicate the individual fingers and toes of a physics ragdoll. Just replicate the root, one or two spine bones, the head, the hands, and the ankles.
That drastically reduces the amount of data to send.

You can also only send data that changed since last update, and you can compress the data too.
Right now I am able to send 17 bones 20 times per second on a mobile device with good results.

Here is a great video on the topic from one of the Rocket League devs: