Table of Contents

La telecamera Unity in scenari AR

L'effetto AR in Unity non può essere realizzato senza la telecamera. Di seguito imparerai il ruolo della telecamera negli scenari AR e come la sessione controlla le proprietà della telecamera per garantire un'esperienza AR corretta.

Prima di iniziare

Il ruolo della telecamera negli scenari AR

La telecamera in Unity viene utilizzata per mostrare il mondo di gioco al giocatore, ma negli scenari AR il suo ruolo è ancora più importante. Non solo è responsabile del rendering dei contenuti virtuali, ma deve anche allinearsi con il mondo reale per garantire che gli oggetti virtuali siano sovrapposti correttamente alla scena reale.

Questo video mostra uno scenario AR semplice. A sinistra c'è la vista Scene, a destra la vista Game. Il video è stato registrato nella modalità Play dell'editor Unity utilizzando dati di esecuzione simulati. Il contenuto della vista Game corrisponde a ciò che l'utente vedrebbe nel mondo reale sul proprio telefono.

Come puoi vedere, la telecamera che rappresenta l'utente (icona della telecamera) si sposta in base al movimento dell'utente nel mondo reale. Il cono bianco cattura la traiettoria della posizione e dell'orientamento della telecamera in un periodo di tempo precedente. Nella vista Game, la telecamera mostra non solo i contenuti virtuali della vista Scene, ma sovrappone anche l'immagine del mondo reale sotto i contenuti virtuali. Questo è il modo tipico in cui funziona la telecamera negli scenari AR.

Per garantire che gli oggetti virtuali siano sovrapposti correttamente alla scena reale, alcune proprietà della telecamera devono essere adattate in base allo stato dell'esecuzione AR. Queste proprietà includono:

  • Il transform della telecamera (posizione e orientamento)
  • Il campo visivo (FOV), le proporzioni (aspect ratio) e la matrice di proiezione della telecamera
  • Le impostazioni di culling (GL.invertCulling)
Avvertenza

Durante lo sviluppo dell'applicazione, la modifica di queste proprietà della telecamera di sessione non è supportata, poiché potrebbe causare un allineamento scorretto tra i contenuti virtuali e il mondo reale, compromettendo l'esperienza utente. Anche se queste proprietà vengono modificate con alcuni mezzi, il sistema AR sovrascriverà tali modifiche durante l'esecuzione o comportamenti imprevisti a causa di incoerenze tra i dati di rendering e i dati di calcolo.

In base all'oggetto che controlla queste proprietà, le telecamere utilizzate dalla sessione possono essere classificate in due tipi: telecamere controllate dalla sessione e telecamere non controllate dalla sessione.

Telecamere controllate dalla sessione

Se la telecamera della sessione non appartiene a nessun sistema esterno, come un visore o AR Foundation, la sessione controllerà automaticamente le proprietà sopra menzionate per garantire che la telecamera sia allineata correttamente con il mondo reale.

Transform

Il transform della telecamera (posizione e orientamento) viene regolato dalla sessione in base allo stato di funzionamento delle funzionalità AR. In generale, la sessione aggiorna la posizione e l'orientamento della telecamera in base ai dati di tracciamento del movimento e/o ai dati di tracciamento del target, garantendo così che ciò che l'utente vede corrisponda al mondo reale.

In Unity, il punto di riferimento centrale per tutto il tracciamento AR è chiamato centro della sessione, e la regola che determina questo centro durante l'esecuzione della sessione è chiamata modalità centrale. In diverse modalità centrali, il comportamento del transform della telecamera varia:

  • In modalità centro Camera, la telecamera può essere spostata liberamente.

    La modalità Camera è raramente utilizzata dalle applicazioni.

  • In altre modalità centrali (ad esempio FirstTarget), la telecamera non può essere spostata liberamente.

    FirstTarget è la modalità utilizzata dalla maggior parte delle applicazioni AR.

Avvertenza

Il valore di scala del transform della telecamera dovrebbe sempre rimanere (1, 1, 1). La modifica della scala della telecamera potrebbe causare comportamenti imprevisti.

Matrice di proiezione

La matrice di proiezione della telecamera viene aggiornata ad ogni frame dalla sessione in base ai parametri intrinseci della fotocamera fisica, per garantire che i contenuti virtuali siano sovrapposti correttamente alla scena reale.

Impostazioni di culling

Le impostazioni di culling della telecamera (GL.invertCulling) vengono regolate in base alle impostazioni di mirroring della sessione, per garantire che i contenuti virtuali vengano renderizzati correttamente nella scena reale.

Quando l'impostazione della fotocamera utilizzata in HorizontalFlip corrisponde a World, GL.invertCulling viene impostato su true. Questa è la configurazione predefinita per le fotocamere frontali.

Flusso video di sfondo AR

Negli scenari AR, la telecamera solitamente renderizza il flusso video della fotocamera fisica come sfondo per migliorare l'immersione dell'utente. La sessione gestisce automaticamente l'acquisizione e il rendering del flusso video, garantendone l'allineamento corretto con i contenuti virtuali.

Telecamere non controllate dalla sessione

Quando si utilizzano visori e AR Foundation, e quando si specifica IsCameraUnderControl come false nell'implementazione di FrameSource, la sessione non controlla le proprietà sopra menzionate della telecamera, ma sono gestite da un sistema esterno.

Avvertenza

Sebbene in questi casi la sessione non controlli le proprietà della telecamera, esse vengono comunque controllate da sistemi di terze parti (come SDK per visori o AR Foundation), e durante lo sviluppo dell'applicazione la modifica di queste proprietà rimane non supportata.

Considerazioni durante la copia della telecamera

A volte potrebbe essere necessario copiare i parametri della telecamera della sessione su un'altra telecamera, in questo caso è necessario prestare particolare attenzione ai seguenti due punti:

  • Tempo di acquisizione delle proprietà: quando si utilizza una telecamera controllata, è necessario fare riferimento a Ottenere i risultati dell'esecuzione della sessione per acquisire questi parametri al momento giusto; quando si utilizza una telecamera non controllata dalla sessione, è necessario fare riferimento alla documentazione del sistema di terze parti per acquisirli al momento corretto.
  • Campo visivo (FOV), proporzioni (aspect ratio) e matrice di proiezione della telecamera: è necessario utilizzare Camera.projectionMatrix per acquisire la matrice di proiezione della telecamera e copiarla su un'altra telecamera. Camera.fieldOfView e Camera.aspect fanno matematicamente parte della matrice di proiezione, e il loro utilizzo non è sufficiente.

Passi successivi

Argomenti correlati