{"id":432,"date":"2026-03-11T17:21:27","date_gmt":"2026-03-11T16:21:27","guid":{"rendered":"https:\/\/www.youbiquo.eu\/leonardoxr\/?page_id=432"},"modified":"2026-10-13T11:30:49","modified_gmt":"2026-10-13T09:30:49","slug":"advanced-leonardoxr-sdk","status":"publish","type":"page","link":"https:\/\/www.youbiquo.eu\/leonardoxr\/manuali_duso\/advanced-leonardoxr-sdk\/","title":{"rendered":"Advanced \u2014 LeonardoXR SDK"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"432\" class=\"elementor elementor-432\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-85281d7 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"85281d7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d04b0b7 elementor-widget elementor-widget-heading\" data-id=\"d04b0b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Advanced \u2014 LeonardoXR SDK\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-541389f e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"541389f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-df9a2de e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"df9a2de\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-69e47bc elementor-widget__width-initial elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"69e47bc\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;headings_by_tags&quot;:[&quot;h3&quot;,&quot;h4&quot;,&quot;h5&quot;,&quot;h6&quot;],&quot;exclude_headings_by_selector&quot;:&quot;footer&quot;,&quot;marker_view&quot;:&quot;bullets&quot;,&quot;icon&quot;:{&quot;value&quot;:&quot;far fa-dot-circle&quot;,&quot;library&quot;:&quot;fa-regular&quot;,&quot;rendered_tag&quot;:&quot;&lt;svg class=\\&quot;e-font-icon-svg e-far-dot-circle\\&quot; viewBox=\\&quot;0 0 512 512\\&quot; xmlns=\\&quot;http:\\\/\\\/www.w3.org\\\/2000\\\/svg\\&quot;&gt;&lt;path d=\\&quot;M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z\\&quot;&gt;&lt;\\\/path&gt;&lt;\\\/svg&gt;&quot;},&quot;no_headings_message&quot;:&quot;Non sono state trovate intestazioni in questa pagina.&quot;,&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h2 class=\"elementor-toc__header-title\">\n\t\t\t\tAdvanced \u2014 LeonardoXR SDK\t\t\t<\/h2>\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__69e47bc\" aria-expanded=\"true\" aria-label=\"Apri l&#039;indice dei contenuti\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-down\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"><\/path><\/svg><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__69e47bc\" aria-expanded=\"true\" aria-label=\"Chiudi l&#039;indice dei contenuti\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chevron-up\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"><\/path><\/svg><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__69e47bc\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<svg class=\"elementor-toc__spinner eicon-animation-spin e-font-icon-svg e-eicon-loading\" aria-hidden=\"true\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M500 975V858C696 858 858 696 858 500S696 142 500 142 142 304 142 500H25C25 237 238 25 500 25S975 237 975 500 763 975 500 975Z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-677117a e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-child\" data-id=\"677117a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1a4d842 elementor-widget elementor-widget-text-editor\" data-id=\"1a4d842\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2 id=\"advanced--leonardoxr-sdk\" class=\"code-line code-active-line\" dir=\"auto\" data-line=\"0\">Advanced \u2014 LeonardoXR SDK<\/h2><blockquote class=\"code-line\" dir=\"auto\" data-line=\"2\"><p class=\"code-line\" dir=\"auto\" data-line=\"2\"><strong>Version:<\/strong>\u00a01.0.2<br \/><strong>Target Device:<\/strong>\u00a0Youbiquo Leonardo XR<br \/><strong>Base SDK:<\/strong>\u00a0Snapdragon Spaces 1.0.4<\/p><\/blockquote><p class=\"code-line\" dir=\"auto\" data-line=\"6\">Questa sezione copre le configurazioni e funzionalit\u00e0 avanzate disponibili su LeonardoXR, suddivise in funzionalit\u00e0 generali della piattaforma Snapdragon Spaces e funzionalit\u00e0 avanzate proprietarie di Leonardo XR.<\/p><hr class=\"code-line\" dir=\"auto\" data-line=\"8\" \/><h3 id=\"funzionalit%C3%A0-avanzate--snapdragon-spaces\" class=\"code-line\" dir=\"auto\" data-line=\"10\">Funzionalit\u00e0 Avanzate \u2014 Snapdragon Spaces<\/h3><h4 id=\"aggiungere-un-nuovo-interaction-profile\" class=\"code-line\" dir=\"auto\" data-line=\"12\">Aggiungere un Nuovo Interaction Profile<\/h4><p class=\"code-line\" dir=\"auto\" data-line=\"14\">Per usare un profilo di interazione non incluso nel plugin Snapdragon Spaces:<\/p><ol class=\"code-line\" dir=\"auto\" data-line=\"16\"><li class=\"code-line\" dir=\"auto\" data-line=\"16\">Vai su\u00a0<strong>Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Interaction Profiles<\/strong>.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"17\">Aggiungi il profilo desiderato cliccando sul pulsante\u00a0<strong>+<\/strong>.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"18\">Configura le Input Actions corrispondenti nell&#8217;Input System Asset.<\/li><\/ol><p class=\"code-line\" dir=\"auto\" data-line=\"20\">Vedi anche\u00a0<a href=\"https:\/\/file+.vscode-resource.vscode-cdn.net\/Users\/eleonora\/Downloads\/SDKGuide\/06-interaction-package-guides.md\" data-href=\"06-interaction-package-guides.md\">Interaction Package Guides<\/a>\u00a0per la configurazione dei profili raccomandati su LeonardoXR.<\/p><hr class=\"code-line\" dir=\"auto\" data-line=\"22\" \/><h4 id=\"custom-controller\" class=\"code-line\" dir=\"auto\" data-line=\"24\">Custom Controller<\/h4><p class=\"code-line\" dir=\"auto\" data-line=\"26\">Descrive come costruire un archivio controller Android personalizzato (<code>.aar<\/code>) usando il\u00a0<strong>Custom Controller Package<\/strong>\u00a0\u2014 il progetto Android Studio incluso nel developer package.<\/p><h5 id=\"panoramica-del-processo\" class=\"code-line\" dir=\"auto\" data-line=\"28\">Panoramica del Processo<\/h5><ol class=\"code-line\" dir=\"auto\" data-line=\"30\"><li class=\"code-line\" dir=\"auto\" data-line=\"30\">Apri il progetto Android Studio incluso nel developer package di Snapdragon Spaces.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"31\">Modifica l&#8217;Activity companion secondo le necessit\u00e0 (layout, pulsanti, assi aggiuntivi).<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"32\">Compila il progetto per ottenere un file\u00a0<code>.aar<\/code>.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"33\">Importa il file\u00a0<code>.aar<\/code>\u00a0nel progetto Unity come plugin Android nativo (nella cartella\u00a0<code>Assets\/Plugins\/Android<\/code>).<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"34\">Configura il manifesto Android per dichiarare la nuova Activity.<\/li><\/ol><blockquote class=\"code-line\" dir=\"auto\" data-line=\"36\"><p class=\"code-line\" dir=\"auto\" data-line=\"36\"><strong>Nota:<\/strong>\u00a0L&#8217;aggiunta di un archivio controller personalizzato pu\u00f2 causare errori di caching Gradle. Se si verificano errori di build, elimina la cartella\u00a0<code>Temp\/gradleOut<\/code>\u00a0e ricompila.<\/p><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"38\" \/><h4 id=\"display-refresh-rate\" class=\"code-line\" dir=\"auto\" data-line=\"40\">Display Refresh Rate<\/h4><p class=\"code-line\" dir=\"auto\" data-line=\"42\">L&#8217;estensione\u00a0<code>XR_EXT_display_refresh_rate<\/code>\u00a0consente di interrogare e impostare il refresh rate del display a runtime.<\/p><h5 id=\"query-del-refresh-rate-corrente\" class=\"code-line\" dir=\"auto\" data-line=\"44\">Query del Refresh Rate Corrente<\/h5><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"46\"><span class=\"hljs-keyword\">using<\/span> Qualcomm.Snapdragon.Spaces;\n\nBaseRuntimeFeature baseRuntime = OpenXRSettings.Instance\n    .GetFeature&lt;BaseRuntimeFeature&gt;();\n\n<span class=\"hljs-built_in\">float<\/span> currentHz = baseRuntime.GetDisplayRefreshRate();\nDebug.Log(<span class=\"hljs-string\">$\"Refresh rate corrente: <span class=\"hljs-subst\">{currentHz}<\/span> Hz\"<\/span>);\n<\/code><\/pre><h5 id=\"ottenere-i-refresh-rate-supportati\" class=\"code-line\" dir=\"auto\" data-line=\"56\">Ottenere i Refresh Rate Supportati<\/h5><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"58\"><span class=\"hljs-built_in\">float<\/span>[] supportedRates = baseRuntime.GetSupportedDisplayRefreshRates();\n<span class=\"hljs-keyword\">foreach<\/span> (<span class=\"hljs-built_in\">float<\/span> rate <span class=\"hljs-keyword\">in<\/span> supportedRates)\n    Debug.Log(<span class=\"hljs-string\">$\"Supportato: <span class=\"hljs-subst\">{rate}<\/span> Hz\"<\/span>);\n<\/code><\/pre><h5 id=\"impostare-il-refresh-rate\" class=\"code-line\" dir=\"auto\" data-line=\"64\">Impostare il Refresh Rate<\/h5><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"66\">baseRuntime.RequestDisplayRefreshRate(<span class=\"hljs-number\">90.0f<\/span>);\n<\/code><\/pre><blockquote class=\"code-line\" dir=\"auto\" data-line=\"70\"><p class=\"code-line\" dir=\"auto\" data-line=\"70\"><strong>Nota:<\/strong>\u00a0Il refresh rate richiesto deve essere tra quelli restituiti da\u00a0<code>GetSupportedDisplayRefreshRates()<\/code>. Valori non supportati vengono ignorati.<\/p><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"72\" \/><h4 id=\"advanced-android-thread-performance\" class=\"code-line\" dir=\"auto\" data-line=\"74\">Advanced Android Thread Performance<\/h4><p class=\"code-line\" dir=\"auto\" data-line=\"76\">Il componente\u00a0<code>SpacesThreadUtility<\/code>\u00a0migliora la priorit\u00e0 di scheduling dei thread su Android, producendo una temporizzazione dei frame pi\u00f9 consistente.<\/p><h5 id=\"setup\" class=\"code-line\" dir=\"auto\" data-line=\"78\">Setup<\/h5><p class=\"code-line\" dir=\"auto\" data-line=\"80\">Aggiungi il componente\u00a0<code>SpacesThreadUtility<\/code>\u00a0a un GameObject persistente nella scena (ad esempio lo stesso GameObject che ospita l&#8217;AR Session o l&#8217;XR Origin).<\/p><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"82\"><span class=\"hljs-comment\">\/\/ SpacesThreadUtility non richiede configurazione:<\/span>\n<span class=\"hljs-comment\">\/\/ aggiungilo semplicemente come componente e si attiva automaticamente.<\/span>\n<span class=\"hljs-comment\">\/\/ Agisce sui thread Unity principali al momento dell'inizializzazione.<\/span>\n<\/code><\/pre><h5 id=\"quando-usarlo\" class=\"code-line\" dir=\"auto\" data-line=\"88\">Quando Usarlo<\/h5><p class=\"code-line\" dir=\"auto\" data-line=\"90\">Si raccomanda l&#8217;uso di\u00a0<code>SpacesThreadUtility<\/code>\u00a0in tutte le applicazioni LeonardoXR che mostrano jitter nel framerate o variabilit\u00e0 nel frame timing, specialmente in scene con heavy rendering o molti subsystem AR attivi.<\/p><hr class=\"code-line\" dir=\"auto\" data-line=\"92\" \/><h4 id=\"performance-settings\" class=\"code-line\" dir=\"auto\" data-line=\"94\">Performance Settings<\/h4><p class=\"code-line\" dir=\"auto\" data-line=\"96\">L&#8217;estensione OpenXR\u00a0<code>XR_EXT_performance_settings<\/code>\u00a0espone hint di livello performance per CPU e GPU tramite un nuovo metodo di\u00a0<code>BaseRuntimeFeature<\/code>.<\/p><h5 id=\"livelli-disponibili\" class=\"code-line\" dir=\"auto\" data-line=\"98\">Livelli Disponibili<\/h5><p class=\"code-line\" dir=\"auto\" data-line=\"100\">I livelli di performance vanno da\u00a0<code>PowerSavings<\/code>\u00a0(massimo risparmio energetico) a\u00a0<code>Boost<\/code>\u00a0(massima performance):<\/p><table class=\"code-line\" dir=\"auto\" data-line=\"102\"><thead class=\"code-line\" dir=\"auto\" data-line=\"102\"><tr class=\"code-line\" dir=\"auto\" data-line=\"102\"><th>Livello<\/th><th>Descrizione<\/th><\/tr><\/thead><tbody class=\"code-line\" dir=\"auto\" data-line=\"104\"><tr class=\"code-line\" dir=\"auto\" data-line=\"104\"><td><code>PowerSavings<\/code><\/td><td>Riduce clock CPU\/GPU al minimo necessario. Utile per scene semplici o UI statiche.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"105\"><td><code>SustainedLow<\/code><\/td><td>Performance sostenuta a livello basso.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"106\"><td><code>SustainedHigh<\/code><\/td><td>Performance sostenuta ad alto livello. Raccomandata per la maggior parte delle app AR.<\/td><\/tr><tr class=\"code-line\" dir=\"auto\" data-line=\"107\"><td><code>Boost<\/code><\/td><td>Performance massima per brevi periodi (non sostenibile a lungo).<\/td><\/tr><\/tbody><\/table><h5 id=\"utilizzo\" class=\"code-line\" dir=\"auto\" data-line=\"109\">Utilizzo<\/h5><pre><code class=\"code-line language-csharp\" dir=\"auto\" data-line=\"111\"><span class=\"hljs-keyword\">using<\/span> Qualcomm.Snapdragon.Spaces;\n<span class=\"hljs-keyword\">using<\/span> UnityEngine.XR.OpenXR;\n\nBaseRuntimeFeature baseRuntime = OpenXRSettings.Instance\n    .GetFeature&lt;BaseRuntimeFeature&gt;();\n\n<span class=\"hljs-comment\">\/\/ Imposta CPU e GPU a SustainedHigh<\/span>\nbaseRuntime.SetPerformanceLevel(\n    PerformanceDomain.Cpu,\n    PerformanceLevel.SustainedHigh);\n\nbaseRuntime.SetPerformanceLevel(\n    PerformanceDomain.Gpu,\n    PerformanceLevel.SustainedHigh);\n<\/code><\/pre><blockquote class=\"code-line\" dir=\"auto\" data-line=\"128\"><p class=\"code-line\" dir=\"auto\" data-line=\"128\"><strong>Nota:<\/strong>\u00a0Il livello\u00a0<code>Boost<\/code>\u00a0consuma energia significativamente maggiore e pu\u00f2 causare throttling termico se mantenuto a lungo. Usalo solo per operazioni critiche di breve durata (es. caricamento di una scena pesante).<\/p><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"130\" \/><hr class=\"code-line\" dir=\"auto\" data-line=\"132\" \/><h3 id=\"funzionalit%C3%A0-avanzate--leonardoxr\" class=\"code-line\" dir=\"auto\" data-line=\"134\">Funzionalit\u00e0 Avanzate \u2014 LeonardoXR<\/h3><h4 id=\"qnn-inference-plugin--guida-avanzata\" class=\"code-line\" dir=\"auto\" data-line=\"136\">QNN Inference Plugin \u2014 Guida Avanzata<\/h4><blockquote class=\"code-line\" dir=\"auto\" data-line=\"138\"><p class=\"code-line\" dir=\"auto\" data-line=\"138\"><strong>\u26a0\ufe0f Documentazione in preparazione.<\/strong><\/p><p class=\"code-line\" dir=\"auto\" data-line=\"140\">Questa sezione coprir\u00e0 l&#8217;utilizzo avanzato del\u00a0<strong>QNN (Qualcomm Neural Network) Inference Plugin<\/strong>\u00a0su Leonardo XR, inclusi:<\/p><ul class=\"code-line\" dir=\"auto\" data-line=\"142\"><li class=\"code-line\" dir=\"auto\" data-line=\"142\">Preparazione e conversione di modelli (ONNX \u2192 QNN format).<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"143\">Caricamento di modelli a runtime tramite le API del plugin.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"144\">Esecuzione di inferenza sull&#8217;NPU con gestione degli input\/output tensor.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"145\">Gestione della memoria e ottimizzazione del throughput.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"146\">Debug e profiling delle performance di inferenza.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"147\">Casi d&#8217;uso: object detection, pose estimation, segmentazione in tempo reale.<\/li><\/ul><p class=\"code-line\" dir=\"auto\" data-line=\"149\">La documentazione dettagliata sar\u00e0 disponibile in una prossima versione.<\/p><\/blockquote><hr class=\"code-line\" dir=\"auto\" data-line=\"151\" \/><h4 id=\"intercept-openxr-function--guida-avanzata\" class=\"code-line\" dir=\"auto\" data-line=\"153\">Intercept OpenXR Function \u2014 Guida Avanzata<\/h4><blockquote class=\"code-line\" dir=\"auto\" data-line=\"155\"><p class=\"code-line\" dir=\"auto\" data-line=\"155\"><strong>\u26a0\ufe0f Documentazione in preparazione.<\/strong><\/p><p class=\"code-line\" dir=\"auto\" data-line=\"157\">Questa sezione coprir\u00e0 l&#8217;utilizzo avanzato del meccanismo\u00a0<strong>Intercept OpenXR Function<\/strong>\u00a0su Leonardo XR, inclusi:<\/p><ul class=\"code-line\" dir=\"auto\" data-line=\"159\"><li class=\"code-line\" dir=\"auto\" data-line=\"159\">Architettura del layer di intercettazione OpenXR.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"160\">Registrazione di handler personalizzati per funzioni OpenXR specifiche.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"161\">Casi d&#8217;uso: override del rendering pipeline, injection di dati custom nel layer XR, debug a basso livello del comportamento OpenXR.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"162\">Considerazioni di sicurezza e stabilit\u00e0.<\/li><li class=\"code-line\" dir=\"auto\" data-line=\"163\">Interazione con gli altri componenti dell&#8217;LeonardoXR SDK.<\/li><\/ul><p class=\"code-line\" dir=\"auto\" data-line=\"165\">Questa funzionalit\u00e0 \u00e8 destinata a sviluppatori con esperienza diretta con le API OpenXR a basso livello. La documentazione dettagliata sar\u00e0 disponibile in una prossima versione.<\/p><\/blockquote>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Advanced \u2014 LeonardoXR SDK Advanced \u2014 LeonardoXR SDK Advanced \u2014 LeonardoXR SDK Version:\u00a01.0.2Target Device:\u00a0Youbiquo Leonardo XRBase SDK:\u00a0Snapdragon Spaces 1.0.4 Questa sezione copre le configurazioni e funzionalit\u00e0 avanzate disponibili su LeonardoXR, suddivise in funzionalit\u00e0 generali della piattaforma Snapdragon Spaces e funzionalit\u00e0 avanzate proprietarie di Leonardo XR. Funzionalit\u00e0 Avanzate \u2014 Snapdragon Spaces Aggiungere un Nuovo Interaction Profile Per usare un profilo di interazione non incluso nel plugin Snapdragon Spaces: Vai su\u00a0Project Settings &gt; XR Plug-in Management &gt; OpenXR (scheda Android) &gt; Interaction Profiles. Aggiungi il profilo desiderato cliccando sul pulsante\u00a0+. Configura le Input Actions corrispondenti nell&#8217;Input System Asset. Vedi anche\u00a0Interaction Package Guides\u00a0per la configurazione dei profili raccomandati su LeonardoXR. Custom Controller Descrive come costruire un archivio controller Android personalizzato (.aar) usando il\u00a0Custom Controller Package\u00a0\u2014 il progetto Android Studio incluso nel developer package. Panoramica del Processo Apri il progetto Android Studio incluso nel developer package di Snapdragon Spaces. Modifica l&#8217;Activity companion secondo le necessit\u00e0 (layout, pulsanti, assi aggiuntivi). Compila il progetto per ottenere un file\u00a0.aar. Importa il file\u00a0.aar\u00a0nel progetto Unity come plugin Android nativo (nella cartella\u00a0Assets\/Plugins\/Android). Configura il manifesto Android per dichiarare la nuova Activity. Nota:\u00a0L&#8217;aggiunta di un archivio controller personalizzato pu\u00f2 causare errori di caching Gradle. Se si verificano errori di build, elimina la cartella\u00a0Temp\/gradleOut\u00a0e ricompila. Display Refresh Rate L&#8217;estensione\u00a0XR_EXT_display_refresh_rate\u00a0consente di interrogare e impostare il refresh rate del display a runtime. Query del Refresh Rate Corrente using Qualcomm.Snapdragon.Spaces; BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance .GetFeature&lt;BaseRuntimeFeature&gt;(); float currentHz = baseRuntime.GetDisplayRefreshRate(); Debug.Log($&#8221;Refresh rate corrente: {currentHz} Hz&#8221;); Ottenere i Refresh Rate Supportati float[] supportedRates = baseRuntime.GetSupportedDisplayRefreshRates(); foreach (float rate in supportedRates) Debug.Log($&#8221;Supportato: {rate} Hz&#8221;); Impostare il Refresh Rate baseRuntime.RequestDisplayRefreshRate(90.0f); Nota:\u00a0Il refresh rate richiesto deve essere tra quelli restituiti da\u00a0GetSupportedDisplayRefreshRates(). Valori non supportati vengono ignorati. Advanced Android Thread Performance Il componente\u00a0SpacesThreadUtility\u00a0migliora la priorit\u00e0 di scheduling dei thread su Android, producendo una temporizzazione dei frame pi\u00f9 consistente. Setup Aggiungi il componente\u00a0SpacesThreadUtility\u00a0a un GameObject persistente nella scena (ad esempio lo stesso GameObject che ospita l&#8217;AR Session o l&#8217;XR Origin). \/\/ SpacesThreadUtility non richiede configurazione: \/\/ aggiungilo semplicemente come componente e si attiva automaticamente. \/\/ Agisce sui thread Unity principali al momento dell&#8217;inizializzazione. Quando Usarlo Si raccomanda l&#8217;uso di\u00a0SpacesThreadUtility\u00a0in tutte le applicazioni LeonardoXR che mostrano jitter nel framerate o variabilit\u00e0 nel frame timing, specialmente in scene con heavy rendering o molti subsystem AR attivi. Performance Settings L&#8217;estensione OpenXR\u00a0XR_EXT_performance_settings\u00a0espone hint di livello performance per CPU e GPU tramite un nuovo metodo di\u00a0BaseRuntimeFeature. Livelli Disponibili I livelli di performance vanno da\u00a0PowerSavings\u00a0(massimo risparmio energetico) a\u00a0Boost\u00a0(massima performance): Livello Descrizione PowerSavings Riduce clock CPU\/GPU al minimo necessario. Utile per scene semplici o UI statiche. SustainedLow Performance sostenuta a livello basso. SustainedHigh Performance sostenuta ad alto livello. Raccomandata per la maggior parte delle app AR. Boost Performance massima per brevi periodi (non sostenibile a lungo). Utilizzo using Qualcomm.Snapdragon.Spaces; using UnityEngine.XR.OpenXR; BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance .GetFeature&lt;BaseRuntimeFeature&gt;(); \/\/ Imposta CPU e GPU a SustainedHigh baseRuntime.SetPerformanceLevel( PerformanceDomain.Cpu, PerformanceLevel.SustainedHigh); baseRuntime.SetPerformanceLevel( PerformanceDomain.Gpu, PerformanceLevel.SustainedHigh); Nota:\u00a0Il livello\u00a0Boost\u00a0consuma energia significativamente maggiore e pu\u00f2 causare throttling termico se mantenuto a lungo. Usalo solo per operazioni critiche di breve durata (es. caricamento di una scena pesante). Funzionalit\u00e0 Avanzate \u2014 LeonardoXR QNN Inference Plugin \u2014 Guida Avanzata \u26a0\ufe0f Documentazione in preparazione. Questa sezione coprir\u00e0 l&#8217;utilizzo avanzato del\u00a0QNN (Qualcomm Neural Network) Inference Plugin\u00a0su Leonardo XR, inclusi: Preparazione e conversione di modelli (ONNX \u2192 QNN format). Caricamento di modelli a runtime tramite le API del plugin. Esecuzione di inferenza sull&#8217;NPU con gestione degli input\/output tensor. Gestione della memoria e ottimizzazione del throughput. Debug e profiling delle performance di inferenza. Casi d&#8217;uso: object detection, pose estimation, segmentazione in tempo reale. La documentazione dettagliata sar\u00e0 disponibile in una prossima versione. Intercept OpenXR Function \u2014 Guida Avanzata \u26a0\ufe0f Documentazione in preparazione. Questa sezione coprir\u00e0 l&#8217;utilizzo avanzato del meccanismo\u00a0Intercept OpenXR Function\u00a0su Leonardo XR, inclusi: Architettura del layer di intercettazione OpenXR. Registrazione di handler personalizzati per funzioni OpenXR specifiche. Casi d&#8217;uso: override del rendering pipeline, injection di dati custom nel layer XR, debug a basso livello del comportamento OpenXR. Considerazioni di sicurezza e stabilit\u00e0. Interazione con gli altri componenti dell&#8217;LeonardoXR SDK. Questa funzionalit\u00e0 \u00e8 destinata a sviluppatori con esperienza diretta con le API OpenXR a basso livello. La documentazione dettagliata sar\u00e0 disponibile in una prossima versione.<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":7,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-432","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/comments?post=432"}],"version-history":[{"count":4,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/432\/revisions"}],"predecessor-version":[{"id":453,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/432\/revisions\/453"}],"up":[{"embeddable":true,"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/pages\/7"}],"wp:attachment":[{"href":"https:\/\/www.youbiquo.eu\/leonardoxr\/wp-json\/wp\/v2\/media?parent=432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}