2013-03-06 14 views
11

Ho lavorato con this ES extension per un po ', ma non riesco ancora a capire cosa siano questi campionatori di ombre e per cosa si possano usare. Googling non mi ha dato alcun risultato piacevole e leggibile, quindi sto postando qui.Cosa sono i campionatori di ombre in OpenGL e quali sono gli usi possibili per loro?

Sto cercando qualcosa che possa aiutarmi a capire davvero cosa potrebbero fare. Questo può essere un caso di uso reale o qualcosa che mostrerebbe solo come questi sono diversi dai normali campionatori. Voglio dire, okey, memorizzano i dati di profondità. Ma come vengono generati i dati? È fatto solo da una trama legata ad un attacco di profondità?

Inoltre, la mia domanda si applica sia a DT (desktop) GL che a ES, e probabilmente anche a WebGL; Non mi interessa davvero le chiamate o le enumerazioni esatte, poiché sono facilmente reperibili nelle specifiche.

+0

Determinare se un frammento è in ombra comporta la lettura di un valore da una trama di profondità e il confronto con la distanza del frammento nello spazio chiaro. Se il primo è più grande, è in ombra, altrimenti è acceso. Puoi farlo manualmente o con uno speciale campionatore che esegue il recupero e confronta i passaggi in uno. Non è raro che un campionatore di ombre offra una percentuale più vicina di filtraggio "gratuitamente". Cioè, leggi 4 texels invece di 1, confronta tutti e 4, e restituisci un singolo numero che descrive quanti di questi test hanno fallito. Ciò consente bordi dell'ombra leggermente più uniformi. – Damon

+1

@Damon perché non è una risposta? :) –

+0

Principalmente perché non è abbastanza elaborato e perché non ho molta esperienza con GL ES (che riguarda principalmente la questione). Dovrei prima scavare le specifiche di quella particolare estensione per dare una risposta pienamente qualificata (e per essere sicuro che questa estensione ES non si comporta in modo molto diverso da come mi aspetto, come nel desktop GL).Anche se il mio commento potrebbe darti (chi ha già letto a fondo quella specifica) abbastanza di un suggerimento per capire di cosa si tratta. – Damon

risposta

10

Un "shadow sampler" è un campionatore che viene utilizzato per depth comparison textures. Normalmente, se si accede a una trama di profondità, si ottiene il valore di profondità (filtrato) a quella coordinata della trama. Con la modalità di confronto profondità, tuttavia, quello che stai facendo è un'operazione diversa.

Per ogni campione prelevato dalla trama, si confronta la profondità con un dato valore. Se il confronto passa, il campione recuperato è effettivamente 1.0. Se il confronto fallisce, è 0.0. Il filtro funziona quindi sugli esempi dopo il confronto. Quindi se sto facendo un filtro lineare e metà dei campioni superano il confronto e metà no, il valore che ottengo è 0.5.

Per fare questo, è necessario attivare sia il confronto approfondito sull'oggetto oggetto campionatore/texture che si sta utilizzando, ma anche necessario utilizzare un campionatore ombra nello shader. La ragione di ciò è che ora la funzione di accesso alla trama deve assumere un valore aggiuntivo: il valore per confrontare l'accesso alla trama con.

Principalmente utilizzato per shadow maps, da cui il nome. Le mappe ombra memorizzano la profondità dalla luce alla superficie più vicina. Pertanto, lo si confronta con la profondità dalla luce alla superficie che viene renderizzata. Se la superficie da renderizzare è più vicina alla luce rispetto a quella che si trova nella mappa delle ombre, allora ottieni 1.0 dal campionatore di ombre. Se la superficie è più lontana dalla luce, ottieni 0.0. In entrambi i casi, moltiplichi il valore per il colore della luce, quindi esegui tutti i calcoli di illuminazione per quella luce normalmente.

Il motivo per il confronto prima del campionamento è qualcosa chiamato "Filtro Closer percentuale". Il filtraggio tra i valori di profondità non produce risultati ragionevoli; non è quello che vuoi Si desidera eseguire prima il confronto, quindi filtrare i risultati booleani confrontati. Quello che ottieni è una misura di quanti campioni dalla trama di profondità hanno superato il confronto. Questo dà risultati migliori lungo i bordi delle ombre.

+0

Accidenti, è complicato. Grazie mille per la tua risposta però, dopo aver letto 3 ° sto iniziando a prenderlo :) –

Problemi correlati