Body-physics research (hugs + Nimso Hybrid Presence + Box3D facts), mark grab v5.3.1 validated, note Box3D fork
This commit is contained in:
1 parent
5d2c5bf265
commit
9c676f49d3
3 files changed
+64
-29
No files matched your search
@@ -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
@@ -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).
|
||||
|
||||
@@ -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.
|
||||
Reference in new issue
Block a user