Warum wird im Specular Shading H (Blinn) anstelle von R (Phong) verwendet?

22

Ich kann nirgendwo einen guten Grund dafür finden. Der im Phong verwendete Reflexionsvektor hat eine einfache physikalische Basis. Aber der in Blinn verwendete Halbvektor scheint keine rationale Basis zu haben und stellt keine richtige Reflexion dar. Und doch wird es in jeder sogenannten "physikalisch basierten" Verschattungsfunktion verwendet. Wenn es eine gute physische Basis dafür gibt, würde ich gerne wissen.

Was ich finden konnte, sind einige Gründe:

Es ist schneller - es gibt gemischte Informationen darüber, aber es wäre trotzdem ein guter Grund gewesen ... im Jahr 1998.

Winkel von mehr als 90 Grad werden besser verarbeitet - soweit ich das beurteilen kann, liegt dies nur daran, dass der Phong-Begriff nicht richtig verwendet wurde. Das Skalarprodukt der Reflexion und der Ansicht ergibt einen Winkel zwischen -1 und +1. Normalerweise wird dieser Winkel auf 0 zu 1 geklemmt, dies ist die direkte Ursache für das 90-Grad-Problem. Normalisieren Sie den Winkel neu, anstatt ihn zu klemmen, und Sie erhalten die volle 180-Grad-Abdeckung. Ich weigere mich zu glauben, dass eine einfache x * 0.5 + 0.5-Operation der Grafikwelt seit 40 Jahren entgangen ist.

es handhabt Kanten besser - Das Kanten- "Problem" existiert auch in der Blinn-Lösung, nur in geringerem Maße. Die Hauptursache ist eine unsachgemäße Simulation der Flächenbeleuchtung am Terminator, die für jeden "physisch basierten" Shader unerlässlich sein sollte. Aber auch in einfacheren Situationen kann eine Sigmoid-Funktion eine weiche Abschlusslinie korrekt approximieren. Die Multiplikation mit einem Lambert-Term ist falsch, da der Specular-Term dadurch nicht ordnungsgemäß abgeschwächt wird. Dies könnte einen Fresnel-Term aufheben und zu weiteren Fehlern führen.

Es hat lange Reflexionen am Rand - Es scheint mir, dass anisotrope Reflexionen zwar realistisch sein können, Blinn jedoch nicht die richtige Methode ist, um sie zu implementieren, da sie nur am Rand auftreten. Es ist nur ein glücklicher Zufall, dass ein Fehler im H-Term realistisch aussieht.

Keiner dieser Gründe ist zufriedenstellend, ich möchte diesen Wahnsinn ausräumen.

Ich möchte klarstellen, dass ich nicht spezifisch von Blinn und Phong spreche , sondern von den Vektorkomponenten H und R, die als Grundlage für diese und andere Shader dienen.

BmB
quelle

Antworten:

24

Für perfekt reflektierende Oberflächen ist das Phong-Modell sinnvoll. Woher kommt jedoch das n in (RV) ^ n des Phong-Modells zur Approximation rauerer Oberflächen? Wo ist die Theorie, dass Sie das Ergebnis des Skalarprodukts zur Potenz bringen müssen, außer dass es nur empirisch das richtige Ergebnis zu liefern scheint?

Für das Blinn-Modell gibt es eine physikalisch basierte Mikrofacett-Theorie , die alle Komponenten in der Gleichung unterstützt, und es gibt auch empirische Beweise dafür, dass das Modell die realen Oberflächen genauer approximiert (wenn auch nicht perfekt). Der Halbvektor im Blinn-Modell wird als Eingabe für die Normalverteilungsfunktion (NDF) verwendet. Dies ist eine Annäherung, wie Mikrofacetten über die Oberflächennormale als Funktion der Oberflächenrauheit verteilt sind. Dh wenn der H-Vektor in die normale Richtung zeigt, ist der Wert am höchsten, da die meisten Mikrofacetten in diese Richtung zeigen, und die Wahrscheinlichkeit wird entsprechend verringert, wenn der Winkel zwischen dem Normalen und dem H-Vektor erhöht wird.

Das Blinn-Modell ist jedoch keineswegs perfekt und berücksichtigt beispielsweise nicht den Geometrieterm des Mikrofacettenmodells (dh das Abschatten und Maskieren von Mikrofacetten, deren Bedeutung in den Streifwinkeln zunimmt).

JarkkoL
quelle
Ich spreche nicht von der spezifischen Implementierung von Phong, die in der Tat keine physikalische Grundlage hat. Aber ich kann nicht sehen, wie die Mikrofacett-Theorie H besser als R als Grundlage für einen Reflexionsvektor unterstützt. Empirisch wird kein Schattierungsmodell unterstützt, bei der Reproduktion von realen Materialien scheitert jeder nach "Experimental Validation of BRDF" Addy 2005. Es scheint mir, dass die Mikrofacetten über das Skalarprodukt R · V, das als Skalarprodukt dienen kann, in Phong modelliert werden Grundlage für eine physikalisch korrektere Hervorhebung entweder durch eine Remapping-Funktion oder eine Rampe. Eine Power-Funktion ist einfach die einfachste und falscheste Neuzuordnung.
BmB
2
@BmB Nein, Mikrofacetten werden nicht "in Phong modelliert", sondern verwenden die Wahrscheinlichkeitsverteilung der mit dem NDF definierten Mikrofacetten, die mit dem H-Vektor "abgetastet" werden. NDF ist im Allgemeinen symmetrisch zum Normalen (isotrop / anisotrop), daher ist es sinnvoll, H-Vektor dafür zu verwenden. Ich sagte , es gibt empirische Belege dafür , dass Blinn-Modell mehr eng reale Welt Materialien als Phong annähert.
JarkkoL
Eine Reflexion, die nicht entlang des Reflexionsvektors liegt, ist keine perfekte Spiegelreflexion. Das Skalarprodukt erzeugt einen Reflexionsgradwert für Winkel, die nicht perfekt sind. Notwendigerweise müssen diese durch Mikrofacetten erzeugt werden. Das Skalarprodukt modelliert daher Mikrofacetten. Ein einfacher Punkt erzeugt eine lineare Verteilung. Aber die Verteilung kann durch jede Funktion mit R genauso gut modelliert werden wie mit H. Dies erklärt nichts über die Gültigkeit von H über R.
BmB
1
Ich schlage vor, Sie lesen etwas über die Mikrofacett-Theorie und speziell über den NDF-Teil, um das Konzept zu verstehen. Das wird Ihnen helfen, die Antwort auf Ihre Frage zu bekommen.
JarkkoL
1
Sie sollten eine neue Frage zu Mikrofacetten und NDF stellen, da Sie offensichtlich viel über diese Konzepte nicht verstehen und Kommentare nicht der richtige Ort sind, um sie zu erklären.
JarkkoL
6

