CGExercises

Exercise #04

Computergraphik Übungsblatt #04


Blender Tutorial: Animation & Rendering



OpenGL: Blender-Geometrie



Exported Blend File
as Alias WaveFront OBJ

Blend File
CC-BY DarkLimits Studios
modified for Eevee
by A. Kalisz

Aufgabe 4.1: Obj-Datei laden

Es wäre doch schön, ein eigenes graphisches Objekt für OpenGL zu verwenden anstelle von langweiligen Dreiecken. Dazu können Sie Ihr aktuelles Objekt in Blender im Alias WaveFront-Format (.obj) exportieren. Bei den Exportoptionen sollten die Materialeigenschaften ausgeschaltet werden, die Faces müssen trianguliert werden, und Normalen und UV-Koordinaten müssen geschrieben werden.

Laden Sie Ihr eigenes Objekt mit der OpenGL-Programmiervorlage im Verzeichnis “qt_template”. Ihr exportiertes Objekt muss im selben Verzeichnis liegen. Dann laden Sie die Obj-Datei mit lglLoadObj(“filename”) in initializeOpenGL() in eine Instanzvariable vbo vom Typ lglVBO*:

vbo = lglLoadObj("teapot.obj");

Überprüfen Sie, ob Sie einen NULL Zeiger erhalten haben und brechen Sie das Programm in diesem Fall ab → exit(1).

Geben Sie nun zuallererst die Abmessungen Ihres Objektes aus, die Sie mit der Methode lglGetExtent() erhalten (operator <<).

Das geladene Objekt wird nun mit der Methode lglRender() in renderOpenGL() gezeichnet. Siehe auch OpenGL Cheat Sheet.


glVertex Cheat Sheet

Es kann sein, dass die Abmessungen des Objektes zu groß sind, so dass Sie es erst skalieren müssen, um es sinnvoll rendern zu können. Verwenden Sie dazu den Befehl lglScale() in initializeOpenGL(). Der Teapot (Datei “teapot.obj”) muss z.B. mit dem Faktor 0.01 skaliert werden.

Die Aufrufsyntax aller Framework-Funktionen wie lglRender() ist in der Klassendokumentation nachzulesen. Dazu öffnen Sie mit Firefox im Verzeichnis “docs/html” den Dokumentationsindex “index.html” und browsen die Dokumentation der Datei “glvertex_api.h”.

Aufgabe 4.2: Orthographische Projektion

Ihr Objekt wird noch nicht korrekt dargestellt, weil keine Projektion definiert ist. Verwenden Sie die folgende orthographische Projektion:

lglProjection(-1, 1, -1, 1, -1, 1)

Ihr Objekt wird nun immer noch verzerrt dargestellt - das wird sich in der nächsten Übung ändern, aber woran liegt das? Mit welchen Parametern könnte man dies korrigieren?

Aufgabe 4.3: Obj-Datei animieren

Animieren Sie Ihr Objekt, indem Sie es rotieren lassen. Verwenden Sie dazu den Befehl lglRotate(). Um wieviel Grad müssen Sie das Objekt für jeden Frame rotieren, wenn Sie 30 fps annehmen und eine volle Umdrehung alle 3 Sekunden stattfinden soll?

Aufgabe 4.4: Z-Buffer

Schalten Sie testweise den Z-Buffer aus. Welchen lgl-Befehl bzw. welche Taste benötigen Sie dazu?

Aufgabe 4.5: Wireframe Darstellung

Stellen Sie Ihr Objekt im sog. Wireframe-Modus dar. Welchen lgl-Befehl benötigen Sie dazu?


