Look-at for mesh bodies: directional head animations, and look-at through Pose Studio sync #902

Open
opened 2026-10-21 00:40:36 +00:00 by sky_line · 0 comments
Owner

Problem

The built-in look-at turns the avatar's head and eyes toward what you look at, using LL's head/eye joint motion on the standard mHead / mNeck / mEyes bones. Many mesh bodies and heads don't show it, or show it wrongly:

  • Different bones: non-human bodies (quadrupeds, ponies and the like) rig the head to other bones, or use extra neck bones (Bento), so turning mHead alone looks wrong or does nothing.
  • Animations override it: an AO or pose keeps the head locked.
  • Others never see it: look-at isn't an animation, so other viewers never receive it. Only the eye/head look-at target is sent, and each viewer applies it to the standard skeleton.

Goal: look-at that works for mesh bodies. Two methods, which can coexist.

Method 1: directional animations (works for everyone, in every viewer)

Drive look-at with real animation assets that turn the head and neck chain toward a direction, so every viewer shows it.

  • Animation set: a set of directional poses (left, right, up, down and diagonals; e.g. a 3x3 or 5x3 grid of yaw and pitch, plus centre). Low-priority, head/neck-only animations that body AOs don't override. Where possible, reuse the owner's existing Pose HUD animations (the per-direction head poses) as the source set.
  • Selection: the viewer picks the grid cell nearest the look-at direction (camera target, chat partner, hovered object, or another avatar), with hysteresis and a dwell time so it doesn't flicker. It starts and stops the animation via AgentAnimation, the same channel gestures use. Optionally it cross-fades two neighbouring cells, if the sim's priority and blend behaviour allows.
  • Configuration: per body, a choice of animation set (bundled set, user set from inventory, or none), a list of bones the set drives, and a maximum yaw and pitch.
  • Trade-offs: the animations are coarse, stepped by grid cells, and each change costs a network message, so changes are rate-limited. They also need the animation assets to exist for the body's skeleton.

Method 2: viewer-to-viewer look-at through Pose Studio sync (smooth, Slipstream only)

Use the existing Pose Studio sharing protocol (pose channel, consent rules, helper bridge) to send a continuous look-at that other Slipstream viewers apply directly to the bones.

  • Data: a compact look-at message carrying a target direction or point, a weight, and a per-body bone map (which neck, head and eye bones, and how the rotation splits along the chain). It is sent at a low rate and smoothed on the receiver.
  • Receivers: they apply it as a procedural layer on top of animations, the same way Pose Studio drives bones, respecting per-bone limits.
  • Scope: only Slipstream viewers see it. Others fall back to method 1, or to nothing.
  • Rules: it follows the pose-sharing consent and security rules. A wearer's own look-at needs no consent from others, but receivers can mute it.

Shared pieces

  • Look-at target choice: reuse LL's look-at targets (camera focus, selected object, chat) with smoothing. Add a setting for whether look-at follows the camera, and keep privacy in mind: some users hide where they look, so there must be an off switch, and it should respect LL's existing look-at privacy settings.
  • Bone maps: per-body bone-map presets (standard human, Bento neck chain, common quadruped and pony rigs). These are editable in Pose Studio.

Acceptance

  • With method 1, other viewers see a mesh quadruped's head turn roughly toward what the wearer looks at, in coarse steps, with no flicker.
  • With method 2, other Slipstream viewers see it turn smoothly and continuously.
  • It can be turned off entirely.
## Problem The built-in look-at turns the avatar's head and eyes toward what you look at, using LL's head/eye joint motion on the standard mHead / mNeck / mEyes bones. Many mesh bodies and heads don't show it, or show it wrongly: - **Different bones:** non-human bodies (quadrupeds, ponies and the like) rig the head to other bones, or use extra neck bones (Bento), so turning mHead alone looks wrong or does nothing. - **Animations override it:** an AO or pose keeps the head locked. - **Others never see it:** look-at isn't an animation, so other viewers never receive it. Only the eye/head look-at target is sent, and each viewer applies it to the standard skeleton. Goal: look-at that works for mesh bodies. Two methods, which can coexist. ## Method 1: directional animations (works for everyone, in every viewer) Drive look-at with real animation assets that turn the head and neck chain toward a direction, so every viewer shows it. - **Animation set:** a set of directional poses (left, right, up, down and diagonals; e.g. a 3x3 or 5x3 grid of yaw and pitch, plus centre). Low-priority, head/neck-only animations that body AOs don't override. Where possible, reuse the owner's existing Pose HUD animations (the per-direction head poses) as the source set. - **Selection:** the viewer picks the grid cell nearest the look-at direction (camera target, chat partner, hovered object, or another avatar), with hysteresis and a dwell time so it doesn't flicker. It starts and stops the animation via AgentAnimation, the same channel gestures use. Optionally it cross-fades two neighbouring cells, if the sim's priority and blend behaviour allows. - **Configuration:** per body, a choice of animation set (bundled set, user set from inventory, or none), a list of bones the set drives, and a maximum yaw and pitch. - **Trade-offs:** the animations are coarse, stepped by grid cells, and each change costs a network message, so changes are rate-limited. They also need the animation assets to exist for the body's skeleton. ## Method 2: viewer-to-viewer look-at through Pose Studio sync (smooth, Slipstream only) Use the existing Pose Studio sharing protocol (pose channel, consent rules, helper bridge) to send a continuous look-at that other Slipstream viewers apply directly to the bones. - **Data:** a compact look-at message carrying a target direction or point, a weight, and a per-body bone map (which neck, head and eye bones, and how the rotation splits along the chain). It is sent at a low rate and smoothed on the receiver. - **Receivers:** they apply it as a procedural layer on top of animations, the same way Pose Studio drives bones, respecting per-bone limits. - **Scope:** only Slipstream viewers see it. Others fall back to method 1, or to nothing. - **Rules:** it follows the pose-sharing consent and security rules. A wearer's own look-at needs no consent from others, but receivers can mute it. ## Shared pieces - **Look-at target choice:** reuse LL's look-at targets (camera focus, selected object, chat) with smoothing. Add a setting for whether look-at follows the camera, and keep privacy in mind: some users hide where they look, so there must be an off switch, and it should respect LL's existing look-at privacy settings. - **Bone maps:** per-body bone-map presets (standard human, Bento neck chain, common quadruped and pony rigs). These are editable in Pose Studio. ## Acceptance - With method 1, other viewers see a mesh quadruped's head turn roughly toward what the wearer looks at, in coarse steps, with no flicker. - With method 2, other Slipstream viewers see it turn smoothly and continuously. - It can be turned off entirely.
sky_line added this to the Slipstream project 2026-10-21 00:40:36 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#902
No description provided.