Perché viene usato H (blinn) invece di R (phong) nell'ombreggiatura speculare?


22

Non riesco a trovare una buona ragione per questo da nessuna parte. Il vettore di riflessione usato nel phong ha una base semplice in fisica. Ma il mezzo vettore usato in Blinn apparentemente non ha basi razionali e non costituisce una riflessione adeguata. Eppure viene utilizzato in ogni cosiddetta funzione di ombreggiatura "basata fisicamente". Se c'è una buona base fisica per questo, mi piacerebbe saperlo.

Quello che sono stato in grado di trovare sono alcuni motivi:

È più veloce - ci sono informazioni contrastanti su questo, ma anche così sarebbe stato un ottimo motivo ... nel 1998.

Gestisce meglio angoli superiori a 90 gradi - per quanto ne so, l'unica ragione è che il termine phong è stato usato in modo improprio. Il prodotto punto del riflesso e della vista fornisce un angolo compreso tra -1 e +1. Di solito questo angolo è bloccato da 0 a 1, questa è la causa diretta del problema a 90 gradi. Ri-normalizza l'angolo invece di bloccarlo e otterrai una copertura completa di 180 gradi. Mi rifiuto di credere che una semplice operazione x * 0,5 + 0,5 abbia eluso il mondo della grafica per 40 anni.

gestisce meglio i bordi - Il "problema" dei bordi esiste anche nella soluzione Blinn, solo in misura minore. La causa principale è una simulazione impropria dell'illuminazione dell'area sul terminatore, che dovrebbe essere essenziale per qualsiasi shader "basato fisicamente". Ma anche in situazioni più semplici una funzione sigmoide può approssimare correttamente una linea di terminazione morbida. La moltiplicazione in un termine lambert non è corretta in quanto attenua il termine speculare in modo errato, questo potrebbe annullare un termine di Fresnel e portare a ulteriori errori.

Ha lunghi riflessi sul bordo - Mi sembra che mentre i riflessi anisotropi possono essere realistici, il blinn non è il modo corretto di implementarli, poiché appaiono solo sul bordo. È semplicemente una felice coincidenza che un errore nel termine H appaia realistico.

Nessuna di queste ragioni è soddisfacente, voglio risolvere questa follia.

Ci tengo a precisare che non sto parlando di blinn e phong specifico , ma invece sui componenti del vettore H e R, che vengono utilizzati come base per questi shader così come gli altri.

Risposte:


24

Per superfici perfettamente riflettenti il ​​modello Phong ha senso. Tuttavia, da dove proviene la n in (RV) ^ n del modello Phong per approssimare le superfici più ruvide? Dov'è la teoria che devi elevare il risultato del prodotto punto alla potenza se non che sembra dare empiricamente il risultato giusto?

Per il modello di Blinn esiste una teoria del microfacet fisicamente basata per supportare tutti i componenti dell'equazione e ci sono anche prove empiriche che il modello approssima le superfici del mondo reale più da vicino (anche se non perfettamente). Il mezzo vettore nel modello di Blinn viene utilizzato come input per la funzione di distribuzione normale (NDF), che è un'approssimazione del modo in cui i microfacet sono distribuiti sulla normale superficie come funzione della rugosità superficiale. Vale a dire quando il vettore H punta nella direzione normale, il valore è più alto poiché la maggior parte dei microfacet punta in quella direzione e la probabilità viene diminuita di conseguenza quando viene aumentato l'angolo tra il vettore normale e H.

Il modello Blinn non è assolutamente perfetto e, ad esempio, non tiene conto del termine della geometria del modello di microfacet (ad esempio ombreggiatura e mascheratura di microfacet la cui importanza aumenta negli angoli di pascolo).


Non sto parlando dell'implementazione specifica di phong che in effetti non ha basi fisiche. Ma non riesco a vedere come la teoria del microfacet supporti H meglio di R come base per un vettore di riflessione. Nessun modello di shading è supportato empiricamente, ognuno non riesce a riprodurre materiali reali secondo l'additivo "Convalida sperimentale di BRDF" 2005. Mi sembra che i microfacet siano modellati in phong tramite il prodotto punto R · V, che può fungere da base per un'evidenziazione più corretta fisicamente attraverso una funzione di rimappatura o una rampa. Una funzione di alimentazione è semplicemente la rimappatura più semplice e più errata.
BmB,

2
@BmB No, i microfabet non sono "modellati in phong" ma usano la distribuzione di probabilità dei microfacet definiti con NDF, che viene "campionato" con il vettore H. L'NDF è generalmente simmetrico rispetto al normale (isotropico / anisotropico), quindi ha senso usare il vettore H per esso. Ho detto che ci sono prove empiriche che il modello di Blinn si avvicina maggiormente ai materiali del mondo reale rispetto a Phong.
JarkkoL,

