Die Darstellung digitaler Schrift (Teil 3 von 5): Hinting

Lies den zweiten Teil der Serie hier

Auch bei der Entwicklung der digitalen Schriftformate hat man eine Technologie erdacht, die bei der Darstellung von Schrift auf niedrig auflösenden Medien hilfreich ist. Diese Technologie nennt sich Hinting. In Bezug auf das Höhlengleichnis vom Anfang bedeutet Hinting, dass die Form der „wahren“ Dinge nun so verändert wird, dass sie selbst auf der unebenen Höhlenwand Schatten werfen die erkennen lassen, um was es sich handelt.

Grundsätzlich gibt es zwei unterschiedliche Arten des Hintings. Abhängig vom Outline Format gibt es Hinting für Outlines im PostScript Format und solche für Outlines im TrueType Format. Die Herangehensweisen unterscheiden sich leicht. Während man bei PostScript Outlines eher von allgemeinen Hints redet, bietet das Hinting für TrueType Fonts weitaus mächtigere Werkzeuge zur Verbesserung der Bildschirmdarstellung. Diese Werkzeuge liegen in Form eines Befehlssatzes im TrueType Format vor. TrueType Hints nennt man deshalb auch Instructions. Allerdings muss man dazu sagen, dass die Darstellung von PostScript Outlines nicht ganz so problematisch ist, wie TrueType Outlines. Das liegt daran, dass der PostScript Rasterizer die Schrift auch ohne weitere Hints gekonnt rendert. Taucht jedoch ein Problem auf, so sind die Möglichkeiten der Ausbesserung deutlich schlechter als beim TrueType Format. Im Folgenden soll erklärt werden, warum.

Hinting kam das erste Mal mit dem PostScript Format auf. Im Wort „Hinting“ selbst steckt bereits die Bedeutung des Begriffs. „Hint“ ist das englische Wort für „Hinweis“. Die Idee ist, dass die Hints dem Rasterizer „Hinweise“ dafür geben, wie er die Zeichen bei niedriger Auflösung darstellen soll. Man unterscheidet zwischen globalen Hints und zeichenspezifischen Hints. Globale Hints arbeiten mit Parametern, die für die ganze Schrift gelten, während zeichenspezifische Hints nur für bestimmte Zeichen und in der Regel auch nur für bestimmte Punktgrößen gelten. Wir werden jetzt in die Welt der Hints eintauchen.

Globale Hints

In die Gruppe der globalen Hints fallen vor allem Alignment Zones in Y-Richtung und Stems (Stämme) in X- und Y-Richtung. Um zu verstehen, wofür diese Hints gut sind, sollte man sich anschauen, was passiert, was der Rasterizer macht, wenn keine globalen Hints vorliegen. Das erste, was an dieser Abbildung auffällt, ist die tanzende Linie am oberen Rand der Zeichen.

Zones

Wenn man genauer hinschaut, wird man feststellen, dass die Zeichen, die eher runde Formen haben (o, c, e, etc. ) einen Pixel höher sind als Zeichen, deren Formen „eckiger“ sind (w, v, x, k, etc.). Runde Formen ragen beim Design der Schrift um 1-2 % über die anderen Zeichen hinaus. Der Schriftdesigner bedient sich dieses Tricks, um die Zeichen optisch gleich groß zu gestalten. In einem hoch aufgelösten Ausdruck bemerkt man diese Differenz nicht. Wenn der Rasterizer für niedrige Auflösungen das gleiche tut und die Unterschiede darstellt, werden die runden Formen nicht bloß 1-2% größer, sondern gleich um bis zu 10% größer, und das drückt sich dann in dieser wellenförmigen Oberlinie aus und sieht nicht sehr gut aus. Dieses Phänomen lässt sich mit sogenannten Alignment Zones beheben. Dabei werden im Font globale Zonen in Y-Richtung definiert. Diese Zonen entsprechen im Übrigen den typografischen Werten für x-Höhe, Versalhöhe, Grundlinie, nur dass Zonen definiert werden, die eine Spanne von etwa 2% der Versalhöhe haben. Wenn man die Zonen festgelegt hat, muss man nur noch durch alle Zeichen gehen und mit einem Anker-Werkzeug die gewünschten Punkte mit den gewünschten Zonen verankern. Dem Rasterizer wird so der „Hint“ gegeben, alle Formen mit Anker, die einer Zone zugewiesen sind, auf die gleiche Höhe zu rastern. Das Problem mit der tanzenden Oberlinie ist damit behoben.