Animieren mit Blender (Blender Teil #3)


Aufgabe 4.6: Animation - Objectmode und Posemode

TeilVideoThema
Blender 4.6: AnimationYTAnimation und F-Curve-Modifier

Animieren Sie bitte das Rig für den Haifisch aus der vorherigen Übung. Für die allgemeine, rigide Objektbewegung können Sie die Armature im Object mode über Keyframes animieren.

Aufgabe 4.7 (Optional, Bonuspunkte ++):

Um Schwimmbewegungen und feinere Deformationen zu animieren, erstellen Sie entsprechend Keyframes im Posemode der Armature.

Aufgabe 4.8: Rendering - Die Animation als Videodatei ausspielen

TeilVideoThema
Blender 4.8: Videoschnitt und RenderingYTGerenderte Bildsequenz zu Video zusammenfügen und als Videodatei ausspielen

Bitte rendern Sie die Animation aus der vorherigen Woche unter Verwendung von Globaler Beleuchtung mithilfe von der Cycles Renderengine. Beachten Sie bitte hierbei, dass Ihre Kamera über die gesamte Animation hinweg das Objekt zeigen sollte und dass das Rendern lange dauern kann… .

Aufgabe 4.9 (Optional, Bonuspunkte ++):

Um bei etwaigen Abstürzen die Arbeit nicht zu verlieren, rendern Sie die Animation zunächst als Bildsequenz (z.B. .jpg) und fügen diese in Blender wieder zu einem Film zusammen, den Sie dann als Videodatei (z.B. .mp4) ausgeben.


Hausaufgaben bis zum fünften Praktikum


1. Hierarchische Modellierung / Blender:

  1. Ist es möglich in Blender bestimmte 3D-Objekte als Kinder von anderen Objekten zu definieren, so dass sich diese mit den Eltern mitbewegen? Falls ja, unter welchem Begriff kennt man dies in der Computergrafik und wo sieht man diese Beziehungen in Blender?
  2. Nehmen wir an, dass wir einen Würfel und eine Kugel in der Szene haben. Der Würfel ist noch nicht transformiert worden, die Kugel enthält eine reine Translation von (10, 0, 0). Außerdem ist die Kugel als ein Kind vom Würfel definiert. Welche Model-Matrix besitzt die Kugel, wenn der Würfel mit dem Vektor (0, 10, 0) transliert wurde. Erklären Sie Ihr Vorgehen.
  3. Optional: Welche Model-Matrix besitzt die Kugel, wenn sie zusätzlich noch um den Faktor 50% skaliert wird?

2. Animation:

  1. Zeichnen Sie mit dem OpenGL-Framework einen Einheitswürfel, der aus 6 verschiedenfarbigen LGL_QUADs besteht.
  2. Als nächstes soll dieser mit der Winkelgeschwindigkeit $\omega=30$ rotieren. Verwenden Sie den Funktionsparameter dt als $\Delta t$.
  3. Erstellen Sie ein neues Programm mit derselben Darstellung, aber für $\omega=100$.
  4. Optional: Verschieben Sie Ihr Objekt, indem Sie es mit einer Höhe $h$ translieren (mittels lglTranslate). Achtung: vergessen Sie nicht, die Verschiebung des letzten Frames am Anfang des nächsten Frames mit lglLoadIdentity() wieder rückgängig zu machen.
  5. Optional: Versuchen Sie, Ihr Objekt zusätzlich zur Rotation hüpfen zu lassen, indem Sie mit der Höhe $h$ translieren und die Höhe $h$ und die Fallgeschwindigkeit $v$ in jedem Frame anpassen:
    1. $v = v+G\Delta t$ mit $G=9.81\frac{m}{s^2}$
    2. $h = h+v\Delta t$
    3. $v = -v$ für $h<0$

3. Transformationen und homogene Koordinaten:

  1. Affine Modellierungs-Transformation:
    Berechnen Sie die affine 4×4 Modellierungs-Matrix $M_M$, welche eine Rotation um 180 Grad um die Y-Achse und eine anschließende Translation um den Vektor (0,0,−5) repräsentiert.
  2. Viewing-Transformation:
    Berechnen Sie die View-Matrix $M_V$ einer Kamera, die an der Position (0,0,−10) steht und entlang der positiven Z-Achse schaut. Welcher Zusammenhang besteht zur Modellierungstransformation der Kamera?
  3. Was stellt ein homogener Vektor mit $w=0$ anschaulich dar?
  4. Was bedeutet also das Wort “homogen” in diesem Zusammenhang?
  5. Welche 3D Transformationen lassen Sich mit 3×3 bzw. 4×4 Matrizen darstellen:
    1. linear
    2. Translation
    3. Rotation
    4. Stauchung
    5. Perspektivische Projektion

4. Projektions-Matrix / Perspektive:

  1. Stellen Sie das View-Frustum zeichnerisch dar für einen vertikalen Blickwinkel von 90 Grad, einem Bildseitenverhältnis von 16:9 und $near = 1$ bzw. $far = 3$.
  2. Schreiben Sie die allgemeine Formel für die normalisierte perspektivische Projektionsmatrix $M_P$ auf und erklären sie die vorkommenden Parameter.
  3. Wofür ist die −1 in der 3ten Spalte und 4ten Zeile zuständig?
  4. Was passiert mit Punkten außerhalb des Frustums?

5. Model-View-Matrix:

  1. Berechnen Sie die homogene 4×4 Model-View-Matrix $M_{MV}$ aus den obigen zwei Modellierungs und Viewing-Matrizen.
  2. In welcher Reihenfolge müssen die obigen Matrizen multipliziert werden?
  3. Welcher Bereich des Weltkoordinatensystems ist bei Verwendung der Gesamt-Matrix $M_{MVP} = M_P \cdot M_{MV}$ sichtbar, d.h. welcher Abschnitt der Z-Achse ist sichtbar?

Options: