Avatar position sync between Slipstream viewers over the helper (sender-authoritative, 2 m bound) #1417
Labels
No labels
amd
avatars
bug
builder
cannot-reproduce
crash
epic
feature
from-viewer
gl-removal
known-limitation
monitoring
parity
perf
platform
priority
critical
priority
high
priority
low
priority
medium
provenance
rendering
rt
status
in-progress
status
testing
status
up-next
triage
ui
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sky_line/Slipstream#1417
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Goal
Fix avatar position desync between viewers by having each Slipstream user share their own precise position with nearby Slipstream viewers over the Slipstream helper (the LSL bridge,
slbridge.{h,cpp}andapp_settings/slbridge/slipstream_helper.lsl). Other viewers then draw that avatar where its own viewer shows it, instead of where their interpolation of the sim's updates puts it.Today every viewer reconstructs other avatars from the sim's object updates (terse updates with velocity, extrapolated between them). Where those reconstructions differ from what the owner sees, two people see each other in different places:
Rules (owner's)
llGetOwnerKey()of the speaking attachment), never from the message body, as the helper already does for poses.llGetPos()before speaking, as a first line.Design to work out
Message: a version-tagged line in the helper's existing style, for example
pos/1|<seq>|<region-local pos>|<velocity>|<rotation>|<flags>. Positions are region-local, at better than terse-update precision. It needs to cover:Transport and range:
llRegionSaylimited by distance, orllSay/llShoutto bound who hears it.Update rate and budget:
Timing: there's no shared clock, so receivers need a way to order and age updates:
llGetTimeor region time).Then blend from the sim-driven pose to the shared one smoothly, never snapping, and back again when updates stop or the bound is broken.
Combat and RLV:
Interop: non-Slipstream viewers ignore the channel. Older Slipstream helpers without
pos/1simply don't send. The helper version bump redeploys automatically through the existing hash versioning.Done when