{"version":"1.0","provider_name":"Geckode!","provider_url":"https:\/\/www.youbiquo.eu\/geckode","author_name":"Aida Garfami","author_url":"https:\/\/www.youbiquo.eu\/geckode\/author\/aida-garfami\/","title":"Features - Geckode!","type":"rich","width":600,"height":338,"html":"<blockquote class=\"wp-embedded-content\" data-secret=\"wKDXPGKfOq\"><a href=\"https:\/\/www.youbiquo.eu\/geckode\/en\/features-2\/\">Features<\/a><\/blockquote><iframe sandbox=\"allow-scripts\" security=\"restricted\" src=\"https:\/\/www.youbiquo.eu\/geckode\/en\/features-2\/embed\/#?secret=wKDXPGKfOq\" width=\"600\" height=\"338\" title=\"&#8220;Features&#8221; &#8212; Geckode!\" data-secret=\"wKDXPGKfOq\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" class=\"wp-embedded-content\"><\/iframe><script>\n\/*! This file is auto-generated *\/\n!function(d,l){\"use strict\";l.querySelector&&d.addEventListener&&\"undefined\"!=typeof URL&&(d.wp=d.wp||{},d.wp.receiveEmbedMessage||(d.wp.receiveEmbedMessage=function(e){var t=e.data;if((t||t.secret||t.message||t.value)&&!\/[^a-zA-Z0-9]\/.test(t.secret)){for(var s,r,n,a=l.querySelectorAll('iframe[data-secret=\"'+t.secret+'\"]'),o=l.querySelectorAll('blockquote[data-secret=\"'+t.secret+'\"]'),c=new RegExp(\"^https?:$\",\"i\"),i=0;i<o.length;i++)o[i].style.display=\"none\";for(i=0;i<a.length;i++)s=a[i],e.source===s.contentWindow&&(s.removeAttribute(\"style\"),\"height\"===t.message?(1e3<(r=parseInt(t.value,10))?r=1e3:~~r<200&&(r=200),s.height=r):\"link\"===t.message&&(r=new URL(s.getAttribute(\"src\")),n=new URL(t.value),c.test(n.protocol))&&n.host===r.host&&l.activeElement===s&&(d.top.location.href=t.value))}},d.addEventListener(\"message\",d.wp.receiveEmbedMessage,!1),l.addEventListener(\"DOMContentLoaded\",function(){for(var e,t,s=l.querySelectorAll(\"iframe.wp-embedded-content\"),r=0;r<s.length;r++)(t=(e=s[r]).getAttribute(\"data-secret\"))||(t=Math.random().toString(36).substring(2,12),e.src+=\"#?secret=\"+t,e.setAttribute(\"data-secret\",t)),e.contentWindow.postMessage({message:\"ready\",secret:t},\"*\")},!1)))}(window,document);\n\/\/# sourceURL=https:\/\/www.youbiquo.eu\/geckode\/wp-includes\/js\/wp-embed.min.js\n<\/script>\n","description":"Features Features \u2014 LeonardoXR SDK Features Version 1.0.2 Device: Youbiquo Leonardo XR Base SDK: Snapdragon Spaces 1.0.4 This page documents the features available in the LeonardoXR SDK, organised in two sections: Snapdragon Spaces Features\u00a0\u2014 AR\/XR functionality provided by the Snapdragon Spaces platform, accessible through AR Foundation. LeonardoXR Features\u00a0\u2014 proprietary features specific to Leonardo XR. Snapdragon Spaces Features Local Anchors How to Enable Go to\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Snapdragon Spaces &gt; Spatial Anchors\u00a0and enable the feature. Spaces Anchor Store NOTE Look around the environment to generate a better tracking map and reduce save\/load times. Saving multiple anchors simultaneously blocks the main thread \u2014 use the callback to save subsequent anchors sequentially. namespace Qualcomm.Snapdragon.Spaces { public class SpacesAnchorStore { public void ClearStore(); public void SaveAnchor(ARAnchor anchor, string anchorName, Action&lt;bool&gt; onSavedCallback = null); public void SaveAnchorWithResult(ARAnchor anchor, string anchorName, Action&lt;SaveAnchorResult&gt; callback = null); public void DeleteSavedAnchor(string anchorName); public void LoadSavedAnchor(string anchorName, Action&lt;bool&gt; onLoadedCallback = null); public void LoadAllSavedAnchors(Action&lt;bool&gt; onLoadedCallback = null); public string[] GetSavedAnchorNames(); public string GetSavedAnchorNameFromARAnchor(ARAnchor anchor); } } API Reference Method Description ClearStore() Clears the local anchor storage. SaveAnchor(...) Saves an ARAnchor by name or generated hash; optional callback on completion. SaveAnchorWithResult(...) Like SaveAnchor but returns a\u00a0SaveAnchorResult\u00a0enum. DeleteSavedAnchor(name) Deletes a saved anchor by name. LoadSavedAnchor(name, ...) Loads an anchor from storage and attempts to localise it; fires\u00a0anchorsChanged.added. LoadAllSavedAnchors(...) Loads all stored anchors. GetSavedAnchorNames() Returns all saved anchor names. GetSavedAnchorNameFromARAnchor(anchor) Returns the name of a saved anchor from a tracked ARAnchor, or empty string if not saved. SaveAnchorResult Values Value Meaning PENDING Anchor is awaiting save. SAVED Successfully saved. FAILURE_RUNTIME_ERROR Runtime error. FAILURE_STORE_NOT_LOADED Anchor Store failed to load. FAILURE_INSUFFICIENT_QUALITY Environment map quality is insufficient. Hit Testing Enable via\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Snapdragon Spaces &gt; Hit Testing. Uses the\u00a0AR Raycast Manager\u00a0from AR Foundation (XRRaycastSubsystem). Supports continuous hit testing against real-world planes and meshes. The system casts a ray from the camera (or a specified point) and returns intersections with detected surfaces. Each hit contains position, normal and surface type (plane or mesh). List&lt;ARRaycastHit&gt; hits = new List&lt;ARRaycastHit&gt;();if (raycastManager.Raycast(screenCenter, hits, TrackableType.PlaneWithinPolygon)){Pose hitPose = hits[0].pose;\/\/ Place AR content at hitPose.position} CAUTION\u00a0ARRaycastHit.trackableId\u00a0always returns\u00a00-0. (Known Issue) Image Tracking Enable via\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Snapdragon Spaces &gt; Image Tracking. Uses the\u00a0AR Tracked Image Manager\u00a0(XRImageTrackingSubsystem). Supports static and mutable (runtime) reference image libraries. \/\/ Mutable library examplevar library = trackedImageManager.CreateRuntimeLibrary() as MutableRuntimeReferenceImageLibrary;await library.ScheduleAddImageWithValidationJob(texture, \"image-name\", 0.1f); \/\/ 0.1f = physical width in metrestrackedImageManager.referenceLibrary = library; Plane Detection Enable via\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Snapdragon Spaces &gt; Plane Detection. Uses the\u00a0AR Plane Manager\u00a0(XRPlaneSubsystem).\u00a0Use Scene Understanding Backend\u00a0is enabled by default. arPlaneManager.requestedDetectionMode = PlaneDetectionMode.Horizontal | PlaneDetectionMode.Vertical; CAUTION\u00a0Plane Detection enters an infinite mesh triangulation loop in AR Foundation 6.0. In Unity 6 + OpenXR 1.15.1, Plane Detection does not work in Dual Render Fusion apps. Camera Frame Access Enable via\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Snapdragon Spaces &gt; Camera Frame Access. Uses the\u00a0AR Camera Manager\u00a0(XRCameraSubsystem). Key capabilities: Raw camera frame access in YUV (Y&#8217;UV420sp) and YUYV \/ YUY2 formats. XRCpuImage.GetPlane(int)\u00a0for CPU-side image access. XRCpuImage.ConvertAsync\u00a0for asynchronous conversion. GPU-accelerated RGB frame access for AiO devices (via OpenGL). Sensor extrinsics \/ pose retrieval via\u00a0InputBindings. NOTE\u00a0Enable\u00a0Allow &#8216;unsafe&#8217; Code\u00a0in\u00a0Player Settings &gt; Android &gt; Other Settings &gt; Script Compilation\u00a0when using the Camera Frame Access sample. Disable AR Camera Background to avoid rendering issues. void OnCameraFrameReceived(ARCameraFrameEventArgs args){if (cameraManager.TryAcquireLatestCpuImage(out XRCpuImage image)){using (image){XRCpuImage.Plane yPlane = image.GetPlane(0); \/\/ Luminance plane\/\/ yPlane.data contains the raw data}}} Spatial Meshing Enable via\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Snapdragon Spaces &gt; Spatial Meshing. Uses the\u00a0AR Mesh Manager\u00a0(XRMeshSubsystem). The optional\u00a0SpacesARMeshManagerConfig\u00a0component controls mesh characteristics and camera height offsets for\u00a0TrackingOriginMode.Floor. QR Code Tracking Enable via\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Snapdragon Spaces &gt; QR Code Tracking. Uses the custom\u00a0SpacesQrCodeManager\u00a0component. Supports multiple tracking modes to control algorithm update frequency. \/\/ Editor build workaround (no simulation subsystem for QR Code Tracking) bool CheckSubsystem() { #if UNITY_EDITOR return arQrCodeManager.subsystem?.running ?? false; #else return true; #endif } Hand Tracking Enable via\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Snapdragon Spaces &gt; Hand Tracking. Hand Tracking is provided by the QCHT (Qualcomm Hand Tracking) plugin packages. LeonardoXR uses the Unity XR Hands package (v1.7.2) as the data access layer for joint data, integrated with QCHT extensions. NOTE\u00a0For Hand Tracking to work correctly on LeonardoXR, the\u00a0Hand Tracking Subsystem\u00a0option must be active in\u00a0All Features\u00a0of OpenXR. For full Hand Tracking integration with XR Interaction Toolkit, see the Interaction Package Guides document. Foveated Rendering Enable via\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; Snapdragon Spaces &gt; Foveated Rendering. Reduces GPU load by rendering the visual field periphery at lower resolution. Foveation settings persist after application pause and resume. Level Description None No reduction. Low Light reduction, imperceptible to most users. Medium Good quality\/performance trade-off. High Maximum reduction; recommended only for heavily 3D content scenes. LeonardoXR Features The following features are specific to Leonardo XR and are not part of the base Snapdragon Spaces platform. Enable them via\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (Android) &gt; LeonardoXR feature group. Dual Camera Access DOCUMENTATION IN PROGRESS\u00a0This feature provides synchronised access to frames from both Leonardo XR cameras. Detailed API documentation, configuration and samples will be available in a future release. QNN Inference Plugin DOCUMENTATION IN PROGRESS\u00a0This feature exposes Leonardo XR hardware neural inference capabilities via the Qualcomm Neural Network (QNN) runtime, enabling AI\/ML models to run directly on the device NPU. Detailed API documentation, model conversion workflow and samples will be available in a future release. Intercept OpenXR Function DOCUMENTATION IN PROGRESS\u00a0This advanced feature provides a mechanism to intercept and override low-level OpenXR functions. It is intended for specialised use cases requiring direct control over the OpenXR layer. Detailed documentation will be available in a future release."}