Files
VR-Mess/research/vr-avatar-arm-length.md

9.2 KiB
Raw Permalink Blame History

Research: avatar arm length vs the player's real arm length (2026-10-02)

Question (owner): get arm length right first time — should the player's body be fitted to the player, or should the player embody an existing (stylized/anime) avatar with its own proportions, VRChat-style? Decide once. [S] = sourced, [I] = inference.

1. What the research says

  • [S] The one mismatch that breaks embodiment: the REAL arm reaching full extension while the virtual arm is still bent (virtual arm longer than real, or offset forward). Porssut et al., Reaching articular limits can negatively impact embodiment in VR, PLOS ONE 2022 (https://journals.plos.org/plosone/article?id=10.1371%2Fjournal.pone.0255554): a 5.5 cm offset; ownership fell from ~0.66 to 0.45 and "more than one body" feelings rose when the real elbow hit its limit first; the opposite (avatar arm straight, real arm bent) was tolerated. Advice: "the user never reaches full arm extension by surprise"; if calibration can't be perfect, "choose to have the virtual limbs slightly SHORTER than the real ones". The elbow's own end-stop is "internal haptic feedback" the brain trusts.
  • [S] Virtual arm shorter than real → the hand can't reach the controller. Ponton et al., Stretch your reach, CHI 2024 (https://arxiv.org/html/2407.08011, https://dl.acm.org/doi/10.1145/3613904.3642268): avatars scaled uniformly from height left an average 26.3 cm (SD 4.7) reach shortfall; of five strategies, STRETCHING the arm to keep the hand on the controller was best for embodiment, proprioception and preference; a free-floating controller kept location but broke continuity; capping the hand at avatar reach was worst. Rendering the controller doesn't matter. A too-LONG virtual arm (untested there) only bends the elbow — reach is unaffected.
  • [S] Fitted skeletons beat uniform scaling. Ponton et al., Fitted avatars: automatic skeleton adjustment for self-avatars in VR, Virtual Reality 2023 (https://arxiv.org/pdf/2307.09558): uniform scaling by eye height "assume[s] … the same ratios between bone lengths as the user" → controller-to-wrist errors; their fitting reduced hand error by 4–14 cm (male) / 2.6–8 cm (female). Method: (1) uniformly scale the avatar by eye-height ratio, (2) resize upper-arm/forearm bones to the measured arm length. Arm length measurement: the user swings both STRAIGHT arms in circles; a sphere fitted to the controller positions gives the SHOULDER JOINT centre (sphere centre) and ARM LENGTH (radius, shoulder→wrist). Neck from head rotations. Embodiment gains appeared "only when the initial avatar proportions differed from the user's" — i.e. exactly the stylized-avatar case. Some avatars needed arms stretched by 12–23 cm.
  • [S] Body ownership tolerates large DELIBERATE changes when movement stays synchronous — up to ~3× arm length (Kilteni et al., Very Long Arm Illusion, PLOS ONE 2012, https://journals.plos.org/plosone/article?id=10.1371%2Fjournal.pone.0040867). Proportion is not the problem; a reach/extension mismatch is.
  • [S] VRChat measures avatars by ARM SPAN by default (scales so the avatar's arms match yours — hands right, floor/feet often wrong, worse with long-legged anime/MMD avatars) or by HEIGHT (feet right, recommended for full-body tracking) (https://docs.vrchat.com/docs/ik-20-features-and-options). Community limb-scaling prefabs stretch avatar arm/leg bones to the user (https://nanochip.gumroad.com/l/avatarlimbscaling); shoulder-mobility add-ons extend reach when real arms exceed the avatar's.
  • [S] Bonelab asks height + T-shirt size with fine-tuning of wingspan, chest, waist, hips, inseam, and runs a "body remapping system" so differently-shaped avatars keep a realistic range of motion (https://www.uploadvr.com/bonelab-avatar-system/, https://roadtovr.com/bonelab-custom-avatar-mod-levels-items-vehicles/). Players report: arms too short for them → "my arm held straight out keeps wanting to lift my character up off the ground" and climbing feels broken because hands aren't 1:1 — the PHYSICS-BODY version of the Ponton shortfall.
  • [S] Nimso (Project TX) keeps a TRUE BODY from the user's metrics (height, floor, arm length = shoulder joint → wrist, set so real full stretch = in-game full stretch) and a separate SCALED BODY for avatars, scaling reach from the shoulder so full stretch still maps to full stretch (see nimso-project-tx.md).

2. Shoulders — Nimso's evolution (all shoulder mentions in the transcripts) and real anatomy

  • [S] 2017: hands limited to "shoulder arm length". 2018 (hzShV7qqbAE): derived from 3 points only — "you put your hand up, you can see your shoulder moves up and down", "he puts his shoulders into" punches. 2019 Test Chamber: "I haven't got a shoulder system yet". 2019 ragdoll: the shoulder is a physical surface (lean hammers/ guns on it). 2021 rewrite: "derived elbow positions, logical sort of shoulder control … the shoulder rotation based on all of that structure including the head, the chest position and rotation". 2022 (yPsCuuNM3lM): rewrote the body because of "the lack of shoulder control" — before, "the shoulder just kind of stays straight and the arm becomes very folded up"; now "the shoulders … actually care about where the elbow is and the arm is just about pushing on the limits of the shoulder". 2024 (i7F4V9K6SlU): "it's not just an arm length — as you lift your arm the shoulder moves up and down, it lifts, so you have to figure out all the mechanical structures … as accurate as possible in order for the limit of your arm to be accurate"; crouching tilts the shoulders with the chest. Calibration still sets ARM LENGTH = shoulder joint → wrist ("these two bones"); the shoulder motion is DERIVED on top. Avatar mapping scales "from the shoulder point" off a chest centre line so hands still meet.
  • [S] Anatomy: the arm hangs off the shoulder girdle (clavicle + scapula); the glenohumeral joint itself moves — elevation (shrug), protraction/retraction (reach forward/back) — and arm raising is shared between glenohumeral and scapular rotation (the classic "scapulohumeral rhythm", ≈2:1 above the first ~30° of abduction; Inman et al. 1944). Winter Table 4.1 lists the "shoulder mass" segment as sternoclavicular joint → glenohumeral axis; Fig 4.1 gives neck→shoulder 0.129H. [I] Girdle motion adds very roughly 5–10 cm of reach (forward/up) over a fixed shoulder — the part of "arm length" a straight-arm calibration does NOT include, which is correct: it must be modelled as motion, not as longer bones.
  • [I] VR Messs: arm length (bones) from calibration; shoulder girdle as its own derived + physical segment (sternoclavicular ball joint with tight limits and a muscle): elevates with arm raise (rhythm), protracts toward far reach targets, tilts with the chest; only past the girdle's limits does the chest lean (current "lean").

3. Decision for VR Messs (revised after owner's "embody a short avatar?" question)

The conflict ("fit the avatar to me" vs "I become the avatar") goes away by fixing the order of operations:

One body model, two layers, one calibration — Nimso's True Body → Scaled Body, Bonelab's "calibrate once".

  1. TRUE BODY = you. Measured once, saved, reused for every avatar and every posture (standing/seated/lying). Zero visible setup by default (VRChat-like): eye height + floor captured from the first standing moments; arm length starts at the anthropometric estimate (0.332·H, slightly short — the safe side per Porssut) and is refined PASSIVELY from the furthest controller-to-shoulder distances you reach during play (high percentile, only ever growing toward the true value). [I] An explicit 10 s "arm circles" sphere-fit lives in settings for people who want it exact immediately (Bonelab-style fine-tuning, done once, forgotten).
  2. SCALED BODY = the avatar you embody, derived from the True Body:
    • uniform scale s = avatar eye height / your eye height applied to tracking around your body: a short avatar makes YOU short (world looks bigger, floor still where your feet are, crouching still touches the floor), camera rotation stays 1:1 — this is what "embodying" a character means and is what VRChat/Bonelab/Nimso do;
    • reach remap r = avatar arm / (s · your arm), applied to the hand target's offset from the (scaled) shoulder: your full stretch is always the avatar's full stretch (the Porssut/Ponton invariant), so anime short/long arms never cause the elbow-lock conflict nor the can't-reach problem; the residual hand offset is only the proportion difference (typically a few %, Ponton/Kilteni say tolerable);
    • the PHYSICS ragdoll uses the avatar's proportions (Mario is physically Mario-sized; Nimso's scaled ragdoll).
  3. "Your own body" avatar (default) = an avatar generated/fitted to your True Body → s = r = 1, zero offsets. Any stylized avatar can alternatively be shown "fitted to you" (arm bones stretched) — that's just r = 1 with visual bone scaling; one flag per avatar, no new system.

So no box goes unchecked: true scale and floor come from s, reach and extension from r, perfect hands when the avatar matches you, and setup is invisible by default with optional exact calibration.