Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 9 » InCG+GlobIllum Kombiklausur 7.5ECTS

InCG+GlobIllum Kombiklausur 7.5ECTS

Meta Information

  • Prüfungsart: mündlich
  • Prüfer: Prof. Stamminger
  • Note: 1.0

Atmosphäre war super entspannt. Alle Fragen wurden von Prof. Stamminger gestellt, der Beisitzer hat sich immer nur etwas notiert wenn man ein Keyword (z.B. Cascaded Shadow Maps) gesagt hat. Der Stoff bezog sich ausschließlich auf das, was auch in der Vorlesung dran kam, es hat aber in vielen Punkten deutlich geholfen, die Übung gemacht zu haben (insbesondere in GlobIllum).

Prüfung

Meine Antworten Zu Beginn durfte ich mich entscheiden, ob ich mit GlobIllum oder InCG anfangen will. Habe mich für InCG entschieden. Im folgenden Sind alle Kommentare vom Prüfer nicht eingerückt, meine Antworten einmal. Beispiel:

* (P:) Welches Thema fanden Sie denn am schönsten?

(S:) Uff, gab viele…

* Ich stelle dazu eventuell auch Fragen ;)

Achso. Dann nehmen wir doch Schatten.

InCG

* Okay, was sind denn Shadow Maps? Erklären Sie doch mal.

Shadow Maps: Rendern aus Sicht der Kamera nur in Depth Buffer schreiben. Dann Depth vom Camera Space in Light Space projecten

* Was mache ich denn wenn ich eine parallele Lichtquelle habe?

Eine Orthographische Projektion verwenden

* Und wenn ich jetzt eine Punktlichtquelle mit einem größerem Öffnungswinkel habe, wie gehe ich da vor?

In alle 6 Richtungen einmal rendern und als Cube Map abspeichern.

* Malt Szenerie mit einem Objekt, einer Kamera und einer Lichtquelle. Zeichnet einen Punkt (welcher im Schatten liegt ein): Was sieht denn das Licht, was sieht die Kamera, und wo ist der Punkt nach der Projektion?

Habe einen Pfeil von der Lichtquelle zum Punkt gezeichnet, die am Objekt, welches diesen beschattet, aufhört. Dann noch einen Pfeil von der Lichtquelle zum Punkt und argumentiert wie man am Depth-Buffer bestimmen kann, dass dieser beschattet ist.

* Malt zweiten Punkt (im Licht): Was sieht die Kamera denn jetzt?

Den selben Punkt mit dem selben Depth Value wie die Kamera.

* Stimmt das denn immer?

Nein, durch Floating-Point imprecissions.

* Es gibt aber auch noch andere Gründe.

Stimmt, Shadow Acne

* Ja, und natürlich noch Aliasing. Erklärt wie Pixel Nachbarschaft projiziert wird und wie das mit der Resolution der Shadow-Map zusammenhängt. * Okay, sie erwähnten Shadow-Acne. Erklären Sie doch mal wie das zustande kommt.

Shadow Acne erklärt und wie man mit GL_POLYGON_OFFSET das Problem beheben kann

* Jetzt haben wir das eine Problem gelöst. Was ist das Problem von Shadow Aliasing?

Ein Problem ist Magnification. Beispiel: Kamera auf der anderen Seite vom Licht und Objekt dazwischen. Schatten wird sehr groß und man sieht die einzelnen Pixel der Shadow Map.

* Und was kann man dagegen jetzt machen?

Wir können das Problem herauszögern, indem wir Cascaded Shadow Maps verwenden. Grob Cascaded Shadow Maps erklärt.
Eine andere Variante sind Perspective Shadow Maps anhand von Zeichnung erklärt

* Sie haben gesagt, dass das das Problem nur herauszögert. Es gibt aber auch Aliasing-Free Shadow Maps. Was ist denn das?

Irregular Z-Buffer: Man rendert zuerst von der Kamera aus und projiziert dass dann in den Light Space. Das kann dazu führen, dass mehrere Kamera-Pixel im selben Shadow-Map Pixel landen. Dafür braucht man dann Per-Pixel-Linked Lists. Dann evaluiert man für jeden projizierten Pixel einzeln den Schatten. Hier muss man aber aufpassen, dass man conservative Rasterization verwendet.

Genau. malt Pixel mit einer Linie und mehreren Samples hin Warum genau müssen wir das machen?

Wir wollen ja den Pixel-Shader für jeden Kamera-Pixel evaluieren. Das heißt, alle Punkte auf unserem Pixel und nicht nur die auf dem Vertex sollen evaluiert werden. Man erhält vom Vertex-Shader eine Liniengleichung und evaluiert dann für jeden Kamerapixel einzeln, ob dieser im Schatten liegt oder nicht. Das Ergebnis ist dann ein Pixel-Perfekter Schatten.

