Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog RSS Jörn Loviscach

Generative Computergrafik

"Generative Computergrafik" ist eine Pflichtveranstaltung des Medieninformatik-Studiums. Das erste Semester zählt zum Grundstudium (Grundlagen der Computergrafik), das zweite zum Hauptstudium (3D-Grafik und -Animation).

Alle letzten Änderungen dieser Webseite sind durch rote Schrift gekennzeichnet!
 

Ziel

Diese Veranstaltung soll die grundlegenden Algorithmen und die in der aktuellen Praxis benutzten Verfahren vermitteln, die für grafische Bedienoberflächen, Grafikdesign, Animationsfilm und nicht zuletzt auch für Spiele eingesetzt werden. Zentraler Punkt ist dabei die 3D-Programmierung für Design- wie auch für Echtzeitanwendungen.
 

Vorkenntnisse

Eine solide Kenntnis des Mathematikstoffs der ersten beiden Semester wird vorausgesetzt. Der Laborteil baut auf Java-Grundlagen auf (Arithmetik, Objekte, Arrays, Grundlagen der Vererbung); die zumindest elementare Beherrschung von Interfaces und Exceptions ist wünschenswert.
 

Prüfungsleistungen

Der Laborteil (Prüfungsordnung: "praktische Entwicklungsarbeit") ergibt im ersten Semester eine Note für das Vordiplomzeugnis, im zweiten Semester eine Note für das Diplomzeugnis. Die Laboraufgaben prüfen den Inhalt der Vorlesung; eine Klausur findet nicht statt.
 

Unterrichtsform

Die Vorlesung ist seminaristisch; ich werde also versuchen, den Stoff im Gespräch mit Ihnen zu erarbeiten. Wenn Sie nicht folgen können, bremsen Sie mich sofort, indem Sie nachfragen. Das ist eine strikte Anweisung an Sie, keine freundliche Empfehlung. Sie können davon ausgehen, dass andere Studenten dieselben Probleme haben -- das aber nicht kundtun. Um eine Frage zu stellen, müssen Sie sich nicht mit Handzeichen melden. Unterbrechen Sie mich einfach bei der nächstmöglichen Gelegenheit.
 

Skript

Meine Unterlagen scanne ich ein und stelle sie zum Download bereit. Ich hoffe, meine Schrift ist halbwegs lesbar; ansonsten melden Sie sich bitte zwecks Entzifferung. Die Seiten etwa mit pdfTeX und einem Grafikprogramm sauber aufzubereiten, würde mich mehrere Stunden pro Vorlesung kosten. Diese Zeit möchte ich lieber dazu benutzen, an der Didaktik zu arbeiten.

Eingeschobene Seiten sind nach dem Muster 10, 10a, 10b, 11 nummeriert. Ändere ich Skripte im Nachhinein z.B. wegen Fehlern (Sollten die etwa jemals passieren? ;-), stelle ich zusätzlich eine kommentierende HTML-Datei in das jeweilige Verzeichnis.

Mangels Zeit ausgelassene Stellen markiere ich mit einer Wellenlinie am rechten Rand. Diese Stellen sollten Sie zwar zur Kenntnis nehmen, Teil von Prüfungen sind sie aber nicht.
 

Labor

Im Laborteil soll Java 2 Plattform zum Beispiel unter Suns Entwicklungssystem Forte for Java Community Edition benutzt werden (Freeware für Windows/Linux/Solaris). Forte dient hier nicht als Werkzeug für grafische Oberflächen, sondern vor allem als Oberfläche für den Java-Debugger.

Andere Systeme werden nicht vorausgesetzt, weil im Grundstudium nur Java, aber nicht C++ gelehrt wurde. Bei Nachweis entsprechender Vorkenntnisse lasse ich aber im Laborteil auch C++ mit Klassenbibliotheken wie MFC oder Qt zu (vorbehaltlich deren Verfügbarkeit im Labor).

Es ist sinnvoll, dass Sie den Laborteil in Zweiergruppen absolvieren. Einergruppen lasse ich zwar zu; die Anforderungen bleiben aber dieselben. Die Gruppeneinteilung sowie die Verteilung auf die 14-täglichen Labortermine A und B (siehe Terminplan) geschieht in der Veranstaltung am 4. Oktober.

Die Anwesenheit bei den Laborterminen ist verpflichtend, außer:

Bei fortgesetzter unentschuldigter Abwesenheit muss ich Ihre Leistung im Laborteil mit der Note 5,0 beurteilen. Wegen erlaubter Abwesenheit nicht erbrachte Leistungen sind schnellstmöglich nachzuholen.

Der Laborteil dient sowohl dem Lernen als auch der Bewertung -- zwei Ziele, die sich oft beißen. Deshalb möchte ich das eine so weit wie möglich von dem anderen trennen. Und zwar auf folgende Weise:

