

OKLCH, auch OKLch geschrieben, ist ein Farbmodell, das 2020 vom schwedischen Programmierer und Spieleentwickler Björn Ottoson entwickelt wurde. OKLCH basiert auf dem OKLab-Farbraum, der gemeinsam mit dem Farbmodell entworfen wurde und in etwa wie der L*a*b*-Farbraum aufgebaut ist. OKLab kann alle für Menschen sichtbaren Farben darstellen. Ottoson nannte den Farbraum und die Farbmodelle „OK“, da er sie „okay“ fand.

Ein wesentlicher Vorteil von OKLCH ist die perzeptible Unabhängigkeit der drei Farbachsen Luminanz („Helligkeit“), Chrominanz („Sättigung“) und Farbton (englisch hue). Wird eine der drei Achsen verändert, so bleiben die anderen beiden Werte nach menschlicher Wahrnehmung bei der neuen Farbe gleich. Wird beispielsweise, wie im obenstehenden Bild, der Farbton verändert, während Chrominanz und Luminanz gleich bleiben, so haben alle Farben dieses Farbspektrums die gleiche Chrominanz und Luminanz, sehen also gleich farbkräftig und hell aus.
Der Farbraum und seine Farbmodelle haben Einzug in den CSS-Standard und verschiedene Software (z. B. Adobe Photoshop und Inkscape) gefunden. Alle aktuellen Webbrowser unterstützen seit spätestens 2023 OKLCH und Google empfiehlt die Verwendung von OKLCH gegenüber anderen Farbdefinitionen im Web.
Zusätzlich zu den eher technisch und perzeptiv ausgerichteten Lab und Lch-Farbmodellen gibt es für OKLab auch die OKHSV und OKHSL-Farbmodelle. Diese sind darauf spezialisiert, die einfache und präzise Auswahl von Farben zu ermöglichen, besser als die auf sRGB basierenden HSV und HSL-Modelle.
Die eingangs erwähnte perzeptible Unabhängigkeit aller drei Farbachsen findet sich so nur in wenigen Farbmodellen. Das verbreitete HSV hat diese Eigenschaft nicht. Die Unabhängigkeit ermöglicht es, Farben auch automatisch von anderen abzuleiten (z. B. dunklere und hellere Abstufungen, Komplementärfarben), und dabei vorhersehbare und optisch ansprechende Ergebnisse zu erzielen. Farbpalettengeneratoren nutzen OKLCH, um automatisch Helligkeitsabstufungen einer Farbe zu generieren, sowie verschiedenen Farben der Palette dieselbe Sättigung zu verleihen.
Allerdings hat hierdurch der OKLCH-Farbkörper eine andere geometrische Form als ältere, weniger perzeptible Farbmodelle, die dafür sorgt, dass bei solchen Änderungen leicht der gewünschte Zielfarbraum (oft sRGB) verlassen wird.
OKLCH unterstützt auch größere Farbräume wie Adobe RGB, sowie Display-P3 und Rec. 2020, die auf vielen Anzeigegeräten bereits nutzbar sind. Durch die Nutzung von OKLCH wird damit die Verwendung von Farben außerhalb von sRGB erleichtert, was mit üblichen Farbdefinitionen wie HSV und Hexcode nicht möglich ist.
Weitere Vorteile von OKLCH sind die menschenlesbaren Farbdefinitionen (Luminanz, Chrominanz und Farbton haben intuitiv verständliche Bedeutungen) und verbesserte Barrierefreiheit dank vorhersehbarer Helligkeit und Kontrast.
OKLab nutzt einen Weißpunkt nach der Normlichtart D65, wie auch sRGB und Adobe RGB. Die Koordinate L beschreibt die wahrgenommene Helligkeit (Luminanz) einer Farbe, die Koordinate a die Rot-Grün-Verteilung der Farbe und die Koordinate b die Blau-Gelb-Verteilung der Farbe. OKLCH ist die polare Variante dieses Koordinatensystems, wobei die Chrominanz die Distanz vom Weißpunkt und der Farbton den Winkel in der ab-Ebene beschreibt:

Hierbei ist arctan2 die erweiterte umgekehrte Tangensfunktion, welche einen Winkel bis 360° liefert.
Die Umrechnung von XYZ-Koordinaten geschieht mittels der Konvertierung in ungefähre Zapfenstimuli , gefolgt von der Korrektur der Nichtlinearität der menschlichen Farbwahrnehmung (Dreierpotenz bzw. dritte Wurzel), gefolgt von der Umrechnung in die Lab-Koordinaten:
Dabei beschreiben die Matrizen die Transformation von der XYZ-Basis in die -Basis, beziehungsweise die Transformation von der -Basis in die OKLab-Basis. Eine Zurückrechnung von OKLab nach XYZ ist durch Invertierung aller Operationen möglich (beide Matrizen sind invertierbar).
Die Werte und die Nichtlinearitätspotenz wurden numerisch optimiert, indem die folgenden sieben Optimierungsziele zugrunde gelegt wurden:
Von diesen Eigenschaften fehlen allen bestehenden Farbmodellen mindestens eines. CIELAB sagt Farbtöne schlecht vorher, CAM16-UCS ist numerisch instabil und nicht skalierungsinvariant, OSA-UCS ist ebenfalls numerisch ungeeignet, IPT sagt Chrominanz und Luminanz schlecht vorher, JzAzBz ist abhängig vom Beleuchtungsszenario, und HSV bzw. sRGB haben keine dieser Eigenschaften außer dem D65-Weißpunkt.
Das detaillierte Optimierungsverfahren beschreibt Ottoson in seinem Blogpost. Es ergeben sich die folgenden Matrizen:
OKHSV und OKHSL sind für Farbwähler im sRGB-Farbraum gedacht. Um diese Anwendungen zu vereinfachen, werden einige Eigenschaften von OKLCH eingebüßt, beispielsweise sind die drei Achsen Farbton, Sättigung und Wert/Helligkeit nicht oder nur teilweise orthogonal zueinander, und Farbübergänge sind nicht gleichmäßig. Der Umrechnung liegt ein komplexeres Modell zugrunde, um einfache geometrische Formen (Kreise und Quadrate für je zwei Achsen, sowie einen Schieberegler für die dritte Achse) zu erhalten.
Mit dem CSS Color Module Level 4, welches erstmals 2023 als empfohlener Standard für Webbrowser veröffentlicht wurde, sind OKLCH und OKLab Teil des CSS-Standards und werden von allen großen Webbrowsern unterstützt. In CSS kann eine Farbe im OKLCH-Modell mit der Funktion oklch() eingefügt werden. Entsprechend dem Namen ist der erste Wert dabei die Luminanz, der zweite die Chrominanz, und der dritte der Farbton in Grad; nach einem Schrägstrich kann ein Alphawert angegeben werden. Beispiele für OKLCH-Farben in CSS (benötigt einen Browser von 2023 oder später zur Darstellung):
CSS-Farbangabe für background-color |
Ergebnis | Beschreibung |
|---|---|---|
oklch(0.45 0.26 264) |
Blau | |
oklch(0.5853 29.32% 11) |
stark gesättigtes Pink aus Rec. 2020 | |
oklch(1 0 none) |
weiß | |
oklch(0 0 0 / 50%) |
transparentes Schwarz |