Files
VR-Mess/research/vr-arm-ik-deep.md

4.9 KiB
Raw Permalink Blame History

Research: arm IK stability, elbow poles, torso yaw, overextension (follow-up)

Second research pass for VR Messs, after v1.1 of the placeholder rig showed: residual shaking when the arm tugs the body near (but not at) full extension, twitchy elbows driven by wrist rotation, and pure-HMD chest yaw. Label: [S] = sourced, [I] = inference. See also vr-arm-ik.md (prior art) and vr-grabbing.md (grab architecture).

1. Full-extension elbow jitter = the classic 2-bone singularity

2. Elbow direction (pole) heuristics

  • [S] VRIK does NOT use hand rotation as the primary pole driver — it samples the avatar's start pose for the natural bend direction, then uses twist weights (shoulderTwistWeight etc.) and optional bend goals (docs above; Resonite VRIK mirror: https://wiki.resonite.com/Component:VRIK).
  • [S] Community practice for aiming: a bend goal at the elbow's down/back/outward position as a SOFT bias (Unreal forums on driving the middle joint from hand orientation: https://forums.unrealengine.com).
  • [I] Controller-rotation-driven poles (ours) are common in physics-hands recreations but are the twitchiest variant; Boneworks-style arms derive elbow direction mostly from body-relative geometry.
  • Recommendation: build the pole in a stable torso frame ("down + back + outward"), PROJECT OUT the shoulder→hand axis so wrist spin can't rotate it, add hand-forward only as a small weight (~0.2–0.3) that ramps in when aiming, and exponentially smooth the final pole; never let a blend weight cross zero (flip risk).

3. Chest/torso yaw from HMD + hands

  • [S] Academic prior art: Ponton et al. 2022, "Combining Motion Matching and Orientation Prediction to Animate Avatars for Consumer-Grade VR Devices" (https://arxiv.org/abs/2209.11478) — HMD-forward alone has 14.5° mean body-orientation error vs 5.4° for a learned predictor; AvatarPoser (https://arxiv.org/abs/2107.04044), HMD-NeMo (https://arxiv.org/html/2308.11261v1), MirrorPoser are the NN lineage.
  • [S] Classic game heuristic: torso yaw from the controller-to-controller line blended with HMD yaw (https://forums.unrealengine.com).
  • [S] Ponton et al. smooth predicted orientation with a spring-damper/slerp and DECOUPLE orientation from the head (never hard-blended against head yaw).
  • Recommendation (non-NN): yaw = HMD yaw base blended toward a hands-derived yaw with weight proportional to how far forward/raised the hands are (0 idle → ~0.6 aiming), applied through a critically damped spring with ~150–250 ms response.

4. Overextension with physics hands

Applied to VR Messs (BodyRig.cs)

Soft IK factor 0.98; pole projected in torso frame with hand weight 0.25 and exponential smoothing; torso yaw spring (HMD base + hands-derived yaw × forwardness, exp smoothing ~12/s); reach-budget hysteresis unchanged. Next dial if shaking persists: SoftIKFactor → 0.95.