Progettare per Apple Vision Pro. Primi passi nello Spatial Computing e le prime lezioni imparate

Come scrivo da giorni, son circa 3 mesi che studio e sperimento in ambiente di sviluppo e test per Apple Vision Pro (nelle prossime ore mi arriverà il mio primo visore, di due, che ne ho acquistato). Non c’è dubbio che fin dall’ambiente di sviluppo, e senza ancora aver avuto modo di fare lunga sperimentazione con l’oggetto fisico – a parte un test di 15 min a Dicembre – il nuovo dispositivo presenta una serie di nuove sfide progettuali, rispetto ad altri visori e rispetto al mondo IOS, da considerare, e che non sono del tutto scontate.

Partiamo da un punto a mio avviso fondamentale:

La forza di Vision Pro non è l’hardware ( o meglio non solo e non soprattutto ), ma bensì la visione e la concezione che porta con se a livello di sistema e approccio.

Proprio come ho scritto qui . Detto questo qui di seguito riporto alcuni appunti che in questi mesi ho preso durante la progettazione from scratch per Apple Vision Pro.

Vision Pro non è un comune visore AR/VR

L’arrivo di Apple nel mercato dell’AR è un tema di discussione, e attesa, di lungo termine e fino a poco tempo fa non c’erano informazioni specifiche per poter iniziare a ragionare su cosa volesse dire progettare per questo device. Per esperienza il processo di migrazione di un applicativo tra diversi visori, cosi come succede tra diversi device smartphone con OS differenti, implica l’adattamento di più parti del progetto, dalla UX alle scelte tecniche di sviluppo, nonché in alcuni casi anche servizi per gestire correttamente le dinamiche dell’OS / ambiente di riferimento. Sono pochi i casi che permettono di lasciare il design pressoché inalterato, ma nel caso del VR invece è prassi.

Nel caso di Apple, rientriamo assolutamente nel secondo caso, ossia è un nuovo approccio, ergo è un contesto del tutto nuovo in cui sviluppare applicativi immersivi “per Vision pro“, e non “anche per Vision Pro“.

Da documentazione Apple è palese fin da subito che non si parla di AR / VR, ma di Spatial Computing. Di questo in questi giorni ne ho già ampiamente parlato e scritto,  e anche se per molti può sembrare solo marketing, a mio avviso ci sono alcune differenze reali nel modo in cui questo visore è progettato rispetto a Quest 3 e altri visori provati negli ultimi due anni.

Un ambiente di sviluppo, per diverse modalità

Per prima cosa in questo contesto è importante definire le tipologie di applicazioni sviluppabili. In particolare in Vision Pro ci sono tre tipi di app che si possono sviluppare: windowed, bounded e unbounded (sono termini ereditati da Unity). Nel contesto dell’Apple Vision Pro, i tre approcci alla progettazione di applicazioni rappresentano modi differenti di sfruttare le capacità di spatial computing del dispositivo. Questi approcci definiscono come l’applicazione interagisce con lo spazio dell’utente e il grado di immersività. 

  • Windowed: le applicazioni “windowed” sono quelle che appaiono agli utenti come finestre fluttuanti nello spazio davanti a loro, in modalità Passthrough, simili a come le finestre appaiono su un computer desktop tradizionale. Questo approccio consente agli utenti di interagire con l’applicazione in un formato rettangolare 2D, mantenendo contemporaneamente la consapevolezza dell’ambiente fisico. È l’opzione meno immersiva tra le tre, ma offre grande flessibilità e può essere particolarmente utile per applicazioni che non richiedono un’esperienza completamente immersiva o per quelle che devono essere eseguite in parallelo ad altre attività, in multi tasking praticamente.
  • Bounded: le applicazioni “bounded” sono progettate per operare all’interno di un volume definito, o “bounded space”, nello spazio fisico dell’utente. Questo significa che l’app crea un’esperienza 3D immersiva che gli utenti possono esplorare o interagire entro i limiti di uno spazio virtuale delimitato. Il volume può essere visualizzato come una porzione di spazio virtuale che coesiste con il mondo reale, permettendo agli utenti di muoversi e guardarsi intorno all’interno dei confini definiti. Questo approccio è più immersivo rispetto alle applicazioni windowed, offrendo un’esperienza che sfrutta la percezione dello spazio 3D pur essendo ancorata a un’area specifica del mondo reale.
  • Unbounded: le applicazioni “unbounded” rappresentano il livello più elevato di immersione, in cui l’esperienza virtuale non è confinata da limiti spaziali definiti. In questo scenario, l’app può trasformare l’intero ambiente circostante dell’utente in uno spazio di gioco o di lavoro virtuale, permettendo interazioni e movimenti virtuali senza restrizioni spaziali. Questo approccio è ideale per esperienze di realtà aumentata o virtuale che intendono sostituire o trasformare completamente la percezione dell’ambiente fisico dell’utente, offrendo la massima libertà nell’esplorazione di mondi virtuali.

