Index of everything on this site: https://ai.hiina.space/index.md
The motivating critique, "less interesting if it's just hold joystick
forward", rules out lean-to-go self-balancers like MonoRaceVR. A real
monowheel has a better hook: the rider hangs inside the wheel, so motor
torque swings the rider body in the opposite direction. Brake too hard
and you swing forward; accelerate too hard and you loop. Riders call
that loop "gerbiling" (background knowledge, not from a cited source).
Build it as a RigidBody3D wheel and a
RigidBody3D rider/seat joined at the axle by a
HingeJoint3D with its angular motor enabled. The throttle
is an analogue hand input: right-controller roll as a twist grip, or the
trigger, setting the motor target velocity and max impulse. Rider lean
from the hip tracker or HMD forward offset applies a corrective torque
of about m·g·Δx on the rider body. Steering is simplified
to yaw_rate ∝ lean_roll × speed, my bicycle-like
approximation. The skill is modulating throttle and lean to keep the
pendulum angle φ small; the goofy outcome is a loop.
The comfort rule is R3, and it bites hard. The camera must not follow
φ. Parent XROrigin3D to a stabilised frame at the seat
position, with roll locked, yaw following heading at a capped rate, and
pitch set to g_p · lowpass(φ) with g_p between 0 and 0.3
(my starting range). Instability is shown by the rim and handlebars
moving relative to a steady view, so the vehicle frame acts as the rest
frame. This is the same "movement frame decoupled from head, no camera
shake" decision as a mech-cockpit design, so that code transfers
directly. When |φ| passes about 120°, fade out and show the loop in a
third-person replay instead of first person (my inference). The first
test compares g_p = 0 with g_p = 0.3 on a flat oval: can players hold a
target speed without looping, and what does FMS show?
This is the most expensive prototype because animation is the long pole. The Godot motion-matching GDExtension has stable inertialisation and two-bone IK, but its motion-matching data path is not ready and it does not mention quadrupeds (GitHub). Learned controllers such as MANN and AMP remain research code. Build it in four layers.
The body is a CharacterBody3D with
authored gait states (walk, trot, canter, gallop, stop, rear) blended by
inertialisation, with per-gait acceleration limits. Those limits serve
both comfort and believability.
Rider coupling is a pelvis anchor that follows the
saddle bone through a spring-damper,
P̈ = k(S − P) − c(Ṗ − Ṡ). The viewpoint is not the saddle:
it is a low-pass of the anchor, with vertical bob heavily attenuated, a
one-pole filter cut below the stride frequency, and yaw following
heading at a capped rate. Meta's guidance says to stabilise camera
elevation, keep accelerations brief, and use cockpit-like occlusion to
cut optic flow (Meta).
Rival Stars keeps the horse's head always in view as a focal point,
according to its developer blog (not re-verified) (Rival
Stars blog). Applying that guidance to gallop bob as a low-passed
anchor is my inference, not something any source tested.
Cues start with the reins, modelled as two tethers
from the bit to each gripped hand, each with a rest length L_i, so that
T_i = k·max(0, |hand_i − bit_i| − L_i). Steering bias is
(T_R − T_L), a brake is both tensions above a threshold,
and both slack hands the pace back to the mount. Render each rein as a
sagging curve when slack and straight when taut, and offset the proxy
hand by tension under the Rietzler cap. Heel taps are spikes in
foot-tracker velocity toward the flank, which existing foot trackers
already detect. Hip lean drives banking, and raising the free hand locks
heading for archery, as in DovaVR.
The mind turns cues into intent (desired heading and
a speed band). The mount then executes that intent with its own
avoidance and refusals, Agro-style. A monotonic trust scalar,
BotW-style, scales obedience latency, spook threshold and
road-following. Learning follows TAMER, in which the agent models the
human trainer's reinforcement and acts to maximise predicted feedback,
and non-experts trained agents without a predefined reward (Knox
& Stone, K-CAP 2009). Concretely, a slow hand on the neck
collider is a stroke (+r), a fast contact is a slap (−r), and "good" by
voice is +r. Spread each reward over recent (context, action) pairs with
an eligibility window of about 1 to 2 s, update
H(s,a) += α·r·e(s,a), and choose actions by softmax over H
plus an innate prior. That makes tricks like "rear on a double rein
lift" shapeable. The delay window is my assumption; our research did not
read TAMER's own credit-assignment method.
Voice uses Godot Whisper (MIT, whisper.cpp, realtime with VAD and quantised models, v2.0.3 updated 20 Sep 2026) (Godot Store), using the tiny or base model, with fuzzy matching of transcripts against a vocabulary of five to ten words (walk, trot, whoa, back, here, up). The listing publishes no latency figures and says nothing about Android. For PC VR on Linux, the question is whether the addon ships Linux binaries, which needs checking. Measure keyword-to-action latency before designing around voice. The dragon version reuses every layer and adds glide physics. Background knowledge from the film rather than a cited source: Hiccup works Toothless's prosthetic tail fin with a foot pedal, so a foot-tracker "tail fin" that the dragon needs from its rider to turn is a literal How to Train Your Dragon co-control. That is an idea, not a cited precedent.
The comfort rule is R3 plus R2: gallop bob and heading changes are the hazards, and the Rival Stars reviewer still felt nausea despite a visible-head focal point and vignettes (UploadVR, secondary). Start new riders at walk and trot (R8). The first test is a gallop on an oval, comparing a camera on the raw saddle bone with the low-passed anchor, using FMS at about 10 minutes. Then run a 15-minute training session to see whether players can tell the mount has learned anything.
Physical coupling across a network is where latency bites. Glenn Fiedler rejected deterministic lockstep for VR physics. Hiding up to 250 ms of latency would need about 25 simulation steps per render frame (about 22.5 at 90 Hz; the article rounds), and PhysX is not deterministic anyway (gafferongames). His working pattern has three parts: authority goes to the last interactor, a stronger "ownership" taken on grab wins by sequence number, and held objects leave physics updates and ride as hand-relative transforms inside the avatar state, with a 100 ms jitter buffer on hands. Adapted to the three cases (my adaptation; the sample covers only cubes):
A three-legged race keeps each player's locomotion locally authoritative, using either the Gorilla core or foot-tracker walking. The strap is a soft spring-damper between hip anchors that each client applies only to its own body, against the partner's jitter-buffered position. Because the spring is symmetric, forces balance on average, and low stiffness keeps 100+ ms of staleness from oscillating.
A piggyback or human mount is an ownership relation. The rider sends a saddle-relative transform, the carrier's body stays physics-authoritative on the carrier's client, and the rider's camera is parented locally to the carrier's remote transform through prototype 5's low-pass viewpoint. The rider steers the carrier with prototype 5's rein cues, shown to the carrier as haptic pulses and a visible tug.
An office-chair conga extends prototype 1 by letting a push off another player's chair transfer an impulse, arbitrated by the host using Fiedler's authority rule.
For held tethers (towing a chair-mate, carrying a stretcher), use the Rietzler proxy-hand offset instead of vibration. In a 20-pair study, vibrotactile overlap feedback slightly lowered agency (preprint, not re-verified) (arXiv). Research on group navigation also found that a designed, consent-based formation (a navigator moves passengers) improved joint travel and lowered task load (Weissker et al., TVCG 2020). That argues for formations over raw force coupling when precision matters. If this lands in VRChat instead, stations offer "Immobilize For Vehicle" for moving seats, Udon can only teleport the local player, and avatars in moving cockpits are reported to slide out of their seats (VRChat docs; VRChat Ask). The comfort rule is R3 for riders, whose view is driven by someone else's delayed motion. The first test runs two clients with 150 ms of artificial round-trip latency plus jitter, measuring strap oscillation amplitude and rider FMS.
Text licensed CC BY 4.0 (attribution: Hiina, ai.hiina.space). Source: https://github.com/hiinaspace/ai-hiina-space