Come posso creare uno shader che riproduca questo effetto di illuminazione sul terreno?


8

Osserva la luce che cade dal colonnato su pietre per lastricati riflettenti

Nota come il riflesso è più forte laddove l'angolo tra sole, terra e viewern è più acuto

Notare il modo in cui la principale fonte di luce in ciascuna immagine si riflette da terra, in funzione della distanza tra la sorgente di luce e lo spettatore (?).

È una mappa speculare (urtata)? L'effetto è evidente dappertutto in World of Warcraft; Lo ricordo specificamente sulla neve a Dun Morogh e sulle rive del lago Darrowmere. È necessario guardare direttamente verso il sole. L'effetto è anche comunemente sulla superficie dell'acqua in RL e in CG. In particolare, voglio creare l'effetto in cui il riflesso è più intenso sulla superficie del terreno più vicino alla sorgente luminosa e cade man mano che si avvicina allo spettatore.


2
phong su una superficie mappata in
rilievo

Risposte:


14

Immagino che se avessi costruito un tale shader ci sono alcuni fenomeni con cui inizierò.

Innanzitutto la luce solare è direzionale, nel senso che non ha posizione né attenuazione.

In secondo luogo, il componente diffuso viene semplicemente calcolato prendendo un prodotto punto tra la direzione del sole e le normali della superficie, l'aggiunta di una mappatura normale potrebbe aggiungere al dettaglio.

La parte difficile è modellare la componente speculare direzionale del sole. Quindi per ottenere un effetto simile lo spezzerei in piccoli problemi:

  • Il primo è il microfacet della superficie che può essere simulato usando qualsiasi variazione di bump o mappatura normale, questo può essere applicato sia al componente diffuso che a quello speculare.
  • La seconda parte è la distribuzione irregolare dell'illuminazione speculare. Questo può essere fatto usando una specie di mappe speculari.
  • Ora la parte più complicata è la mappa speculare direzionale che può essere ottenuta usando il modello di illuminazione anisotropica del rione , che fornisce due parametri per controllare l'anisotropia della riflessione speculare, vale Ax, Aya dire nella seguente equazione di Wards.

Equazione di Ward

Dove:

  • Il termine speculare è zero se punto ( N , L ) <0 o punto ( N , R ) <0.
  • Il vettore R è il riflesso dello specchio del vettore di luce sulla superficie.
  • L è la direzione dal punto della superficie alla luce.
  • H è la direzione del mezzo angolo.
  • N è la superficie normale.
  • X e Y sono due vettori ortogonali nel piano normale che specificano le direzioni anisotrope, i vettori tangenti e bitangenti possono essere utilizzati come X,Yvettori, in particolare che lo spazio tangente è così comune nella computer grafica che potrebbe essere calcolato in qualsiasi motore (solitamente calcolato basato su trame consistenza).

inserisci qui la descrizione dell'immagine

Si noti nell'immagine come l'illuminazione speculare sia direzionale a differenza della comune luce speculare Phong. Ecco un articolo sul modello di Ward e su come ottenere effetti diversi. MODIFICA Ulteriori informazioni sull'idoneità di BRDF in termini di riduzione dell'intensità della luce più vicino allo spettatore, sono disponibili qui .

Ward Anisotropic Specular

Infine, altri due (facoltativi) due punti che immagino possano aggiungere all'immagine finale,

  • Innanzitutto sono sicuro che l'uso dell'occlusione ambientale aiuterà a ottenere risultati più credibili.
  • Il secondo è che l'implementazione di una sorta di riflesso di Fresnel potrebbe aggiungere un bell'effetto all'immagine, specialmente nelle scene di acqua e ghiaccio.

1
+1 Buona risposta concept3d, e mi dispiace un po 'hai fatto tutto il possibile per scriverlo - @JoshPetrie ha modificato il titolo della mia domanda da "COSA (è questo shader)" a "COME (devo costruirlo) ". Quindi i tuoi sforzi potrebbero essere in qualche modo vani, tuttavia sembra aver fatto cose buone per il tuo rappresentante, ed è una buona risorsa.
Ingegnere

@NickWiggill nessun problema, rimarrà qui come una buona risorsa :)
concept3d

@JoshPetrie sebbene la modifica abbia in qualche modo invalidato la mia risposta, la domanda nella sua forma attuale è un po 'più ragionevole.
concept3d

1
Accetterò invece il tuo. Il motivo è che hai citato BRDF e questo è esattamente il tipo di concetto che avevo in mente, e dopo averlo letto, posso vedere che questo è esattamente ciò di cui ho bisogno. Ho modificato la tua risposta con maggiori dettagli su BRDF.
Ingegnere

1
@NickWiggill Grazie per aver aggiunto ulteriori dettagli. Maggiori informazioni non sono mai male :)
concept3d

3

Il riflesso stesso è solo il riflesso speculare che ottieni come output delle funzioni del tuo specifico modello di illuminazione.

Esistono molti diversi modelli di illuminazione con diversi livelli di complessità che produrranno una forma di riflessione simile a questa, ma un aspetto simile a questo può già essere ottenuto con un semplice modello di illuminazione blinn-phong a ossa nude , che è (ora) probabilmente il più modello di illuminazione di base utilizzato dai motori grafici e molto probabilmente utilizzato anche da World of Warcraft.

Non sarà fisicamente corretto e completamente uguale alle tue immagini, ma sembrerà molto simile . L'esempio di Concept3D del modello Ward è più fisicamente corretto e funziona per tipi di superficie più complessi (vale a dire materiali in cui i dossi microscopici nelle loro superfici non sono distribuiti uniformemente, ma hanno distribuzioni di probabilità diverse), ma non conosco esempi concreti dei renderer in tempo reale che lo utilizzano, a causa di scarsi guadagni in termini di qualità / prestazioni.

In pratica, tali tipi di riflessi sulle superfici sono integrati da ulteriori specularità / lucentezza e trame normali, che modificano la lucentezza / rugosità di una superficie e la direzione delle normali della superficie, rispettivamente, che sono entrambi input per le equazioni di illuminazione di modelli di illuminazione tipici. Questo perché nel mondo reale, le proprietà fisiche della superficie il più delle volte (tranne forse qualcosa come la plastica o uno specchio) non rimangono le stesse su tutta la superficie, ma possono variare selvaggiamente da pixel a pixel.


Bene, grazie Travis. Prevedi che ci siano problemi con il mio utilizzo di blinn + phong insieme a una sorta di trama di una maschera per rendere i pixel solo dove necessario sul terreno, creando così la granulosità alla base della riflessione speculare?
Ingegnere

Se quei pixel non si accendono affatto dopo essere stati scartati a causa della trama della maschera, probabilmente sembrerà sbagliato / strano. Il solito modo è davvero una combinazione di una mappa di rilievo e una mappa speculare per la superficie che modifica alcuni degli input dell'equazione di illuminazione.
TravisG,

0

Mappatura di bump speculare (mappatura normale) o mappatura di parallasse.


7
Completare questo con prove o riferimenti renderebbe una risposta molto migliore.
MichaelHouse
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.