mirror of
https://github.com/mitch030504/Wiicompiled_VR_Frame.git
synced 2026-10-06 06:00:25 +02:00
Centre foveation on the player's gaze on headsets with eye tracking
With [vr] eye_tracked_foveation (on by default on the Steam Frame, off elsewhere) the runtime asks for XR_EXT_eye_gaze_interaction. When the system reports an eye tracker, OpenXRInput binds the gaze pose and locates it for each packet's display time, in the space the eye views are located in; vr/eye_gaze.h turns it into tangents of each eye's own view, which AuroraStereoFrame now carries (appended, after the existing prefix). Aurora centres the eye's fragment density map on the gaze snapped to a cell of two map texels (about 3 degrees). Each eye keeps up to 32 maps, one per cell looked at, so a glance back reuses its map; a new map is bound once its upload completes, and until then the eye keeps the map it had. Without a tracked gaze (a blink, no tracker, the setting off) foveation centres on the forward direction exactly as before: the forward maps are byte-identical. Also logs every extension the OpenXR runtime offers at startup, so the first Steam Frame session shows what SteamVR's Android runtime has. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019HBRGKTE1GnN2ah8gcZKr3
This commit is contained in:
16 files changed
+616
-47
No files matched your search
@@ -259,6 +259,14 @@ class SettingsPage(
|
||||
read = { stringIndex(it, "vr", "foveation", FOVEATION_LEVELS, FOVEATION_DEFAULT) },
|
||||
write = { c, index -> c.setString("vr", "foveation", FOVEATION_LEVELS[index]) },
|
||||
)
|
||||
// runtime_config.h's kVrEyeTrackedFoveationDefault: on for the Steam Frame, whose eyes are
|
||||
// tracked; off elsewhere, since Horizon OS asks for an eye tracking permission.
|
||||
toggle(
|
||||
R.string.vr_eye_tracked_foveation, R.string.vr_eye_tracked_foveation_helper,
|
||||
read = { it.bool("vr", "eye_tracked_foveation") ?: BuildConfig.STEAM_FRAME },
|
||||
write = { c, value -> c.setBool("vr", "eye_tracked_foveation", value) },
|
||||
enabledIf = { stringIndex(it, "vr", "foveation", FOVEATION_LEVELS, FOVEATION_DEFAULT) != 0 },
|
||||
)
|
||||
choice(
|
||||
R.string.vr_interpolation, R.string.vr_interpolation_helper,
|
||||
listOf(activity.getString(R.string.vr_interpolation_off), activity.getString(R.string.vr_interpolation_auto), "72 FPS", "90 FPS", "120 FPS"),
|
||||
|
||||
@@ -564,6 +564,8 @@
|
||||
<string name="vr_refresh_rate_headset">Headset\'s own</string>
|
||||
<string name="vr_foveation">Foveated rendering</string>
|
||||
<string name="vr_foveation_helper">Shades the edges of the race view in coarser blocks, where the lenses blur the picture anyway, to free GPU time for a higher render scale or a steadier frame rate. Higher levels start closer to the centre; High also coarsens the corners of the HUD. Menus are never foveated.</string>
|
||||
<string name="vr_eye_tracked_foveation">Foveation follows the eyes</string>
|
||||
<string name="vr_eye_tracked_foveation_helper">With eye tracking (the Steam Frame), the sharp centre of the foveated race view moves to where you look instead of staying straight ahead.</string>
|
||||
<string name="vr_foveation_off">Off</string>
|
||||
<string name="vr_foveation_low">Low</string>
|
||||
<string name="vr_foveation_medium">Medium</string>
|
||||
|
||||
Reference in new issue
Block a user