USceneComponent::RelativeLocation is an uncompressed FVector (3x32 bits replicated). Consider changing to FVector_NetQuantize100, or consider implementing custom serialization (with customizable quantization) similar to FRepMovement.
Also this is may be an oversight, but for the RootComponent of a PrimitiveComponent, Actor::ReplicatedMovement already does the compression/replication of the root's location and rotation and sets it in PostNetReceiveLocationAndRotation (with world origin rebasing as well). So unless I'm missing something we may be replicating the component's location/rotation needlessly since it will be stomped by the actor... the order of this operation is also questionable (see USceneComponent::PostRepNotifies, will this run redundantly after the AActor::PostNetReceiveLocationAndRotation change in transform)?
RelativeRotation could also use custom quantization but default should remain at 16 bits per component as 8 bits could cause significant jitter.
RelativeScale3D similarly has no quantization and should be addressed (might need 3+ decimal digits of precision since scales are typically small).
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-46383 in the post.
1 |
Component | UE - Networking |
---|---|
Affects Versions | 4.15, 4.16, 4.17 |
Created | Jun 22, 2017 |
---|---|
Resolved | Aug 18, 2021 |
Updated | Aug 18, 2021 |