Durchführung ohne Bewertung. Ich stehen Ihnen bis zum nächsten Labortermin (s. nächster Punkt) für Fragen zur Verfügung, auch per E-Mail. Ich werde aber darauf achten, Ihnen nur Denkanstöße z.B. zur Fehlersuche zu geben, keinesfalls fertige Lösungen. Um von dem Laborteil zu profitieren, sollten Sie keine fremden Programme abkupfern. Weil Sie diese im Zweifelsfall nicht so gut verstehen wie ihre selbstgeschriebenen, bringt Ihnen das auch bei der Benotung Nachteile.

Bewertung des Resultats. Spätestens beim nächsten Labortermins (also im Normalfall nach 14 Tagen) muss die Gruppe ihr Programm gemäß Aufgabenstellung vorlegen. Die laut Prüfungsordnung geforderte Dokumentation ist Teil des Programms, wie sich aus dem Folgenden ergibt. Für das Programm vergebe ich 0 bis 3 Punkte, und zwar die kleinste Punktzahl aus den vier Kategorien folgender Tabelle:
 

Punktzahl Problemlösung Strukturierung/Klassen Wahl der Bezeichner Kommentierung
0 wesentlicher Teil fehlt konfus konfus praktisch nicht vorhanden
1 weitgehend, aber z.B. wichtige Ausnahmefälle nicht behandelt teilweise logische Mängel teilweise verwirrend Das Programm ist seine eigene Dokumentation. Jede Klasse und jede Methode enthält eine Beschreibung des Algorithmus und wichtiger Variablen (ca. 100 Wörter für die Hauptklasse bis hinab zu ca. 10 Wörtern für eine wichtige Methode einer Hilfsklasse).
2 praktisch vollständig logisch verständlich Zusätzlich: Alle kritischen Stellen sind kommentiert
3 vollständig stark modular, leicht zu erweitern und anzupassen selbsterklärend Zusätzlich: Alle nicht auf den ersten Blick einleuchtenden Stellen sind kommentiert.

Ergeben sich in allen Kategorien 3 Punkte und geht das Programm deutlich über die Aufgabenstellung hinaus, indem es z.B. in größerem Rahmen Java Swing, Java-Objektmodell oder Exceptions nutzt, vergebe ich 4 Punkte für das Programm.

Außerdem stelle ich Fragen an jedes Gruppenmitglied, um festzustellen, inwieweit es das Programm verstanden hat. Auch das bewerte ich mit Punkten:

Von diesen beiden Punktwertungen pro Teilnehmer und Aufgabe verwende ich die jeweils kleinere und bilde daraus zum Schluss die Gesamtnote des Laborteils. Wer bei jeder Aufgabe exakt einen Punkt erzielt, besteht den Laborteil mit der Note 4,0 (sofern unentschuldigte Abwesenheit oder mangelhafte Vorbereitung etc. dem nicht entgegenstehen).
 

Literatur

Das Standardwerk ist immer noch Foley u.a.: "Computer Graphics", ISBN 0-201-84840-6. Es beschreibt zwar Stiftplotter und kennt kein OpenGL; aber dafür kann man sich inzwischen auf die Formeln des immer wieder korrigierten Werks (zwölfte Auflage!) weitgehend verlassen. Für andere Bücher über Computergrafik gilt das nicht so unbedingt ...

Gerade zum Thema Computergrafik kann man sich kostenlos im Web informieren: einfach den Namen des Algorithmus in eine Suchmaschine eintippen. Am zuverlässigsten sind die einschlägigen Kurse von US-Universitäten. Quellen für Algorithmen sowie für aktuelle Nachrichten aus der Spiele-Entwicklerszene sind flipCode, Gamasutra und GameDev.net. Verbindlich für die Prüfung ist aber, wie Begriffe und Algorithmen in der endgültigen Version des Skripts stehen, und nicht, wie sie sich irgendwo im Web finden.
 

Dokumentationen

.

Raum und Zeit

Mittwoch 3. Doppelstunde E509, Labor: jeden zweiten Dienstag 2. und 3. Doppelstunde E306
 

Termine

