Pro-Seminar Computergrafik



Ähnliche Dokumente
6.2 Scan-Konvertierung (Scan Conversion)

Plotten von Linien ( nach Jack Bresenham, 1962 )

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

Berechnung der Erhöhung der Durchschnittsprämien

computer graphics & visualization

Im Original veränderbare Word-Dateien

Lineare Gleichungssysteme

1. Sichtbarkeitsproblem beim Rendern einer dreidimensionalen Szene auf einer zweidimensionalen

Anhand des bereits hergeleiteten Models erstellen wir nun mit der Formel

Zeichen bei Zahlen entschlüsseln

10.1 Auflösung, Drucken und Scannen

1 Mathematische Grundlagen

1 topologisches Sortieren

Lineare Funktionen. 1 Proportionale Funktionen Definition Eigenschaften Steigungsdreieck 3

LU-Zerlegung. Zusätze zum Gelben Rechenbuch. Peter Furlan. Verlag Martina Furlan. Inhaltsverzeichnis. 1 Definitionen.

Anwendungsbeispiele. Neuerungen in den s. Webling ist ein Produkt der Firma:

Animation ist das Erzeugen von Filmen mit Hilfe der Computergrafik. Objekte bewegen sich hierbei oder Beleuchtung, Augpunkt, Form,... ändern sich.

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Gleichungen Lösen. Ein graphischer Blick auf Gleichungen

Primzahlen und RSA-Verschlüsselung

Falten regelmäßiger Vielecke

Professionelle Seminare im Bereich MS-Office

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Konzepte der Informatik

Zahlen auf einen Blick

Einführung in. Logische Schaltungen

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Raytracing. Schlussbericht. Jonas Lauener 1995, Áedán Christie 1997 Melvin Ott 1997, Timon Stampfli 1997

Herstellen von Symbolen mit Corel Draw ab Version 9

Die Übereckperspektive mit zwei Fluchtpunkten

Computerarithmetik ( )

Welche Unterschiede gibt es zwischen einem CAPAund einem Audiometrie- Test?

Lineare Gleichungssysteme

Wie löst man Mathematikaufgaben?

Advanced Rendering Interior Szene

Die reellen Lösungen der kubischen Gleichung

3.2 Spiegelungen an zwei Spiegeln

2 Darstellung von Zahlen und Zeichen

Aufgabe 1. Zunächst wird die allgemeine Tangentengleichung in Abhängigkeit von a aufgestellt:

WORKSHOP für das Programm XnView

Tangentengleichung. Wie lautet die Geradengleichung für die Tangente, y T =? Antwort:

DPF Dynamic Partial distance Function

Abiturprüfung Mathematik 2008 (Baden-Württemberg) Berufliche Gymnasien ohne TG Analysis, Aufgabe 1

EM-Wellen. david vajda 3. Februar Zu den Physikalischen Größen innerhalb der Elektrodynamik gehören:

GRAF-SYTECO. Handbuch. Zeichensatzgenerator für AT-Geräte. Erstellt: November SYsteme TEchnischer COmmunikation

V 2 B, C, D Drinks. Möglicher Lösungsweg a) Gleichungssystem: 300x y = x + 500y = 597,5 2x3 Matrix: Energydrink 0,7 Mineralwasser 0,775,

Der Einsatz von HDRIs in LightWave 7

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Excel Pivot-Tabellen 2010 effektiv

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers

Dokumentation für das Spiel Pong

16. Schriftart formatieren

Leichte-Sprache-Bilder

Pixel oder Vektor? Die Vor- und Nachteile der verschiedenen Dateiformate. Langner Marketing Unternehmensplanung Metzgerstraße Reutlingen

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

x 2 2x + = 3 + Es gibt genau ein x R mit ax + b = 0, denn es gilt

Bilddateien. Für die Speicherung von Bilddaten existieren zwei grundsätzlich unterschiedliche Verfahren. Bilder können als

10%, 7,57 kb 20%, 5,3 kb 30%, 4,33 kb 40%, 3,71 kb 50%, 3,34 kb. 60%, 2,97 kb 70%, 2,59 kb 80%, 2,15 kb 90%, 1,62 kb 99%, 1,09 kb

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

Einfärbbare Textur erstellen in GIMP (benutzte Version: 2.6.7)

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Hilfe Bearbeitung von Rahmenleistungsverzeichnissen

PTV VISUM TIPPS & TRICKS:

Wir arbeiten mit Zufallszahlen

Kreatives Gestalten mit Flash 5.0

AZK 1- Freistil. Der Dialog "Arbeitszeitkonten" Grundsätzliches zum Dialog "Arbeitszeitkonten"

Outlook Erstellen einer aus einer HTML - Vorlage INHALT

Vektoren mit GeoGebra

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

3. Drucken und Exporte

Farbtypen. Bedeutung von Farben 1. Drucken. Arbeiten mit Farben. Papierhandhabung. Wartung. Problemlösung. Verwaltung. Index

GeoPilot (Android) die App

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Basteln und Zeichnen

Wasserzeichen mit Paint-Shop-Pro 9 (geht auch mit den anderen Versionen. Allerdings könnten die Bezeichnungen und Ansichten etwas anders sein)

Berechnungen in Access Teil I

3. LINEARE GLEICHUNGSSYSTEME

Objektorientierte Programmierung für Anfänger am Beispiel PHP

VON GRUND AUF RICHTIG AUFBAUEN

Sie werden sehen, dass Sie für uns nur noch den direkten PDF-Export benötigen. Warum?

Programmierkurs Java

3.1. Die komplexen Zahlen

1. LINEARE FUNKTIONEN IN DER WIRTSCHAFT (KOSTEN, ERLÖS, GEWINN)

Welche Lagen können zwei Geraden (im Raum) zueinander haben? Welche Lagen kann eine Gerade bezüglich einer Ebene im Raum einnehmen?

Formelsammlung zur Kreisgleichung

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

PTV VISWALK TIPPS UND TRICKS PTV VISWALK TIPPS UND TRICKS: VERWENDUNG DICHTEBASIERTER TEILROUTEN

Physik & Musik. Stimmgabeln. 1 Auftrag

Virtuelle Fotografie (CGI)

Simulation LIF5000. Abbildung 1

Kapiteltests zum Leitprogramm Binäre Suchbäume

11.3 Komplexe Potenzreihen und weitere komplexe Funktionen

Arbeiten mit den Mastercam Werkzeug-Managern

Funktionsbeschreibung. Lieferantenbewertung. von IT Consulting Kauka GmbH

Transkript:

Pro-Seminar Computergrafik Christopher Keiner, Kai Lawonn, Tobias Pfeiffer, Jacqueline Spexard, Christoph Sackl, Jonas Fehr, Selimkhan Achmerzaev Betreuer: Dr. Ingrid Hotz, Cornelia Auer, Jan Reininghaus, Andrea Kratz Berlin, 18. Januar 2008

Inhaltsverzeichnis 1 Raster-Algorithmen am Beispiel der digitalen Typografie 6 1.1 Einleitung.............................. 6 1.2 Ausgabegeräte............................ 8 1.2.1 Klassifizierung....................... 8 1.2.2 Framebuffer......................... 9 1.3 Fitting-Algorithmen......................... 10 1.4 Liniensegment-Rasterung...................... 10 1.4.1 Bresenham Algorithmus.................. 11 1.4.2 Symmetric Double Step Algorithmus von Wu....... 14 1.5 Füll-Algorithmen.......................... 15 1.5.1 Boundary Fill-Algorithmus................. 15 1.5.2 Flood Fill-Algorithmus................... 16 1.6 Polygon-Rasterung......................... 16 1.6.1 Charakterisierung von Polygonen............. 16 1.6.2 Scan Line-Algorithmus................... 17 1.7 Transformation eines Bildes.................... 18 1.7.1 Skalierung......................... 19 1.7.2 Rotation........................... 19 1.8 Dithering.............................. 22 1.8.1 Farbrepräsentation..................... 23 1.8.2 Color Look Up Table.................... 23 1.8.3 Ordered Dithering mit Fehlerstreuung........... 23 1.9 Aliasing............................... 24 1.9.1 Objektbasiertes Anti-Aliasing............... 25 1.9.2 Subpixel Rendering..................... 26 1

