Samsung Galaxy XR è arrivato, con tecnologia Android XR! Questo post del blog fa parte della settimana di approfondimento su Android XR, in cui forniamo risorse (post del blog, video, codice di esempio e altro ancora) progettate per aiutarti a imparare, creare e preparare le tue app per Android XR.
Questa settimana, Samsung ha lanciato Galaxy XR, creato in collaborazione con Google e Qualcomm. È un momento entusiasmante per gli sviluppatori e volevamo aiutarti a ottenere il miglior rendimento possibile dalla tua app XR.
Se il rendimento di giochi e app su dispositivi non XR è scarso, l'utente può provare frustrazione. Nel mondo di XR, il rendimento non è solo facoltativo, ma è fondamentale per il successo della tua app. Se non raggiungi la frequenza fotogrammi target in XR, possono verificarsi problemi molto più gravi, come la chinetosi.
In questa guida, ti illustreremo le ottimizzazioni del rendimento essenziali che devi comprendere per lo sviluppo di Android XR. Scoprirai quali funzionalità offrono i maggiori miglioramenti del rendimento, quando utilizzarle e come funzionano insieme per aiutarti a raggiungere le frequenze fotogrammi target.
Ecco a cosa puntiamo:
- Minimo: 72 fps (fa parte delle nostre norme sulla qualità di riproduzione)
- Facoltativo: 90 fps con un budget di 11 ms per frame
Per ulteriori informazioni sul motivo per cui è importante mantenere una frequenza fotogrammi così elevata, consulta le nostre linee guida sul rendimento.
Funzionalità di rendimento specifiche per XR
Inizieremo trattando due funzionalità di rendimento specifiche per XR: il rendering foveato e il sottocampionamento Vulkan.
Rendering foveato
Il rendering foveato è un'ottimizzazione che ha due modalità. La prima è una modalità statica che esegue il rendering del centro dello schermo a una risoluzione più elevata e riduce progressivamente la risoluzione man mano che si guarda più lontano.
La seconda è la modalità di rilevamento dello sguardo che esegue il rendering specifico dell'area in cui stai guardando in modo dettagliato, riducendo al contempo la qualità visualizzata nelle periferiche. In sostanza, imita il funzionamento della visione umana, in cui vediamo i dettagli solo nell'area specifica su cui ci stiamo concentrando.
Il rendering foveato riduce significativamente il carico di lavoro della GPU senza sacrificare la qualità dell'immagine percepita dall'utente. Il bello del rendering foveato è che gli utenti non noteranno la qualità ridotta nella loro visione periferica, ma la GPU noterà sicuramente il miglioramento del rendimento.
Immagina di creare un'esperienza museale con manufatti 3D complessi. Senza il rendering foveato, avresti difficoltà a mantenere 90 fps cercando di eseguire il rendering di tutto nel "campo visivo". Con il rendering foveato, puoi mantenere i dettagli ad alta poligonatura dove l'utente sta guardando, ma l'ambiente di sfondo viene sottoposto a rendering con una qualità inferiore. Gli utenti non noteranno la differenza, ma avrai la possibilità di aggiungere più dettagli alla scena.
Sottocampionamento Vulkan
Il sottocampionamento Vulkan è il miglior amico del rendering foveato. Mentre il rendering foveato decide cosa sottoporre a rendering a diversi livelli di qualità, il sottocampionamento Vulkan gestisce il rendering efficiente dei diversi livelli di qualità utilizzando le mappe di densità dei frammenti.
Se combinato con il rendering foveato, il sottocampionamento Vulkan ti offre 0,5 ms di rendimento in più. Aiuta anche a smussare i bordi frastagliati nella visione periferica, rendendo l'immagine complessiva più nitida.
Ad esempio, in un gioco di simulazione di volo in cui gli utenti si concentrano su strumenti e controlli, la combinazione del rendering foveato con il sottocampionamento Vulkan fa sì che i controlli dettagliati vengano sottoposti a rendering in modo nitido, ma la struttura periferica della cabina di pilotaggio utilizza meno risorse. Questi 0,5 ms in più non sembrano molti, ma fanno la differenza tra avere spazio per un elemento interattivo aggiuntivo o perdere frame durante i momenti intensi.
Funzionalità GPU per scene complesse
Oltre al rendering foveato e al sottocampionamento Vulkan, esistono alcune funzionalità GPU che riducono il carico non necessario tramite l'istanza e l'eliminazione intelligenti. Queste sono particolarmente efficaci per scene complesse con geometria ripetuta o occlusione significativa.
GPU Resident Drawer
Il GPU Resident Drawer utilizza automaticamente l'istanza GPU per ridurre le chiamate di disegno e liberare il tempo di elaborazione della CPU. Pertanto, anziché comunicare alla GPU ogni oggetto singolarmente, la CPU raggruppa gli oggetti simili.
Questa funzionalità è più efficace per scene di grandi dimensioni con mesh ripetute, come alberi in una foresta, mobili in un edificio di uffici o oggetti di scena sparsi in un ambiente.
Immagina una scena di una foresta con 200 alberi che utilizzano la stessa mesh di base. Senza GPU Resident Drawer, hai 200 chiamate di disegno che consumano la GPU, liberando così la CPU. Quando attivi questa funzionalità, la GPU creerà un'istanza intelligente di questi alberi, che dovrebbe ridurre le chiamate di disegno a 5-10. Si tratta di un risparmio enorme della GPU che puoi investire nella logica di gioco o nei calcoli fisici.
GPU Occlusion Culling
GPU Occlusion Culling utilizza la GPU anziché la CPU per identificare e saltare il rendering degli oggetti nascosti. Rileva automaticamente ciò che è occluso (nascosto) dietro altri oggetti, in modo da non sprecare la GPU per elementi che l'utente non può vedere.
Questa funzionalità è particolarmente efficace negli spazi interni con più stanze, ambienti densi o scene architettoniche in cui pareti, pavimenti e oggetti bloccano naturalmente la visualizzazione.
Ad esempio, supponiamo che tu stia creando un'esperienza di casa con più stanze. Quando l'utente si trova nel soggiorno, perché sprecare cicli GPU per eseguire il rendering della cucina completamente dettagliata che è completamente nascosta dietro una parete? GPU Occlusion Culling salta automaticamente il rendering di questi oggetti nascosti, offrendoti un budget delle prestazioni maggiore per ciò che è effettivamente visibile.
Monitorare il rendimento
Non è sufficiente utilizzare queste funzionalità. Devi anche misurare le ottimizzazioni, in modo da quantificarne l'impatto e verificare che le modifiche funzionino effettivamente.
API Performance Metrics
L'API Performance Metrics fornisce il monitoraggio in tempo reale dell'utilizzo della memoria, del rendimento della CPU e del rendimento della GPU delle tue app. Fornisce dati completi dai livelli di compositore e runtime, in modo da poter vedere esattamente cosa sta succedendo nella tua applicazione.
Stabilisci una baseline prima di apportare le modifiche, applica un'ottimizzazione, misura l'impatto e ripeti. Questo approccio basato sui dati significa che sai che stai effettivamente migliorando il rendimento anziché indovinare.
Prima di attivare il rendering foveato, la durata frame della GPU potrebbe essere di 13 ms, ovvero superiore al budget di 11 ms. Attiva il rendering foveato, misura di nuovo e, si spera, vedrai che scende a 9 ms. Hai guadagnato 4 ms di margine per aggiungere più dettagli alla scena, migliorare la qualità visiva altrove o semplicemente garantire un rendimento più fluido in una gamma più ampia di contenuti.
Senza queste metriche, l'ottimizzazione è cieca. L'API Metrics ti dice la verità su ciò che aiuta effettivamente il tuo caso d'uso specifico.
Frame Debugger
Il Frame Debugger è lo strumento integrato di Unity per comprendere esattamente come viene eseguito il rendering della scena, frame per frame. Mostra la sequenza di chiamate di disegno e ti consente di esaminarle per verificare che le ottimizzazioni funzionino correttamente.
Vuoi verificare che SRP Batcher funzioni? Cerca le voci "RenderLoopNewBatcher" in Frame Debugger. Vuoi verificare se GPU Resident Drawer esegue correttamente il batch? Cerca le voci "Hybrid Batch Group". Queste conferme visive ti aiutano a capire se le impostazioni di ottimizzazione hanno effettivamente effetto.
Esamina le prime 50 chiamate di disegno della scena. Se vedi oggetti simili disegnati singolarmente anziché in batch, significa che l'istanza o il batch non funzionano correttamente. Frame Debugger rende questi problemi immediatamente visibili in modo che tu possa risolverli.
Altre ottimizzazioni
Oltre alle ottimizzazioni che abbiamo trattato sopra, la nostra guida completa al rendimento tratta anche altre ottimizzazioni aggiuntive. Ecco un breve riepilogo:
- Impostazioni URP: disattiva HDR e post-elaborazione per XR mobile. Queste funzionalità forniscono un impatto visivo minimo rispetto al costo del rendimento sull'hardware mobile, quindi otterrai miglioramenti misurabili del rendimento con differenze visive appena percettibili.
- SRP Batcher: riduce il sovraccarico della CPU per le scene con molti materiali che utilizzano la stessa variante di shader. Riducendo al minimo le modifiche dello stato di rendering tra le chiamate di disegno, puoi ridurre significativamente il tempo della CPU dedicato al rendering.
- Frequenza di aggiornamento del display: regola dinamicamente tra 72 fps e 90 fps in base alla complessità della scena. Riduci la frequenza fotogrammi durante le sequenze complesse per mantenere la stabilità, quindi aumentala durante i momenti più semplici per un'interazione ultra-fluida.
- Texture di profondità/opache: disattiva queste texture a meno che non siano specificamente necessarie per gli effetti shader. Causano operazioni di copia GPU non necessarie che sprecano il rendimento senza fornire vantaggi per la maggior parte delle applicazioni.
- Scala di rendering URP: questa impostazione ti consente di eseguire il rendering a una risoluzione ridotta per migliorare il rendimento o di eseguire l'upscaling del rendering per una qualità visiva migliorata.
Per istruzioni passo passo su queste e altre ottimizzazioni, consulta la nostra guida completa al rendimento di Unity per Android XR.
Conclusione
Il rendimento della tua app XR non è solo una casella di controllo tecnica. Fa la differenza tra un'esperienza comoda e coinvolgente e una che fa sentire gli utenti malati o a disagio. Le ottimizzazioni che abbiamo trattato sono il tuo toolkit per raggiungere le frequenze fotogrammi target critiche sui più recenti dispositivi XR.
Ecco la tua roadmap:
- Inizia con il rendering foveato e il sottocampionamento Vulkan. Queste funzionalità specifiche per XR offrono risparmi immediati e notevoli della GPU.
- Aggiungi GPU Resident Drawer e Occlusion Culling se hai scene complesse con geometria ripetuta o spazi interni.
- Monitora tutto con l'API Metrics per assicurarti che le modifiche siano effettivamente utili
- Esplora altre ottimizzazioni URP per un margine di rendimento aggiuntivo
È fondamentale misurare continuamente e ripetere. Non tutte le ottimizzazioni avranno lo stesso vantaggio per tutti i progetti, quindi utilizza l'API Metrics per avere un'idea chiara di ciò che aiuta effettivamente il tuo caso d'uso specifico.
Passaggi successivi: ampliare le tue competenze
Vuoi saperne di più? Consulta queste risorse:
- Guida al rendimento di Unity per Android XR : istruzioni passo passo complete per l'implementazione di tutte le funzionalità trattate qui.
- Guida introduttiva a Unity e Android XR : configura l'ambiente di sviluppo e inizia a creare.
- Documentazione per gli sviluppatori di Android XR : guide complete per tutte le funzionalità di Android XR
-
Notizie sui prodottiSiamo felici di annunciare che è arrivato il supporto ufficiale per Unreal Engine e Godot per Android XR. Stiamo inoltre lanciando nuovi strumenti progettati per aumentare la produttività e abilitare nuove funzionalità XR: Android XR Engine Hub e Android XR Interaction Framework.
Luke Hopkins, Ryan Bartley • Tempo di lettura: 4 minuti -
Notizie sui prodottiAndroid Studio Quail 2 è ora stabile e pronto per essere utilizzato in produzione, portando una svolta nel tuo IDE con workflow agentici simultanei, profilazione delle perdite di memoria integrata in modo nativo e correzione degli arresti anomali sensibile al contesto.
Amman Asfaw • Tempo di lettura: 3 minuti -
Notizie sui prodottiA marzo abbiamo introdotto Android Bench, la nostra classifica LLM per le attività di sviluppo Android reali. Da allora, abbiamo migliorato il benchmark in base ai feedback ricevuti, tra cui la valutazione dei modelli open-weight e l'aggiunta di dimensioni di costo ed efficienza alla classifica.
Zoe Lopez-Latorre • Tempo di lettura: 3 minuti
Ricevi settimanalmente nella tua casella di posta le ultime informazioni sullo sviluppo Android.