Ogni approccio ha i suoi vantaggi specifici e la scelta tra windowed, bounded e unbounded dipende dagli obiettivi dell’applicazione, dalle esigenze degli utenti e dal tipo di esperienza che si desidera creare. L’Apple Vision Pro, in questo modo offre agli sviluppatori la flessibilità di esplorare questi diversi approcci per progettare esperienze utente innovative e coinvolgenti.

Un approccio flessibile e unico (per adesso)

Tecnicamente non c’è una netta divisione in questo contesto di sviluppo. Da parte di Apple, ci sono finestre o volumi (oggetti ed entità) che possono apparire in modalità Shared Space o Full Space, in Passthrough o in un ambiente VR completamente immersivo. Un’app nel caso di Vision pro può combinarli tutti insieme, in vari modi.

Faccio degli esempi per rendere meglio l’idea. Nel caso di Apple è possibile per esempio sviluppare un gruppo di finestre, che si combinano con un gruppo di volumi, in uno spazio Full o Shared. In questo caso si può passare da uno all’altro, a seconda delle esigenze dell’utente, e si possono creare dinamiche di interazione e spostamento particolari: la vera distinzione da è tra il come il contenuto è rappresentato ( finestra 2D o volume 3D) e in quale spazio si trova (condiviso con altre app o non condiviso), e soprattutto se è in Passthrough o in VR completo. Molte applicazioni per necessità o precedenti sviluppi in altri ambienti e device nascono con modelli vincolati, mentre nel caso di Apple, se si vuole mantenere una completa flessibilità la soluzione più semplice (e probabilmente corretta) è utilizzare in modalità Full Space. L’unico caso che diventa veramente vincolate e inibisce alle applicazioni di poter esser gestite contemporaneamente ad altre è lo sviluppo Unbounded/Full Space, che ha di per se molti vantaggi, ma ha lo svantaggio principale che l’utente appunto non può aprire applicazioni una a fianco all’altra.

In pratica se vogliamo realizzare applicazioni che permettano all’utente in contemporanea di leggere la posta, navigare in internet, ascoltare musica, guardare un video, giocare e fare qualsiasi altra cosa dobbiamo realizzare app bounded e in uno spazio condiviso. Questo tipo di soluzione di sviluppo, che dal possibilità di utilizzo senza soluzione di continuità, da la sensazione di essere magica. E questa cosa per adesso la si può fare solo in Apple Vision Pro.

Quando Apple menziona lo Spatial Computing in pratica non parla di AR o VR, ma si riferisce esattamente a questo.

Apple Vision pro è “un computer indossabile”. E non lo dico solo per un tema di hardware o caratteristiche tecniche, ma per via dell’ecosistema che Apple vuole integrare e lo scopo che vuole raggiungere: un dispositivo, come un computer personale, indossato sulla testa, con cui puoi fare tutto, ovunque.

Scegliere quindi in quale spazio si trova l’app, a mio avviso è la prima fase della progettazione dell’esperienza dell’applicativo che si vuole sviluppare e che consentirà al progetto di poter sfruttare a pieno le potenzialità del visore. Non c’è dubbio che allinearsi alla visione di Apple, come successo negli anni con le linee progettuali dettate da Apple stessa per IOS, possa accelerare lo sviluppo e trovarsi esattamente a progettare nel corretto paradigma – approvato da Apple appunto – e su cui il visore di fatto nasce.

La differenza dei controlli tra Apple Vision Pro e gli altri sistemi

Una delle cose che mi ha sorpreso negli ultimi anni è quanto i giochi VR possano essere accessibili ai non giocatori, per quanto il numero di visori e la diffusione dei giochi VR non sia ancora così estesa. Uno dei motivi della semplicità d’uso a primo impatto è senza dubbio il controllo all’interno del gioco, ossia per la VR è viene chiamato controllo diretto. Questo è un modo elegante per dire che giochi attraverso l’incarnazione diretta e questa forma di controllo è estremamente intuitiva, perché tutti sanno come usare il proprio corpo.