INHALTSVERZEICHNIS 2 2 Shading 29 2.1 Einleitung.............................. 29 2.2 Grundlagen............................. 30 2.2.1 Lichtausbreitung...................... 30 2.2.2 Lichtquellenmodelle.................... 33 2.3 Lokale Beleuchtungsmodelle.................... 34 2.3.1 Lambert-Beleuchtungsmodell............... 34 2.3.2 Phong-Beleuchtungsmodell................ 34 2.4 Schattierungsverfahren....................... 35 2.4.1 Flat-Shading........................ 35 2.4.2 Gouraud-Shading...................... 37 2.4.3 Phong-Shading....................... 41 2.4.4 Berechnung......................... 43 2.4.5 Zusammenfassung..................... 44 2.5 Cool-to-Warm Shading....................... 45 2.5.1 Berechnung......................... 45 2.5.2 Zusammenfassung..................... 47 2.6 Diskussion.............................. 47 2.6.1 Geschichte des Lichtes................... 47 2.6.2 Problematik......................... 48 2.6.3 Warum nicht physikalisch exakt?............. 48 2.6.4 Ausblick.......................... 49 2.7 Anhang............................... 49 2.7.1 Vektoren.......................... 49 2.7.2 Farbwerte.......................... 50 2.7.3 Baryzentrische Koordinaten................ 51 3 Raytracing 53 3.1 Einführung............................. 53 3.2 Grundlagen des Renderings..................... 53 3.3 Das Raytracing-Verfahren..................... 55 3.3.1 Schnittpunkt- und Normalenbestimmung......... 56 3.3.2 Farbbestimmung eines Punktes............... 59 3.4 Laufzeitbetrachtungen und Optimierung.............. 67 3.4.1 Analyse der Laufzeit.................... 67 3.4.2 Verbesserungen der Laufzeit................ 67 2

INHALTSVERZEICHNIS 3 3.5 Ausblick............................... 70 4 Geometric Modelling: Approximation und Interpolation von Kurven und Flächen. Von Flächen zu Objekten 72 4.1 Bezierkurven............................ 72 4.1.1 Renault auf dem Vormarsch................ 72 4.1.2 Wie entstehen Bezierkurven?................ 73 4.1.3 Nachteile der Bezierkurven................. 78 4.2 B-Splines.............................. 79 4.2.1 Mit Schiffen fing alles an.................. 79 4.2.2 Definition von B-Splines.................. 79 4.2.3 Uniform-B-Splines..................... 80 4.2.4 Non-uniform B-Splines................... 82 4.2.5 Zusammengefasst...................... 85 4.3 NURBS (non-uniform rational B-Splines)............. 86 4.4 Von Kurven zu Flächen....................... 87 4.4.1 Biliniar Patches....................... 87 4.4.2 Bilinearly Blended Surfaces................ 90 4.5 Von Flächen zu Objekten...................... 91 5 Grafikkarten und GPU-Programmierung 92 5.1 Einleitung.............................. 92 5.2 Die Grafikkarte........................... 93 5.2.1 Entwicklung der Grafikkarte................ 93 5.2.2 Eine moderne Highend-Grafikkarte............ 94 5.3 Grafik-Programmierung....................... 96 5.4 Koordinatensysteme......................... 97 5.4.1 Object Space........................ 97 5.4.2 World Space und Eye Space................ 97 5.4.3 Clip Space......................... 98 5.4.4 Window Space....................... 99 5.5 Die klassische Grafik-Pipeline................... 99 5.5.1 Geometrieoperationen................... 100 5.5.2 Pixeloperationen...................... 102 5.6 Die Unified-Shader Architektur................... 103 5.6.1 Das Shader Model..................... 105 5.6.2 Shader Programmierung.................. 106 3

INHALTSVERZEICHNIS 4 5.6.3 Vertex- und Fragment-Shader............... 107 5.6.4 Geometry-Shader...................... 109 5.7 General Purpose Computation on GPUs.............. 110 5.7.1 Nutzung des skalaren Prozessor Designs.......... 111 5.7.2 GPGPU in der Praxis.................... 112 5.7.3 Compute Unified Device Architecture........... 113 5.7.4 Diskussion......................... 114 5.8 Fazit................................. 115 6 Computer Animation 116 6.1 Einleitung.............................. 116 6.1.1 Was ist Animation?..................... 116 6.1.2 Klassische Animationstechniken.............. 116 6.2 Computer Animation - Einleitung zur 3D-Animation....... 118 6.2.1 Rigid Body Animation................... 119 6.3 Key-Framing............................ 121 6.4 Interpolation............................. 121 6.4.1 Interpolation von parametrischen Kurven......... 123 6.4.2 Dynamik von Bewegungen................. 125 6.5 Animations-Zyklen......................... 126 6.6 Hierarchische Modelle und Kinematik............... 127 6.7 Charakter Animation mit Skelett-Modell.............. 131 6.8 Kollisions-Erkennung........................ 132 6.9 Deformation............................. 134 6.9.1 Globale Deformation.................... 134 6.9.2 Free Form Deformation.................. 135 6.9.3 Animierte Deformation................... 136 6.10 Gesichts-Animation......................... 136 7 Image-Based Rendering 138 7.1 Einleitung.............................. 138 7.2 Light Field............................. 140 7.2.1 Sampling.......................... 141 7.2.2 Technische Probleme.................... 142 7.2.3 Resampling / Erzeugen von neuen Bildern......... 143 7.2.4 Zusammenfassung..................... 143 7.3 View Interpolation......................... 144 4

INHALTSVERZEICHNIS 5 7.3.1 Pixel Interpolation..................... 145 7.3.2 Probleme.......................... 146 7.3.3 Lösung........................... 147 7.3.4 Beispiele.......................... 147 7.3.5 Beipiel aus der Filmindustrie................ 148 7.3.6 Zusammenfassung..................... 148 7.4 Image Based Lighting mit High Dynamic Range Images..... 149 7.4.1 Light Probes........................ 152 7.4.2 Environment Mapping................... 153 7.4.3 Beispiele.......................... 154 7.4.4 Einsatz von IBL in der Industrie.............. 155 7.4.5 Zusammenfassung..................... 156 Literaturverzeichnis 156 5

Kapitel 1 Raster-Algorithmen am Beispiel der digitalen Typografie Christopher Keiner 1.1 Einleitung Die Ausarbeitung thematisiert Raster-Algorithmen am Beispiel der digitalen Typografie. Die Rasterung ist ein Teilgebiet der Computergrafik und betrifft den Bereich der Grafikausgabe. Viele Ausgabegeräte benutzen als Grundelemente Pixel, die einen farbigen Bildpunkt repräsentieren. Ein Pixel muss aus technischen Gegebenheiten eine spezifische Größe besitzen. Die Ausgabefläche besteht aus einer Menge dieser Pixel und kann wegen der spezifischen Größe der Pixel als Raster aufgefasst werden. Dies ist das Grundproblem der Rasterung. Das Gebiet der Rasterung bietet Lösungsansätze für Probleme, die durch das Arbeiten auf diesem Raster entstehen um eine Grafik auszugeben. Die Ausarbeitung beschreibt verschiedene Probleme des Rasterns und zeigt mögliche Lösungsansätze zu den Problemen. Dabei orientiert sich die Ausarbeitung an einem Beispiel aus der digitalen Typografie. Typografie umfasst Richtlinien und Regeln, die bei der Gestaltung von Texten relevant sind. Diese Richtlinien umfassen z.b. die Schrifttypen, die Schriftgröße oder Zeichenabstände. Die Typografie beinhaltet aber auch die Wahl des Papieres oder die Gewohnheiten eines Lesers. Um diese Weitläufigkeit einzuschränken, 6

1.1. EINLEITUNG 7 unterteilt sich die Typografie in eine mikro- und eine makrotypografische Sicht. Die Makrotypografie konzentriert sich auf die Gestaltung des Textes als große Einheit. Die Mikrotypografie beschränkt sich hingegen auf die Gestaltung einzelner Zeichen und Worte. Die Richtlinien gelten ebenfalls für digitale Texte. Das Ziel der Typografie ist dabei eine optimale Lesbarkeit sowie Gestaltung eines Textes zu erreichen. Die Mikrotypografie und das Gebiet der Rasterung sind bei digitalen Texten eng verbunden. Die Lesbarkeit und Gestaltung ist dabei in erster Linie von der Qualität der Rasterung abhängig. Die Erzeugung von Zeichen wird im Computerbereich durch einen sog. Font-Rasterizer realisiert. Die zu rasternden Zeichen werden in diesem Zusammenhang als Glyphen bezeichnet. Die Aufgaben und Abläufe eines Font-Rasterizers werden nun exemplarisch anhand des TrueType-Rasterizers [Mic07] kurz vorgestellt. Die Hauptaufgabe besteht darin einen übergebenen String in ein Bitmap umzuwandeln. Dazu sind die folgenden Schritte notwendig: 1. Die Umrisse des Glyphen werden aus dem TrueType Format ausgelesen. Die Umrisse werden als Gleichungen von Liniensegmenten und Splines gespeichert. 2. Im nächsten Schritt werden die Umrisse auf die gewünschte Größe skaliert. Hierfür werden die Linien und Splines durch die mathematischen Gleichungen transformiert. 3. Die Umrisse müssen als nächstes am Raster ausgerichtet werden um eine optimale Qualität zu erreichen. Um dies zu erreichen kann ein Glyph verschoben und gestreckt werden. 4. Im letzten Schritt wird der Buchstabe als Bitmap gerastert. Die Ausarbeitung unterteilt sich in vier Themengebiete und ordnet die Themen möglichen Aufgaben eines Font-Rasterizers zu. Das erste Themengebiet umfasst Abschnitt 1.2 und stellt mögliche Ausgabegeräte vor. Es wird der Framebuffer vorgestellt, der eine Abstraktion dieser Ausgabegeräte darstellt. Das zweite Themengebiet befasst sich mit dem sogenannten Fitting-Problem, bei dem eine optimale Ausrichtung eines Objekts an das Raster gefunden werden muss. Abschnitt 1.3 stellt eine Lösung vor, die das TrueType Format benutzt. Das dritte Themengebiet beschäftigt sich mit dem Rastern von geometrischen Figuren. Die Abschnitte 1.4, 1.5, 1.6 stellen Algorithmen vor, die zum Rastern von 7

1.2. AUSGABEGERÄTE 8 Objekten benutzt werden können und korrespondiert mit dem vierten Schritt des TrueType Rasterizers. Das letzte Themengebiet umfasst die Abschnitte 1.7, 1.8, 1.9 und stellt Optimierungsansätze beim Rastern vor. Abschnitt 1.7 bietet auch Ansätze zur Transformation von Koordinaten, die im zweiten Schritt des TrueType-Rasterizers benötigt werden. 1.2 Ausgabegeräte In diesem Abschnitt werden verschiedene Ausgabegeräte vorgestellt. Um das Problem des Rasterns allgemeiner betrachten zu können, werden die Ausgabegeräte klassifiziert und anschließend durch den sogenannten Framebuffer abstrahiert. 1.2.1 Klassifizierung Eine Vielzahl von physikalischen/virtuellen Geräten kann als Ausgabegerät dienen: Monitor (CRT, LCD) Drucker, Pen Plotter Beamer, Laser-Projektoren Fernsehgeräte Ausgabe als digitales Bild... Die Geräte lassen sich in zwei Klassen unterteilen, um generellere Aussagen über Ausgabegeräte zu finden. 1. Vektorbasierte Geräte Die Ausgabedaten dieser Geräteklasse liegen als Befehlsfolge vor. Durch die Abarbeitung der Befehle entsteht die Ausgabe. In diese Klasse fallen z.b Oszilloskope, Pen-Plotter oder Laserprojektoren. Der Befehlsvorrat umfasst meist verschiedene Bewegungsvorgänge, sowie das Aktivieren/Deaktivieren des Ausgabemechanismus. 8

1.2. AUSGABEGERÄTE 9 2. Pixelorientierte Geräte Die Ausgabedaten liegen in dieser Geräteklasse als Datenfolge aus Pixeln vor. Diese Daten beinhalten die Koordinaten und die Farbe an dieser Stelle. Im Gegensatz zu vektorbasierten Geräten werden die Daten sequentiell in einer festgelegten Reihenfolge sichtbar gemacht. In diese Klasse fallen z.b. Monitore, Beamer oder Bilder. Die Klasse der vektorbasierten Geräte umgeht im Gegensatz zu den pixelorientierten Geräten das Problem des Rasterns. Die Anzahl der vektorbasierten Geräte ist aber sehr gering. Geräte für den Normalbenutzer fallen in die pixelorientierte Klasse. Aus diesem Grund wird im Folgenden nur auf die Klasse der pixelorientierten Geräte eingegangen. 1.2.2 Framebuffer Es bestehen viele Gemeinsamkeiten der pixelorientierten Geräte. Die Ausgabefläche besteht aus einer Menge von angeordneten, adressierbaren Pixel. Die Auflösung (width height) eines Gerätes spezifiert die Anzahl der Pixel und die Größe der Ausgabefläche. Die Farbtiefe spezifiziert die Bitanzahl, die für die Speicherung einer Farbe verwendet werden. Die Farbtiefe gibt ebenfalls die Anzahl an Farben an, die angezeigt oder gespeichert werden können. Die Abstraktion eines Gerätes ist durch den Framebuffer gegeben. Der Framebuffer besteht aus einem Speicherbereich für width height Pixeln. Diese Pixel lassen sich gezielt manipulieren. Dazu werden Operationen zum Erfragen und Setzen der Farbe angeboten. Der Framebuffer dient als Schnittstelle zwischen Algorithmen und Ausgabegerät, welches die Daten aus dem Framebuffer anzeigen kann. Das Raster-Problem kann nun losgelöst von den Ausgabegeräten betrachtet werden. Abschnitt 1.8 thematisiert später ein Problem, dass durch diese Loslösung entstehen kann. Das Problem entsteht, wenn eine Reduzierung der Farbanzahl zur Ausgabe auf dem Ausgabegerät notwendig ist. 9

1.3. FITTING-ALGORITHMEN 10 1.3 Fitting-Algorithmen Durch einen Fitting-Algorithmus findet eine Optimierung vor dem eigentlichen Rastern statt. Dabei wird das zu rasternde Objekt am Raster des Framebuffers ausgerichtet. Ziel des Algorithmus ist es, eine optimale Überdeckung zwischen den Punkten des Rasters und dem Objekt zu finden. Es ist wichtig, möglichst viele Punkte des Objekts in das Raster zu übertragen, da ansonsten das gerasterte Objekt stark von der Vorlage abweicht. Am Beispiel der Typografie wird durch eine schlechte Überdeckung der Glyph verzerrt und das Lesen wird dadurch erschwert. Deshalb versucht die Typografie durch das Setzen von Glyphen die Lesbarkeit eines Textes zu verbessert. Beispielsweise werden Buchstaben in bestimmten Situationen enger zusammen oder weiter auseinander gesetzt. Ein Beispiel hier für ist die Verwendung von Ligaturen oder das Vermeiden von Glyphenkollisionen. Die Ziele der Typografie und des Rasterns können im Gegensatz zueinander stehen. Es ist ein Kompromis nötig um eine gute Lesbarkeit zu gewähren. Eine Ausrichtung am Raster ist durch mathematische Berechnungen mit Hilfe einer sog. Fehlermatrix möglich. Das richtige Setzen von Glyphen hingegen ist schwierig, da durch zahlreiche unterschiedliche Situationen eine große Komplexität erreicht wird. Das TrueType-Format nutzt die Erfahrung und Intelligenz des Typographen. Der Gestalter einer Schriftart gibt explizit bei der Erstellung der Schrift Abstände von Glyphen an. Die Abstände können bei der Rasterung genutzt werden, um eine gute Qualität des Glyphen zu erreichen. 1.4 Liniensegment-Rasterung Punkte, Liniensegmente und Polygone bilden die Primitive der Computergrafik. Diese bilden die Grundlage für komplexere Modelle und Anwendungen. Jede mögliche geometrische Struktur kann in Punkte, Linien und Polygone zerlegt werden. Daher ist es wichtig diese Elemente möglichst effizient zu rastern. Meistens wird das Rastern von Primitiven durch Hardware unterstützt, die aber wiederum auf einem Algorithmus basiert. In diesem Abschnitt werden zwei Algorithmen zum Rastern von Liniensegmenten vorgestellt. Der Bresenham-Algorithmus ist ein bekannter Line-Drawing-Algorithmus, der in vielen Bereichen Anwendung findet. Der Symmetric Double Step Algorithmus soll die effiziente Ausutzung von Symmetrien zeigen. 10