Qualsiasi riflesso che non si trova lungo il vettore riflesso non è un riflesso specchio perfetto. Il prodotto punto produce un valore di riflettanza per gli angoli che non sono perfetti. Necessariamente, questi devono essere prodotti da microfacet. Il prodotto dot quindi modella i microfacet. Un punto semplice produce una distribuzione lineare. Ma la distribuzione può essere modellata da qualsiasi funzione con R, così come H. Questo non spiega nulla sulla validità di H su R.
BmB

1
@BmB Ti suggerisco di leggere la teoria del microfacet e in particolare la parte NDF per capire il concetto. Questo ti aiuterà a ottenere la risposta alla tua domanda.
JarkkoL,

1
Dovresti aprire una nuova domanda su microfacet e NDF perché c'è ovviamente molto che non capisci su questi concetti e i commenti non sono il posto giusto per spiegarli.
JarkkoL,

6

In realtà, penso che tu stesso abbia elencato i motivi per cui Blinn è l'impostazione predefinita su Phong.

Ogni motivo che hai elencato lì è, in effetti, un'area in cui Blinn si dimostra superiore a Phong.

Nel loro insieme, tutti questi portano a Blinn un valore predefinito migliore di Phong.

Blinn è perfetto? È meglio di Phong?

No.

Ma è un default ragionevole. Sentiti libero di sostituire Phong con Blinn in qualsiasi renderer / shader che scrivi.


D'accordo, questo è esattamente. Nessuno dei due modelli è perfetto. All'epoca l'approssimazione di Blinn era soprattutto un'ottimizzazione delle prestazioni, poiché calcolare il mezzo angolo è molto più economico. Alla fine sembra anche meglio.
Damon,

-2

Ho scoperto il motivo per cui utilizzare il vettore H. Sfortunatamente non è il modo in cui viene utilizzato nella maggior parte dei modelli di ombreggiatura, che possono quindi essere considerati errati.

Per l'ombreggiatura basata fisicamente, la luce riflessa deve obbedire alle equazioni di Fresnel. (La maggior parte degli shader "basati fisicamente" non lo fanno) I microfibet devono anche obbedire alle equazioni di Fresnel, che si basano sull'angolo di incidenza della luce e sull'indice di rifrazione dell'interfaccia per produrre un risultato corretto.

Secondo la legge della riflessione, l'angolo di incidenza deve essere speculare con l'angolo di riflessione lungo la normale alla superficie. Affinché un raggio di luce abbia colpito la telecamera - cosa che sappiamo che ha fatto - deve essere stato riflesso dalla luce - di cui conosciamo la direzione. Pertanto, la normale alla superficie deve essere per deduzione l'asse dello specchio per queste due direzioni. Questo ci dà il mezzo vettore H che è tra di loro. Calcolato normalizzando la somma di entrambi.

Ora calcolando l'angolo tra la direzione della luce L e il mezzo vettore H acquisiamo l'angolo di incidenza per il riflesso speculare di un microfacet e possiamo attenuarlo correttamente usando il termine fresnel.

Si noti che la direzione della vista è uguale a R per quel microfacet, H non è un termine di riflessione. Blinn, Cook, Torrance e Sparrow possono succhiarlo. Phong e Fresnel avevano ragione.


Il termine di Fresnel fa parte dell'equazione BRDF di microfacet e il singolo microfacet non ne tiene conto poiché sono modellati come riflettori perfetti. Inoltre non si calcola l'angolo tra i vettori L e H. ma i vettori N e H. Questo dovrebbe darti un suggerimento sul perché viene usato H. Hai bisogno di un po 'più di conoscenza sull'argomento per concludere chi aveva ragione o "più ragione";)
JarkkoL,

Un microfacet di un materiale ha le stesse proprietà del materiale. Pertanto un microfibet di un riflettore imperfetto non può di per sé essere un riflettore perfetto. La tua logica è poco chiara e inutile. N punto H non ha alcun significato fisico.
BmB,

4
No, non è così che funziona il modello microfacet. La mia logica è perfettamente valida, come può confermare chiunque capisca anche le basi del modello di microfacet. Ogni microfacet è un riflettore perfetto (cioè otticamente piatto) e il riflesso imperfetto di un materiale deriva dalla varianza delle normali del microfacet come definito da NDF. La tua perseveranza nel sfidare consigli perfettamente validi è
piuttosto

Non hai dato alcun consiglio, tutto ciò che hai fatto è persistere nell'affermare che hai ragione con niente per sostenerlo e lanciare insulti. H è il normale di un microfacet, non il riflesso. Il riflesso può essere calcolato con il normale. La fisica di base non è d'accordo con te.
BmB,
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.