Table of Contents

Fotocamera Unity nelle scene AR

L'esperienza AR in Unity dipende dalla fotocamera. Questo articolo spiega il ruolo della fotocamera nelle scene AR e come le session controllano le proprietà della fotocamera per garantire la corretta esperienza AR.

Prima di iniziare

Il ruolo della fotocamera nelle scene AR

In Unity, la fotocamera viene usata per mostrare al player il mondo di gioco, ma nelle scene AR il suo ruolo è ancora più importante. Non solo renderizza i 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 una semplice scena AR. A sinistra c'è la vista Scene e a destra la vista Game. Il video è stato registrato nella modalità Play dell'Editor di Unity usando simulation data. Il contenuto nella vista Game è lo stesso che l'utente vede sul telefono nel mondo reale.

In questo video, la fotocamera che rappresenta l'utente (icona della fotocamera) si muove in base al movimento dell'utente nel mondo reale. Il cono bianco mostra la posizione e l'orientamento della fotocamera nel periodo precedente. Nella vista Game, la fotocamera non solo mostra il contenuto virtuale della vista Scene, ma sovrappone anche l'immagine del mondo reale nella parte inferiore del contenuto virtuale. Questo è il comportamento tipico di una fotocamera in una scena AR.

Per garantire che gli oggetti virtuali siano sovrapposti correttamente alla scena reale, alcune proprietà della fotocamera devono essere regolate in base allo stato runtime di AR. Queste proprietà includono:

  • il transform della fotocamera (posizione e orientamento)
  • il field of view (FOV), l'aspect ratio e la projection matrix della fotocamera
  • le impostazioni di culling della fotocamera (<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>)
Avvertenza

Durante lo sviluppo di un'applicazione, modificare queste proprietà della fotocamera sulla session camera non è supportato, perché può causare un allineamento errato dei contenuti virtuali con il mondo reale e compromettere l'esperienza utente. Anche se queste proprietà vengono modificate in qualche modo, il sistema AR sovrascriverà tali modifiche durante il runtime, oppure potrebbero verificarsi comportamenti imprevisti a causa dell'incoerenza tra i dati renderizzati e quelli calcolati.

A seconda dell'oggetto che controlla queste proprietà, la fotocamera usata dalla session può essere suddivisa in due tipi: fotocamere controllate dalla session e fotocamere non controllate dalla session.

Fotocamere controllate dalla session

Se la session camera non appartiene ad alcun sistema esterno, come un headset o AR Foundation, la session controlla automaticamente le proprietà della fotocamera sopra indicate per garantire che sia correttamente allineata con il mondo reale.

transform

Il transform della fotocamera (posizione e orientamento) viene regolato dalla session in base allo stato runtime della funzionalità AR. In generale, la session aggiorna posizione e orientamento della fotocamera in base ai dati di motion tracking e/o ai dati di tracking target per garantire che il contenuto visto dall'utente corrisponda al mondo reale.

In Unity, il punto di riferimento centrale per tutto l'AR tracking si chiama session origin, e la regola che determina questo origin durante il runtime della session si chiama center mode. Il transform della fotocamera si comporta in modo diverso nei vari center mode:

  • Nel center mode <xref:u:easyar.ARSession.ARCenterMode.Camera>, la fotocamera può muoversi liberamente.

    In generale, il mode <xref:u:easyar.ARSession.ARCenterMode.Camera> è usato raramente dalle applicazioni.

  • Negli altri center mode, come <xref:u:easyar.ARSession.ARCenterMode.FirstTarget>, la fotocamera non può muoversi liberamente.

    <xref:u:easyar.ARSession.ARCenterMode.FirstTarget> è il modo usato dalla maggior parte delle applicazioni AR.

Avvertenza

Il valore scale del transform della fotocamera deve sempre rimanere (1, 1, 1). Modificare la scale della fotocamera può causare comportamenti imprevisti.

Matrice di proiezione

La projection matrix della fotocamera viene aggiornata a ogni frame dalla session in base alle intrinsics della fotocamera fisica per garantire che i contenuti virtuali siano sovrapposti correttamente alla scena reale.

Impostazioni di culling

Le impostazioni di culling della fotocamera (<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>) vengono regolate in base alle impostazioni di mirror della session per garantire che i contenuti virtuali siano renderizzati correttamente nella scena reale.

Quando l'impostazione corrispondente alla fotocamera corrente in <xref:u:easyar.ARSession.HorizontalFlip> è <xref:u:easyar.ARSession.ARHorizontalFlipMode.World>, <xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType> viene impostato su true. Questa è la configurazione predefinita per la fotocamera anteriore.

Video stream di sfondo AR

Nelle scene AR, la fotocamera di solito renderizza il video stream della fotocamera fisica come sfondo per aumentare l'immersione. La session gestisce automaticamente acquisizione e rendering del video stream, e garantisce che sia correttamente allineato con il contenuto virtuale.

Fotocamere non controllate dalla session

Quando si usa un headset o AR Foundation, oppure quando l'implementazione specifica <xref:u:easyar.FrameSource.IsCameraUnderControl> come false per <xref:u:easyar.FrameSource>, la session non controlla le proprietà della fotocamera sopra indicate. Sono invece controllate dal sistema esterno.

Avvertenza

Anche se in questo caso la session non controlla le proprietà della fotocamera, esse sono comunque controllate da un sistema di terze parti come un SDK per headset o AR Foundation, quindi modificarle durante lo sviluppo resta non supportato.

Considerazioni quando si copia la fotocamera

A volte può essere necessario copiare i parametri della session camera su un'altra fotocamera. In quel caso, prestare particolare attenzione ai due punti seguenti:

  • Tempo di acquisizione delle proprietà: quando si usa una fotocamera controllata, fare riferimento a Ottenere l'output della session per ottenere questi parametri nel momento corretto; quando si usa una fotocamera non controllata dalla session, fare riferimento alla documentazione del sistema di terze parti per ottenerli nel momento corretto.
  • Field of view (FOV), aspect ratio e projection matrix della fotocamera: usare <xref:UnityEngine.Camera.projectionMatrix?displayProperty=nameWithType> per ottenere la projection matrix della fotocamera e copiarla nell'altra fotocamera. <xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType> e <xref:UnityEngine.Camera.aspect?displayProperty=nameWithType> sono matematicamente parte della projection matrix, quindi usare solo <xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType> e <xref:UnityEngine.Camera.aspect?displayProperty=nameWithType> non è sufficiente.

Passaggi successivi

Argomenti correlati