Wie würden Sie den Effekt der chromatischen Aberration mit Shadern implementieren ?
Würde das Rendern der Welt mit unterschiedlichen Fokusentfernungen für jede Farbe das Problem lösen (möglicherweise mit der Verwendung von nur einem Tiefenrendering-Durchgang)?
Antworten:
Eine chromatische Aberration wird verursacht, wenn ein Objektiv nicht jede Farbe auf den gleichen Brennpunkt fokussieren kann. Eine einfache Möglichkeit, diesen Effekt zu fälschen und ihn als schnellen Postprozess im Vollbildmodus wiederzugeben, besteht darin, jedem Farbkanal in einem Fragment-Shader einen Versatz zuzuweisen.
Durch die Verwendung eines anderen Offsets für jeden Kanal können Sie ein angemessenes Faksimile des gewünschten Effekts erzielen. Ein Beispiel für diese Technik finden Sie hier ; Der Fragment-Shader würde ungefähr so aussehen:
Dieser einfache Hack berücksichtigt jedoch nicht wirklich die Tatsache, dass chromatische Aberration ein Linseneffekt ist: Um eine bessere Simulation zu erhalten, möchten Sie tatsächlich etwas rendern, das als Linse fungiert. Dies ähnelt dem Rendern von reflektierenden oder refraktiven Objekten. Folglich kann ein typischer Reflexions- / Brechungs-Shader die Basis für die Implementierung der chromatischen Aberration sein.
Normalerweise würde man einen einzigen Brechungs Vektor auf einem Sichtvektor und einige definierte Basis berechnen Brechungsindex unter Verwendung von GLSL der refract Funktion in einem Vertex - Shader:
Dann würden Sie diesen Vektor in einem Fragment-Shader verwenden, um eine Würfel-Textur-Suche (in eine Umgebungskarte) durchzuführen. In der Regel wird dies neben einem Reflexionseffekt durchgeführt und unter Verwendung eines berechneten Fresnel-Terms kombiniert .
Um die chromatische Aberration zu simulieren, können Sie im Vertex-Shader drei verschiedene Berechnungen des Brechungsvektors durchführen, die jeweils geringfügig über unterschiedliche Brechungsindizes versetzt sind:
Diese drei verschiedenen Vektoren können verwendet werden, um drei verschiedene Würfelkarten-Lookups durchzuführen, die ähnlich wie in dem einfachen Beispiel gemischt werden können:
Für weitere Details ist das OpenGL Orange Book erhältlich. Es enthält ein Beispiel für die grundlegenden Reflexions- und Brechungseffekte sowie ein Beispiel für den Effekt der chromatischen Aberration.
quelle