Wie kann ich einen Shader erstellen, der diesen Lichteffekt im Gelände reproduziert?

8

Sehen Sie, wie Licht aus der Kollonade auf reflektierende Pflastersteine ​​fällt

Beachten Sie, wie stark die Reflexion dort ist, wo der Winkel zwischen Sonne, Boden und Blickfeld am spitzesten ist

Beachten Sie die Art und Weise, in der die Hauptlichtquelle in jedem Bild vom Boden reflektiert wird, als Funktion des Abstands zwischen der Lichtquelle und dem Betrachter (?).

Ist das eine (bestoßene) Spiegelkarte? Der Effekt ist überall in World of Warcraft zu sehen. Ich erinnere mich besonders an den Schnee in Dun Morogh und an den Ufern des Darrowmere-Sees. Ein direkter Blick in die Sonne ist erforderlich. Der Effekt ist auch häufig auf der Wasseroberfläche in RL und in CG. Insbesondere möchte ich den Effekt erzielen, bei dem die Reflexion auf der Bodenoberfläche näher an der Lichtquelle intensiver ist und abfällt, wenn sie sich dem Betrachter nähert.

Ingenieur
quelle
2
Phong auf einer Beule kartierte Oberfläche
Ratschenfreak

Antworten:

14

Ich stelle mir vor, wenn ich einen solchen Shader bauen würde, gäbe es bestimmte Phänomene, mit denen ich beginnen werde.

Erstens ist das Sonnenlicht gerichtet, was bedeutet, dass es weder Position noch Dämpfung hat.

Zweitens wird die diffuse Komponente einfach berechnet, indem ein Punktprodukt zwischen der Sonnenrichtung und den Oberflächennormalen genommen wird. Durch Hinzufügen einer normalen Abbildung kann das Detail erweitert werden.

Der schwierige Teil ist die Modellierung der sonnengerichteten Spiegelkomponente. Um einen ähnlichen Effekt zu erzielen, würde ich ihn in kleinere Probleme aufteilen:

  • Das erste sind die Mikrofacetten der Oberfläche, die unter Verwendung einer beliebigen Variation der Erhebung oder der normalen Abbildung simuliert werden können. Dies kann sowohl auf die diffuse als auch auf die spiegelnde Komponente angewendet werden.
  • Der zweite Teil ist die ungleichmäßige Verteilung der Spiegelbeleuchtung. Dies kann mit Hilfe von Spiegelkarten erfolgen.
  • Der schwierigste Teil ist nun die Richtungsspiegelkarte, die mit dem anisotropen Beleuchtungsmodell von Ward erreicht werden kann. Mit diesem Modell können Sie die Anisotropie der Spiegelreflexion auf zwei Parameter steuern, und zwar Ax, Ayin der folgenden Wards-Gleichung.

Wards Gleichung

Wo:

  • Der Spiegelterm ist Null, wenn Punkt ( N , L ) <0 oder Punkt ( N , R ) <0 ist.
  • Der Vektor R ist die Spiegelreflexion des Lichtvektors von der Oberfläche.
  • L ist die Richtung vom Oberflächenpunkt zum Licht.
  • H ist die Halbwinkelrichtung.
  • N ist die Oberflächennormale.
  • X und Y sind zwei orthogonale Vektoren in der Normalenbene, die die anisotropen Richtungen angeben. Die Tangenten- und Bitangenvektoren können als X,YVektoren verwendet werden, insbesondere, dass der Tangentenraum in Computergrafiken so häufig ist, dass er in jeder Engine berechnet werden kann (normalerweise berechnet) basierend auf Texturkoordinaten).

Geben Sie hier die Bildbeschreibung ein

Beachten Sie im Bild, wie die spiegelnde Beleuchtung im Gegensatz zum üblichen Phong-spiegelnden Licht gerichtet ist. Hier ist ein Artikel über das Ward-Modell und wie man verschiedene Effekte erzielt. BEARBEITEN Weitere Informationen zur Eignung von BRDF zur Reduzierung der Lichtintensität näher am Betrachter finden Sie hier .

Ward Anisotropic Specular

Zum Schluss noch zwei (optionale) zwei Punkte, die ich dem endgültigen Bild hinzufügen könnte:

  • Zunächst bin ich sicher, dass die Verwendung von Umgebungsokklusion zu glaubwürdigeren Ergebnissen beiträgt.
  • Das zweite ist, dass das Implementieren einer Art Fresnel-Reflexion dem Bild einen schönen Effekt verleihen kann, insbesondere in Wasser- und Eisszenen.
