L'API Lighting Estimation analizza una determinata immagine per segnali visivi discreti e fornisce informazioni dettagliate sull'illuminazione in una determinata scena. Puoi quindi utilizzare queste informazioni durante il rendering di oggetti virtuali per illuminarli nelle stesse condizioni della scena in cui sono riposti, rendendo questi oggetti più realistici e migliorando l'esperienza coinvolgente per gli utenti.
Semplici segnali e concetti
Gli esseri umani percepiscono inconsapevolmente sottili segnali di come gli oggetti o gli esseri viventi sono illuminati nel loro ambiente. Quando un oggetto virtuale è privo di ombra o ha un materiale lucido che non riflette lo spazio circostante, gli utenti possono capire che l'oggetto non si adatta a una particolare scena anche se non sono in grado di spiegare il motivo. Ecco perché il rendering di oggetti AR da abbinare all'illuminazione di una scena è fondamentale per esperienze immersive e realistiche.
La stima dell'illuminazione fa per la maggior parte del lavoro fornendo dati dettagliati che ti consentono di imitare vari segnali di illuminazione durante il rendering di oggetti virtuali. Questi segnali sono ombre, luce ambientale, ombreggiatura, evidenziazioni specifiche e riflessi.
Possiamo descrivere questi segnali visivi come segue:
Luce ambientale. La luce ambientale è la luce complessiva diffusa che proviene dall'ambiente circostante e illumina tutto.
Ombre. Le ombre sono spesso direzionali e indicano agli spettatori la provenienza delle fonti di luce.
Ombreggiatura. L'ombreggiatura è l'intensità della luce in diverse aree di un'immagine specifica. Ad esempio, diverse parti dello stesso oggetto possono avere diversi livelli di ombreggiatura nella stessa scena, a seconda dell'angolazione rispetto allo spettatore e della sua vicinanza a una fonte di luce.
In evidenza: Si tratta delle parti lucide di superfici che riflettono direttamente una fonte di luce. La messa in evidenza di un oggetto cambia in base alla posizione di uno spettatore in una scena.
Riflessione. La luce riscuote le superfici in modo diverso a seconda del fatto che la superficie abbia proprietà speculative (ovvero altamente riflettenti) o diffuse (non riflettenti). Ad esempio, una palla metallica sarà molto speculare e rifletterà il suo ambiente, mentre un'altra palla dipinta di grigio opaco opaco sarà diffusa. La maggior parte degli oggetti del mondo reale è una combinazione di queste proprietà: pensa a una palla da bowling confusa o a una carta di credito ben utilizzata.
Le superfici riflettenti inoltre rilevano i colori dall'ambiente circostante. La colorazione di un oggetto può essere influenzata direttamente dalla colorazione del suo ambiente. Ad esempio, una palla bianca in una stanza blu assumerà una tonalità bluastra.
Usare le modalità di stima della luce per migliorare il realismo
L'API Config.LightEstimationMode
dispone di modalità che consentono di stimare l'illuminazione dell'ambiente con diversi gradi di granularità e realismo.
Modalità HDR ambientale (
ENVIRONMENTAL_HDR
). Questa modalità è composta da un'API che consente una stima realistica dell'illuminazione per illuminazione direzionale, ombreggiature, punti salienti e riflessi.Modalità Intensità ambiente (
AMBIENT_INTENSITY
). Questa modalità determina l'intensità media dei pixel e il colore dell'illuminazione per una determinata immagine. Si tratta di un'impostazione approssimativa progettata per i casi d'uso in cui l'illuminazione esatta non è fondamentale, ad esempio gli oggetti illuminati.DISABLED
. DisattivaConfig.LightEstimationMode
se l'illuminazione in base a un determinato ambiente non è pertinente per una scena o un oggetto.
Utilizzo della modalità ENVIRONMENTAL_HDR
La modalità ENVIRONMENTAL_HDR
utilizza il machine learning per analizzare l'immagine della videocamera di input e sintetizzare l'illuminazione ambientale per il rendering di un oggetto virtuale.
Questa modalità combina illuminazione direzionale, armoniche sferiche e una mappa cubica HDR per dare l'impressione che gli oggetti virtuali rientrino fisicamente in una determinata scena:
L'illuminazione direzionale analizza la fonte di luce apparente per una determinata immagine. Questo tipo di illuminazione aggiunge punti ottici ragionevolmente posizionati e proietta le ombre in una direzione coerente con altri oggetti reali visibili.
Le armoniche sferiche ambientali rappresentano in modo realistico la luce ambientale complessiva proveniente da tutte le direzioni in una scena. Durante il rendering, queste informazioni vengono utilizzate per aggiungere segnali sottili che fanno emergere la definizione di oggetti virtuali.
Una cubemap HDR acquisisce l'illuminazione ambientale che circonda l'oggetto virtuale. Durante il rendering, questa mappa cubica crea il riflesso per il materiale da lucido a medio.
L'immagine seguente mostra un esempio di oggetto virtuale posizionato in una scena in cui è abilitato ENVIRONMENTAL_HDR
.
Configurare la modalità ENVIRONMENTAL_HDR
per una scena Scena
Per utilizzare ENVIRONMENTAL_HDR
con una scena Sceneform, estendi la classe ARFragment
e sostituisci la configurazione come segue:
@Override
protected Config getSessionConfiguration(Session session) {
Config config = new Config(session);
config.setLightEstimationMode(Config.LightEstimationMode.ENVIRONMENTAL_HDR);
return config;
}
Per un esempio di come funziona, consulta l'esempio di sistema solare. (questo esempio implementa
ENVIRONMENTAL_HDR
senza utilizzare ARFragment
).
Utilizzo della modalità AMBIENT_INTENSITY
La modalità AMBIENT_INTENSITY
determina l'intensità media dei pixel e i scalari di correzione del colore per una determinata immagine. Si tratta di un'impostazione approssimativa progettata per i casi d'uso in cui l'illuminazione precisa non è fondamentale, ad esempio oggetti con illuminazione integrata.
Intensità pixel acquisisce l'intensità media di pixel dell'illuminazione in una scena, per applicarla a un intero oggetto virtuale.
Gli scalar di correzione del colore rilevano il bilanciamento del bianco per ogni singolo frame e ti consentono di correggere il colore di un oggetto virtuale in modo che si integri in modo più fluido nella colorazione complessiva di una scena.
Configurare la modalità AMBIENT_INTENSITY
per una scena Scena
Per utilizzare AMBIENT_INTENSITY
con una scena Sceneform, estendi la classe ARfragment
e sostituisci la configurazione come segue:
@Override
protected Config getSessionConfiguration(Session session) {
Config config = new Config(session);
config.setLightEstimationMode(Config.LightEstimationMode.AMBIENT_INTENSITY);
return config;
}