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.