04. Okt Mi  Überblick; Bitmapbild, Vektorgrafik, 3D-Szene, Zeitablauf; optische Wahrnehmung, Farbmodelle; Einteilung der Labor-Gruppen
10. Okt Di  Labor, Gruppen A: Gammakorrektur und Farbraum-Konvertierung
11. Okt Mi  Beispiel einer 2D-Programmierschnittstelle: Java2D
17. Okt Di  Labor, Gruppen B: Gammakorrektur und Farbraum-Konvertierung
18. Okt Mi  Alpha-Compositing; Bitmap-Korrekturen und -Effekte: Weichzeichner, Staubfilter
24. Okt Di  Labor, Gruppen A: Staubfilter (mit Alpha-Compositing und Weichzeichner)
25. Okt Mi  2D-Transformationen: Verschiebung, Skalierung, Drehung; Verkettung von Transformationen
31. Okt Di  Labor, Gruppen B: Staubfilter (mit Alpha-Compositing und Weichzeichner)
01. Nov Mi  ausgewählte 2D-Algorithmen: Linie, Kreis
07. Nov Di  Labor, Gruppen A: Linienalgorithmus für beliebige Steigung
08. Nov Mi  Antialiasing: Nyquist-Theorem, Bandbreite/Abtastfrequenz, sinc, Supersampling, Filter, stochastisches Sampling; bilineare und bikubische Interpolation
14. Nov Di  Labor, Gruppen B: Linienalgorithmus für beliebige Steigung
15. Nov Mi  Druckraster, Dithering
21. Nov Di  Labor, Gruppen A: Gegenüberstellung verschiedener Antialiasing-Methoden
22. Nov Mi  parametrische Kurven, Teil 1: C0, C1, G0, G1 etc.; kubische Kurven: Hermite, Bézier; Unterteilung, Diskretisierung
28. Nov Di  Labor, Gruppen B: Gegenüberstellung verschiedener Antialiasing-Methoden
29. Nov Mi  parametrische Kurven, Teil 2: quadratische und kubische B-Splines, non-uniform B-Splines, rationale B-Splines, NURBS-Kurven
05. Dez Di  Labor, Gruppen A: Interaktiv steuerbarer rationaler B-Spline
06. Dez Mi  2D-Dateiformate: BMP, TIFF, PNG, GIF, JPEG; PostScript/EPS/PDF, SVG; Schriftarten (PostScript, TrueType)
12. Dez Di  Labor, Gruppen B: Interaktiv steuerbarer rationaler B-Spline
13. Dez Mi  Projektionen und 3D-Transformationen: Camera obscura, Perspektive, Projektionsarten; 3D-Clipping (View Frustrum); Verschiebung, Skalierung, Drehung, Darstellung von Drehungen, Verkettung von Drehungen
19. Dez Di  Labor, Gruppen A: Plotprogramm mit EPS-Ausgabe
20. Dez Mi  homogene Koordinaten: Projektionsformeln, Verkettung von Transformationen
09. Jan Di  Labor, Gruppen B: Plotprogramm mit EPS-Ausgabe
10. Jan Mi  Sichtbarkeitsberechnung: Backface Culling; z-Sortierung, z-Buffer, Volumen-Rendering, Raytracing
16. Jan Di  Labor, Gruppen A: z-Puffer-Renderer mit interaktiver Drehung
17. Jan Mi  Raytracing: Schnittberechnungen, Spiegelung, Brechung, Schatten; Rekursion, Optimierung (Shadow Maps, Environment Maps)
23. Jan Di Labor, Gruppen B: z-Puffer-Renderer mit interaktiver Drehung
24. Jan Mi  Beleuchtung und Schattierung: Lambert, Phong, Cook-Torrance, Blinn, anisotrope Schattierung; Gouraud-Interpolation, Phong-Interpolation; Bestimmung der Vertexnormalen aus den Flächennormalen
.

Planung für das zweite Semester

globale Beleuchtung, Teil 1: stochastisches Raytracing (Distribution Raytracing), Backward Raytracing (Photon Tracing), Radiosity-Grundlagen
globale Beleuchtung, Teil 2: Radiosity-Details, Optimierung
Texturierung, Teil 1: Farbe, Bump, Displacement etc.; Projektionsarten (plan, zylindrisch, sphärisch, Wrap, kubisch, UV); SAT, trilineare Interpolation, MIP Map
Texturierung, Teil 2: prozedurale Texturen; Volumentexturen, UVW-Koordinaten; Hypertexturen
Modellierung, Teil 1: explizite Flächen f(x,y), parametrische Grundkörper, Boundary Representation, Boolesche Operationen (CSG)
Modellierung, Teil 2: NURBS-Flächen
Modellierung, Teil 3: Subdivision Surfaces
Modellierung, Teil 4: prozedurale Modelle (Fraktale, L-Systeme), Hypertexturen, Metaballs, implizite Flächen (Marching Cubes), 3D-Scan
Animation, Teil 1: Interpolation von Position, Lage, Größe und anderen Parametern, Keyframes, Objekt-Hierarchien; natürliche Interpolation von Drehungen
Animation, Teil 2: Physik (Partikel, Soft Body), prozedurale Animation
Animation, Teil 3: Motion Tracking, Morphing, Bones, Spines, Non-Linear Animation
Echtzeit-Rendering, Teil 1: Rendering-Pipeline, Immediate Mode, Double Buffering; OpenGL-Grundlagen
Echtzeit-Rendering, Teil 2: OpenGL-Details, DirectX-Grundlagen
Echtzeit-Rendering, Teil 3: Retained Mode, Szenengraphen; Java3D und OpenInventor im Überblick
3D-Dateiformate: DXF, VRML, MPEG-4, 3DS, RIB, MetaStream
Post-Processing-Effekte: Halo, Blendenflecke, Bewegungsunschärfe, Tiefenunschärfe
nicht-fotorealistisches Rendering
.

letzte Änderung: 20. Januar 2001