Graphics Programming and Applications
- Lecturer: Dipl.-Inf. Christian Eisenacher, Dipl.-Inf. Manfred Ernst, Dipl.-Inf. Sebastian Buntin
- Term: Winter Term 2007/2008
- Time, Place: Thu 16:00-18:00 00.156 (Übungsraum)
- Hours: 4 SWH
- Field of Study: WPF CE-BA-TW, WPF CE-MA, WPF INF-DH-GD
- Prerequisites: Special Study, benoteter Schein, ECTS (8)
Description
Überblick:
GraPA (Graphik-Programmierung und Anwendungen) beschäftigt sich mit der Implementierungsseite der Computergrafik und ist damit eine optimale Ergänzung zu der theoretischen Ausbildung in den Vorlesungen. Mit wechselnden Schwerpunkten wird im Laufe eines Semesters ein umfangreiches Grafiksystem erstellt bzw. ein bestehendes System erweitert.
Im letzten Semester lag der Schwerpunkt mit der Erstellung eines Rennspieles auf Raster- und Echtzeit-Graphik. Dieses Semester wird mit GraPA:Ray das andere Ende des Spektrums abgedeckt. Ziel ist das Erzeugen von photorealistischen Bildern, z.B. für Spezialeffekte in Kinofilmen mit einem Raytracer. Zur Einstimmung in das Gebiet des Raytracings mag die Gallerie von Yafray dienen.
Voraussetzungen für die Teilnahme sind:
- Teamfähigkeit
- C++
- Grundkenntnisse in Computergrafik
Es ist empfehlenswert, die Vorlesung Computergraphik oder Interaktive Computergraphik gehört zu haben. Ferner ist die Veranstaltung Globale Beleuchtungsberechung hilfreich für das Verständnis für einen Teil der zu implementierenden Algorithmen, wird aber nicht vorausgesetzt.
Zu Beginn planen wir, euch einen Crashkurs zum Thema Raytracing und einen Überblick über Struktur von PBRT zu geben: Intro.
Plan:
Insgesamt wird es bei GraPA:Ray fünf Aufgaben mit je 20 Punkten geben. Die Anzahl der erreichten Punkte entscheidet über die Scheinvergabe und gegebenenfalls die erreichte Note.
Um uns auf die wesentlichen Bestandteile eines Raytracers konzentieren zu können und uns nicht länglich mit der Infrastruktur (Mathematik-Bibliotheken, Dateiformate und das Laden derselben, ...) aufhalten zu müssen, dient uns PBRT als Grundlage. Dieses umfangreiche, modulare System wurde von Matt Pharr und Greg Humpheys als literate programming Projekt in Stanford geschrieben und der Sourcecode unter GPL gestellt. Er wird seit 2000 sehr erfolgreich als Lehrwerkzeug für Computergrafik und bei zahlreichen Veröffentlichungen als Referenz für Geschwindigkeit und Bildqualität verwendet. Mit dem dazu gehörigen Buch, Physically Based Rendering, ist eine außerordentlich gute Dokumentation des Programms und der verwendeten Algorithmen vorhanden.
Aufgabe 1: Hello PBRT
Bevor wir uns mit den Kernbestandteilen eines Raytracers und deren Implementierung beschäftigen, wollen wir uns mit den bestehenden Möglichkeiten von PBRT vertraut machen. Welche Verfahren gibt es, was sind die zugrunde liegenden Ideen und welche Effekte lassen sich damit realisieren. Wie wirken sich bestimmte Verfahren und Parameter auf Berechnungszeit und Bildqualität aus. Hierzu geben wir einige vorbereitete Szenenbeschreibungen und die gewünschen Ergebnisbilder vor.
Die Bilder zeigen traditionelles Raytracing mit einer Punktlichtquelle, Monte Carlo Raytracing mit einer kugelförmigen Flächenlichtquelle und globale Beleuchtung (Photonmapping mit final gathering). Rechenzeiten: 108s, 980s, 1250s, 4 Samples per Pixel.
Bearbeitungsdauer eine Woche, Abgabe am Freitag, 26.10.2007, 12:00. Details und Aufgabenstellung.
Aufgabe 2: Ray intersection
Der namengebende Teil eines Raytracers sind die zu verfolgenden Strahlen. Eine Kamera erzeugt die ersten Sichtstrahlen. Wenn einer dieser Strahlen auf ein Objekt trifft, wird die Beleuchtung am Schnittpunkt berechnet und dazu, falls benötigt ein oder mehrere Sekundärstrahlen erzeugt, die wiederum Objekte der Szene abtasten. Neben der Möglichkeit Oberflächen mit Dreiecksnetzen - wie z.B. dem grünen Ring in untenstehendem Bild - zu approximieren und sich auf den Strahl-Dreiecksschnitt zu beschränken, können zahlreiche Primitive auch direkt geschnitten werden. Beispiele für solche Primitive sind Kugeln oder Tori. Der Schnitt mit letzteren soll in dieser Aufgabe implementiert werden. Ohne entsprechende Szenen bleibt allerdings der beste Algorithmus wirkungslos. Als Einführung in das Modellieren soll mit Maya zusätzlich ein eigenes Objekt in die untenstehende Szene eingefügt werden. (Lizenzen für Maya sowie ein Exportfilter nach PBRT sind vorhanden).
Normales Raytracing mit direkter Beleuchtung. Schatten und Spiegelungen werden simuliert, trotzdem wirkt das Bild unrealistisch. Rechenzeit 180s. Photonmapping mit Final Gathering simluliert globale Beleuchtung und Kaustiken. Das Ergebnis ist wesentlich realistischer. 2.3 Mio verfolgte Photonen. Rechenzeit 6800s. (höhere Auflösung, 10250s)
Bearbeitungsdauer zwei Wochen. Abgabe am Freitag, 09.11.2007, 12:00. Details und Aufgabenstellung.
Aufgabe 3: BRDF eines Mehrschicht-Autolacks
Sobald der Schnittpunkt zwischen Sichtstrahl und Objekt feststeht, muss berechnet werden, welches Licht (Energie, Wellenlängen, ...) vom Schnittpunkt in Richtung Kamera geschickt wird. Sofern dieser Schnittpunkt keine Lichtquelle ist, hängt dies vom Reflektionsverhalten des Schnittpunktes an. Üblicher Weise wird das Material, physikalisch korrekt, mit einer BRDF beschrieben. Dazu wird die Halbkugel über einem Oberflächenpunkt diskretisiert und für jede Kombination von Lichteinfallswinkel und Sichtwinkel das reflektierte Licht gemessen. Diese Daten kann man direkt zum Rendern verwenden, aber selbst bei feiner Abtastung (e.g. 180x90x90) muss geeignet interpoliert werden und es fallen große Datenmengen an. Praktikabler ist es, sich ein Modell des Materials zu erstellen und die Modellparameter von den Messdaten abzuleiten. Ziel dieser Aufgabe ist es, einen Zweischicht Metallic-Lack für PBRT zu implementieren und eine geeignete Beispielszene zu erstellen.
Zwei Flächenlichter beleuchten Objekte mit dem Mehrschicht Metallic-Lack. Der Lack besteht aus einer grünen/roten/blauen Grundierung und darüber einer Schicht Klarlack mit gelben/grünen Metallic-Flakes. 16 Samples pro Pixel und 16 Samples pro Lichtquelle bei einer Rechenzeit von 3000s. (Vorschau mit 1 Sample pro Pixel und je ein Sample pro Lichtquelle in 12s). Daneben das Erscheinungsbild auf der groben Approximation eines Automobils. Beide Male mit der gleichen dunkelblauen Grundierung aber einmal mit dunkelroten und einmal mit leuchtend grünen Flakes. Rechenzeit je rund 400s.
Bearbeitungsdauer zwei einhalb Wochen. Abgabe am Donnerstag, 29.11.2007, 12:00. Details und Aufgabenstellung.
Aufgabe 4: Beschleunigungsstrukturen
Die Suche nach dem nähsten Schnittpunkt für einen gegebenen Strahl ist der zeitaufwändigste Schritt eines Raytracers. Dafür alle Primitive einer Szene zu schneiden ist für Szenen mit realistischer Komplexität wie im gezeigten Beispiel unmöglich. Daher sind verschiedene meist baumartige Beschleunigungsstrukturen entwickelt worden um nur einen geringen Teil der Primitive zu schneiden und die Kosten von O(n) auf O(log n) zu reduzieren. PBRT benutzt standartmäßig einen stark optimierten Kd-Tree. Eine andere Möglichkeit, meist mit ähnlichen Beschleunigungen bei geringerem Speicherverbrauch, sind Bounding Volume Hierarchies (BVHs). Ziel dieser Aufgabe ist es, eine BVH für PBRT zu erstellen.
Plants.pbrt example scene of PBRT, 1.172 million triangles, 18.857 million camera rays (16 per pixel), Volumetric Integrator, Rechenzeit 36500s mit "Grid Accelerator", 15000s mit Kd-Tree Accelerator .
Bearbeitungsdauer zwei einhalb Wochen. Abgabe am Mittwoch, 19.12.2007, 12:00. Details und Aufgabenstellung.
Aufgabe 5: Final Project
Zum Abschuss soll jedes Team ein photorealistisches Bild erstellen. Dafür soll eine Erweiterung für PBRT (Subsurface Scattering, VolumeRendering, echtes Mehrlinsen-Kamerasystem, Autofokus, ...) implementiert werden. Das Team legt selbst fest was es implementieren möchte und wie es Punkte auf die Teilarbeiten vergeben möchte. (Die geplante Punktvergabe muss von uns bestätigt werden).
Ein schönes Beispiel ist das Granit-Material von Jacob Wasza:








