somethinglikegames.de

Mein Blog über Spieleentwicklung und das Drumherum


Kategorien


Tags

Opacity

Alle, die schon mal einmal ebenenbasiert mit Bildern, bspw. in Photoshop, Affinity Photo oder Gimp, gearbeitet haben oder in Substance 3D Designer zwei Knoten zusammenführen wollten, werden über Blending-Modes gestolpert sein. Aber was genau verbirgt sich dahinter, wie funktionieren sie und welcher Mode bietet sich für welche Anwendungsfälle an? Genau das versuche ich, mit diesem Artikel zu beantworten.

Für ein besseres Verständnis nutze ich Graustufenbilder (Wertebereich: 0 - 1), da man so pro Pixel nur einen Wert hat. Natürlich lässt sich das auch auf RGB-, CMYK- oder sonstige Farbformate übertragen, nur dass man da dann mehrere Werte pro Pixel hat.

Leider sind die Namen der Modi nicht bei jedem Hersteller identisch. Ich nutze in erster Linie die Benennung von Substance 3D Designer und werde weitere (mir) bekannte Namen in den jeweiligen Abschnitten hinzufügen.
Damit ich nicht immer Bildebene oder Knoten schreiben muss, beschränke ich mich auf Knoten. In diesem Fall sind sie gleichbedeutend und da meine Beispiele aus Substance 3D Designer sind, finde ich Knoten passender.

Was ist ein Blending-Mode?

Blending kommt aus dem Englischen und heißt mischen / mixen, d.h. mit Hilfe des Blending-Modes wird festgelegt, wie die einzelnen Pixel der einzelnen Knoten miteinander verrechnet werden, um ein neues Bild zu erzeugen. In der Regel werden die einzelnen Pixel an der jeweiligen Position beider Knoten miteinander verrechnet, sozusagen, die Pixel, die beim Aufeinanderlegen beider Knoten direkt übereinander liegen würden.

Bei den meisten Programmen kann man neben dem konkreten Blending-Mode auch zusätzlich die Deckkraft einstellen. Dadurch wird festgelegt, zu wieviel Prozent der Vordergrund mit dem Hintergrund verrechnet wird. Um die Beispiele einfach zu halten, werde ich die Verrechnung mit der Deckkraft gesondert betrachten.

Die folgende Auflistung ist nicht vollständig, aber es sind die verbreitetsten Blending-Modes, die vermutlich von allen Anwendungen unterstützt werden:

Copy

Anwendungsbeispiel Copy

Anwendungsbeispiele für Copy. 1. Mit Maske 2. Deckkraft: 100% 3. Deckkraft: 50%

Copy (a.k.a. Normal) ist der einfachste Modus und bei den meisten Programmen der Standard-Modus. Es wird einfach der Pixel vom Vordergrund-Knoten übernommen: \(p_\text{new} = p_\text{fg}\)

  • Sinnvoll, wenn die Deckkraft reduziert wurde
  • Sinnvoll, wenn der Vordergrund Transparenzen (Alpha) hat
  • Sinnvoll, wenn eine Maske verwendet wird

Add (Linear Dodge)

Anwendungsbeispiel Add

Anwendungsbeispiel für Add

Bei Add (Linear Dodge) werden Vordergrund- und Hintergrundpixel miteinander addiert: \(p_\text{new} = p_\text{bg} + p_\text{fg}\). Das Ergebnis ist in der Regel ein helleres Bild.

  • Praktisch für Glüh- und Leuchteffekte. (Danke an Simon)
  • Bei der Addition können Werte > 1 auftreten, d.h. es können bei SDR dadurch Details verloren gehen, da dort der Maximalwert 1 ist.
  • Operation ist kommutativ, d.h. Vorder- und Hintergrundknoten können vertauscht werden.

Subtract

Anwendungsbeispiel Subtract

Anwendungsbeispiel für Subtract

Bei Subtract werden die Vordergrundpixel von den Hintergrundpixel subtrahiert: \(p_\text{new} = p_\text{bg} - p_\text{fg}\). Das Ergebnis ist in der Regel ein dunkleres Bild.

  • Bei der Subtraktion können Werte < 0 auftreten, d.h. es können dadurch Details verloren gehen, da der Minimalwert 0 ist.

Multiply

Anwendungsbeispiel Multiply

Anwendungsbeispiel für Multiply

Bei Multiply werden Vordergrund- und Hintergrundpixel miteinander multipliziert: \(p_\text{new} = p_\text{bg} * p_\text{fg}\). Jeder Pixel, der nicht weiß ist, dunkelt das Ergebnis ab. Hellere Pixel verändern das Ergebnis weniger stark als dunklere Pixel.

  • Operation ist kommutativ, d.h. Vorder- und Hintergrundknoten können vertauscht werden.

Add Sub

Anwendungsbeispiel Add Sub

Anwendungsbeispiel für Add Sub

Bei Add Sub werden die Vordergrundpixel zu den Hintergrundpixeln addiert oder von ihnen subtrahiert. Die ausgeführte Operation hängt dabei vom Wert des Vordergrundpixels ab. Bis 0,5 wird subtrahiert, ab 0,5 wird addiert.

Aber vor der konkreten Operation gibt es zuvor noch eine Wertebereichsanpassung, damit die Werte beider Operationen generell wieder zwischen 0 und 1 liegen und zusätzlich werden die Werte vor der Subtraktion invertiert, sodass dunkle Bereiche stärker abdunkeln als hellere Bereiche. Die Beschreibung klingt komplizierter als die eigentliche Formel dann wirklich ist: \(p_\text{new} = p_\text{bg} + ((p_\text{fg} - 0.5) * 2)\)

Im Internet findet man bei diesem Blending-Mode teilweise folgende fehlerhafte Formel: \( p_\text{new} = \begin{cases} p_\text{bg} + p_\text{fg} & p_\text{fg} \geq 0.5 \\ p_\text{bg} - p_\text{fg} & \, \text{sonst} \end{cases} \)
  • Bietet sich an, wenn man Teile des Hintergrunds aufhellen und andere Teile abdunkeln möchte. Im Vergleich zu einzelnen Add- und Subtract-Aufrufen, hat man aber einen um 50% eingeschränkteren Wertebereich.
    • Liefert oft gute Resultate beim Blenden von Mustern in Höheninformationen. (Danke an Simon)
  • Es gelten die gleichen Einschränkungen wie bei Add und Subtract.

Max (Lighten)

Anwendungsbeispiel Max (Lighten)

Anwendungsbeispiel für Max (Lighten)

Bei Max (Lighten) wird der hellere Pixel genommen: \(p_\text{new} = \text{Max}(p_\text{bg}, p_\text{fg})\)

  • Gut, wenn man bei Heightmaps bspw. Felsen aufeinander zu stapeln möchte

Min (Darken)

Anwendungsbeispiel Min (Darken)

Anwendungsbeispiel für Min (Darken)

Bei Min (Darken) wird der dunklere Pixel genommen: \(p_\text{new} = \text{Min}(p_\text{bg}, p_\text{fg})\)

  • Gut für Risse und Spalten

Divide

Anwendungsbeispiel Divide

Anwendungsbeispiel für Divide

Bei Divide werden die Hintergrundpixel durch die Vordergrundpixel geteilt: \(p_\text{new} = \frac{p_\text{bg}}{p_\text{fg}}\)

  • Divide ist praktisch um pre-multiplied Alpha in straight Alpha zu verwandeln (also RGB/Alpha). (Danke an Simon)
  • Divide kann genutzt werden, um Farben zu neutralisieren bspw. bei farbstichigen Bildern.

Screen

Anwendungsbeispiel Screen

Anwendungsbeispiel für Screen

Screen ist das Gegenteil von Multiply: \(p_\text{new} = p_\text{bg} + p_\text{fg} - p_\text{bg} * p_\text{fg}\). Jeder Pixel, der nicht weiß ist, hellt das Ergebnis auf. Hellere Pixel verändern das Ergebnis stärker als dunklere Pixel.

  • Operation ist kommutativ, d.h. Vorder- und Hintergrundknoten können vertauscht werden.

Overlay

Anwendungsbeispiel Overlay

Anwendungsbeispiel für Overlay

Overlay kombiniert Screen und Multiply miteinander. Bei Hintergrundpixeln bis 0,5 wird Multiply verwendet, ansonsten Screen. Wie man im Ergebnis sehen kann, ist der Übergang (bei 0,5) sehr hart.

  • Praktisch für klassisches / manuelles Shading, um so bspw. einfach Metall-Highlights zu erzeugen. (Danke an Simon)

Soft Light

Anwendungsbeispiel Soft Light

Anwendungsbeispiel für Soft Light

Soft Light versucht die Schwächen von Overlay auszugleichen, indem durch Interpolation zwischen den verwendeten Algorithmen der Übergang weicher geschieht. Bei meinen Recherchen ist mir aufgefallen, dass unterschiedliche Softwares Soft Light sehr unterschiedlich umsetzen. In der Dokumentation von GIMP heißt es sogar, dass in manchen Versionen von GIMP Soft Light und Overlay identisch sind bzw. waren. Substance Designer nutzt dabei den gleichen Algorithmus wie Photoshop und zusätzlich habe ich zwei andere Ansätze finden können, die ähnliche (aber nicht identische) Ergebnisse erzielen:

  1. Soft Light Photoshop: \( p_\text{new} = \begin{cases} 2 p_\text{bg} p_\text{fg} + p_\text{bg}^2 (1 - 2 p_\text{fg}) & p_\text{fg} \lt 0.5 \\ \sqrt{p_\text{bg}} (2 p_\text{fg} - 1) + 2 p_\text{bg} (1 - p_\text{fg}) & \, \text{sonst} \end{cases} \)
  2. Soft Light PegTop: \(p_\text{new} = (1 - 2 p_\text{fg}) * p_\text{bg} ^ 2 + 2 p_\text{bg} p_\text{fg} \)
  3. Soft Light Illusions.hu: \(p_\text{new} = p_\text{bg} ^ {(2 ^ {2 (0,5 - p_\text{fg} )})}\)
Vergleich Soft Light Algorithmen

Vergleich von Soft Light-Algorithmen: 1. Overlay 2. Soft Light (I) 3. Soft Light (II) 4. Soft Light (III)

Der Vergleich zeigt, dass alle Algorithmen einen weichen Übergang erzeugen. Die Ergebnisse der unterschiedlichen Soft Light-Algorithmen unterscheiden sich auf den ersten Blick nur geringfügig und werden für die meisten vermutlich erst im direkten Vergleich sichtbar.

Animierter Vergleich Soft Light Algorithmen

Animierter Vergleich von Soft Light-Algorithmen.

Dabei ist festzuhalten, dass die Substance Designer-/Photoshop-Version von Soft Light insgesamt am meisten aufhellt. Die Illusions.hu-Version ist fast identisch zur Photoshop-Version, gewichtet die dunklen Bereiche des Hintergrunds aber etwas stärker, was meiner Meinung nach zu einem sanfteren Übergang führt. Die PegTop-Version gewichtet die dunklen Werte des Hintergrunds nochmals etwas stärker als die beiden anderen Algorithmen.