All’interno del Vision Pro, il paradigma di controllo è differente. In Vision pro le cose con cui puoi interagire le guardi e poi le pizzichi. In pratica è come se gli occhi fossero il puntatore del mouse e al tuo pizzico delle dita il clic sul tasto sinistro. Questo è quello che Apple chiama il controllo indiretto. Se il controllo diretto è intuitivo, il controllo indiretto all’inizio lo è un po’ meno.

I concetti di controllo diretto e controllo indiretto si riferiscono quindi a due diversi modi in cui gli utenti possono interagire con le interfacce digitali, in particolare nel contesto di dispositivi come l’Apple Vision Pro e altri sistemi di realtà aumentata o virtuale.

  • Controllo Diretto: il controllo diretto si basa sull’interazione fisica e intuitiva con l’ambiente virtuale. In pratica, significa che le azioni dell’utente nel mondo reale vengono mappate direttamente nel mondo virtuale in modo uno a uno. Ad esempio, se in un gioco VR l’utente vuole afferrare un oggetto, estenderà la mano e lo prenderà proprio come farebbe nella vita reale. Questo approccio è definito “diretto” perché l’azione compiuta ha un corrispettivo immediato e intuitivo nell’ambiente virtuale, rendendo l’esperienza di gioco o l’interazione estremamente naturale e accessibile anche per chi non è abituato ai videogiochi. La tecnologia di tracking di movimento, come il tracciamento delle mani e dei movimenti del corpo, è cruciale per questo tipo di controllo.
  • Controllo Indiretto: il controllo indiretto richiede invece un’azione che non corrisponde fisicamente all’azione che si verifica nel mondo virtuale. Utilizzando l’esempio dell’Apple Vision Pro, gli utenti interagiscono con l’ambiente virtuale guardando gli oggetti e compiendo un gesto specifico, come un pizzicotto, per selezionarli o interagire con essi. In questo caso, lo sguardo dell’utente funziona, come detto, come un cursore del mouse, e il “clic” delle dita sostituisce il mouse. Questo metodo è considerato “indiretto” perché c’è una disconnessione tra l’azione fisica e il risultato nell’ambiente virtuale; l’utente non tocca o afferra fisicamente l’oggetto, ma usa un’interazione basata su gesti per controllarlo.

Scegliere tra un controllo diretto o indiretto

Non c’è dubbio che la modalità in controllo indiretto debba esser appreso dall’utente poiché, almeno nella fase iniziale, non risulta naturale, soprattutto se paragonata ad altre esperienze di altri visori per gli utenti che hanno già avuto altre esperienze.

Ma questa fase di apprendimento, l’abbiamo già vissuta più volte e non è stato un disastro, anzi:

  • le levette analogiche introdotte per la prima volta nei videogiochi
  • il cursore del mouse e la sua interazione con il sistema operativo
  • lo swipe di apple per lo sblocco del cellulare per per le diverse interazioni

Ogni nuova interazione porta con se una nuova fase ed una nuova curva di apprendimento. E non necessariamente è un male.

Ora, rispetto il punto è “scegliere tra un controllo diretto o indiretto”. Ovviamente la prima riflessione è che a seconda del tipo di sviluppo che si affronta è corretto pensare di sviluppare differenti tipologie di interazione, o eventualmente supportare sia il controllo diretto che quello indiretto.

I sistemi di interazione indiretta a mio avviso prenderanno popolarità per la loro versatilità e capacità di adattarsi soprattutto alla pigrizia umana, offrendo un’interfaccia concettualmente trasparente che permette di compiere molteplici azioni con minimi spostamenti nel mondo reale. Questo tipo di controllo diventa essenziale in ambienti con spazi limitati, dove l’interazione diretta fisica è impraticabile, e aggiungo in contesti in cui l’utilizzo del visore è in condizioni di lavoro “stabili” ed il visore è il sostituto di un equipaggiamento fatto di pc, device mobile e monitor. In tali contesti, gli utenti interagiscono con il sistema da una certa distanza, rendendo le azioni simili all’uso di un mouse in un ambiente 2D, ma con la tecnologia che interpreta automaticamente la profondità e l’orientamento desiderato. Questo approccio consente una partecipazione efficace e comoda in progetti complessi senza la necessità di movimenti ampi o fisici, adattandosi perfettamente a situazioni dove lo spazio è un vincolo.

In pratica progettare per il controllo indiretto significa tornare a progettare nel modo in cui si farebbe per un mouse o un controller. Invece di mappare il movimento fisico del giocatore uno a uno nel mondo virtuale, va ripensato in modo che una piccola quantità di movimento abiliti un ampio spazio di possibilità nello spazio di interazione. Questo schema di controllo si basa molto sul tracciamento degli occhi.

Tracciamento Oculare, tra punti di forza e debolezze

