From 970b5f1d50f2d16420e0fd7835c67a7729d08d83 Mon Sep 17 00:00:00 2001 From: Foxyz1302 Date: Thu, 1 Oct 2026 22:09:21 +0300 Subject: [PATCH] Project TX video extractions into hugs research; dedupe AGENTS.md grab item; close research phase --- AGENTS.md | 22 +++++--------- HANDOFF.md | 15 ++++++--- research/vr-body-physics-hugs.md | 52 ++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 19 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 86da403..7f00724 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -210,20 +210,14 @@ device only; the editor has an XR simulator for dev. Trackers/action map: see `x 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 CollisionObject3D, NOT CollisionShape3D. Panel = prop-UI prototype (ax_button summon, - contact-press knobs, Reset). Research reports live in `research/` (arm IK, IK - stability/deep, grabbing, two-handed grab/Box3D internals, addon weld patch) — READ before - re-researching or changing grab/IK. Stink-O's box3d-godot (custom components) = documented - plan-B. Laser/distant grab REMOVED (user never knew it existed); grab = palm-proximity only, - per-hand palm-face offset (left +X, right −X — taste). Box3D PinJoint quirks: anchors are - CAPTURED AT CREATION; the joint node's position is READ EVERY TICK (keep it on the palm = - hand-following pivot); break must measure the prop-local anchor vs the palm point. Headless - regression tests: `scenes/physics_spike.tscn` AND `scenes/grab_spike.tscn` — both must print - overall PASS. `PhysicsHands.cs`: physical palm bodies (0.4 kg, 90 N chase, rotation lock, - stuck-safety snap, HAND ghosts > 10 cm lag). Collision layers: 1 = world, 2 = UI (panel mask - 0 — props pass through even when shown); layers live on CollisionObject3D, NOT - CollisionShape3D. Panel = prop-UI prototype (ax_button summon, contact-press knobs, Reset). - Research reports live in `research/` (arm IK, IK stability/deep, grabbing, - two-handed grab/Box3D joint internals) — READ before re-researching or changing grab/IK. + contact-press knobs, Reset). Laser/distant grab REMOVED (user never knew it existed); + grab = palm-proximity only, per-hand palm-face offset (left +X, right −X — taste). + PinJoint quirks (anchors captured at creation; joint node position READ every tick; + break measures the prop-local anchor vs the palm point) apply to the v5.0–5.2 PIN path + only — the weld does not share the pivot behavior. Research reports live in `research/` + (arm IK, IK stability/deep, grabbing, two-handed grab/Box3D internals, addon weld patch, + body physics hugs, body physics Godot facts) — READ before re-researching or changing + grab/IK/body. Stink-O's box3d-godot (custom components) = documented plan-B. 7. **Getting a body (rig) — placeholder v1.2 (cube character, agent-built).** `BodyRig.cs`: all-BOX primitives (owner preference) — head 0.15³ behind the eyes, slim torso retracted, wrist-anchored 2-bone arms. **Soft IK applied**: shoulder→hand distance clamped to diff --git a/HANDOFF.md b/HANDOFF.md index 3ef1c26..6b5d486 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -263,11 +263,16 @@ PropShop, PropGrabber, PhysicsHands, BodyRig, FadeLayer/Fade. Action map: `openx 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. + Presence", the closest known implementation; §7 = owner-extracted video breakdowns of + Project TX: hierarchical per-joint force budgets, script-relaxation hand adaptation, + active-ragdoll NPCs with grab anchors) and `research/vr-body-physics-godot.md` (verified + stack facts: no Generic6DOF, hinge velocity motors work, PD-follow proven by the hands). + Research verdict: the technique is an independent-implementation match of our existing + chase-drive architecture; no more video extraction needed now (conditional: Spideriini + elbow handling if Stage-2 elbow jitter bites; Test Chamber if a locomotion stage ever + starts). Recommendation shape: staged torso → 2-segment arm chains (chase-driven, + Boneworks/Nimso tier, NOT per-bone skeleton sim), test hugging props; muscle model = + hierarchical budgets (hand ≺ forearm ≺ shoulder ≺ torso) scaled from body mass. 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). diff --git a/research/vr-body-physics-hugs.md b/research/vr-body-physics-hugs.md index 83791ca..97cc304 100644 --- a/research/vr-body-physics-hugs.md +++ b/research/vr-body-physics-hugs.md @@ -187,3 +187,55 @@ no written technical breakdown exists anywhere. 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. + +## 7. Project TX video extractions (owner-provided AI summaries, 2026-10-01) + +Owner extracted AI breakdowns of Nimso's videos: "IN-DEPTH VR PHYSICS INTERACTIONS" pt. 1–2 +(`youtube.com/watch?v=tMDmwD1cQPg`, `BTlY8SWLtgo`), plus asks on joint/force model, muscle +system, hand adaptation, and physics NPCs. Distilled to what bears on OUR design: + +- [S] **Force model = ours, generalized.** Script = "brain" reading tracker data, feeding + targets; solver executes via ConfigurableJoints in force/acceleration mode with PD-tuned + spring (Slerp) drives — never infinite force. Heavy object ⇒ spring stretches ⇒ hand lags + the controller ⇒ weight feel. Exactly our PhysicsHands pattern (90 N chase) and the grab + weld's philosophy: the solver owns the coupling, the script owns the intent. +- [S] **Muscle = hierarchical per-joint force budgets.** Base avatar mass 60 kg scales the + joint drives' F_max. Shoulders get HIGH torque budgets (climb-hangs the whole body); + wrists/forearms get strict caps. A 12 kg sledgehammer held out straight exceeds the + wrist/forearm cap via lever arm ⇒ hand buckles; two-hand sliding down the shaft shortens + the lever ⇒ liftable. Fatigue is modeled as mechanical disadvantage ONLY — no stamina + meter; strain reads through visual lag and drift. → Refinement for our Stage 2: replace + the flat 90 N hand budget with per-joint budgets (hand ≺ forearm ≺ shoulder ≺ torso) + scaled from a body-mass stat; props with attachment coordinates register their mass at + the attachment point (holstered 12 kg hammer scaled the whole avatar 60→72 kg). +- [S] **Hand adaptation = script-side relaxation on contact (anti-winch).** When the hand + hits structural limits, the script temporarily relinquishes axes, SHIFTS THE PIVOT (palm + → fingertips against a magazine baseplate), and eases joint boundaries dynamically + ("dynamic radius gripping" tracks a bat's changing radius as the hand slides). The winch + lesson in reverse: don't fight the solver — reconfigure. Our analog already exists as + break thresholds; a future nicety is pivot-shift on contact for resting palms on surfaces. +- [S] **Physics NPCs (the huggee half) = active ragdoll + kinematic grab anchors.** The NPC + is a live ragdoll driven by internal joint-matching springs (Boneworks-class). Strikes + compare impact velocity against NPC joint stiffness; enough momentum overrides the NPC's + balance solver (deflection before hit registration). Grabbing an NPC's hand/head creates + a TEMPORARY fixed/distance joint between the player's hand rigidbody and the NPC + hitboxes — the NPC instantly feels the player's weight; you can swing, push off-balance, + pull close. → For us: hug/touch = contact between player chest/palms and an NPC + active-ragdoll; grabbing NPCs = our existing ConeTwist weld against NPC anchor bodies; + squeeze-back = NPC joint-matching drives ramping against the player's budget. +- [S] **Leg colliders exist but are buggy** (legs lock up, impede crawling) — the dev + shipped them anyway for climbing/tire-swing play. Validates deferring legs LAST. +- [S] **Locomotion is physics-native**: stick push at slow speed, natural sway raises walk, + jog bounce frequency triggers run ("remember your feet aren't tracked"); two-handed + weapons blend primary-hand rotation with secondary-hand position ("Hybrid system"). +- [S] **Out of scope for VR Messs** (noted for completeness): extended physics materials as + data wrappers (surface-pair impact audio, density-based stabbing, material magnetism), + dynamic recoil from muzzle/bullet-mass integration, geometric mag-well sliding with + ergonomic posing rules, mass-independent buoyancy (surface-area/displacement forces so a + 1 kg box floats a 70 kg body without jitter), modular attachments shifting center of mass + locally, cross-compatible ammo systems. +- [I] **What the extractions change in our plan:** confidence only + two concrete design + upgrades (hierarchical budgets; NPC anchors via existing welds). No architectural + surprises — an independent implementation converged on our exact shape. Remaining unknown + = tuning numbers (per-joint gains; published nowhere, must be tuned in-headset) and + locomotion/balance/comfort (only relevant at a Stage 3+ we may never reach).