logoRemuria

Custom Object Sync

1.0.3 Public
<div align="center">

Custom Object Sync

Generic badge Generic badge Generic badge Generic badge Generic badge

Generic badge Generic badge

Sync objects across the network with custom range, precision, and parameter usage.

Preview

⬇️ Download Latest Version

📦 Add to VRChat Creator Companion

</div>

How it works

  • Contacts and Physbones read the location and rotation of your object(s).
  • Parameter Drivers convert this location and rotation into boolean values.
  • Those boolean values are synced over the network in multiple steps. Choosing more steps means we can use fewer parameters.
  • Once the values arrive at the remote side, they get converted back into floats.
  • These floats get used to set the object back in its place on the remote side.
  • This can be useful when:
    • You want to late sync a world drop.
    • You want to fly an object around and have it sync reliably.
    • You have an object that moves based on some local-only/fps dependent mechanism.

Install guide

https://github.com/VRLabs/Custom-Object-Sync/assets/76777936/4d12a815-bb1f-4c03-b0fc-83f9ea98638a

  • Click VRLabs -> Custom Object Sync at the top of the screen.
  • Drag the object you want to sync into the Objects to Sync field.
  • Adjust the values until you're happy with them:
    • Add Local Debug View: Adds a toggle to view the object's remote position and rotation.
    • Quick Sync:
      • Position Precision: The position precision to be synced. Since this sync mode syncs floats, Position Precision also affects Range, and Rotation Precision is locked at 1 float per axis.
    • Non Quick Sync:
      • Position Precision: Precision of the synced object's Position.
      • Rotation Precision: Precision of the synced object's Rotation.
      • Radius: Radius of the sync. For more information, see Sync Type
      • Bits per Sync: Amount of bits per sync step. Lower bits means longer before the full object is synced, but also less parameter usage.
    • Enable Rotation Sync: Whether or not rotation should be Synced.
    • Sync Type: Whether or not the sync should be based on avatar root or on world origin.
      • Avatar Centered: The sync is based off of a point which is dropped when-ever you start the sync. This means you can use way lower range, but also it won't late sync.
        • This is forced for quick sync.
      • World Centered: The sync is based off of world origin. This means you'll need a big range to support big worlds, but it will late sync.
    • Add Damping Constraint to Object: Whether or not the remote object should be damped. This means the object moves to its new position smoothly whenever it receives a new position.
      • Damping value: How the damping behaves: 0 = don't move at all. 1 = move to the new position very fast.
  • Press Generate Custom Sync

[!NOTE]
When building for Quest, you will have to remove unsupported components and shaders

How to use

  • Enable the CustomObjectSync/Enabled bool to start the sync.
  • Now the location of the Target objects will be synced over the network.

Performance stats

Rotation Sync:

Constraints:            11-13 + 3 per object 
Contact Receivers:      6
Contact Senders:        3
FX Animator Layers:     2 + 2 per object
Phys Bones:             6
Phys Bone Colliders:    3
Rigidbodies:            1
Joints:                 1
Expression Parameters:  1-256

No Rotation Sync:

Constraints:            11-13 + 3 per object 
Contact Receivers:      6
Contact Senders:        3
FX Animator Layers:     2 + 1 per object
Rigidbodies:            1
Joints:                 1
Expression Parameters:  1-256

Hierarchy layout

Rotation Sync:

Custom Object Sync
|-Target
|-Measure
|  |-Position
|  |  |-SenderX
|  |  |-SenderY
|  |  |-SenderZ
|  |  |-Receiver X+
|  |  |-Receiver X-
|  |  |-Receiver Y+
|  |  |-Receiver Y-
|  |  |-Receiver Z+
|  |  |-Receiver Z-
|  |-Rotation
|  |  |-Measure Bones
|  |  |  |-Measure X Magnitude
|  |  |  |-Measure X Sign
|  |  |  |-Measure Y Magnitude
|  |  |  |-Measure Y Sign
|  |  |  |-Measure Z Magnitude
|  |  |  |-Measure Z Sign
|  |  |-Measure Planes
|  |  |  |-X Angle Plane
|  |  |  |-Y Angle Plane
|  |  |  |-Z Angle Plane
|-Set
|  |-Result

No Rotation Sync:

Custom Object Sync
|-Target
|-Measure
|  |-Position
|  |  |-SenderX
|  |  |-SenderY
|  |  |-SenderZ
|  |  |-Receiver X+
|  |  |-Receiver X-
|  |  |-Receiver Y+
|  |  |-Receiver Y-
|  |  |-Receiver Z+
|  |  |-Receiver Z-
|-Set
|  |-Result

Contributors

License

Custom Object Sync is available as-is under MIT. For more information see LICENSE.

<div align="center">

<img src="https://github.com/VRLabs/Resources/raw/main/Icons/VRLabs.png" width="50" height="50"> <img src="https://github.com/VRLabs/Resources/raw/main/Icons/Empty.png" width="10"> <img src="https://github.com/VRLabs/Resources/raw/main/Icons/Discord.png" width="50" height="50"> <img src="https://github.com/VRLabs/Resources/raw/main/Icons/Empty.png" width="10"> <img src="https://github.com/VRLabs/Resources/raw/main/Icons/Patreon.png" width="50" height="50"> <img src="https://github.com/VRLabs/Resources/raw/main/Icons/Empty.png" width="10"> <img src="https://github.com/VRLabs/Resources/raw/main/Icons/Twitter.png" width="50" height="50">

</div>

Keywords

No keywords found.

Install via VCC

Package ID

dev.vrlabs.custom-object-sync

Unity Version

2022.3

Unity Release

undefined

VRChat Version

undefined

Author

License

MIT

Documentation URL

undefined

Changelog URL

undefined