CGExercises

Exercise #04

Computergraphik Übungsblatt #04


Blender Tutorial: Animation & Rendering



Animieren mit Blender


Aufgabe 4.1: Animation - Objectmode und Posemode

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.2 (Optional, Bonuspunkte, ++):

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

Aufgabe 4.3: Rendering - Die Animation 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.4 (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.


OpenGL: Geometrie



Exported Blend File
as Alias WaveFront OBJ

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

Aufgabe 4.5: 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 Objekt in Blender im Alias WaveFront-Format (.obj) exportieren. Bei den Exportoptionen sollten die Materialeigenschaften ausgeschaltet werden, das Mesh muss trianguliert werden, und Normalen und UV-Koordinaten müssen geschrieben werden (siehe vorhergehendes Blender-Tutorial).

Rendern Sie Ihr eigenes Objekt mit der OpenGL-Programmiervorlage (qt_template). D.h. laden Sie die Obj-Datei mit lglLoadObj() in initializeOpenGL() in eine Instanzvariable vom Typ lglVBO*. Das geladene Objekt wird mit der Methode lglRender() in renderOpenGL() gezeichnet.


glVertex Cheat Sheet

Es kann sein, dass Sie das Objekt erst skalieren müssen, um es sinnvoll rendern zu können. Verwenden Sie dazu den Befehl lglScale() in initializeOpenGL(). Siehe auch OpenGL Cheat Sheet.

Aufgabe 4.6: Orthographische Projektion

Ihr Objekt wird noch nicht korrekt dargestellt, weil keine Projektion verwendet wird. 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? Welche Möglichkeit gäbe es, dies zu korrigieren?

Aufgabe 4.7: 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.8: Z-Buffer

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

Aufgabe 4.9: Wireframe Darstellung

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


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. Hierarchische Modellierung / Transformation:
    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. Berechnen Sie bitte die Model-Matrix der Kugel, wenn der Würfel mit dem Vektor (0, 10, 0) transliert und um den Faktor 50% skaliert wird. Erklären Sie Ihre Rechnung.

2. Animation:

  1. Zeichnen Sie mit dem OpenGL-Framework einen Einheitswürfel, der aus 6 LGL_QUADs besteht und mit der Winkelgeschwindigkeit $\omega=10$ rotiert.
  2. Erstellen Sie ein neues Programm mit derselben Darstellung, aber für $\omega=100$.
  3. Verwenden Sie den Funktionsparameter dt als $\Delta t$.
  4. Verschieben Sie Ihr Objekt, indem Sie es mit einer Höhe $h$ translieren (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. Versuchen Sie, Ihr Objekt zusätzlich zur Rotation hüpfen zu lassen, indem Sie mit der Höhe $h$ translieren (lglTranslate) und die Höhe $h$ in jedem Frame anpassen:
    1. $v = v+G\Delta t$
    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,10) 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 vorhergehenden Teilaufgabe?
  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. affin
    3. projektiv
    4. Translation
    5. Rotation
    6. Stauchung
    7. Scherung
    8. Parallelprojektion
    9. Projection Mapping
    10. Free-Form Deformation

4. Perspektive:

  1. Berechnen Sie die normalisierte perspektivische Projektionsmatrix $M_P$ für einen vertikalen Blickwinkel von 90 Grad, einem Bildseitenverhältnis von 16:9 und $near = 1$ bzw. $far = 3$.
  2. Stellen Sie das entsprechende View-Frustum zeichnerisch dar und tragen Sie die relevanten Größen ein.
  3. Mit welchem Faktor werden die X- bzw. Y-Koordinaten also multipliziert?
  4. Durch welchen Faktor wird bei der Dehomogenisierung zusätzlich geteilt?
  5. Auf welche z-Werte werden Punkte auf der near- und far-Ebene abgebildet?
  6. Was passiert mit Punkten außerhalb des Einheits-Frustums?
  7. Berechnen Sie die homogene 4×4 Model-View-Projection-Matrix $M_{MVP}$ aus den obigen drei Matrizen.
  8. In welcher Reihenfolge müssen die obigen Matrizen multipliziert werden? Was passiert bei umgekehrter Reihenfolge?
  9. Mit welchen Befehlen des Frameworks können Sie die entsprechenden drei Matrizen berechnen lassen? Schreiben Sie die entsprechenden Aufrufe auf.
  10. Wie würden Sie mit dem Framework die Gesamtmatrix ausmultiplizieren?
  11. Wie würden Sie mit dem Framework zwei Vektoren definieren und addieren? Beispielsweise die Vektoren (1, 2, 3) und (4, 5, 6).
  12. Wie würden Sie den Ergebnisvektor mit der MVP Matrix multiplizieren?

Options: