Commit Graph
3568 Commits
Author SHA1 Message Date
Stefan MaierandClaude Opus 5.5 4e6b3f69f6 Merge feature/multiview: both eyes in one draw
GL_OVR_multiview2 (vr.multiview, on by default): the scene drawn once from
between the eyes into a two-layer target, each view's positions moved to
its eye in the vertex programs; the sky as though infinitely far, what the
game projects itself by its depth, screen reads from a composite of both
eyes. At one spot in 'Halo': both eyes 6.3 ms -> 4.0 ms, the frame's work
7.9 -> 5.8 ms. Also: no VR facing during cinematics, hands held still under
the system menu. Merged with reservations; one-time diagnostics log what
may still be off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 20:50:35 +02:00
Stefan MaierandClaude Opus 5.5 792531577c VR: no facing from the headset or controller during a cinematic
Seated in a level's opening cinematic (a passenger), the right controller
turned the game's camera the flat screen shows. The scripted-camera rule
went back out: the main menu is a scripted camera and was immersive.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 20:47:12 +02:00
Stefan MaierandClaude Opus 5.5 ee35524e65 VR: scripted cameras on the flat screen; hands held still under the system menu
A scripted camera outside a cinematic (a level's intro) was drawn in
stereo from the head, with the weapon at the controllers in it; it now
goes to the screen like a cinematic. Under the system menu the headset
reports no hands and the weapon fell back to the head; the hands last
seen in focus stand in meanwhile, their buttons let go.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 20:40:58 +02:00
Stefan MaierandClaude Opus 5.5 1713082296 VR multiview: log what may still be off (screen-space depth-tested draws, picture reads)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 20:31:41 +02:00
Stefan MaierandClaude Opus 5.5 ba3997e2f4 VR multiview: what the game projects itself gets its depth's parallax
Sprites, light volumes (a plasma bolt's glow) and lens flare tests are
projected on the CPU into screen pixels with w 1 and their depth in z, and
the widgets' vertex program takes them to clip space: taken for a point
1 world unit away, a bolt 30 away stood 3 m off in stereo and seemed to be
swallowed half way. Where w is 1 and depth is tested, the depth comes from
z by the shared camera's projection (mv_depth), and the eye's offset is by
it. (Also logs, once each, the other targets the pass draws into.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 20:24:49 +02:00
Stefan MaierandClaude Opus 5.5 19681e60d5 VR multiview: drop the test logging; performance log off again
Measured at one spot in 'Halo': both eyes 6.3 ms one by one, 4.0 ms at
once; the frame's work 7.9 ms against 5.8 ms (90 Hz).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 19:31:02 +02:00
Stefan MaierandClaude Opus 5.5 353bd19d94 VR multiview: the back buffer read gets both eyes, the left over the right
The shared view reaches further right than the left eye: the sun there
was measured on a stale picture and its glow shrank as the head turned.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 19:23:59 +02:00
Stefan MaierandClaude Opus 5.5 2104fb230e VR multiview: the back buffer read gets the left eye where it lies
The sun's glow measures the picture about the sun where the shared camera
has it; the left eye's picture, copied as it is, put the sun elsewhere
(a black patch on the rock, the sun through a gap as the head turned). It
is now laid where it lies in the shared camera's picture. Logs, once each,
the render targets drawing into both eyes reads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 19:21:32 +02:00
Stefan MaierandClaude Opus 5.5 1302c8613c VR multiview: screen-space draws to each view as though far
A lens flare is drawn in screen space, at where the sun is in the shared
view, which is wider than an eye's: drawn alike in both layers, the sun
and its occlusion test landed elsewhere in each eye (the sky seemed to tear
open onto the sun). Screen-space positions now take each view's mapping
without the eye's offset.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 19:13:47 +02:00
Stefan MaierandClaude Opus 5.5 df45daed55 VR multiview: the sky as though infinitely far
The sky is drawn about the camera (its view has no position), so no eye
stands aside of it; the eye's offset made it a dome a few metres away,
flat and swimming (the sea in 'Halo' is the sky's). Its draws take rows
without the offset.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 18:52:40 +02:00
Stefan MaierandClaude Opus 5.5 d462f80fa9 VR: draw both eyes in one pass (multiview, first cut)
With GL_OVR_multiview2 (vr.multiview), the scene is drawn once, from a
camera between the eyes whose view takes in both (plus a margin), into a
two-layer back buffer: every NV2A vertex program gets a two-view variant
that moves each view's clip position to its eye (x' = a x + b w + c, from
the shared view's and the eye's edges and the eye's place; nv2a_vsh.c),
screen-space geometry excepted. Sampling the back buffer meanwhile reads
the left eye's picture; visibility counts are halved. The host copies each
layer to its eye's image (host_xr_copy_layer_array).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:37:28 +02:00
Stefan MaierandClaude Opus 5.5 c97a49050b Merge feature/vehicles: vehicles in first person
Seated first person that turns with the vehicle, right-stick steering,
controller-aimed guns (as by handles), own body at wheel and gun, eyes
raised over enclosing hulls, vehicle guns converging on the player's aim,
comfort vignette, X as the action button, and a vehicle-spawn test aid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:22:29 +02:00
Stefan MaierandClaude Opus 5.5 e820135027 VR: a Ghost's or Banshee's steering swings its aim less (40 degrees)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:16:21 +02:00
Stefan MaierandClaude Opus 5.5 0e3b634e77 VR: steering along a curve and eased in, for finer aim
The right stick's deflection past the dead zone is squared
(vr.vehicle_steer_curve) and eased in over ~0.12 s
(vr.vehicle_steer_smoothing): a Ghost's or Banshee's crosshair moves
finely near the middle and no longer leaps; full deflection still steers
the whole vr.vehicle_steer_degrees.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:10:30 +02:00
Stefan MaierandClaude Opus 5.5 88f3412568 VR: a Banshee's pilot's eyes higher still
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:05:42 +02:00
Stefan MaierandClaude Opus 5.5 428d5f113a VR: vehicle guns converge on the player's aim again, crosshair there
The game steers a vehicle gun's shots (within its deviation cone) at what
the camera aims at; VR had replaced that camera with the barrel's own
line, right on foot but not seated, where a Banshee's nose rises as it
hovers and a tank's turret lags: the Banshee's crosshair rode high. Seated,
the camera is now the player's eyes and the unit's aim (the stick's steer,
the controller at a gun), and the crosshair floats on that line; the
barrel-line crosshair is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:02:39 +02:00
Stefan MaierandClaude Opus 5.5 40306f5f8c VR: a Banshee's pilot's eyes higher, over its back
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:58:24 +02:00
Stefan MaierandClaude Opus 5.5 73e9bed243 VR test aid: both sticks held in spawn the map's next vehicle
debug.vehicle_spawn: holding both thumbsticks in for 1.5 s puts the next
vehicle the map has loaded (not the Pelican, dropship or lifepod) a few
metres ahead of the player, cycling through them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:55:25 +02:00
Stefan MaierandClaude Opus 5.5 167ec9a573 VR: a manned vehicle gun's crosshair on the line it fires along
A vehicle's gun, once manned, fires along its own barrel (not the aiming
vector) from its primary trigger, moved onto the vehicle's camera line if
it fires from its camera. The crosshair ran from the right hand along the
controller instead, and the Scorpion's shells landed above and behind it.
It now floats on the gun's own line (weapon_vr_manned_gun_line), as the
turret actually points.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:47:23 +02:00
Stefan MaierandClaude Opus 5.5 8756b1ba22 VR: raise the eyes over a hull by set heights only
The collision model's top lifted the Scorpion's driver onto the turret as
it swung over him (screenshots); it never caught anything the set heights
did not.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:33:14 +02:00
Stefan MaierandClaude Opus 5.5 043f2c6db6 VR: a Warthog's driver sits nearer the windscreen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:28:49 +02:00
Stefan MaierandClaude Opus 5.5 bcc40772f8 VR: the Scorpion's driver sees out over its hull
Like the Ghost's: the driver sits down in the hull (screenshot: the
compartment's inside). The raise applies to a vehicle's driver and gunner
only; riders on a tank's back sit on it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:27:33 +02:00
Stefan MaierandClaude Opus 5.5 f761b082a9 VR: the aim passes through the player's own vehicle; gun eyes higher
The crosshair floated where the aim met the Shade's own neck.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:12:04 +02:00
Stefan MaierandClaude Opus 5.5 f1b9dbeea8 VR: apply the hull's eye raise in the seated camera
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:06:19 +02:00
Stefan MaierandClaude Opus 5.5 75e7036b61 VR: eyes raised over a Ghost's hood, a Banshee, a Covenant gun's shield
Their collision models leave out what hid the view (screenshots: the
Ghost's hood arches over the rider's eyes, the Shade's shield sits at
them). The eyes now rise by a set height per kind of hull
(vr.ghost_eye_raise, vr.banshee_eye_raise, vr.turret_eye_raise), and at
least over the collision model's top.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:05:54 +02:00
Stefan MaierandClaude Opus 5.5 034842dc4d VR: no first-person weapon at any vehicle's controls
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:02:53 +02:00
Stefan MaierandClaude Opus 5.5 57ecc722c3 VR: no own body in a Ghost, a Banshee or a Covenant gun
Their rider bends down into the vehicle, and the eyes at his head looked
into his own shoulders.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 14:59:55 +02:00
Stefan MaierandClaude Opus 5.5 4ab1661ac5 VR: see out over a Ghost's, a Banshee's or a Covenant gun's hull
Their riders sit down in the hull, drawn from behind in the game; from the
rider's head the view met its inside. The eyes now rise to above the hull's
top over the head and up to 50 cm ahead of it (a downward ray against the
vehicle's own collision model), plus vr.enclosed_seat_clearance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 14:52:35 +02:00
Stefan MaierandClaude Opus 5.5 4577b96fca VR: a vehicle's gun works as by its handles: tipped down, it rises
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 13:11:16 +02:00
Stefan MaierandClaude Opus 5.5 6146294562 VR: no crosshair at a wheel with no gun to aim
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 13:05:37 +02:00
Stefan MaierandClaude Opus 5.5 a6710f68ee VR: no first-person weapon at a wheel or a gun
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 12:55:29 +02:00
Stefan MaierandClaude Opus 5.5 2c32a7032c VR: own body at the wheel and the gun, gunner view back, clearer glass
Seated as a driver or gunner, the player's body is drawn (its hands on
the wheel or the gun's handles, as the seat animates them), its head
shrunk to nothing out of the eyes' way. A gunner's view is moved back from
the gun's sights (vr.gunner_camera_back). Glass tints and reflects half as
much (vr.glass_strength), which up close hid the view through the
Warthog's windscreen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 12:50:55 +02:00
Stefan MaierandClaude Opus 5.5 59b76697d2 VR: seated camera at the rider's head; X is the action button
Seated, the first-person camera stood where the seat's chase camera turns
about (the vehicle's middle, low); it is now at the rider's head marker.
X now does what the game's prompts say it does (action, reload); B takes
the flashlight (tap) and grenade switch (hold).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 12:29:08 +02:00
Stefan MaierandClaude Opus 5.5 e9e5984e11 VR: vehicles in first person, steered with the right stick
Seated, the view stays behind the player's own eyes (vr.vehicle_first_person)
and turns with the vehicle, smoothly between ticks (its interpolated
heading); the head looks around freely, and recentring faces the vehicle's
forward. A driver who steers by facing (jeep, boat, plane, scout, fighter)
steers with the right stick: aside up to vr.vehicle_steer_degrees off the
heading, up and down for pitch (vr.vehicle_pitch_degrees). Gunners, the
tank's driver and passengers aim with the right controller, and turn in
the seat with the stick. The crosshair and its distance follow the
vehicle's aim. While the vehicle turns the player, the eye images darken
from their edges (vr.comfort_vignette, host_xr_set_vignette).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:41:49 +02:00
Stefan MaierandClaude Opus 5.5 5430863919 Merge feature/grenade-throw: hold and throw grenades by hand
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:25:02 +02:00
Stefan MaierandClaude Opus 5.5 8ed3558fc7 VR: drop the grenade test logging
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:25:01 +02:00
Stefan MaierandClaude Opus 5.5 7f3d7ea804 VR: held grenade up the knuckles, to the middle of the palm
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:23:08 +02:00
Stefan MaierandClaude Opus 5.5 ccf0a24e4b VR: held grenade towards the wrist along the drawn fingers
The grip's forward runs through the fist (towards the index finger), not
along the fingers; the step towards the wrist is taken along the drawn
hand's fingers (vr.grenade_back) instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:20:25 +02:00
Stefan MaierandClaude Opus 5.5 914de29d4c VR: held grenade further towards the wrist
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:17:08 +02:00
Stefan MaierandClaude Opus 5.5 66f16b4a07 VR: held grenade out of the palm a little, towards the wrist
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:14:00 +02:00
Stefan MaierandClaude Opus 5.5 4796df2b53 VR: held grenade back in the palm, moved down the knuckles instead
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:11:38 +02:00
Stefan MaierandClaude Opus 5.5 cf3e45050e VR: held grenade lower in the palm and out of it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:08:30 +02:00
Stefan MaierandClaude Opus 5.5 b97330e719 VR: draw the held grenade with the first-person hands
The hands are drawn over the world, so they hid the grenade wherever they
overlapped it, and turning the palm up showed it behind the hand. It is now
drawn in the first-person pass with them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 11:02:48 +02:00
Stefan MaierandClaude Opus 5.5 0656429c11 VR: the held grenade in the palm at hand size; throws keep their speed
The held grenade is drawn in front of the left palm (vr.grenade_right,
_forward, _up from the grip) at 0.55 of its size (vr.grenade_scale).
A hand-thrown grenade is no longer brought up to the projectile's final
velocity, which made every throw as far; strength now runs from 0.25 to
full at 5 m/s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 10:58:02 +02:00
Stefan MaierandClaude Opus 5.5 2b988e10a9 VR: draw the held grenade in the left hand
The first-person view leaves out the player's body and what hangs from it,
the grenade in hand too. While the left trigger holds it, it is drawn at
the left controller each frame. Logs the grenade's hold and release for
testing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 10:49:12 +02:00
Stefan MaierandClaude Opus 5.5 dc4a724f8a VR: throw grenades by hand
The left trigger holds the grenade in the hand (the game keeps it there
past the throw animation); letting go throws it from the left hand, along
the fastest the hand moved over its last 150 ms, as hard as that was (full
at 4 m/s). Without a throw (vr.grenade_throw_speed, 1.5 m/s) the game
throws as before. The left hand's swing is no melee while throwing, and
the arms keep their pose through the throw animation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 10:37:43 +02:00
Stefan MaierandClaude Opus 5.5 506f95a8dd Merge feature/scope-zoom: scope zoom, floating crosshair, shots from the muzzle
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 09:58:44 +02:00
Stefan MaierandClaude Opus 5.5 aa1bc76916 VR: crosshair messages (reload, low ammo) stay in the HUD
Halo draws its centre prompts as crosshair elements of the weapon HUD.
Only the reticle states now go to the crosshair layer; the message states
are drawn in the head-locked HUD, also while zoomed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 09:52:06 +02:00
Stefan MaierandClaude Opus 5.5 74ad349bbf VR: draw the crosshair in its own pass, keep HUD messages whole
The crosshair used to be cut out of the HUD image (an 80x80 region around
the centre) and moved to where the weapon aims, taking with it whatever
else lay there, such as part of the reload prompt. Now it is drawn alone
first (hud_draw_crosshair), captured into its layer, and the HUD is drawn
afterwards without it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 09:48:12 +02:00
Stefan MaierandClaude Opus 5.5 c8e64f3b2b VR: shots start from the crosshair's own point
Shots started at an offset from the unit's eye point (its sight
position), the crosshair at the same offset from the drawn camera; the two
need not agree, and the shots ran parallel to the crosshair's line, a few
centimetres higher (plain on the pistol's small crosshair). Both now start
at the same point in the world, the drawn weapon's muzzle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 09:37:35 +02:00