Confuso con le implementazioni PBR


13

Sto scoprendo il meraviglioso mondo della matematica e sto colpendo un enorme muro con PBR e denominazione, quindi ho alcune domande: per quanto ho capito BRDF descrivono come un materiale reagisce alla luce (luce diretta in ingresso e riflessi). Ma in "Cook-Torrance" non vedo nulla sui riflessi, non capisco come lo integro, quindi ottengo solo luce e riflessi diffusi.

Ho letto molto su diversi "termini diffusi" come "Oren-Nayar" fa parte di Cook-Torrance come una "D" diversa nel nominatore DFG? lo sostituisce senza calcoli speculari?

Ho letto molto su "GGX" dal mio background di artista del frullatore, ho pensato che fosse qualcosa che fa una riflessione sfocata, ma sembra che mi sbagliassi e ora trovo questo termine GGX in molte situazioni diverse come nella normale micro-faccetta distribuzione in questo tutorial

Quindi in breve la domanda è: come "Oren-Nayar" e "GGX" e "Cook-Torrance" sono correlati tra loro (se lo sono) e come posso integrare "vec3 reflection" in quegli algoritmi?

Come ho detto prima, sono un principiante in matematica, quindi se la tua risposta è "matematica pesante", per favore scrivi una versione glsl / hlsl delle tue equazioni, è molto più facile da capire per me, quindi un'equivalenza mi aiuterà molto

PS: Capisco che la mia domanda è sfocata ma è anche sfocata quanto la mia comprensione dell'argomento.


1
Qualcosa che potrebbe aiutarti è che "speculare" significa "specchio". Quindi, quando si parla di riflessioni speculari e diffuse, speculare significa specchio come i riflessi, ciò che le persone normalmente chiamano riflesso. Diffuso è solo "cose ​​che si illuminano". Stanno riflettendo anche la luce, ma stanno riflettendo da molte direzioni diverse, quindi il risultato non è qualcosa in cui è possibile riconoscere un'immagine. C'è una scala tra il riflesso speculare e diffuso negli oggetti reali, e questo fa parte di ciò che il parametro "rugosità" dei controlli PBR.
Alan Wolfe,

Puoi provare a leggere il documento originale Cook-Torrance: inst.cs.berkeley.edu/~cs294-13/fa09/lectures/cookpaper.pdf - assicurati di controllare anche i riferimenti elencati alla fine, quando possibile (la maggior parte sono disponibile online). Ci vorrà del tempo, ma è un modo sicuro per capire "in profondità" cosa sta succedendo.
pulire il

Risposte:


12

DFG compare nella famiglia di BRDF basati su microfacet. È semplicemente il prodotto di tre termini:

  • D: La distribuzione di microfacet.
  • F: il coefficiente di Fresnel.
  • G: L'attenuazione geometrica tra i microfacet.

Quando qualcuno dice Cook-Torrance, di solito intendono un microfacet BRDF in cui la distribuzione (D) è Beckmann, che penso sia il tema originale di Cook-Torrance.

GGX è in realtà solo una distribuzione diversa (termine D). GTR è un altro. I nomi sono spesso usati come scorciatoia per indicare un BRDF che usa quella distribuzione.

Ora, tutti questi presuppongono una riflessione speculare (o rifrazione) sui microfacet, da cui il termine di Fresnel. Se prendi un'idea simile ma usi microfacet diffusi (lambertiani), ottieni il Oren-Nayar BRDF. Penso che uno sia basato su una distribuzione gaussiana dei microfacet ma non ho familiarità con i dettagli.


ok, è un po 'più chiaro ma non spiega ancora cosa devo fare con il mio "vec3 reflectionColour" che ottengo rilanciando un raggio in raytracing / marching o usando SSR / cubemap. È come se le equazioni prendessero in considerazione solo un punto luce / riflettore ma nessuna idea di luci o riflessi. Sembra anche che lo "speculare" sia correlato solo al "punto bianco" anziché alla riflessione a causa di ciò che non ha senso = /
newin

@newin In un modello PBR, specular e reflection sono nomi diversi per la stessa cosa. È un punto culminante speculare quando il raggio colpisce una luce, un riflesso quando colpisce un altro oggetto (o un ambiente). Per quanto riguarda il tuo reflectionColour, dipende da come viene generato il raggio. Stai campionando l'illuminazione diretta? Luci di area? Integrare un BRDF e una mappa ambientale? Prova a leggere Progressive Path Tracing con Explicit Light Sampling , c'è una lunga risposta che potrebbe chiarire alcune cose sul processo.
Olivier,

Quindi, se capisco correttamente che "vec3 reflectionColour" dovrebbe essere trattato come una luce e se voglio creare mesh che emettono luce, dovrei semplicemente inserire un valore> 1 nell'albedo e basta? (Sto cercando di integrare PBR in uno scenario diverso, il primo è un raymarcher in cui voglio mesh che emettono luce, l'altro è un motore di gioco che utilizza SSR e probabilmente utilizzerà cubemaps)
novità

La luce emessa da @newin è appena aggiunta a tutto il resto. Non è correlato ai BRDF. Se la tua mesh non fa altro che emettere luce, non hai nemmeno bisogno di tracciare altri raggi da essa. Un grande albedo amplifica la luce (fisicamente sbagliata), non la crea.
Olivier,
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.