Leider sind damit nicht alle Probleme geklärt. Die Schrift wirkt immer noch fleckig. Manche Stämme sind einen Pixel breit, andere sind zwei Pixel breit. Und wenn man die Stämme nun nachmisst, wird man feststellen, dass sie unterschiedlich dick sind. Wieder hat sich der Designer eines Tricks bedient, um optische Unregelmäßigkeiten zwischen geraden Stämmen (H, L, i,…) und runden Stämmen (O, G, C,…) auszugleichen, indem er runde Stämme ein paar zehntel Prozent dicker gemacht hat. Der Rasterizer weiß das nicht und kommt durch seine Berechnungen möglicherweise zu dem Ergebnis, dass er für die Darstellung zwei oder sogar keinen Pixel verwendet. Das bedeutet, manche Stämme sind doppelt so dick oder erst gar nicht vorhanden. Beides sind unerwünschte Ergebnisse. Um das zu vermeiden, gibt es die Möglichkeit, unterschiedliche Stämme zu definieren und festzulegen, in welcher Punktgröße ein spezieller Stamm mit einem, zwei oder mehr Pixeln dargestellt werden soll. So wird dafür gesorgt, dass sich runde Stämme bei niedriger Auflösung identisch zu den geraden Stämmen verhalten. Wieder muss man durch alle Zeichen des Fonts gehen und die Stämme in X- und Y-Richtung festlegen. Damit hat man ein weiteres wesentliches Problem mit der Darstellung in niedrigen Auflösungen behoben.

Wir haben das Verfahren des Hintings hier stark vereinfacht beschrieben. Komplizierter wird es, wenn man sich die Darstellung nicht nur eines Fonts vorstellen muss, sondern einer ganzen Familie mit sehr vielen Schnitten. Beispielhaft sei hier die Frutiger Neue genannt, die mit zehn unterschiedlichen Stammstärken ausgestattet ist. Hier wird es für den Hinter sehr schwierig, die Unterschiede bei niedriger Auflösung sichtbar zu machen, denn einen Pixel pro Verfettungsgrad kann man den Stämmen natürlich nicht hinzufügen. Aber auch hier gibt es Tricks, mit denen man arbeiten kann. Oft reichen minimale Unterschiede aus, um die Schriftschnitte unterscheidbar zu machen.

Beispiel Frutiger

Deltahinting

Wie bereits weiter oben erwähnt, wird das Konzept der globalen Hints sowohl im PostScript als auch im TrueType Format angeboten. Für PostScript basierte Fonts (egal ob OpenType oder PostScript Type1) reicht das oft – bei weitem nicht immer –, um die Schrift einigermaßen sauber darzustellen. Im Fall von TrueType Schriften treten noch immer schwerwiegende Fehler auf, die es zu beseitigen gilt. Verklumpungen, Zeichen, die zusammenkleben, zulaufende Punzen sind einige dieser Probleme. Im TrueType Format gibt es hierfür Werkzeuge, die sich Deltahints nennen. Man bedient sich ihrer wie der Maler seines sehr feinen Pinsels. Mit ihnen geht man jeweils pro Zeichen und pro Punktgröße vor. Das macht das Deltahinting sehr zeitaufwändig und teuer. Als Gegenwert erhält man die volle Kontrolle über die entstehende Pixeldarstellung des Zeichens in jeder bestimmten Punktgröße.

Es gibt zwei Arten von Deltahints. Wieder unterscheidet man im Detailgrad. Die erste Gruppe heißt Middledelta. Wenn man ein Middledelta einsetzt, werden alle globalen Hints berücksichtigt. Man kann ein Middledelta zum Beispiel dazu nutzen, ein ganzes Zeichen um einen Pixel nach rechts zu schieben. Damit könnte man vermeiden, dass das Zeichen in einer Punktgröße mit den Zeichen links von sich zusammenstößt. Das Verschieben ändert zwar die Position des Zeichens auf dem Raster, aber nicht die Stämme und Anker, die für das Zeichen definiert sind.

Um auch die letzten Darstellungsprobleme von Fonts in kleinen Graden, bei geringer Auflösung zu verbessern, stehen noch weitere Deltahints zur Verfügung. Diese nennt man Finaldelta. Finaldeltas erlauben es dem Rasterizer, pixelgenau zu sagen, wie er in einem bestimmten Zeichen eine bestimmte Stelle der Outline interpretieren soll. Mit den Finaldelta-Hints kann man auch die letzten Artefakte in der Darstellung verhindern.

Deltahinting: eine virtuelle Outline wird für eine bestimmte Punktgröße angepasst, damit die entsprechenden Pixel an- oder ausgeschaltet werden.

Evolution des Hinting

Nächste Woche geht es weiter mit dem Praxistest!

verwandte tags , ,
Kommentare / Kommentar abgeben

Ihr Kommentar