Categoria:
Realtà aumentata

ARKit vs ARCore: cosa scegliere per sviluppare esperienze di augmented reality?

Nel precedente appuntamento abbiamo visto le motivazioni che spingono Apple e Google a promuovere le proprie SDK per l'augmented reality (AR - Realtà Aumentata), rispettivamente ARKit per iOS e ARCore per Android.

Ma su quale dei due framework vale la pena investire? Scopriamo le similitudini e le differenze tra le due piattaforme.

Motion tracking

La realtà aumentata necessita che il dispositivo sia in grado di tracciare la propria posizione e la propria orientazione all'interno del mondo reale. Sia ARKit che ARCore ottengono questo risultato grazie alla VIO: Visual Intertial Odometry.

La VIO si basa sui dati rilevati dai sensori di movimento (giroscopio, bussola, GPS, ...) e alla fotocamera per identificare il movimento del dispositivo nei 6 gradi di libertà (degrees of freedom, i cosiddetti 6 DOF: 3 di traslazione: sinistra/destra, sopra/sotto, avanti/indietro, e 3 di rotazione: beccheggio, rollio, imbardata).

La corretta stima della posizione reale del dispositivo è la chiave fondamentale per valutare le coordinate spaziali 3D dell'esperienza AR all'interno della quale posizionare e tenere traccia degli elementi virtuali (3D e 2D), e come essi dovranno essere mostrati sullo schermo del device.

Plane detection

Una volta acquisito il sistema di coordinate spaziali, l'esperienza di AR "realistica" necessita che il dispositivo sia in grado di capire dove posizionare gli oggetti virtuali rispetto agli elementi del mondo reale: "sopra" quale piano? "attraverso" quale parete?

Sia ARCore che ARKit fanno uso di tecniche di riconoscimento ambientale, e in particolare di plane detection, per permettere a noi sviluppatori di lavorare direttamente al netto di sofisticati algoritmi basati su gradienti di luci e calcolo della profondità.

Il risultato è quindi la possibilità di posizionare gli oggetti virtuali su piani virtuali a loro volta basati sulle superfici reali precedentemente identificate.

Lighting estimation

Dopo aver capito dove posizionare gli oggetti virtuali, e rispetto a quali oggetti reali, il tocco finale che rende "credibile" la realtà aumentata è dato dal rendering degli oggetti, con particolare riferimento all'illuminazione delle superfici.

Entrambe le SDK interpretano i gradienti di luce del mondo reale per capire quali sono le sorgenti di luce reale, per poi illuminare in maniera analoga gli oggetti virtuali, proprio come se fossero disposti nel mondo reale.

Ovviamente, entrambi i framework permettono l'aggiunta e l'alterazione delle diverse sorgenti di luce virtuale, anche in modo dinamico.

Altre caratteristiche comuni

Con approcci diversi, sia ARKit che ARCore espongono le seguenti interessanti caratteristiche secondarie all'interno delle proprie realtà aumentate:

  • il tracciamento di oggetti 2D e 3D in movimento
  • l'utilizzo di oggetti 2D e 3D come trigger in grado di fare partire una interazione o una nuova esperienza
  • l'utilizzo di anchors e feature points, ossia punti specifici del mondo reale mappati nel mondo virtuale
  • il supporto per framework di terze parti (es. Unity) e di hardware specializzati (es. Oculus)
  • il supporto a tecniche avanzate di image detection (es. per face recognition o lettura qrcode)
  • l'integrazione con gli altri framework nativi delle due piattaforme (geolocalizzazione, cloud storage, ...)

Differenze: quantità vs qualità

Le differenze tecniche sono minimali: bisognerebbe scendere in dettagli implementativi per capire eventuali pro e contro delle scelte adottate da Apple e Google nei rispettivi algoritmi di motion tracking, plane detection e lighting estimation.

Tuttavia, a livello più macroscopico si può sperimentare che ARCore riesce a mappare mondi reali più vasti all'interno di una stessa scena virtuale, senza bisogno di riavviare la sessione AR ex novo, identificando più feature point nel mondo reale, e facendolo più rapidamente.

D'altro canto, ARKit è solitamente più accurato nella scelta dei feature point. Inoltre, dal momento che ARKit è sul mercato da più tempo ed espone un'API più matura e con documentazione adeguata, è il framework preferito da alcuni dei player non hi-tech che vogliono cimentarsi nella realtà aumentata (es. IKEA).

ARKit ha una platea consumer più ampia e più omogenea grazie all'ecosistema Apple, mentre ARCore subisce -come tutte le soluzioni Android- la frammentazione del mercato e del technical debt che Google accumula release dopo release.

Quindi... quale SDK scegliere?

Se già non fosse chiaro... non esiste la risposta corretta. Noi sviluppatori tendiamo ad innamorarci di una soluzione piuttosto che di un'altra, cercando di battezzare una strada piuttosto che un'altra.

La risposta davvero corretta è imparare a domare entrambe le piattaforme, per poter approcciare sia i dispositivi iOS che quelli Android, indipendentemente dalla propria preferenza. Noi in Librasoft facciamo così.

Se anche tu hai bisogno di sviluppare un'esperienza di realtà aumentata o hai bisogno di una consulenza sull'argomento augmented reality, contattaci. Ti indicheremo quale soluzione fa al caso tuo.