Avatar context menu: "Refresh Animations" re-fetches and restarts an avatar's playing animations (T-pose fix) #297
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#297
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?
Add Refresh Animations to the avatar context menus, next to Reset Skeleton / Reset Skeleton And Animations (
menu_attachment_other.xml,menu_avatar_other.xml, and the self / attachment-self menus). It fixes the occasional "stuck in T-pose" avatar (also seen in other viewers) without relogging or asking the other person to do anything. Later we can make it automatic.What it does
For the selected avatar (self, other or animesh), re-request every animation it is currently playing and play it again immediately:
Collect the playing set: the avatar's
mPlayingAnimations(from the lastAvatarAnimationmessage, with sequence IDs) plus the motions LLMotionController thinks are active.Re-fetch the animation assets. Today a failed or stalled fetch can stick:
LLKeyframeMotionmarksASSET_FETCH_FAILED(llkeyframemotion.cpp~527, 608, 619, 2522/2530) and the motion stays dead for the session, leaving bones at the bind pose, i.e. the T-pose;Clear the failed state and the cached keyframe data for those IDs, and request the assets again through the normal asset path (ViewerAsset cap / CDN).
Restart the motions: stop and start each playing animation on the avatar once its data is ready (
stopMotion/startMotion, preserving priority/sequence order), so it plays straight away rather than on the next server update.Self: the viewer knows its own playing set, so the same works. Optionally also re-send our own animation state to the sim so other viewers get a fresh
AvatarAnimation.Notes
updateCharacter("restarting playing animation", from the deformer fix) and this share code rather than duplicating it.Later (automatic)
Detect the condition (a playing animation whose motion is
ASSET_FETCH_FAILEDor never activated for more than N seconds while the avatar is visible) and run the same refresh automatically, rate-limited per avatar, with exponential backoff for assets that keep failing.