Featured image of post Appunti - Unity3D, ARFoundation per la realtà aumentata

Appunti - Unity3D, ARFoundation per la realtà aumentata

Qui trovi tutti gli appunti e le indicazioni che ho scritto sulla libreria ARFoundation di Unity per la realtà aumentata.

Librerie e Framework per la realtà aumentata su Unity 3D.

N.B. Questi appunti vengono periodicamente aggiornati. Essendo apputi potrebbero contenere errori, per dettagli accurati far riferimento alle fonti ufficiali disponibili nella sezione fonti.


Supportate/Definite dalla documentazione ufficiale Unity

Unity fornisce supporto ufficiale ad alcuni framework/libreria per la realtà aumentata:

  1. AR Foundation: Framework per lo sviluppo di applicazioni in realtà aumentata su dispositivi multi piattaforma (sia mobile che wareable);
  2. Unity MARS: è un insieme di strumenti che Unity fornisce a pagamento per lo sviluppo in realtà Aumentata;
  3. Unity as Library: Utilizzare l’AR di Unity all’interno dell’app mobile, in pratica è possibile caricare la libreria a runtime all’interno di un’applicazione nativa, questo permette di creare progetti di iOS con Xcode o Android Gradle;
  4. XR Interaction Toolkit: permette di congiungere realtà virutale e realtà aumentata in modo codeless posizionando oggetti VR in ambienti AR. Il package è ancora in fase di sviluppo.
    LibreriaPrezzo
    AR Foundationsgratis
    Unity Mars50$ / Month
    Unity as a librarygratis
    XR Interaction Toolkitgratis

AR Foundation

AR Foundation consente di lavorare con più piattaforme in realtà aumentata, questo pacchetto infatti fornisce un’interfaccia per gli sviluppatori Unity da utilizzare, ma da sola non implementa alcuna funzionalità AR.

Per utilizzare AR Foundation è necessario conoscere il dispositivo di destinazione e scaricare dei pacchetti separati in base alla piattaforma di destinazione supportata da Unity; ne esistono diversi:

  • ARCore XR Plug-in Android
  • ARKit XR Plug-in iOS
  • Magic Leap XR Plug-in Magic Leap
  • Windows XR Plug-in HoloLens

Per approfondire Unity AR Foudation Doc.

