reckfellENGINE

OpenXR project settings

Exact keys and defaults, startup, reference spaces, input, extensions and diagnosis.

On this page

OpenXR project settings

Project settings describe what the engine requests from OpenXR. They neither install an XR runtime, connect a headset nor establish extension support. The keys and defaults below apply to current Reckfell 1.0.0; enable only the features you need.

Minimal startup

  1. Find xr/openxr/enabled in Project Settings and enable it. For the first run, retain Head Mounted, Stereo, Stage and Opaque.
  2. Prepare the action map at xr/openxr/default_action_map. The current default is asset://openxr_action_map.rdata; follow the action-map guide.
  3. Configure the XR rig and startup handling: an XRCamera3D alone does not enable XR output. Check initialization success and separately enable XR on the intended Viewport.
  4. Restart the application after changing startup settings. Inspect logs, the active XR runtime and actual interface capabilities; a saved checkbox is not evidence of success.

--xr-mode on forces an XR startup request; --xr-mode off disables it for a diagnostic run. Normally the editor does not start an OpenXR session merely because enabled=true. Running the game and starting the editor are different processes and stages.

For Vulkan, request OpenXR at startup: graphics-integration extensions are needed before device preparation. Do not expect a late Initialize call to repair missing startup configuration. Editing ProjectSettings during gameplay also does not automatically recreate existing instances, sessions or swapchains.

Core settings

KeyDefaultPurpose
xr/openxr/enabledfalseRequests OpenXR startup. Requires a restart.
xr/openxr/default_action_mapasset://openxr_action_map.rdataAction and binding resource loaded by the interface.
xr/openxr/form_factor0: Head Mounted1 is Handheld. Selects a requested device class, not a camera mode.
xr/openxr/view_configuration1: Stereo0 is Mono; 2 is Stereo with Foveated Inset. The runtime must support the requested configuration.
xr/openxr/reference_space1: Stage0 is Local; 2 is Local Floor. Selects the requested tracking space.
xr/openxr/environment_blend_mode0: Opaque1 is Additive; 2 is Alpha. Selects environment composition.
xr/openxr/target_api_versionempty stringUsually leave empty. Code requests OpenXR 1.1 first and tries 1.0 on API_VERSION_UNSUPPORTED. An explicit value uses major.minor.patch. This is the OpenXR API version, not the Reckfell version.
xr/openxr/startup_alerttrueDisplays a system message after unsuccessful startup initialization. false hides the dialog; it does not fix the cause.
xr/openxr/submit_depth_bufferfalseRequests depth submission alongside color when the depth-layer extension and a suitable format are available. Guarantees no reprojection improvement.

Do not leave the action map to an accidental fallback. If the resource fails to load, the interface creates default actions; a tools-enabled build also tries to save the resource. This does not establish that your custom actions and bindings exist. Save and inspect your own .rdata before export.

Stereo with Foveated Inset already has an implementation in current source. It is a separate view configuration with an additional inset, not a promise of support on every headset. Start an ordinary project with Stereo; do not confuse inset views with shading-density settings.

Choose a tracking space

ModeConsider forAccount for
LocalSeated experiences or UI tied to a local originThe runtime defines the origin. It is no physical wall and does not hold the head in place.
StageRoom-scale experiences and virtual locomotionAssociated with the runtime play area; useful for retaining a shared world coordinate system.
Local FloorA local origin with floor heightRequires support or an available fallback; do not add head height twice.

This is a requested mode, not an unconditional guarantee. Current code can emulate unavailable Local Floor through Local and Stage; for other unsupported requests it chooses Local. Inspect logs and the actual mode before relying on floor or recenter behavior.

OpenXRInterface.PoseRecentered reports a reference-space update after tracking has been updated. The startup guide handler only forwards the event; it does not call CenterOnHmd for you. Choose reset policy together with room-scale handling and locomotion. An unconditional additional CenterOnHmd can offset an already corrected camera again. A Stage boundary neither replaces collisions nor stops a person's physical movement.

Environment blending

Opaque displays the virtual image. Additive adds virtual light to the environment; black does not necessarily obscure the real world. Alpha uses output transparency, so check the intended Viewport.TransparentBg and scene material/background.

If the selected blend mode is unavailable, code can switch to the first supported one. Alpha can also be provided through a specialized passthrough implementation. A black view is not evidence of a broken material: check the actual blend mode, passthrough availability, permissions and target-device integration first. Selecting Alpha does not install a vendor plugin.

Foveation and quality

KeyDefaultPurpose
xr/openxr/foveation_level0: Off1 is Low, 2 Medium, 3 High. A level request, not a guaranteed FPS improvement.
xr/openxr/foveation_dynamicfalseAllows the runtime dynamic mode when the extension is available.
xr/openxr/foveation_eye_trackedtrueRequests the corresponding eye-tracked foveation extension on an appropriate backend; does not automatically provide gaze poses.
xr/openxr/foveation_with_subsampled_imagestruePermits the specialized image path when supported. Incompatible rendering features can disable it.
xr/openxr/create_default_foveated_inset_viewporttrueAutomatic inset viewport for the corresponding view configuration, not regular Stereo.

Eye-tracked foveation and eye-gaze interaction are separate features. A true value establishes neither a sensor, permission nor an active extension. For RD, inspect Viewport VRS; a VRS map alone is also not a measurement of actual savings.