Eigentlich haben Sie selbst die Gründe aufgeführt, warum Blinn die Standardeinstellung für Phong ist.

Jeder Grund, den Sie dort aufgeführt haben, ist in der Tat ein Bereich, in dem Blinn Phong überlegen ist.

Alles in allem führt dies dazu, dass Blinn besser in Verzug ist als Phong.

Ist Blinn perfekt? Ist es besser als Phong?

Nein.

Aber es ist ein vernünftiger Standard. Fühlen Sie sich frei, Phong für Blinn in jedem Renderer / Shader zu ersetzen, den Sie schreiben.

John
quelle
Stimmen Sie zu, genau das ist es. Kein Modell ist perfekt. Die Näherung von Blinn war damals vor allem eine Leistungsoptimierung, da die Berechnung des halben Winkels viel billiger ist. Es stellte sich heraus, dass es die meiste Zeit auch besser aussieht.
Damon
-2

Ich habe den Grund für die Verwendung des H-Vektors entdeckt. Leider ist es nicht die Art und Weise, wie es in den meisten Beschattungsmodellen verwendet wird, was dann als falsch angesehen werden kann.

Bei physikalisch basierten Abschattungen muss reflektiertes Licht den Fresnel-Gleichungen entsprechen. (Die meisten "physikalisch basierten" Shader tun dies nicht.) Mikrofacetten müssen auch die Fresnel-Gleichungen einhalten, die sich auf den Einfallswinkel des Lichts sowie den Brechungsindex der Grenzfläche stützen, um ein korrektes Ergebnis zu erzielen.

Nach dem Reflexionsgesetz muss der Einfallswinkel mit dem Reflexionswinkel entlang der Flächennormalen gespiegelt werden. Damit ein Lichtstrahl die Kamera getroffen hat - von der wir wissen, dass sie getroffen wurde -, muss er vom Licht reflektiert worden sein - von dem wir die Richtung kennen. Die Flächennormale muss also abzüglich der Spiegelachse für diese beiden Richtungen sein. Dies gibt uns den Halbvektor H, der zwischen ihnen liegt. Berechnet durch Normalisierung der Summe von beiden.

Durch Berechnung des Winkels zwischen der Lichtrichtung L und dem Halbvektor H erhalten wir nun den Einfallswinkel für die Spiegelreflexion einer Mikrofacette und können ihn mit dem Fresnel-Term korrekt abschwächen.

Es ist zu beachten, dass die Blickrichtung für diese Mikrofacette gleich R ist, H ist kein Reflexionsterm. Blinn, Cook, Torrance und Sparrow können es lutschen. Phong und Fresnel hatten recht.

BmB
quelle
Der Fresnel-Term ist Teil der Mikrofacetten-BRDF-Gleichung, und die einzelnen Mikrofacetten berücksichtigen dies nicht, da sie als perfekte Reflektoren modelliert sind. Außerdem berechnen Sie keinen Winkel zwischen L- und H-Vektoren, sondern zwischen N- und H-Vektoren. Dies sollte Ihnen einen Hinweis geben, warum H verwendet wird. Sie brauchen ein bisschen mehr Wissen über das Thema, um zu schließen, wer Recht hatte oder "mehr Recht";)
JarkkoL
Eine Mikrofacette eines Materials hat die gleichen Eigenschaften wie das Material. Daher kann eine Mikrofacette eines nicht perfekten Reflektors selbst kein perfekter Reflektor sein. Ihre Logik ist nicht stichhaltig und nicht hilfreich. N Punkt H hat keine physikalische Bedeutung.
BmB
4
Nein, so funktioniert das Microfacet-Modell nicht. Meine Logik ist perfekt, wie jeder, der auch die Grundlagen des Mikrofacettenmodells versteht, bestätigen kann. Jede Mikrofacette ist ein perfekter Reflektor (dh optisch flach), und die unvollständige Reflexion eines Materials ergibt sich aus der Varianz der von NDF definierten Mikrofacettenormalen. Ihre Beharrlichkeit, perfekt gültigen Ratschlägen zu trotzen, ist irgendwie amüsant;)
JarkkoL
Sie haben keinen Rat gegeben, alles, was Sie getan haben, besteht darin, zu behaupten, dass Sie Recht haben, nichts zu tun, um es zu stützen, und Beleidigungen zu werfen. H ist die Normalität einer Mikrofacette, nicht die Reflexion. Die Reflexion kann mit der Normalen berechnet werden. Die Grundphysik ist mit Ihnen nicht einverstanden.
BmB