Il tracciamento oculare del Vision Pro è sicuramente molto efficace e preciso, seppur tecnicamente non sbagli mai su punto in cui gli occhi sono puntati, il modo in cui deve esser implementato e utilizzato ha ancora delle debolezze (che non ho dubbi verranno migliorate).

Prima di tutto il tracciamento oculare come metodo di input presenta un potenziale limite legato alla necessità di eseguire azioni in modo sequenziale, a causa della limitazione naturale di poter focalizzare visivamente un solo elemento alla volta. Questo implica che, nonostante la potenziale rapidità e intuitività dell’interazione visiva, gli utenti sono vincolati a comunicare le loro intenzioni al sistema in una sequenza temporale definita. Questo vincolo può limitare la capacità di multitasking, in particolare in contesti dove l’efficienza e la simultaneità delle azioni sono cruciali. È possibile organizzare le interazioni in modo che consentano una forma di multitasking sequenziale, ad esempio attraverso l’uso combinato di input visivi e gestuali che permettono di gestire diversi elementi quasi contemporaneamente.

Secondo tema è relativo alla percezione visiva umana, caratterizzata da rapidi e brevi movimenti degli occhi che spostano il punto di focalizzazione, introduce ulteriori complicazioni nel tracciamento oculare. Questi aspetti biologici possono distorcere la corrispondenza tra l’intenzione dell’utente e il punto effettivo di focalizzazione, portando a discrepanze tra dove l’utente crede di aver guardato e dove i suoi occhi si sono effettivamente mossi. Questo fenomeno può causare interazioni imprecise o non intenzionali, sottolineando l’importanza di considerare le peculiarità della visione umana nella progettazione di interfacce basate sul tracciamento oculare. La sfida che vedo è quella di progettare sistemi che tengano conto di queste limitazioni, minimizzando gli errori e migliorando l’esperienza utente attraverso un’interpretazione accurata delle intenzioni visive.

Da considerare infine è l’ottimizzazione delle interfacce di tracciamento oculare ed in particolare va fatta molta attenzione al tempo di reazione richiesto nell’interazione, alla disposizione spaziale degli elementi interattivi e ai falsi positivi. Minimizzare la possibilità di azioni non intenzionali e ridurre l’impatto degli errori diventa fondamentale per mantenere un’esperienza utente positiva, fluida e che non generi frustrazione. Strategie come la distanza minima tra gli elementi interattivi e la conferma delle azioni critiche possono mitigare le conseguenze degli errori e migliorare significativamente l’usabilità. La progettazione di interfacce , soprattutto in un contesto immersivo / sensoriale deve quindi bilanciare l’introduzione di esigenze tecnologica e comportamento umano, al fine di creare sistemi di interazione che siano sia avanzati che intuitivi.

Personalizzazione dell’esperienza utente su Apple Vision Pro

Un aspetto fondamentale nella progettazione di applicazioni per Vision Pro è l’importanza di offrire esperienze altamente personalizzabili. Nell’era del computing spaziale e dell’iperpersonalizzazione, la UX si trasforma richiedendo un approccio che vada oltre la “semplice” navigazione tradizionale. Lo sviluppo deve pertanto considerare che il design possano adattarsi non solo alle diverse modalità di interazione (diretta e indiretta), ma anche alle preferenze individuali degli utenti. La capacità di modificare impostazioni quali la scala di visualizzazione, la sensibilità dei controlli o gli schemi di colore diventa cruciale per accogliere un pubblico ampio e diversificato. Questo livello di personalizzazione non solo migliora il comfort e l’usabilità, ma incoraggia anche un maggior grado di immersione e soddisfazione dell’utente, ed accessibilità.

Game Design per l’Immersività Spaziale

Nel contesto di Vision Pro, il game design assume nuove dimensioni, spingendo lo sviluppo a forme di esplorazione innovative e meccaniche di gioco che sfruttino appieno le capacità dello spatial computing. La progettazione di giochi in ambienti windowed, bounded e unbounded offre opportunità senza precedenti per creare esperienze ludiche che si intrecciano con l’ambiente fisico dell’utente. Questo richiede una riflessione approfondita su come gli elementi di stimolo possano esser applicati per far emergere ed attivare comportamenti ed interazioni all’interno di spazi reali e virtuali, in un continuo di esperienza. Elementi come la realtà aumentata dinamica, gli oggetti interattivi che reagiscono alla presenza fisica e ai movimenti dell’utente, l’interazione con oggetti fisici, sensori e la narrazione che si adatta all’ambiente circostante, pongono le basi per una nuova era del game design, dove l’ambiente stesso diventa un componente chiave del gameplay.

