diff --git a/research/vr-avatar-arm-length.md b/research/vr-avatar-arm-length.md index ee090fc..c92987b 100644 --- a/research/vr-avatar-arm-length.md +++ b/research/vr-avatar-arm-length.md @@ -45,26 +45,54 @@ the player embody an existing (stylized/anime) avatar with its own proportions, → 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. Decision for VR Messs +## 2. Shoulders — Nimso's evolution (all shoulder mentions in the transcripts) and real anatomy -**The physics body is the player's real body; any avatar is a skin fitted onto it.** +- [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"). -1. **Physics ragdoll proportions = the player's calibrated metrics** (Nimso's True Body; the research's "fitted" - method). Shoulder joint positions and arm length come from measurement, never from current head height, so - standing, seated or lying play all use the same body. -2. **Calibration (one-time, saved profile):** - - Stand straight → eye height + floor (Nimso's "stand straight, touch the ground"). - - "Arm circles" ~10 s: swing both straight arms; sphere-fit each controller trail → shoulder centres - (sphere centres, gives shoulder width and height) and arm length (radius − wrist-to-grip offset). - - Skip / failure fallback: Winter/Drillis-Contini ratios from eye height (`nimso-project-tx.md` §3). - - Store arm length ~1–2 cm SHORT of the measured value (Porssut: never let the real elbow lock first); the - physics hand then trails the controller by that margin only at full stretch. -3. **Stylized / anime avatar = visual skin on the fitted skeleton** (the fitted-avatar pipeline): uniform scale by - eye-height ratio, then resize the avatar's upper-arm/forearm bones to the calibrated arm length (hands not - stretched). The anime look survives (head/torso/legs proportions untouched); only arm bone lengths adapt. No - bespoke player model needed — any humanoid works. -4. **"Become a different-sized character" (Bonelab/Nimso Scaled Body)** stays on the back-burner; if built, it must - preserve the extension invariant (scale reach from the shoulder so real full stretch = virtual full stretch). -5. Shoulder girdle: model the clavicle as a driven segment (shrug/protraction ~ a few cm) so overhead/forward - reach beyond the arm comes from the shoulder, as in real bodies and in Nimso's "shoulder lifts as you raise the - arm". +## 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.