If a log says incompatible rendering features disabled subsampled images, that refers to this image path. Do not automatically extend that conclusion to every form of foveation. Compare the same frame and GPU time on the target device; do not change resolution, MSAA, effects and foveation level simultaneously.

Extensions and input

All switches in the following table default to false, except numeric values explicitly identified elsewhere.

KeyRequest
xr/openxr/extensions/hand_trackingHand-joint data. Disabled by default in the current version. See joint reading.
xr/openxr/extensions/hand_tracking_unobstructed_data_sourceUnobstructed hand-data source when available.
xr/openxr/extensions/hand_tracking_controller_data_sourceController-based hand-data source when available.
xr/openxr/extensions/hand_interaction_profileHand interaction profile; creates no required actions in your map. Requires a restart.
xr/openxr/extensions/eye_gaze_interactionGaze interaction extension. Requires a restart; mobile also checks platform features/permissions.
xr/openxr/extensions/render_modelRuntime-provided hardware models, subject to extension and build support.
xr/openxr/extensions/user_presenceUser-presence information when available. Does not replace session focus.
xr/openxr/binding_modifiers/analog_thresholdBinding threshold modifiers. Configure the bindings themselves too.
xr/openxr/binding_modifiers/dpad_bindingD-pad binding extension; requires a restart.

A gaze pose needs a Pose action in the map: profile /interaction_profiles/ext/eye_gaze_interaction, input path /user/eyes_ext/input/gaze_ext/pose. Set XRController3D.Tracker to /user/eyes_ext and Pose to your action name. Enabling the extension alone is insufficient. This naming and route are source-reviewed, not a test of eye accuracy or device permissions.

KeyDefaultAccount for
xr/openxr/extensions/frame_synthesisfalseRequests XR_EXT_frame_synthesis. The current path requires two views; Vulkan uses Mobile. Forward+ is unsupported by this path; OpenGL has separate handling. Guarantees no stable FPS and does not repair incorrect motion vectors.
xr/openxr/extensions/frame_synthesis/flip_yfalseData-orientation correction for this path, not a general camera flip.
xr/openxr/extensions/debug_utils0: Disabled1 Error, 2 Warning, 3 Info, 4 Verbose. OpenXR messages, not Vulkan validation layers.
xr/openxr/extensions/debug_message_types15General/Validation/Performance/Conformance mask. Filters messages when debug_utils is enabled.

Spatial environment

These keys request real-environment capabilities, not ordinary gameplay Entities. Enabling them creates no detected surfaces or saved anchors automatically. Check device support, user consent and data lifetime.

KeyDefault
xr/openxr/extensions/spatial_container/enabledfalse
xr/openxr/extensions/spatial_container/bounds_mode0: Bounded; 1 is Immersive
xr/openxr/extensions/spatial_container/boundsVector3(0.5, 0.5, 0.5)
xr/openxr/extensions/spatial_entity/enabledfalse
xr/openxr/extensions/spatial_entity/enable_spatial_anchorsfalse
xr/openxr/extensions/spatial_entity/enable_persistent_anchorsfalse
xr/openxr/extensions/spatial_entity/enable_builtin_anchor_detectionfalse
xr/openxr/extensions/spatial_entity/enable_plane_trackingfalse
xr/openxr/extensions/spatial_entity/enable_builtin_plane_detectionfalse
xr/openxr/extensions/spatial_entity/marker_tracking/enablefalse
xr/openxr/extensions/spatial_entity/marker_tracking/enable_builtin_for_types0: no types; QR/Micro QR/ArUco/April tags mask
xr/openxr/extensions/spatial_entity/marker_tracking/aruco_dict15: 7x7 1000 IDs
xr/openxr/extensions/spatial_entity/marker_tracking/april_tag_dict3: 6x6H11

This is a startup-request reference, not a ready-made spatial-recognition system. The existence of these keys does not establish anchor, plane-tracking or marker-detection availability.

Startup diagnosis

SymptomCheck first
OpenXRInterface is missingThe selected build, OpenXR module and startup log.
Interface exists but IsInitialized=falseStartup XR request, active runtime, device and initialization messages. An interface is not a session.
Game stays in a regular windowInterface startup success, UseXR on the intended Viewport and application fallback.
Controller exists but an action is absentAction-map file, action type, interaction profile and exact input path.
No hand datahand_tracking, runtime capabilities, permissions and validity of individual joints.
Wrong height or position resetActual reference space, fallback and absence of a second origin offset.
An enabled feature does not workSupport and activation of the particular extension, not just ProjectSettings.

Verification scope

An isolated installed Reckfell 1.0.0 project with --headless --xr-mode off checked registration and defaults for 39 scalar settings, vector bounds and the presence of a borrowed uninitialized interface. All 81 observations succeeded; no project settings were written and Initialize was not called.

Startup order, enum mapping, space/blend fallbacks, extension gating and the stated limitations were reviewed against current source. This is not real-headset, loader/runtime, permission, recenter, passthrough, foveation, frame-synthesis, tracking, export or editor-UI acceptance. Engine build and SDK were unchanged.

Reckfell Engine documentationBack to top ↑
QUICK LINKSGetting startedEntity hierarchyC# & .NET 10Scenes and prefabs
Reckfell guides and full API K
reckfellENGINE
RECKFELL ACCOUNT

Sign in

Sign in to your Reckfell account.

One account for the entire Reckfell platform.