Skip to content

feat: NetworkTransforms throughout project optimized where possible [MTT-6312] #836

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

fernando-cortez
Copy link
Collaborator

@fernando-cortez fernando-cortez commented May 8, 2023

Description

This PR upgrades NetworkTransforms inside the project to reduce bandwidth cost.

Prefabs/ scene objects that had Synchronize Transform enabled inside their NetworkObject component that didn't need to synchronize position have now that flag disabled. This is particularly useful if the NetworkObject is used more for management related tasks and has no spatial synchronization needs. This will reduce initial synchronization payloads.

CharacterPrefab prefab which all PCs & NPCs derive from now have on their NetworkTransform:

  • sync only x and z positions
  • sync only z rotation
  • have half float precision enabled

The savings as seen from a client are as follows:

Pre:
pre-NT-optims

Only syncing x and z positions explicitly:
NT-optims-only-x-and-z-positions

Only syncing x and z positions, y rotation, and half float precision enabled:
NT-optims-only-x-and-z-positions-and-half-precision

Only syncinc x and z positions, half float precision enabled, quat syncing and quat compression enabled:
NT-optims-quat-sync-and-quat-compression-and-half-precision

Bandwidth costs considered, since only the y position is modified per frame in a worst case scenario, it is more cost efficient to only: sync x and z positions, y rotation, and enable half float precision. Individual NetworkTransform packet sizes are reduced from 21 bytes down to 16 bytes with this optimization.

Issue Number(s)

MTT-6312

Contribution checklist

  • Tests have been added for boss room and/or utilities pack
  • Release notes have been added to the project changelog file and/or package changelog file
  • Pull request has a meaningful description of its purpose
  • All commits are accompanied by meaningful commit messages
  • JIRA ticket ID is in the PR title or at least one commit message
  • Include the ticket ID number within the body message of the PR to create a hyperlink
  • An Index entry has been added in readme.md if applicable

@fernando-cortez fernando-cortez added the 1-Needs Review PR needs attention from the assignee and reviewers label May 8, 2023
@NoelStephensUnity
Copy link
Contributor

NoelStephensUnity commented May 10, 2023

This looks about right with only synchronizing x and z position axis and the y rotation axis. Just using half float precision for this scenario is the right choice. You should get a 6 byte reduction for the 3 axis (2 bytes per as opposed to 4), but will get an additional 1 byte hit due to the m_BitSet flag values set with half float compression enabled and how that is being compressed...which should get you 5 bytes per NT savings. (which makes me think that I should possibly re-arrange where those bits are being set to try and avoid that hit)
👍

@fernando-cortez fernando-cortez marked this pull request as ready for review May 11, 2023 16:12
@fernando-cortez fernando-cortez merged commit c4f9e87 into develop Jun 2, 2023
@fernando-cortez fernando-cortez deleted the feat/NetworkTransform-bandwidth-optimizations branch June 2, 2023 14:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
1-Needs Review PR needs attention from the assignee and reviewers
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants