Energieeinsparung für Blinn-Phong BRDF

7

Ich versuche, aus dem Blinn-Phong BRDF zu probieren.

Zum Testen verwende ich eine sphärische Lichtquelle (Lambertsche Emission), die auf einer Spiegelebene sitzt. Hier ist ein Referenzbild mit energiesparendem Phong mit Exponent 30000:

Phong

Beachten Sie, dass keine Energie verloren geht. Ich möchte jetzt dasselbe für Blinn-Phong erreichen .

Hier ist mein Versuch (gleicher Exponent, aber auf Blinn-Phong BRDF):

Blinn-Phong

Wie Sie sehen, geht ein erheblicher Teil der Energie verloren. Der von mir verwendete Normalisierungsbegriff stammt von hier und istn+12π. Das Problem ist, dass dies ein Normalisierungsbegriff ist , kein Erhaltungsbegriff .

Ich glaube, das ist das erwartete Ergebnis. In Grafiken ist es üblich, dass BRDFs weniger als die eingegebene Energiemenge reflektieren, im Gegensatz zu genau der richtigen Menge, da dies normalerweise weniger schwierig ist. 1, 2

Meine Frage:

  1. Gibt es eine Version, die genau alle Energie spart?
  2. Wenn nicht, kann jemand zumindest bestätigen, dass dies erwartet wird?

NB Ich bin ziemlich sicher, dass dies kein Problem mit der Strahlgenerierung / PDF ist. Diese Bilder wurden unter Verwendung einer im PBRT-Buch S. 695 - pg. 699. Außerdem sieht eine nicht wichtige gesampelte Version sehr ähnlich aus (obwohl ich einen niedrigeren Exponenten verwenden musste, damit sie schnell genug konvergiert, und es dauerte immer noch 10.000 s / p).

1 Dies kann aus einem Shadowing / Masking-Argument für Mikrofacetten abgeleitet werden. Leider werden Mehrfachstreuungen ignoriert. Die richtige Antwort liegt irgendwo dazwischen.

2 In der Tat musste ich den Phong-Erhaltungsbegriff selbst ableiten.

imallett
quelle

Antworten:

9

Zunächst einmal ist dies wahrscheinlich nicht die beste Methode, um die Energieeinsparung zu testen, da nicht alle einfallenden Neigungen im Bild sichtbar sind. Der größte Teil der Umgebung ist ebenfalls schwarz, so dass ein weniger "spitzes" BRDF wie Lambert sehr dunkel herauskommt und nicht sagen kann, ob es energiesparend ist oder nicht.

Was häufiger verwendet wird, ist ein sogenannter "Ofentest", bei dem Sie eine einzelne Kugel in eine weiße Umgebungskarte einfügen. Wenn Sie diese Kugel mit dem gewünschten BRDF rendern, sollte sie sich perfekt in die Umgebung einfügen, wenn das BRDF energiesparend ist (stellen Sie sicher, dass keine Farbkanäle abgeschnitten werden). Da es sich um eine Kugel handelt, können Sie die BRDF bei allen einfallenden Neigungen sehen. Außerdem ist die Kugel konvex, so dass ohne andere Objekte in der Szene kein reflektierter Strahl eingeschlossen wird und jedes Pixel der Kugel im Bild ein Integral über dem BRDF mit einer anderen Neigung ist.

Wenn Sie diesen Test durchführen, werden Sie auch feststellen, dass Ihr Phong BRDF höchstwahrscheinlich nicht energiesparend ist. Der häufig verwendete Normalisierungsterm vonn+12π (oder n+22π, je nachdem, wen Sie fragen) gilt nur bei normaler Inzidenz. Bei anderen Neigungen und insbesondere bei Streifwinkeln landet bis zur Hälfte der reflektierten Strahlen unter der Oberfläche und wird normalerweise beendet (da die Übertragung durch eine reflektierende Oberfläche keinen Sinn ergibt).
Der korrekte Normalisierungsterm, der den Teil des Phong-Lappens ausmacht, der unterhalb der Hemisphäre abgeschnitten ist, ist sehr schwer zu berechnen. Jim Arvo leitete eine geschlossene Lösung für ganzzahlige Exponenten unter Verwendung von zweiachsigen Momenten ab, die im Global Illumination Compendium , Absätze 31a) und 31b) (Seite 17/18) zusammengefasst sind. Diese Formeln sind jedoch für die Verwendung in einem Renderer nicht sehr praktisch, und ich empfehle nicht, sie zu implementieren.

Es sollte klar sein, dass Blinn-Phong noch schwieriger ist, wenn ein einfaches Modell wie Phong bereits so schwer zu normalisieren ist. Zuallererst dien+12πDer von Ihnen erwähnte Normalisierungsbegriff ist nur dann korrekt, wenn Sie Blinn-Phong als Mikrofacettenverteilung in einem vollständigen Mikrofacetten-BRDF (z. B. Torrance-Sparrow oder Walter) verwenden. Wenn Sie das Blinn-Phong BRDF direkt verwenden, ist ein korrekterer Normalisierungsterm(n+2)(n+4)(8π2- -n/.2+n), abgeleitet in diesem kurzen Artikel von Fabian Giesen (zweite Seite) und auch auf der von Ihnen erwähnten Seite aufgeführt. Dieser Normalisierungsterm ist jedoch wiederum nur bei normaler Inzidenz korrekt und bei anderen Neigungen nicht genau. Soweit ich das beurteilen kann, existiert kein genauer Normalisierungsterm.

Benedikt Bitterli
quelle
Das ist in der Tat ein viel besserer Test. Tatsächlich basiert die von mir implementierte Phong-Normalisierung tatsächlich auf dem Global Illumination Compendium 31a. Es handelt sich um eine 1D-Tabelle, die Sie für jede BRDF auf eine beliebige Auflösung vorberechnen. Der andere Normalisierungsterm führt zu viel schwächeren Ergebnissen, wie dies in diesem Fall der flüchtigen Reflexion zu erwarten ist. Ich versuche es auch selbst zu lösen - ein ähnlicher 1D-Tabellenansatz sollte möglich sein.
Imallett