Body-physics research (hugs + Nimso Hybrid Presence + Box3D facts), mark grab v5.3.1 validated, note Box3D fork

This commit is contained in:
Foxyz1302 committed 2026-10-01 21:54:34 +03:00
1 parent 5d2c5bf265
commit 9c676f49d3
3 files changed
+62 -27

No files matched your search

+6 -1
View File
@@ -21,7 +21,11 @@ embodiment/view system in particular is theory until proven.
Physics"`. Validation spike (`scenes/physics_spike.tscn`, run headless) PASSES: drop+contact
and velocity-chase-into-wall both work from C#. WARNING: exactly ONE `.gdextension` file may
exist — a stray duplicate (e.g. at `addons/` root) double-loads the library and breaks the
server with "required virtual method" errors. Jolt (built-in) is the fallback: reverting is
server with "required virtual method" errors. **We own a fork** —
`https://github.com/Foxyz1302/godot-box3d` (branch `rigid-weld-joint`, carries the weld
patch; PR to upstream pending, owner-side) — and it may gain more additions in the future
(rebuild recipe + source in `.vendor/`, only the Linux binary is patched locally).
Jolt (built-in) is the fallback: reverting is
the one project-setting line, and all gameplay code must stay standard-Godot-physics-node
based so that flip is lossless.
- Character import (Koikatsu etc.) is a separate pipeline owned by someone else. We consume a
@@ -201,6 +205,7 @@ device only; the editor has an XR simulator for dev. Trackers/action map: see `x
Headless regressions: `scenes/weld_spike.tscn` (addon patch), `scenes/physics_spike.tscn`,
`scenes/grab_spike.tscn` (rigid pose under drag + fast spin — the winch regression; don't
tighten rotation limits below ~2°, that's the gravity floor for off-center grabs).
**Grab v5.3.1 VALIDATED in-headset (owner: "it just works") — grab saga closed.**
`PhysicsHands.cs`: physical palm bodies (0.4 kg, 90 N chase, rotation lock, stuck-safety
snap — SUSPENDED for a hand while it grips, HAND ghosts > 10 cm lag). Collision layers:
1 = world, 2 = UI (panel mask 0 — props pass through even when shown); layers live on
+24 -26
View File
@@ -198,15 +198,16 @@ PropShop, PropGrabber, PhysicsHands, BodyRig, FadeLayer/Fade. Action map: `openx
## 5. Known issues / open questions
- **Grab v5.3 feel NOT yet validated in-headset** — v5.2's playtest rejected the whole
point-joint + servo category ("hanging on a winch": ball orbits the palm, anvil surface
drifts, palms clip). v5.3 replaces it with a solver-owned rigid weld (locally patched addon,
ConeTwistJoint3D → b3WeldJoint). Headless: grab spike (rigidity under drag + fast spin,
two-handed, takeover), weld spike, physics spike — all PASS 3× deterministic. Known honest
physics, not bugs: ~1.2° elastic sag on off-center grabs under gravity (lever-dependent,
mass-independent), ~15 cm of give if the second hand pulls at full force (recovers; 0.25 m
break is the backstop), and a heavy prop genuinely strains/drags the 0.4 kg hand (that IS
the weight feel; > 2 m hand-controller lag = "grip dragged off" break).
- **Grab v5.3.1 — VALIDATED in-headset (owner: "it just works")** — the grab saga is closed.
Solver-owned rigid weld via the locally patched addon (ConeTwistJoint3D → b3WeldJoint),
rigid two-handed, takeover automatic. Headless: grab/weld/physics spikes all PASS 3×.
Known honest physics, not bugs: ~1.2° elastic sag on off-center grabs under gravity
(lever-dependent, mass-independent), brief ~3° ring when one hand of a two-handed hold
releases, and a heavy prop genuinely strains/drags the 0.4 kg hand (that IS the weight
feel). Angular hold strength on heavy props one-handed = Box3D's solver stiffness floor
(0.25×tick clamp ≈ 22.5 Hz at 90 Hz) — the documented next lever is raising
`Engine.PhysicsTicksPerSecond` above the refresh rate (global experiment, only with
owner go-ahead).
- **Hand reaction / weight-through-hand** — restored for real in v5.3: the weld transmits
prop weight/forces through the solver into the 0.4 kg hand's 90 N chase budget. Validate
the heft in-headset.
@@ -258,25 +259,22 @@ PropShop, PropGrabber, PhysicsHands, BodyRig, FadeLayer/Fade. Action map: `openx
## 7. Next steps (in order)
1. **Body physics milestone (player arms + chest, for hugs)** — designed in
`research/vr-body-physics-hugs.md` §5 + verified against the stack in
`research/vr-body-physics-godot.md`. Phase 1: torso = one RigidBody3D chase-driven toward an
HMD-derived target (PD, force-clamped — the PhysicsHands pattern at bigger mass), camera stays
kinematic (Boneworks sickness lesson), arms stay analytic IK + palm bodies, collision layer 3
for the body. Phase 2 (only if arms clip on contact): active-ragdoll arm segments on Box3D
hinge velocity motors, per-tick PD toward the analytic IK angles. Hug detection = contact
events (palms + chest vs NPC torso, sustained ~0.5 s), NPC reactivity on top. NOT STARTED —
awaiting owner go-ahead + grab v5.3.1 playtest verdict.
2. **Validate grab v5.3.1 in-headset** — rigid-rigid two-handed welds (secondary no longer
gives ~10 cm; expect hands to strain instead when demands conflict, plus a brief ~3° ring
when one hand releases). Watch for jitter under opposed wrist twist — if it appears,
`RigidWeldBias` on the secondary is the fallback knob. "Angular strength underwhelming" on
heavy props one-handed is the Box3D solver stiffness floor (0.25×tick clamp ≈ 22.5 Hz at
90 Hz) — next lever if it still bothers: raise `Engine.PhysicsTicksPerSecond` above the
refresh rate (the clamp scales with tick), an experiment with global consequences.
1. **Full physics body track — DECISION PENDING (owner holds implementation)** — the owner
wants to pursue a full physics VR body (also as reusable tech for a second project idea);
the hug should be mostly physics with detection for future interactivity. Research done:
`research/vr-body-physics-hugs.md` (prior art + phased design; §6 = Nimso's "Hybrid
Presence", the closest known implementation, closed-source, only videos) and
`research/vr-body-physics-godot.md` (verified stack facts: no Generic6DOF, hinge velocity
motors work, PD-follow proven by the hands). Owner offered video-extraction of Nimso's
deep-dive videos — pending. Recommendation shape: staged torso → 2-segment arm chains
(chase-driven, Boneworks/Nimso tier, NOT per-bone skeleton sim), test hugging props.
Character model: keep boxes for the physics work (owner asked; see research §5-6).
2. **Grab points on special objects** — grab is palm-proximity to the prop origin today;
special objects may want authored grab anchors (see `research/vr-grabbing.md` taxonomy).
2. **Grab points on special objects** — grab is palm-proximity to the prop origin today; special
objects may want authored grab anchors (see `research/vr-grabbing.md` taxonomy).
3. **Physical torso/head capsules** — replace the mesh-only placeholders with physics bodies.
3. **Physical torso/head capsules** — folded into the body-physics track (item 1): the torso
chase body IS the capsule replacement; head/body colliders join it in the same stage.
4. **Hand tracking spike** — `XRHandTracker` through WiVRN; controller tip and fingertip must feed
the same cursor concept (interaction must not assume controllers).
5. **Neck/head look system** — `LookAtModifier3D` head→neck distribution (needs a real skeleton).
+32
View File
@@ -155,3 +155,35 @@ Skeleton3D, physics hands exist. [I] throughout this section unless noted.
7. **Explicitly rejected**: full per-bone simulated player skeleton (§1 — nobody ships it;
comfort + tuning cost), VRChat-style event-only hugs (no mutual force = no resistance = hollow),
Go-Go stretch arms (rejected before in `vr-arm-ik.md`).
## 6. Nimso Studios' "Hybrid Presence" — the closest known full-arm-physics VR body (researched 2026-10-01)
Owner-pointer. Unity, CLOSED demos — no source, no Unity package (commenters asked; refused),
no written technical breakdown exists anywhere.
- [S] Itch: `https://nimsostudios.itch.io/hybrid-presence-samples2` — "The Hybrid Presence
system on the arms only" (Spideriini: web-swinging/wall-climbing with physics arms that
climb ledges, push off walls, slow you down). Dev's OWN admitted issues: "some small issues
with elbows and with stuttering hands" — i.e., the exact failure modes our research predicts
(elbow singularities, chase-gain jitter) persist even in the best-known implementation.
- [S] `https://nimsostudios.itch.io/hybrid-test-chamber-tech-demo` — physics-simulated
interactions (physical hands, grip points, two-handed weapons "using a Hybrid system"
blending primary-hand rotation with secondary-hand position), physics locomotion (sway/jog
detection from natural bounce frequency). Known issues: physics glitches "inherent to the
physics engine", shoulder logic UNIMPLEMENTED (butt stocks have no effect). For an FPS.
- [S] Channel `youtube.com/@NimsoStudios` — the technique lives only in videos: "IN-DEPTH VR
PHYSICS INTERACTIONS" parts 1–2 (`youtube.com/watch?v=tMDmwD1cQPg`,
`youtube.com/watch?v=BTlY8SWLtgo`), "Hybrid Muscle System – Fast VR Physics" (arm
force/strength model), "FLUID VR HAND ADAPTATION + Hand Tracking" (hands deform to fit
objects on contact), "Project TX – physics NPCs". Community framing: Boneworks-class body,
"muscle-like" force constraints driving simulated arms/body from the controllers.
- [S] Godot-land has NOTHING at this tier — the ceiling is XR Tools' kinematic PlayerBody
(`github.com/GodotVR/godot-xr-tools`) + physical-hands templates
(`github.com/jtnicholl/godot4-vr-physics-template`). A Godot full-physics body would be
novel; as reusable tech for the owner's second project that novelty is a feature.
- [I] Assessment feed: Nimso validates BOTH directions — full arm physics is achievable by
one person (samples are free and rated 4.8/5), AND its cost is visible in his own issue
lists (elbows, hand stutter, shoulder logic missing after years). His "muscle" language =
force-clamped chase drives, i.e. the same pattern as our PhysicsHands generalized to limbs;
"hybrid" = tracked targets + simulated bodies, which is ALSO our layer-3 architecture
(AGENTS.md). We are not inventing a new technique — we'd be porting a known-shaped one.