1.4. LINIENSEGMENT-RASTERUNG 11 In der Einleitung wurde erläutert, dass die Umrisse aus Liniensegmenten und Splines gespeichert werden. Ein Aufgabenfeld der folgenden Algorithmen ist diese Umrisse eines Textes darzustellen. Auf die Verarbeitung von Splines wird nicht weiter eingegangen. Eine Spline-Kurve kann durch Linien approximiert werden. Somit ist es denkbar, einen Glyphen nur mit den folgenden Algorithmen zu rastern. 1.4.1 Bresenham Algorithmus Der Bresenham Algorithmus ist 1965 vom gleichnamigen Programmierer entwickelt worden. Bei der Entwicklung hat die Effizenz eine hohe Priorität eingenommen. Der Algorithmus arbeitet ausschließlich mit schnellen Integer Berechnungen und vermeidet hierbei ebenfalls weitgehend die Multiplikation und die Division. Zu Beginn soll ein allgemeines Verfahren vorgestellt werden, mit dem eine Linie gerastert werden kann. Aufbauend auf diesem Verfahren soll der Bresenham- Algorithmus erläutert werden. Allgemeine Arbeitsweise und Sampling Dieser Abschnitt stellt das allgemeine Vorgehen des Linien-Rasterns vor und wird ein allgemeines Problem aufzeigen, dass in anderen Algorithmen ebenfalls entsteht. Es wird vorausgesetzt, dass ein Liniensegment durch einen Anfangspunkt (x 1, y 1 ) und einen Endpunkt (x 2, y 2 ) gegeben ist. In mathematischer Sicht kann jeder Punkt, der auf der Linie liegt durch die Gleichung y = m x + b mit m = y 2 y 1 x 2 x 1 = x y und b = y 1 m x 1 bestimmt werden. Im nächsten Schritt muss die Linie aus dem kartesischen Koordinatensystem der Mathematik auf die Koordinaten des Pixelbereichs übertragen werden. Ein Pixel besitzt im Gegensatz zum mathematischen Punkt eine spezifische Größe. Daraus folgt, dass ein Pixel einem Intervall der Linie zugeordnet ist. Es muss also für jede Pixelkoordinate stichprobenartig ein Wert zugeordnet werden. Dieser Prozess wird als Sampling bezeichnet und kann durch unterschiedliche Verfahren verbessert werden. Zur naiven Lösung genügt es zu jeder gegebenen x-koordinate durch die Gleichung einen gerundeten Wert y zu berechnen. Jede Berechnung erfordert die Auswertung der Geradengleichung. Der Bresenham-Algorithmus umgeht dies, indem die nachfolgende Koordinate aus der 11

1.4. LINIENSEGMENT-RASTERUNG 12 Vorigen berechnet wird. Die y-koordinaten lassen sich durch eine rekursive Gleichung beschreiben, in der die k+1-koordinate durch Addieren der Steigung berechnet wird. y k+1 = y k + m und y 1 = y 1 Abbildung 1.1: Line Rastering. Links wurde über x-koordinate iteriert. Rechts wurde über die y-koordinate iteriert. Eine Lösung des Linienrasterns besteht darin iterativ die Koordinaten (x 1, y 1 ),..., (x n, y n) zu berechnen. Das Resultat (siehe Abb. 1.1) ist aber nicht befriedigend, da für eine Steigung m > 1 nicht genügend Sampling-Punkte vorhanden sind. Das Problem lässt sich beheben, indem für eine Steigung m > 1 über die y-koordinate iteriert wird. Das Problem entsteht auch in anderen Zusammenhängen und wird im Folgenden nicht mehr explizit beschrieben. Ein Beispiel ist das später beschriebene Rastern von Polygonen. Vorgehen des Bresenham-Algorithmus Der Bresenham-Algorithmus baut auf dem obigen Konzept auf. Floating-Point- Werte z.b. die Steigung m werden aus Effizienzgründen innerhalb der Iteration elimiert. Eine Fallunterscheidung über den Wert von m ist dazu essentiell. Exemplarisch wird die Idee des Bresenham-Algorithmus ausgehenden vom Startpunkt oder einem bereits berechnetem Punkt (x k, y k ) für 0 < m < 1 besprochen. Durch die Einschränkung der Steigung können für den Folgepunkt nur die Punkte 12