* Ganz am Anfang haben wir Per-Pixel-Linked Lists woanders gebraucht. Was war das denn?

Transparenz.

* Und warum brauchen wir die da?

Alpha-Blending ist nicht kommutativ. Daher brauchen wir eine Sortierordnung.

* Genau. Wir sortieren jetzt also nicht einmal vorher, sondern für was?

Für jeden Pixel?

* Yep.

* Angenommen ich habe jetzt einen Spielcharakter, der sehr grob modelliert ist. Wie kann ich den denn animieren?

Skinning erklärt

* Wenn ich die Genauigkeit des Meshes erhöhen will, wie geht das?

Tesselation

* Und welche Shader brauche ich dafür?

Tesselation Control und Tesselation Evaluation Shader. Diese dann erklärt und auf die Parametrisierung mit Beziér Kurven und Bump-Maps hingewiesen

* Was genau bringt mir denn die Bump-Map und warum brauche ich die Normal Map

Vergleich zu CG-Fake Geometry und dass die jetzt echt ist und man nun ein korrektes Mesh hat

GlobIllum

* Zeichnet Szene mit einem Punkt, einer Hemisphäre, einem Objekt und einer Spherical Environment Map außenrum.

* Zu sehen ist jetzt eine Szene, mit ein paar Objekten und außen rum ist eine Environment Map. Schreiben Sie doch bitte mal das Rendering Integral auf.

L(x, ω_o) = ∫_{Ω^+} f(x, ω_o, ω_i) G(x, ω_i) V(x, ω_i) L_in(x, ω_i) dω_i
Habe dabei die verschiedenen Terme erklärt was die so machen: f ist BRDF, G geometric term, V visibility term, L_in einfallendes Licht.

* Wie würde für eine glänzende BRDF die Wahrscheinlichkeitsdichte aussehen?

BRDF rein gemalt, er wollte aber darauf hinaus, dass ich erkläre wie die PDF aussehen muss. Habe dann erklärt dass die PDF ähnlich aussehen soll wie der Integrand (hier, die BRDF) um möglichst wenig Varianz zu haben, damit die Monte-Carlo Integration schneller konvergiert.

* Wenn ich jetzt mein f habe, wie komme ich dann auf meine PDF?

p = f*c. Dann habe ich noch gesagt wie man auf c kommt, nämlich 1/∫f.

* Warum ist denn mein c nicht immer 1? Welche Eigenschaft verhindert dass ich einfach die BRDF als PDF nehmen kann?

Habe die Frage zuerst falsch verstanden und angefangen die Eigenschaften von BRDFs (Energieerhaltung, Helmholz-Reziprozität) erklärt. Er hat mich freundlich unterbrochen und gesagt dass das nicht ganz stimmt. Dann ist mir eingefallen dass er damit meinte, dass das Integral über p gleich eins sein muss, damit p eine Wahrscheinlichkeitsdichte ist. Das war dann die richtige Antwort.

* Welche Terme des Rendering Integrals kann man denn noch importance samplen?

Alle außer V, das funktioniert nicht so wirklich. Sonst müssten wir ja keine Shadow-Rays casten.

* Angenommen, der Geometric-Term sei jetzt der Cosinus. Mit was kann man den denn importance samplen?

War zuerst verwirrt von der Frage. Habe dann geantwortet dass man den Solid Angle importance samplen kann. Er meinte dann, er habe das auch in der Vorlesung gemacht, worauf ich behauptet hatte, wir hätten das aber in der Übung nicht getan. Er hat dann auf die Hemisphäre hingewiesen und da ist mir dann die richtige Antowrt eingefallen: Melly's Method.

* Okay, und was ist denn jetzt, wenn ich das Integral über die BRDF nicht kenne? Kann ich dann trotzdem importance samplen?

Ja, man kann ja die Funktion diskretisieren.

* Ja, das geht auch, ich meinte aber eine andere Methode?

???

* Genauer gesagt, Rejection Sampling.

Ahh. Habe dann Rejection Sampling anhand einer Zeichnung erklärt und weshalb es für z.B. Glossy PDFs (sehr geringe Breite unter der Kurve) nicht so gut funktioniert.

* Genau, deshalb bräuchte man dafür sehr lange. Wie können wir denn L_in importance samplen

Inversion Method auf Environment Map erklärt sehr ausführlich erklärt.

* Zeichnet 3 weitere Pfeile in die Szene: Was wenn ich jetzt mehrere Wahrscheinlichkeiten errechnet habe, wie kann ich die denn kombinieren?

Importance Sampling. Kurz den Hintergrund erklärt (wenn pdf-Wert groß dann auch gewicht groß), dass einfach nur averagen nicht die beste Methode ist (Varianz wird dann auch „nur“ gemittelt), sondern dass man Balance oder Power Heuristics braucht.

Und damit war die Zeit dann auch schon um.