concept3d
quelle
1
+1 Gute Antwort concept3d, und es tut mir ein bisschen leid, dass Sie sich die Mühe gemacht haben, es zu schreiben - @JoshPetrie hat den Titel meiner Frage von "WAS (ist dieser Shader)" in "WIE (konstruiere ich ihn) geändert?" ". Ihre Bemühungen mögen also etwas vergeblich sein, dennoch scheint es gute Dinge für Ihren Repräsentanten getan zu haben, und es ist eine gute Ressource.
Ingenieur
@ NickWiggill kein Problem, es wird hier als gute Ressource bleiben :)
concept3d
@JoshPetrie Obwohl die Bearbeitung meine Antwort irgendwie ungültig gemacht hat, ist die Frage in ihrer aktuellen Form etwas vernünftiger.
Konzept3d
1
Ich werde stattdessen deine akzeptieren. Der Grund ist, dass Sie BRDF erwähnen und genau diese Art von Konzept hatte ich im Sinn, und nachdem ich es durchgelesen habe, kann ich sehen, dass dies genau das ist, was ich brauche. Ich habe Ihre Antwort mit mehr Details zu BRDF bearbeitet.
Ingenieur
1
@ NickWiggill Vielen Dank für das Hinzufügen weiterer Details. Mehr Infos sind nie schlecht :)
concept3d
3

Die Reflexion selbst ist nur die Spiegelreflexion, die Sie als Ausgabe der Funktionen Ihres spezifischen Beleuchtungsmodells erhalten.

Es gibt viele verschiedene Beleuchtungsmodelle mit unterschiedlicher Komplexität, die eine ähnliche Reflexionsform erzeugen. Ein ähnliches Aussehen kann jedoch bereits mit einem einfachen Blinn-Phong-Beleuchtungsmodell mit bloßen Knochen erzielt werden , das (jetzt) ​​wahrscheinlich das meiste ist Grundlegendes Beleuchtungsmodell, das von Grafik-Engines und höchstwahrscheinlich auch von World of Warcraft verwendet wird.

Es wird physisch nicht korrekt sein und Ihren Bildern vollständig entsprechen, aber es wird sehr ähnlich aussehen . Das Beispiel von Concept3D für das Ward-Modell ist physikalisch korrekter und funktioniert für komplexere Oberflächentypen (nämlich Materialien, bei denen die mikroskopischen Unebenheiten in ihren Oberflächen nicht gleichmäßig verteilt sind, sondern unterschiedliche Wahrscheinlichkeitsverteilungen aufweisen), aber ich kenne keine konkreten Beispiele von Echtzeit-Renderern, die es verwenden, aufgrund schlechter Gewinne in Bezug auf Qualität / Leistung.

In der Praxis werden solche Arten von Reflexionen auf Oberflächen durch zusätzliche Spiegel- / Glanz- und Normaltexturen ergänzt, die den Glanz / die Rauheit einer Oberfläche bzw. die Richtung der Normalen der Oberfläche modifizieren, die beide Eingaben in die Beleuchtungsgleichungen sind typischer Beleuchtungsmodelle. Dies geschieht, weil in der realen Welt die physikalischen Eigenschaften der Oberfläche am häufigsten (außer vielleicht etwas wie Kunststoff oder einem Spiegel) nicht überall auf der Oberfläche gleich bleiben, sondern von Pixel zu Pixel stark variieren können.

TravisG
quelle
Richtig, danke Travis. Sehen Sie irgendwelche Probleme mit der Verwendung von blinn + phong zusammen mit einer Art Maskentextur, um Pixel nur dort zu rendern, wo dies im Gelände erforderlich ist, und so die Körnigkeit zu erzeugen, die der Spiegelreflexion zugrunde liegt?
Ingenieur
Wenn diese Pixel nach dem Verwerfen aufgrund der Maskentextur überhaupt nicht leuchten, sieht sie wahrscheinlich falsch / seltsam aus. Der übliche Weg ist in der Tat eine Kombination aus einer Reliefkarte und einer Spiegelkarte für die Oberfläche, die einige der Eingaben der Beleuchtungsgleichung ändert.
TravisG
0

Specular Bump Mapping (normales Mapping) oder Parallax Mapping.

Celestis
quelle
7
Wenn Sie dies mit Beweisen oder Referenzen ausstatten, wäre dies eine viel bessere Antwort.
MichaelHouse