Come viene implementata l'occlusione ambientale dello spazio dello schermo?


11

Non capisco la spiegazione da Wikipedia.

Per ogni pixel sullo schermo, il pixel shader campiona i valori di profondità attorno al pixel corrente e prova a calcolare la quantità di occlusione da ciascuno dei punti campionati.

In che modo i valori di profondità dei pixel circostanti possono dirti qualcosa sull'occlusione? L'occlusione , a quanto ho capito, accade quando un oggetto A si trova di fronte a un altro oggetto B, quindi non puoi vedere l'oggetto B. Ma perché dovresti ora guardare i pixel di profondità dei pixel circostanti ? Voglio dire, puoi vedere quei pixel, quindi non c'è occlusione. Forse ho capito che l'occlusione era sbagliata.

E quello che non ho capito è il termine kernel in alcuni altri tutorial. Cos'è un kernel e perché dovresti usarlo per ssao?

Qualcuno potrebbe fare una spiegazione dettagliata dell'algoritmo, per quanto riguarda le mie domande?


pensaci in questo modo: una piega profonda avrà delle ombre.
Alan Wolfe,

1
La cosa chiave da capire qui è che stiamo provando a calcolare l'occlusione della luce ambientale, non l'occlusione dalla vista.
trichoplax,

Risposte:


5

La motivazione dietro l'occlusione ambientale (AO) in generale è quella di approssimare il modo in cui le fessure e gli angoli sono spesso ombreggiati, perché meno luce indiretta rimbalza su di essi. Un esempio tratto da una foto del mio ufficio: osserva l'oscuramento lungo i bordi in cui pareti e soffitto si incontrano. La stanza è illuminata solo dalla luce che entra dalla finestra e rimbalza.

foto che dimostra l'effetto di tipo AO nell'angolo di una stanza

Per simulare con precisione questo fenomeno, i renderer offline utilizzano tecniche come la tracciatura dei percorsi e la mappatura dei fotoni. Per scopi in tempo reale, o lo precalcoliamo offline o lo approssimiamo in qualche modo.

L'occlusione ambientale dello spazio dello schermo (SSAO) si basa sull'osservazione che è possibile rilevare angoli e fessure osservando il buffer di profondità (e possibilmente anche i vettori normali) di un'immagine renderizzata, e quindi è possibile calcolare AO approssimativo come post- passaggio. Il buffer di profondità è una rappresentazione approssimativa della geometria nella scena, quindi campionando i valori del buffer di profondità nelle vicinanze di un pixel di destinazione, puoi avere un'idea della forma della geometria circostante e fare un'ipotesi di quanto oscurato da AO esso dovrebbe essere.

diagramma di come il buffer di profondità rappresenta la geometria, da Bavoil e Sainz (2008)

Questo diagramma, tratto da Bavoil e Sainz (2008) , mostra come i valori del buffer di profondità, interpretati come una sorta di campo di altezza, rappresentino una versione discretizzata di alcune geometrie. Nel calcolare SSAO per il pixel centrale, guarderesti i valori di profondità dei pixel circostanti e li inseriresti in una formula, progettata per produrre un valore più scuro quando la geometria è più concava (come quella nel diagramma) e più chiara valore quando la geometria è piatta o convessa.

La formula in cui vanno i valori di profondità è chiamata "kernel" per analogia con i kernel di filtro utilizzati per le sfocature, il rilevamento dei bordi e simili. Tuttavia, SSAO è più complicato di una semplice convoluzione lineare dei valori di profondità. Il diavolo è nei dettagli. La distribuzione dei campioni, e la formula che li elabora per generare il valore di occlusione, è stata oggetto di molte ricerche nell'ultimo decennio, cercando di migliorare il realismo e ridurre gli artefatti mantenendo allo stesso tempo buone prestazioni.


5

Come menzionano Alan e il trichoplax nei commenti, l'effetto simulato dall'occlusione ambientale non è l'occlusione di una superficie dalla telecamera ma l'occlusione della superficie dall'ambiente circostante.

Pensala in questo modo: supponi di avere un'illuminazione uniforme proveniente da ogni direzione, in modo che la luce in entrata totale in qualsiasi punto si sommi fino a un valore di 1. Se posizioni un piano piatto in quell'ambiente e ne guardi un lato, quella parte riceverà il 50% di quell'illuminazione, o 0,5, perché l'altra metà è bloccata dall'aereo stesso. In altre parole, qualsiasi punto sulla superficie del piano può solo "vedere" la luce proveniente da metà dell'ambiente, quindi è metà illuminata. Se pieghi quel piano verso il tuo punto di vista (una piega a "valle"), allora riduci ulteriormente l'illuminazione in arrivo su quel lato del piano, ad un valore inferiore a 0,5, perché, di nuovo, ogni punto sul piano "vede" un po ' meno della luce proveniente dall'ambiente circostante.

L'occlusione ambientale dello spazio dello schermo funziona più o meno cercando queste "pieghe", ovvero aree in cui la profondità cambia bruscamente, come definito confrontando le profondità dei pixel vicini, e scurendole per simulare la diminuzione dell'illuminazione dall'ambiente dei punti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.