diff --git a/AGENTS.md b/AGENTS.md index 83cbbc7..86da403 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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 diff --git a/HANDOFF.md b/HANDOFF.md index a9e48a2..3ef1c26 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -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). diff --git a/research/vr-body-physics-hugs.md b/research/vr-body-physics-hugs.md index 36cc205..83791ca 100644 --- a/research/vr-body-physics-hugs.md +++ b/research/vr-body-physics-hugs.md @@ -153,5 +153,37 @@ Skeleton3D, physics hands exist. [I] throughout this section unless noted. pin for torso coupling; verify hinge motor max-impulse behavior at 90 Hz before building on it (the `godot-box3d-weld.md` patch is the precedent for upstreaming what's missing). 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`). + 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.