1.4. LINIENSEGMENT-RASTERUNG 13 (x k+1, y k ) oder (x k+1, y k + 1) in Frage kommen. Im Folgenden soll die Frage beantwortet werden, wie effizient entschieden werden kann, welcher Punkt der Orginal-Linie am nächsten liegt. d2?? d1 Abbildung 1.2: Bresenham Algorithmus: Für den nächsten Pixel stehen zwei Folgepixel zur Wahl. Durch den Vergleich der Abstände d 1 und d 2 wird entschieden, welcher Punkt am nächsten zur Linie liegt. Dazu werden die Abstände zwischen Punkt und Linie berechnet und deren Differenz gebildet. Das Ziel wird sein, am Vorzeichen der Differenz d1 d2 (siehe Abb. 1.2) abzulesen, welcher Punkt näher an der Linie liegt. Dazu wird ein rekursives Prädikat benötigt, dass während der Iteration aktualisiert werden kann. [HB97] { p k + 2 y für p k < 0 p k+1 = und p 0 = 2 y x p k + 2 y 2 x für p k 0 Aus dem Prädikat p k kann die Entscheidung getroffen werden, welcher Pixel gerastert werden soll. Im Fall p k < 0 wird der untere Pixel gerastert. Der obere Pixel wird gerastert, wenn die Bedingung p k 0 erfüllt ist. Die Steigung 1 < m < kann nach dem gleichen Prinzip gerastert werden, indem die Iteration über die y-koordinate erfolgt. Somit lassen sich alle Linien im ersten Quadranten des kartesischen Koordinatensystems rastern. Steigungen außerhalb dieses Bereichs können durch eine Vertauschung der 13

1.4. LINIENSEGMENT-RASTERUNG 14 Endpunkte, sowie durch die Ausnutzung der Symmetrie zur x-achse auf das obige Problem zurückgeführt werden. 1.4.2 Symmetric Double Step Algorithmus von Wu In diesem Abschnitt wird ein weiterer Algorithmus zum Linien-Rastern vorgestellt. Der Double Step Algorithmus nutzt die gegebene Symmetrie einer Linie aus. Der Schwerpunkt der Betrachtung liegt auf diesem Vorgehen. Der Algorithmus basiert auf der Idee, dass ein Liniensegment auf Grund der Rasterung nur bestimmte Muster annehmen kann. Für eine Steigung 0 m 1 und einem Pixelabschnitt, der Länge 3, können nur die 4 Muster aus Abb. 1.3 in Frage kommen. Muster 1 Muster 2 Muster 3 Muster 4 Abbildung 1.3: Double Step Algorithmus: 4 mögliche Muster. Die Steigung einer Linie ist konstant. Somit kann im Vorfeld eine weitere Unterscheidung vorgenommen werden. 0 m 1 2 : Für diese Steigung kann Muster 4 ausgeschloßen werden. 1 2 m 1: Für diese Steigung kann Muster 1 ausgeschloßen werden. Es wird an dieser Stelle ebenfalls ein Prädikat gebraucht, das zwischen den drei verbleibenden Mustern wählt. Im Vergleich zum Bresenham-Algorithmus werden durch ein effizientes Prädikat mit einer Prädikatauswertung zwei Pixel gerastert. Der entscheidende Effizienzunterschied gegenüber dem Bresenham-Algorithmus wird durch die Ausnutzung der Symmetrie erreicht. Jedes Liniensegment ist zum Mittelpunkt drehsymmetrisch. Der Double Step Algorithmus rastert aus diesem Grund am gegenüberliegenden Endpunkt jeweils das symmetrische Gegenstück. 14

1.5. FÜLL-ALGORITHMEN 15 Die Ausnutzung der Symmetrie kann in vielen Fällen eine enorme Effizenzsteigerung bringen. In der Typografie sollte besonders auf die Symmetrien geachtet werden. Neben dem Effizenzgewinn kann das symmetrische Rastern das Schriftbild verbessern. Glyphen wirken durch das Raster nicht verzerrt und können somit die Lesbarkeit verbessern. 1.5 Füll-Algorithmen Im Anschluß an den letzten Abschnitt werden nun zwei Algorithmen vorgestellt, mit denen Flächen innerhalb der gerasterten Umrisse gefüllt werden können. Eine naive Lösung des Glyphen-Rastern könnte im Füllen der gezeichneten Umrisse bestehen. 1.5.1 Boundary Fill-Algorithmus Voraussetzung für diesen Algorithmus ist ein mit einer bekannten Farbe gerasterter Umriss. Desweiteren muss ein Startpunkt innerhalb dieser Umrisse gewählt werden. Die gesamte Fläche innerhalb der Grenzen wird neu eingefärbt. Es ist keine einheitliche Farbe der inneren Fläche vorausgesetzt. Der Algorithmus boundary fill(x,y) arbeitet nach folgendem rekursiven Schema: 1. Falls die Farbe des Pixels (x,y) mit der Farbe der Grenze oder mit der neuen Farbe übereinstimmt, wird an dieser Stelle die Methode verlassen. 2. Der Pixel (x,y) wird neu gefärbt 3. Rekursiv werden die Nachbarpixel gefärbt. boundary fill(x-1,y) boundary fill(x+1,y) boundary fill(x,y-1) boundary fill(x,y+1) Der Algorithmus kann durch rekursiven Aufruf der vier Diagonalrichtungen erweitert werden. (Siehe Abb. 1.4) 15

1.6. POLYGON-RASTERUNG 16 Abbildung 1.4: Boundary-Fill-Algorithmus: Der Algorithmus arbeitet rekursiv auf den anliegenden Nachbarn. Dabei können entweder vier oder alle acht Nachbarn benutzt werden. 1.5.2 Flood Fill-Algorithmus Der Flood-Fill Algorithmus ist eine Abwandlung des Boundary Algorithmus. Der Vorteil besteht darin, dass die zu füllende Fläche keine Umrisse besitzen muss. Der Algorithmus färbt stattdessen alle gleichfarbigen Pixel einer zusammenhängenden Fläche neu ein. Die Arbeitsweise unterscheidet sich nur im Rekursionsanker, der die Bedingung zum Abbruch der Methode darstellt. 1.6 Polygon-Rasterung Dieser Abschnitt beschäftigt sich mit dem Rastern von Polygonen und gliedert sich in zwei Unterabschnitte. Zu Beginn werden verschiedene Arten von Polygone klassifiziert. Jede Klasse von Polygonen hat bestimmte Eigenschaften. Die Einteilung in Klassen kann bei der Wahl des Algorithmus ausgenutzt werden, indem der Algorithmus die Eigenschaften des Polygons berücksichtigt und geeignet ausnutzt. Im zweiten Unterabschnitt wird ein Scan Line-Algorithmus vorgestellt, der es ermöglicht Glyphen und Polygone zu rastern. Ein Glyph kann ebenfalls als Polygon aufgefasst werden. Somit korresponiert dieser Abschnitt mit den Aufgaben des vierten Schritt des Font-Rasterizers. 1.6.1 Charakterisierung von Polygonen Ein Polygon lässt sich am einfachsten durch eine Folge von Eckpunkten beschreiben. Die Reihenfolge dieser Punkte beschreibt, zwischen welchen Punkten eine Kante verläuft. Abbildung 1.5 zeigt verschiedene Arten von Polygonen. Die verschiedenen Polygone lassen sich in Klassen einteilen. Diese sind nicht disjunkt. Eine mögliche Einteilung in verschiedene Klassen ist: 16

1.6. POLYGON-RASTERUNG 17 3 4 4 2 5 3 1 2 1 2 1 3 Abbildung 1.5: Verschiedene Polygonarten: Dreieck, nicht konvexes Polygon, konvexes Polygon (es existiert eine Verbindunglinie, die nicht innerhalb des Polygons verläuft), überlappendes Polygon Das einfachste Polygon ist das Dreieck. Jede beliebige Figur kann als Menge von Dreiecken approximiert werden. Dabei können neue Zwischenpunkte in die Figur eingefügt werden. Die Arbeit mit Dreiecken lässt sich stark optimieren, denn es gibt nur wenige Sonderfälle die beim Rastern eines Dreiecks auftreten können. DirectX lässt beispielsweise als Primitive nur Punkte, Linien und Dreiecke zu. Zwei weitere Klassen von Polygonen werden durch die Unterteilung in konvexe Polygone und nicht konvexe Polygone gebildet. Ein Polygon heißt konvex, falls alle möglichen Liniensegmente, ausgehend und endend auf dem Polygonrand, innerhalb des Polygons liegen. Ein Polygon wird als nicht-konvex bezeichnet, falls diese Bedingung nicht erfüllt ist (siehe Abb. 1.5). Eine weitere Eigenschaft eines Polygon ist die Überlappung und charakterisiert eine Klasse. Ein Polygon überlappt sich immer dann, wenn der Umriss des Polygons einen gemeinsamen Schnittpunkt besitzt. Die Menge aller Glyphen fallen in die Klassen der konvexen und nicht konvexen Polygone. Buchstaben sind aber nicht selbst überlappende Polygone. Der folgende Algorithmus ist in der Lage, diese Klasse zu rastern. 1.6.2 Scan Line-Algorithmus Ein Scan Line-Algorithmus arbeitet die Rasterung eines Polygons zeilenweise ab. Die aktuelle Zeile wird hierbei Scan Line genannt. Als erstes werden für jede Scan Line die Schnittpunkte mit dem Polygon berechnet. Die Schnittpunkte werden nach x-koordinate sortiert. Es wird an dieser Stelle zwischen dem regulären Fall und einem Spezialfall entschieden. Im regulären Fall sind die Schnittpunkte keine 17

1.7. TRANSFORMATION EINES BILDES 18 Eckpunkte. Die Anzahl der Schnittpunkte ist gerade. Somit ist im regulären Fall an dieser Stelle klar, welches ein Eintritts- oder Austrittspunkt aus dem Polygon ist. Die Pixel zwischen Eintritts- und Austrittspunkt können nun gefärbt werden. Spezialfälle müssen erkannt und behandelt werden. Ein Spezialfall lässt sich z.b. durch die ungerade Anzahl an Schnittpunkten identifizieren. Dieser Fall tritt auf, wenn ein Schnittpunkt ebenfalls ein Eckpunkt des Polygons ist. Die Behandlung benötigt einen geeigneten Entscheidungsmechanismus. Pm?? Abbildung 1.6: Polygon Rasterung: Im regulären Fall (links) ist klar, welche Schnittpunkte Eintritts- oder Austrittspunkte sind. Ist ein Schnittpunkt zugleich Eckpunkt (rechts) muss durch die Monotonie entschieden werden, ob eine Linie gerastert werden soll. Eine einfache Lösung dieses Problems betrachtet die zwei angrenzenden Kanten des Punktes P m. Diese zwei Kanten werden durch P m und zwei weiteren Eckpunkten beschrieben. Durch einen Vergleich der y-koordinaten dieser drei Punkte kann eine Aussage über die Monotonie der Kanten getroffen werden. Monotonie liegt vor, wenn alle drei y-koordinaten in abnehmender oder steigender Größe vorliegen. Beim Vergleich ist die Reihenfolge der Eckpunkte relevant (siehe 1.6.1). Der Eckpunkt P m bildet einen Extrempunkt relativ zur Scan Line, genau dann wenn keine Monotonie vorhanden ist. In diesem Fall ist P m kein Schnittpunkt und wird zum Rastern nicht in Betracht gezogen. 1.7 Transformation eines Bildes In diesem Abschnitt werden zwei grundlegende Funktionen und Algorithmen zur Transformation eines Bildes vorgestellt. Diese Algorithmen fallen ebenfalls in den 18

1.7. TRANSFORMATION EINES BILDES 19 Bereich der Rasterung, da sie auf Pixelbereichen operieren. Eine Anwendung im typografischen Rastern liegt im Bereich der Embedded Systems. Kleine Systeme können wegen Resourcenknappheit Glyphen als vorgerasterte Bitmaps speichern. Damit entsteht die Notwendigkeit, einen Text aus diesen Bitmaps zusammenzustellen. Diese Schriften werden als Bitmap-Fonts bezeichnet. In den zwei Unterabschnitten werden die Skalierung und die Rotation vorgestellt. Die mathematischen Ansätze lassen sich auf die Koordinaten-Transformation übertragen und sind somit für den zweiten Schritt des TrueType-Rasterizers relevant. 1.7.1 Skalierung Die Skalierung eines Bildes um (s x, s y ) lässt sich durch eine skalare Multiplikation berechnen. x = s x x y = s y y Diese Gleichung lässt sich in einer Matrix darstellen, die effizient vom Computer berechnet werden kann. ( ) ( ) ( s x 0 x = 0 s y y Dieser geometrischer Ansatz setzt voraus, dass jeder Pixel einzeln transformiert wird. Die Transformation von Koordinaten ist durch die Matrixdarstellung effizient berechenbar. Die Veränderung der Farbwerte durch die Skalierung wird aber nicht beachtet. Der skalierte Pixelbereich kann dadurch große Farbflächen oder den Verlust von Informationen aufweisen (siehe Abb. 1.7). Das gleiche Problem wird im nächsten Abschnitt thematisiert. x y ) 1.7.2 Rotation Geometrischer Ansatz Die Rotation eines Bildes um einen Wert Θ lässt sich auf die Geometrie zurückführen. Eine einfache Lösung besteht darin, das Bild punktweise zu rotieren. x = x cos(θ) y sin(θ) 19

1.7. TRANSFORMATION EINES BILDES 20 y = y sin(θ) x cos(θ) Diese Berechnung kann in Matrixdarstellung umgewandelt werden. ( ) ( ) ( cosθ sinθ x = sinθ cosθ y Das Hauptproblem der Rotation (und auch der Skalierung) resultiert daraus, dass die meisten Ergebnisse keine Ganzzahlen sind und nicht direkt gerastert werden können. Die errechneten Pixel-Koordinaten können durch geeignete Rundungen den Koordinaten angepasst werden. Es ist jedoch darüber hinaus erforderlich die Farbwerte der Pixel entsprechend den durchgeführten Rundungen anzupassen. In Abbildung 1.7 überdeckt der rotierte Pixel vier andere Pixel auf dem Raster. Der Farbwert muss geeignet verteilt werden. Die Information des Bildes wird auf jeden Fall verfälscht. x y ) (0,0) (0,0) Abbildung 1.7: Beim Skalieren (links) entstehen große Farbflecken oder ein Fläche, die kleiner als ein Pixel sein kann. Beim Rotieren (rechts) entsteht das Problem, dass eine Farbe auf mehrere Pixel verteilt werden muss. Lösungsansätze für dieses Problem bietet die digitale Filterung. Es wird auf die Lösung nicht näher eingegangen, da dies weit aus dem Bereich der Rasterung raus führen würde. Im folgenden Algorithmus wird stattdessen exemplarisch eine Optimierung des Problems anhand der Rotation vorgestellt. 20

1.7. TRANSFORMATION EINES BILDES 21 Rotation durch Scheren Der Algorithmus basiert auf der Idee, eine Rotation durch Scher-Transformationen anzunähern. Eine Scher-Transformation kann in x- und y-richtung geschehen. Durch die Multiplikation mit einer Streck-Matrix wird jeweils die x- oder y- Koordinate um einen Skalar a vervielfacht. ( ) ( ) 1 a 1 0 M x = und M y = 0 1 a 1 Die Idee des Algorithmus ist es, durch eine gezielte Anwendung des Streckens eine Rotation anzunähern (Siehe Abb 1.8). Orginal x-shearing y-shearing x-shearing Abbildung 1.8: Durch drei Scher-Operationen wird die Rotation um 45 Grad angenähert. ( cosθ sinθ sinθ cosθ ) Ziel = ( 1 a 0 1 ) ( 1 0 b 1 ) ( 1 c 0 1 ) Eine angenäherte Lösung des Gleichungssystems ist a = c = tan( Θ 2 ) und b = sinθ. Im Hinblick auf eine bessere Filterung werden die Werte wie folgt gewählt [Wyv93]: a = c = tan( Θ 2 ) Def = : 1 n, b = 2n 1 + n 2 Der Algorithmus arbeitet in drei Stufen. Zu Beginn wird das Bild in x-richtung gemäß der Matrix gestreckt. Es folgt danach die Streckung in y-richtung und anschließend nochmals eine Streckung in x-richtung. Aus dieser Arbeitsweise lassen sich Vorteile ziehen. Eine Streckung erfolgt jeweils nur in eine Richtung. Die andere Richtung bleibt konstant. Der Vorteil 21

1.8. DITHERING 22 besteht darin, dass auf einer ganzen Reihe von Pixeln gearbeitet werden kann. In jeder Stufe des Algorithmus wird das Bild zeilenweise gefiltert und gerastert. Die aktuelle Linie wird als Scan-Line bezeichnet. Scan Line Abbildung 1.9: Der ursp rungliche Pixel erhält durch das Scheren die Form eines Paralellogramms. In diesem Fall überdecken zwei Parallelogramme einen Pixel. Die Farbe muss aus diesen zwei Pixeln ermittelt werden. Im Idealfall wird ein Pixel des Rasters von zwei gestreckten Pixeln überdeckt. Die Farbe muss in diesem Fall nur aus zwei Pixeln zusammengemischt werden. 1.8 Dithering In Abschnitt 1.2.2 wurde die Abstraktion des Framebuffers vorgestellt, auf dem die genannten Algorithmen arbeiten. Die Farbtiefe des Framebuffers muss nicht zwangsläufig mit der Farbtiefe des Ausgabegerätes identisch sein. Es entsteht das Problem, dass möglicherweise die Farbtiefe verringert werden muss. Das Problem betrifft nicht nur das Ausgabegerät. Bei Kopiervorgängen von verschiedenen Pixelbereichen, die relevant bei Bitmap-Fonts sind, muss ebenfalls auf verschiedene Farbtiefen reagiert werden. Im Folgenden wird ein Verfahren vorgestellt, das dieses Problem durch das sogenannte Dithering löst. Dazu betrachten die ersten zwei Unterabschnitte die Repräsentation von Farben. Unterabschnitt 1.8.3 stellt im Anschluss den Floyd-Steinberg Algorithmus vor, der ein Ordered Dithering mit Fehlerstreuung realisiert. 22

1.8. DITHERING 23 1.8.1 Farbrepräsentation Wie in Abschnitt 1.2.2 erwähnt, gibt die Farbetiefe die Anzahl der Bits an, die zur Speicherung einer Farbe zu Verfügung stehen. Es gibt verschiedene Modelle, die eine Farbe beschreiben können. Das Bekannteste ist das RGB Modell. Das RGB Modell unterteilt eine Farbe in die Komponenten Rot, Grün, Blau. Jede Komponente kann durch einen Wert gewichtet werden. Dieser Wert wird in unterteilten Bitbereichen gespeichert. Die Gesamtfarbe entsteht aus dem Mischen der drei Farbkomponenten. 1.8.2 Color Look Up Table Ein Color Look Up Table (CLUT) kann ein wichtiges und effektives Werkzeug für Dithering-Algorithmen darstellen. Durch die Reduktion der Farbanzahl muss eine Wahl der noch zu verwendenden Farben getroffen werden. Ohne Einsatz einer CLUT werden aus dem ursprünglichen Spektrum gleichmäßig Farbwerte gewählt. Für ein Bild, das Farben aus einem begrenzten Spektrum benutzt, kann die Auswahl und somit die Qualität optimiert werden, indem die Auswahl aus dem verwendeten Spektrum erfolgt. Die Auswahl der verwendeten Farben wird in der CLUT in geordneter Reihenfolge gespeichert. Mit dieser Ordnung kann nun eine gegebene Farbe einer Farbe des reduzierten Spektrums zugeordnet werden. 1.8.3 Ordered Dithering mit Fehlerstreuung Es wird im Folgenden der Floyd-Steinberg-Algorithmus betrachtet. Der Algorithmus arbeitet einen Bereich pixelweise ab. Die Reihenfolge ist bei der Abarbeitung festgelegt (ordered). Jede Farbe eines Pixel wird während der Abarbeitung mit einer Farbe der reduzierten Auswahl zugeordnet. Dabei kann eine Farbe durch einen Vergleich in der CLUT, einer passenden Farbe zugeordnet werden. Die Differenz zwischen Orginal-Farbe und der reduzierten Farbe wird den noch nicht bearbeiteten Nachbarpixeln aufaddiert. Dabei wird die in Abb. 1.10 gezeigte Gewichtung vorgenommen.[tb94] Die Verteilung der Gewichtung setzt dabei voraus, dass die Abarbeitung der Pixel zeilenweise von links nach rechts geschieht. Dieses feste Abarbeitungsmuster verhindert, dass bearbeitete Pixel verändert werden oder Pixel zu stark verfälscht werden. 23

1.9. ALIASING 24 bearbeitet aktuell 7/16 3/16 5/16 1/16 Abbildung 1.10: Die aktuelle Differenz zum gerundeten Farbwert wird an die benachbarten Pixel weitergegeben. Die Weitergabe unterliegt einer Gewichtung und hängt von der Abarbeitunsrichtung ab. Es gibt verschiedene Abwandlungen des Floyd-Steinberg-Algorithmus, die die Abarbeitung betreffen. Es ist möglich, den Pixelbereich schlangenlinienartig oder auch diagonal abzuarbeiten. Je nach Anwendung kann das Resultat verbessert werden. Es ist dabei aber notwendig, eine andere Verteilung der Gewichtung auf die Nachbarn vorzunehmen. Abbildung 1.11: Floyd-Steinberg: (links) Orginalbild mit 255 Farben. (mitte) Reduzierung auf 2 Farben ohne Dithering. (rechts) Reduzierung auf 2 Farben mit Floyd-Steinberg- Dithering 1.9 Aliasing Ein Aliasing-Effekt entsteht in der Computergrafik, wenn durch gegebene Rahmenbedingungen eine Reduzierung der Informationen durchgeführt werden muss. Dieses Problem betrifft beispielsweise das Sampling einer Geradengleichung (siehe Abschnitt 1.4.1) oder auch die Reduktion der Farbtiefe (siehe Abschnitt 1.8). Der visuelle Effekt des Aliasing ist typischer Weise als Treppenstufe (siehe Abb. 1.1, rechts) oder in anderen ungewollten Mustern wahrzunehmen. Diese Muster beeinträchtigen die Qualität des Glyphen und wirken sich dabei auf die Lesbarkeit eines Textes aus. Deshalb ist es wichtig, den Aliasing-Effekt zu minimieren. 24

1.9. ALIASING 25 Der Bereich des Anti-Aliasing versucht diesen Erscheinungen entgegen zu wirken. Es werden im Folgenden zwei Ansätze vorgestellt. Abschnitt 1.9.1 beschreibt das objektbasierte Anti-Aliasing. Anschließend wird der Bresenham-Algorithmus durch Anti-Aliasing erweitert, um den Treppeneffekt beim Linien-Rastern zu minimieren. Abschnitt 1.9.2 beschreibt die Subpixel-Rendering-Technik, die beim ClearType-Format benutzt wird. 1.9.1 Objektbasiertes Anti-Aliasing Das objektbasierte Anti-Aliasing arbeitet auf der Ebene der Primitive. Punkte, Linien und Polygone werden durch eine Abstufung der Farbwerte an den Rändern dem Hintergrund angepasst. Es entsteht eine glatte Kante. Durch die Anwendung auf der Ebene der Primitive wird das gewünschte Gesamtbild erhalten. Das objektbasierte Anti-Aliasing kann durch eine Erweiterung der bekannten Algorithmen erreicht werden. Exemplarisch wird im nächsten Unterabschnitt der Bresenham-Algorithmus durch Anti-Aliasing erweitert. Bresenham-Erweiterung Die oben genannte Abstufung der Farbwerte kann durch die folgende Technik des Alpha Blending durchgeführt werden. Der Alphawert ist neben Rot, Grün und Blau eine zusätzliche Farbkomponente und beschreibt die Transparenz einer Farbe. Das Spektrum reicht von Durchsichtig bis Solid. Es gibt verschiedene Operationen, den Alpha-Wert zweier Farben zu verrechnen. Der over-operator ist zur Berechnung der Überlagerung einer existierenden Farbe B mit der neuen Farbe A passend. Seien dazu A = (α A, R A, G A, B A ) und B = (α B, R B, G B, B B ) zwei Farbrepräsentationen (siehe 1.8.1). Der Farbwert C aus der Berechnung C = AoverB berechnet sich durch die folgende Formel[Wyv93]. C = α A R A G A + (1 α A ) R B G B B A B B 25

1.9. ALIASING 26 Die eigentliche Erweiterung des Bresenham-Algorithmus besteht in der mehrfachen Anwendung des Zeichnens einer Linie. Verschiedene Linien werden mit jeweils einem kleinen Offset zum Start- und Endpunkt gezeichnet. Die Alpha-Werte der Linien können beispielweise durch 1 2, 1 3, 1 4,... gewählt werden. 1.9.2 Subpixel Rendering Die Microsoft ClearType Technologie benutzt eine andere Möglichkeit des Anti-Aliasing um Glyphen zu rastern. Das ClearType Format ist speziell für den Einsatz an einem LCD-Bildschirm entwickelt worden und nutzt die technischen Gegebenheiten eines LCD-Bildschirms aus. Die Funktionsweise ist frei nach Steve Gibson[Gib07] wiedergegeben. Das Raster eines LCD-Bildschirms lässt sich auf Pixelebene weiter unterteilen. Dabei besteht ein einzelner Pixel weiterhin aus drei weiteren Leuchtelementen, die sich jeweils separat in der Intensität steuern lassen. Die drei Komponenten entsprechen der Farbrepräsentation, die in Abschnitt 1.8.1 besprochen wurde. Ein Pixel unterteilt sich in drei gleich große Spalten für je eine Komponente. Dies ermöglicht nicht nur einen gesamten Pixel anzusteuern, sondern auch die Intensität der jeweiligen Subpixel. Diese Unterteilung auf Subpixelebene ermöglicht bei der Font-Rasterung eine dreifach höhere horizontale Auflösung. Das Subpixel Rendering ist vom Gerät abhängig. Es muss zum Beispiel auf die Anordnung der Rot-,Grün- und Blau-Komponenten des Gerätes geachtet werden. Die Umrisse von Glyphen müssen entsprechend der 3fach höheren horizontalen Auflösung transformiert werden. Das Rastern des Glyphen geschieht über die Entscheidung, ob ein Subpixel innerhalb dieser Umrisse liegt. Der Subpixel wird im positiven Fall ausgeschaltet, indem die Intensität auf 0 gesetzt wird. Im anderen Fall wird dieser Subpixel angeschaltet und der Wert der Intensität ist 1. Diese vereinfachte Beschreibung liefert einen schwarzen Glyphen auf weißem Hintergrund. Es entsteht aber durch die vorgegebene Farbe der Subpixel ein Problem, das zusätzlich gelöst werden muss. Es entsteht an den Rändern der Glyphen ein Farbsaum. Dieser resultiert daraus, dass die Subpixel nur in zwei verschiedenen Intensitätsstufen angesteuert wurden. Für einen schwarzen Subpixel wurde keine Intensität benutzt. Am Rand des Glyphen wird die Farbe des ersten nicht schwarzen Pixels wegen des Kontrastes vom Auge besonders wahrgenommen. Um dieses Problem zu lösen, wird die Intensität der Subpixel am Rand abgestuft. Es wird ein Filter benötigt, der dies leistet. 26

1.9. ALIASING 27 Abbildung 1.12: Subpixel-Rendering: Der linke Umriss des Glyphen soll gerastert werden. Der Glyph wird mit ganzen Pixel (Mitte) und mit Subpixeln (Rechts) gerastert. Das Filtern geschieht in zwei Stufen. Die Entscheidung u ber das schlichte Ein- oder Ausschalten eines Subpixels bleibt bestehen. Der Filter a ndert jedoch die Verteilung der Intensita t. In der ersten Stufe werden der linke und rechte Nachbar-Subpixel zusa tzlich in die Filterung einbezogen. Der Raster-Algorithmus liefert die Intensita t (Wert 0 oder 1) fu r jeden Subpixel. Der Filter gibt die Intensita t zu je einem Drittel den drei Subpixeln weiter. In der zweiten Stufe wird die Intensita t, die den drei Subpixeln aus der vorigen Stufe u bergeben wurde, ein zweites Mal auf die gleiche Art gefiltert. Linker und rechter Nachbar sowie der zu bearbeitende Subpixel geben die u bergebene Intensita t den Nachbarn ihrer Seits weiter. Es entsteht daraus die in Abbildung 1.13 zu sehende Verteilung der Intensita t auf die fu nf involvierten Subpixel. Das Verfahren entspricht einem farblichen Anti-Aliasing. Dabei werden durch die Farben die Positionen der Subpixel angesteuert. Aus diesem Grund werden bei einer Anwendung des Verfahrens auf einem CRT-Monitor keine optimalen Ergebnisse geliefert. Ein CRT-Monitor kann die vorausgesetzte Unterteilung in Subpixeln nicht korrekt wiedergeben. Die vorgestellten Anti-Aliasing-Verfahren ko nnen helfen die Umrisse der Glyphen zu gla tten. Jedoch tritt dabei durch die Abstufung der Farbwerte am Rand eine 27

1.9. ALIASING 28 1 1/3 1/3 1/3 1/9 2/9 1/3 2/9 1/9 Abbildung 1.13: Subpixel-Rendering: Die aktuelle Intensität eines Pixels wird auch auf die vier benachbarten Pixel verteilt.. Unschärfe auf. Es ist daher ein Kompromis zwischen Schärfe und Kantenglättung zu finden. Dies zeigt, wie auch an anderen Stellen zu sehen, dass die angestrebte optimale Lesbarkeit äußerst schwer zu erreichen ist. 28

Kapitel 2 Shading Kai Lawonn 2.1 Einleitung Das Schattieren von geometrischen Oberflächen ist ein wichtiges Teilgebiet der Computergraphik. Viele Modelle zur Bestimmung des Aussehens von geometrischen Figuren sowie Formen wurden entwickelt, um solche Objekte realistischer wirken zu lassen. Hierbei unterscheidet man zunächst globale und lokale Beleuchtungsmodelle. Globale Beleuchtungsmodelle simulieren die Ausbreitung von Licht Beispiele für globale Beleuchtungsmodelle sind Raytracing oder Radiosity. Lokale Beleuchtungsmodelle, um die es in dieser Arbeit auch vorrangig gehen soll, simulieren die Wechselwirkung zwischen Licht auf Oberflächen. Bei diesem Beleuchtungsmodellen wird die Farbe beziehungsweise die Helligkeit eines Objekts berechnet. Für dieses Berechnungen werden lediglich durch die Blickrichtung, den Lichteinfall sowie einiger Materialkonstanten von Objekten und den Lichtquellen bestimmt. Hierbei wird die indirekte Beleuchtung völlig ausgeschlossen weiterhin berechnen globale Beleuchtungsmodelle Schatten, die die Objekte werfen, die auch beim lokalen Beleuchtungsmodellen nicht berechnet werden. In dieser Arbeit werden zwei Beleuchtungsmodelle: Lambert- und Phong-Beleuchtungsmodell vorgestellt sowie drei Shading-Verfahren, die sich als die Hauptverfahren der Schattierungsalgorithmen herauskristallisiert haben: Flat-, Gouraud- und das Phong-Shading. Weiterhin habe ich noch zwei weitere Kapitel verfasst, die das Thema Licht aufgreifen: Das erste Kapitel behandelt die Frage, was passieren kann, wenn das Licht mit einem Objekt in Wechselwirkung steht, während das sechste Kapitel Kapitel das Licht aus 29

2.2. GRUNDLAGEN 30 einem geschichtlichen Aspekt behandelt. Hierbei wird beschrieben, wie sich im Laufe der Zeit immer mehr physikalische Theorien über das Licht entwickelten. 2.2 Grundlagen 2.2.1 Lichtausbreitung Wenn das Licht in eine Szene eintrifft und mit einem Objekt in Wechselwirkung steht kann das Licht 1. absorbiert, 2. reflektiert oder 3. transmittiert werden. Die Bedeutung der einzelnen Begriffe wird im Folgenden erklärt. 1. Der Begriff Absorption (lat.: absorptio = aufsaugen) bedeutet im Allgemeinen etwas in sich aufnehmen. Im Zusammenhang mit Licht ist darunter das Aufnehmen von Licht bestimmter Frequenz durch das vorhandene Material gemeint. Wird also zum Beispiel ein schwarzes Material mit weißem Licht bestrahlt, so wird das Licht fast vollständig vom Material absorbiert. Die Folge ist, dass uns das Material schwarz erscheint, wobei man bei solchen Formulierungen vorsichtig sein muss: Insbesondere heißt es nicht das Licht wird absorbiert, weil das Material schwarz ist, sondern vielmehr, gerade weil das Licht absorbiert wird, erscheint uns das Material schwarz. Abbildung 2.1: Absorption 2. Der Begriff Reflexion (lat. reflectere: zurückbeugen, drehen) bedeutet im Allgemeinen etwas zurückwerfen. Im Zusammenhang mit Licht versteht man

2.2. GRUNDLAGEN 31 darunter, dass Zurückwerfen von Licht mit bestimmter Wellenlänge. Hierbei werden noch zwei weitere Unterscheidungen vorgenommen: spiegelnde (specular) und ausbreitende (diffuse) Reflexion. Beide Reflexionstypen sind abhängig von dem Material mit dem sie interagieren. Bei der spiegelnden Reflexion stelle man sich eine nahezu perfekte Oberfläche vor, die glatt ist und ohne kleine Unebenheiten. Beispiele hierfür sind ein Spiegel oder ein stiller Teich. Schauen wir in einen Spiegel, werden die Lichtquanten, die auf einen Spiegel treffen, nahezu komplett reflektiert, nach dem Gesetz: Einfallswinkel=Ausfallswinkel (siehe Abbildung 2), und wir sehen uns selber wieder. Dies gilt aber nur bei einem perfektem Spiegel. Abbildung 2.2: Spiegelnde Reflexion bei einem idealen Spiegel Abbildung 2.3: Diffuse Reflexion Im Gegensatz zu der spiegelnden Reflexion findet sich die ausbreitende Reflexion auf einer Oberfläche wieder, die nicht frei von Unebenheiten ist. Beispiel hierfür ist zum Beispiel Holz. Die Unebenheiten sind auf der Oberfläche so klein, dass die Reflexion des Strahls in eine nicht vorhersehbare Richtung reflektiert wird (siehe Abbildung 3). Das Kosinusgesetz von Lambert erklärt einen einfachen Zusammenhang zwischen der reflektierenden Lichtintensität in Abhängigkeit des Einfallswinkels: I = A L cos θ,

2.2. GRUNDLAGEN 32 wobei I die Lichtstärke, L eine Konstante, A ein Flächenelement und θ der Winkel zwischen der Normale und dem einfallenden Licht bedeutet. Diese Gleichung ist allerdings nur für eine ideale diffuse Fläche gültig, auf der der Strahl gleichermaßen in alle Richtungen reflektiert wird. Vereinfacht kann man auch nach dem Lambert-Strahler schreiben: I = I max cos θ. Hierbei nimmt die reflektierende Lichtstärke mit größer werdendem Reflexionswinkel ab. Die Lichtstärke ist direkt proportional zum Eintrittswinkel, das heißt sie nimmt mit größer werdendendem Reflexionswinkel ab. Für den Lambert-Strahler gilt, es ist egal aus welcher Richtung man auf die Fläche schaut, sie erscheint gleich hell. Abbildung 2.4: Lambert-Strahler 3. Der Begriff Transmission (von lat. trans - hinüber und mittere - schicken) bedeutet im Allgemeinen etwas übertragen. Im Bezug auf Licht ist damit die Abnahme der Lichtintensität gemeint, wenn sie durch einen Stoff hindurch strahlt. Ein Beispiel ist zum Beispiel eine Flüssigkeit. Das Licht mit einer bestimmten Intensität trifft auf eine Flasche, in der sich eine Flüssigkeit befindet. Vereinfacht denken wir uns die Flasche als nicht vorhanden, bzw. die Flasche übt keinen Einfluss auf das Licht aus. Dann wird das auftreffende