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

99 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.