Lo spazio condiviso: ottimizzazione e integrazione

Nella progettazione di applicazioni che utilizzano lo “spazio condiviso” diventa importante e fondamentale considerare l’impatto sulla potenza di calcolo del dispositivo e sul carico cognitivo degli utenti. Le applicazioni in questi contesti non operano in isolamento (ossia in modalità unica) ma coesistono con altre applicazioni, condividendo di conseguenza le risorse limitate come la potenza di elaborazione. Questo implica la necessità di ottimizzare le prestazioni senza presupporre l’accesso esclusivo alle risorse del sistema. Allo stesso tempo, è essenziale progettare esperienze che non sovraccarichino l’utente, lasciando spazio cognitivo (in modo fagocitante) per altre attività parallele, sottolineando l’importanza di un design che sia efficiente e non invadente.

Il concetto di spazio condiviso estende la sua rilevanza ed importanza progettuale anche al tema sonoro delle applicazioni. Nello sviluppo di un applicativo devono esser bilanciate la creazione di un contesto ambientale sonoro coinvolgente e la consapevolezza che esisteranno altri suoni nell’ambiente dell’utente fisico circostante. Questo richiede un attento lavoro di design del suono che consideri la coesistenza di fonti sonore multiple, garantendo che l’audio dell’applicazione non sia invasivo ma piuttosto si integri armoniosamente con il contesto di utilizzo. Son parecchi i giochi e applicazioni già presenti in altri store VR che non hanno una corretta attenzione progettuale a queste dinamiche.

Sfide e Strategie nello Sviluppo per Piattaforme Avanzate

Ultimo tema da affrontare è relativo alla scelta della piattaforma di sviluppo per un progetto, e qui le opzioni spaziano da ambienti nativi, come Swift per dispositivi Apple, a motori di terze parti come Unity. La decisione dipende spesso dalla familiarità con l’ecosistema e dalla valutazione dei rischi e delle tempistiche di sviluppo del singolo progetto.

Sviluppare nativamente può offrire un accesso diretto alle ultime funzionalità e ottimizzazioni e caratteristiche tecniche del dispostivo stesso e dell’OS (come succede dopo tutto con swift su IOS), ma richiede una conoscenza approfondita della piattaforma. Al contrario, l’uso di motori di terze parti può accelerare lo sviluppo grazie alla loro flessibilità e alla vasta gamma di funzionalità, anche se potrebbe comportare limitazioni in termini di accesso alle funzionalità più recenti e specifiche del dispositivo ed una maggiore dipendenza da aggiornamenti di terze parti.

Le differenze architetturali tra le piattaforme di sviluppo possono presentare complessità differenti: un esempio, in particolare, riguarda lo sviluppo in Unity (e prossimamente anche Unreal) nell’interazione con l’hardware di ogni specifica piattaforma (VisionPro, Quest3, altri) e creare delle discrepanze nella gestione del rendering, conversioni di materiali e shader, e differenze nel modo in cui di conseguenza la logica dell’applicativo interagisce con le API native.

Nello specifico questa fase di approccio alla scelta necessità di una comprensione dettagliata degli ambienti e delle loro peculiarità al fine di ottimizzare le prestazioni e garantire che il progetto funzioni come previsto. Se ci pensate non è diverso da quanto accade quando scegliamo di sviluppare app mobile in nativo o con framework come Flutter o altro.

Le questioni di rendering, in particolare, possono essere complesse, con considerazioni da valutare sull’efficacia in termini di risoluzione, framerate, latenza e come queste influenzano di conseguenza l’esperienza utente.

Last, but not Least… i dati e la privacy

La progettazione di applicazioni più complesse ci mette davanti anche temi da trattare come privacy e l’accesso ai dati, soprattutto in contesti di spazio condiviso. L’accesso a dati ed informazioni sensibili come la posizione dell’utente o il movimento degli occhi può essere limitata per motivi di sicurezza.

Nella fase di analisi di un progetto è importante comprendere fin da subito quali restrizioni dover affrontare bilanciando le necessità funzionali dell’applicativo con il rispetto della privacy dell’utente, cercando soluzioni creative per migliorare l’interazione senza compromettere la sicurezza e quindi danneggiare l’adozione.

Insomma, in questo viaggio appena iniziato vedo una potenzialità enorme, ma soprattutto uno spazio tutto nuovo di possibili progettualità che, ad oggi, nemmeno immaginiamo. Esattamente come quando per la prima volta iniziammo a pensare alla prossima app per iPhone.