Il framework AR Foundation è basato su una serie di sottosistemi in particolare tutti i sottosistemi hanno lo stesso ciclo di vita: possono essere creati, avviati, fermati e distrutti. Ogni sottosistema ha un corrispondente, che descrive le capacità di un particolare provider. Esistono diversi sottosistemi che compongono l’AR Foundation:

  • Session: Una sessione è un’istanza AR che si occupa di gestiore il ciclo di vita di tutti i sistemi AR, ad esempio su un dispositivo android ARCore potrebbe essere non disponibile, pertanto rileva se l’AR è disponibile per l’app in questione.

  • Anchor: Il sottosistema Anchor gestisce gli “ancoraggi”. Gli anchor sono dei posizionamenti specifici nell’ambiente fisico che si desidera tracciare. Quella posizione ancorata sarà tracciata finché esiste l’anchor. Una volta creato, l’anchor non può essere spostato, invece la sua posa viene aggiornata automaticamente dal sub-layer AR. Il ciclo di vita degli Anchor è basato su creazione e distruzione a livello di codice tramite le chiamate espicite TryAddAnchor e TryRemoveAnchor; è possibile anche creare gli ancoraggi automaticamente al caricamento dei dati AR, in questo caso le creazione e distruzione dipendono da eventi e non dal controllo dell’utente.

  • RayCastring: Il sottosistema XR Raycast consente di eseguire test rispetto a specifiche funzionalità, si basano sui *physics.raycast (Il Physics Raycast è un valore booleano che restituisce true se si interseca con un COllaider, altrimenti restituisce False). Esistono due tipi di Raycast:

    • Screen point: Un punto sullo schermo in coordinate dello schermo normalizzate (0, 0) - (1, 1).
    • Arbitrary ray: Un raggio nello spazio della sessione.
  • Camera: Il sottosistema della camera gestisce la fotocamera a livello HW del dispositivo AR, in particolare si serve dei seguenti dati:

    • Camera Image (come texture esterna sulla GPU);
    • Camera Image (come buffer di byte disponibili sulla CPU);
    • Projection Matrix o matrice di proiezione, utilizzata per orientare correttamente l’immagine della fotocamera;
    • Display Matrix o matrice di visualizzazione, utilizzat per orientare correttamente l’immagine della fotocamera;
    • Dati HW della Camera che descrivono un modello matematico della fotocamera e sono utili per gli algoritmi di computer vision;
    • Camera conversion utilities utili per la conversione da CPU a RGB e grayscale;
    • Informazioni sulla stima della luminosità (ad esempio colore e luminosità dell’ambiente);
    • Camera Focus, ovvero messa a fuoco della fotocamera (ad esempio autofocus o focale fissa).
  • XR plane subsystem: Il sottosistema plane rileva superfici piane e/o planari nell’ambiente; in particolare informa l’utente sulle superfici statiche. Non è pensato per tracciare piani in movimento o altrimenti dinamici. Quando un piano viene “rimosso”, generalmente non significa che una superficie è stata rimossa, ma piuttosto che la comprensione dell’ambiente da parte del sottosistema è migliorata o cambiata in un modo che invalida quel piano. Quando una superficie viene rilevata per la prima volta, il sottosistema la segnala come “aggiunta”. I successivi aggiornamenti sono perfezionamenti sul rilevamento iniziale del piano. Il riconoscimento in genere cresce man mano che si esegue la scansione di una maggiore quantità di ambiente. Alcune piattaforme supportano il concetto di fusione dei plane. Se un piano viene unito in un altro, BoundedPlane.subsumedById conterrà l’ID del piano che ha aggiunto il piano in questione. Non tutte le piattaforme supportano il XR Plane, alcune piattaforme potrebbero rimuovere il primo plane rilevato e rendere un secondo o un altro plane più grande soppiantare il primo.

  • XR depth subsystem: Il sottosistema di profondità è un’interfaccia con le informazioni relative alla profondità rilevate nella scena. Si riferisce ai feature point, che sono caratteristiche univoche rilevate nell’ambiente che possono essere correlate tra più frame. Un insieme di feature point è nota come nuvola di punti. Il XR depth è un tipo di sottosistema di tracciamento. Alcuni provider ne hanno solo uno, mentre altri potrebbero averne diversi in base alla piattaforma o provider.

  • XR image tracking subsystem: Il sottosistema di image tracking tenta di rilevare immagini bidimensionali nell’ambiente che corrispondono alle immagini archiviate in una libreria di immagini di riferimento.

  • XR face subsystem: Il sottosistema facciale rileva e tiene traccia dei volti umani nell’ambiente.

  • XR environment probe subsystem: Il sottosistema environment probe subsystem fornisce un’interfaccia per la gestione e l’interazione con le sonde dell’ambiente XR. Le environment probe catturano immagini del mondo reale da una telecamera e organizzano tali informazioni in una texture ambientale, ad esempio una mappa cubica, che contiene la vista in tutte le direzioni da un certo punto della scena. Il rendering di oggetti 3D con questa texture ambientale consente di riflettere le immagini del mondo reale negli oggetti renderizzati. Il risultato sono generalmente riflessi realistici e illuminazione di oggetti virtuali, influenzati dalla visione del mondo reale, che migliora l’aspetto degli oggetti renderizzati e consente loro di adattarsi meglio all’ambiente del mondo reale.

  • XR object tracking subsystem: Il sottosistema di object tracking tenta di rilevare oggetti tridimensionali nell’ambiente che sono stati precedentemente analizzati e archiviati in una libreria di oggetti di riferimento.

  • XR Human Body Subsystem: utilizza la Classe XRHumanBodySubsystem che definisce un’interfaccai per interagire con la funzionaità del corpo umano.

  • Occlusion subsystem: Questo sottosistema permette di incorporare immagini di profondità nel processo di rendering per ottenere una fusione realistica di contenuti aumentati e del mondo reale, in modo che gli oggetti fisici vicini occludano il contenuto virtuale che si trova dietro di loro nello spazio AR condiviso. I tipi di immagini di profondità supportate sono:

    • Environment Depth: distanza dal dispositivo verso qualsiasi parte dell’ambiente nel campo visivo della telecamera.
    • Human Depth: distanza dal dispositivo verso qualsiasi parte di un essere umano riconosciuta all’interno del campo visivo della fotocamera.
    • Human Stencil: valore che designa, per ogni pixel, se quel pixel contiene un essere umano riconosciuto.

L’interfaccia dell’Occlusion subsystem consente di:

  • Abilitare, disabilitare e configurare la qualità delle varie immagini di profondità supportate.

  • Verifica della disponibilità di ogni tipo di immagine di profondità.

  • Accesso ai dati dell’immagine di profondità.

  • XR Mesh subsystem: Lo scopo di questo sottosistema è la generazione efficiente di mesh all’interno di Unity in base ai dati geometrici forniti da un dispositivo XR.

N.B. Questi appunti vengono periodicamente aggiornati. Essendo apputi potrebbero contenere errori, per dettagli accurati far riferimento alle fonti ufficiali disponibili nella sezione fonti.

Fonti

Condividi:
Create with Hugo, Theme Stack;
Sito creato e gestito da Francesco Garofalo;