Advanzo
Avanzo — LeonardoXR SDK
Avanzate
- Versione 1.0.2
- Dispositivo: Youbiquo Leonardo XR
- SDK di base: Snapdragon Spaces 1.0.4
Questa sezione illustra le configurazioni e le funzionalità avanzate disponibili su Leonardo XR, suddivise tra funzionalità generali della piattaforma Snapdragon Spaces e funzionalità avanzate proprietarie di Leonardo XR.
Avanzate — Snapdragon Spaces
Aggiunta di un nuovo profilo di interazione
Per utilizzare un profilo di interazione non incluso nel plugin Snapdragon Spaces:
- Vai a Project Settings > XR Plug-in Management > OpenXR (Android) > Interaction Profiles.
- Aggiungi il profilo desiderato facendo clic sul pulsante +.
- Configura le azioni di input corrispondenti nell’asset di sistema di input.
Controller personalizzato
Descrive come creare un archivio controller Android personalizzato (.aar) utilizzando il pacchetto Controller personalizzato, ovvero il progetto Android Studio incluso nel pacchetto per sviluppatori.
Panoramica del processo
- Apri il progetto Android Studio incluso nel pacchetto per sviluppatori di Snapdragon Spaces.
- Modifica l’Activity companion secondo necessità (layout, pulsanti, assi aggiuntivi).
- Compila il progetto per ottenere un file .aar.
- Importa il file .aar nel progetto Unity come plugin nativo Android (in Assets/Plugins/Android).
- Configura il manifest Android per dichiarare la nuova Activity.
NOTA: L’aggiunta di un archivio controller personalizzato può causare errori di cache di Gradle. In caso di errori di compilazione, elimina la cartella Temp/gradleOut e ricompila il progetto.
Frequenza di aggiornamento del display
The `XR_EXT_display_refresh_rate` extension allows querying and setting the display refresh rate at runtime.
Interroga la frequenza di aggiornamento corrente
using Qualcomm.Snapdragon.Spaces;
BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance.GetFeature<BaseRuntimeFeature>();
float currentHz = baseRuntime.GetDisplayRefreshRate();
Debug.Log($"Current refresh rate: {currentHz} Hz");
Ottieni frequenze di aggiornamento supportate
float[] supportedRates = baseRuntime.GetSupportedDisplayRefreshRates();
foreach (float rate in supportedRates)
Debug.Log($"Supported: {rate} Hz");
Imposta la frequenza di aggiornamento
baseRuntime.RequestDisplayRefreshRate(90.0f);
NOTA: La frequenza di aggiornamento richiesta deve essere tra quelle restituite da GetSupportedDisplayRefreshRates(). I valori non supportati vengono ignorati.
Prestazioni avanzate dei thread Android
Il componente SpacesThreadUtility migliora la priorità di pianificazione dei thread su Android, producendo una temporizzazione dei frame più coerente.
Configurazione
Aggiungi il componente SpacesThreadUtility a un GameObject persistente nella scena (ad esempio, lo stesso GameObject che ospita la sessione AR o l’origine XR). Non è richiesta alcuna configurazione: si attiva automaticamente all’inizializzazione e agisce sui thread principali di Unity.
Quando utilizzare
Consigliato per tutte le applicazioni LeonardoXR che presentano fluttuazioni del frame rate o variabilità nella temporizzazione dei frame, soprattutto in scene con rendering intensivo o molti sottosistemi AR attivi.
Impostazioni delle prestazioni
L’estensione OpenXR XR_EXT_performance_settings espone suggerimenti sui livelli di prestazioni per CPU e GPU tramite un nuovo metodo su BaseRuntimeFeature.
| Level | Description |
|---|---|
| PowerSavings | Reduces CPU/GPU clocks to the minimum necessary. Useful for simple scenes or static UI. |
| SustainedLow | Sustained performance at a low level. |
| SustainedHigh | Sustained high-level performance. Recommended for most AR apps. |
| Boost | Maximum performance for short periods (not sustainably maintained). |
using Qualcomm.Snapdragon.Spaces;
using UnityEngine.XR.OpenXR;
BaseRuntimeFeature baseRuntime = OpenXRSettings.Instance.GetFeature<BaseRuntimeFeature>();
baseRuntime.SetPerformanceLevel(PerformanceDomain.Cpu, PerformanceLevel.SustainedHigh);
baseRuntime.SetPerformanceLevel(PerformanceDomain.Gpu, PerformanceLevel.SustainedHigh);
NOTA: Il livello Boost consuma molta più energia e, se utilizzato in modo continuativo, può causare surriscaldamento e conseguente limitazione della potenza. Utilizzalo solo per operazioni critiche di breve durata (ad esempio, il caricamento di una scena complessa).
Avanzato — LeonardoXR
Plugin di inferenza QNN – Guida avanzata
DOCUMENTAZIONE IN FASE DI COMPLETAMENTO Questa sezione tratterà l’utilizzo avanzato del plugin di inferenza QNN (Qualcomm Neural Network) su Leonardo XR, tra cui:
Preparazione e conversione del modello (formato ONNX → QNN).
Caricamento dei modelli in fase di esecuzione tramite API plugin.
Esecuzione dell’inferenza sulla NPU con gestione dei tensori di input/output.
Gestione della memoria e ottimizzazione del throughput.
Debug e profilazione delle prestazioni dell’inferenza.Casi d’uso: rilevamento di oggetti, stima della posa, segmentazione in tempo reale.
La documentazione dettagliata sarà disponibile in una versione futura.
Intercetta la funzione OpenXR – Guida avanzata
DOCUMENTAZIONE IN FASE DI ELABORAZIONE Questa sezione tratterà l’utilizzo avanzato del meccanismo Intercept OpenXR Function su Leonardo XR, tra cui:
Architettura del livello di intercettazione OpenXR.
Registrazione di gestori personalizzati per specifiche funzioni OpenXR.
Casi d’uso: override della pipeline di rendering, iniezione di dati personalizzati nel livello XR, debug di basso livello di OpenXR.
Considerazioni su sicurezza e stabilità.
Interazione con altri componenti dell’SDK LeonardoXR.
Questa funzionalità è pensata per gli sviluppatori con esperienza diretta delle API OpenXR di basso livello. La documentazione dettagliata sarà disponibile in una versione futura.