Zum Hauptinhalt springen

Modellierung

Für die Erstellung unserer 3D-Modelle haben wir uns für Blender entschieden, da es durch seine vielen Funktionen perfekt für die Asset Produktion geeignet ist. In Blender gibt es auch verschiedene Ansätze zur Modellierung: Entweder arbeitet man mit Sculpting (wie z.B. das Formen von Knete) oder mit Polygon-Modelling, bei denen man die Geometrie Stück für Stück entwickelt. Letzteres war für unser Projekt besser geeignet, da die Kontrolle über die Anzahl der Eckpunkte wichtig für die Performance in der Game-Engine ist. Neben dem Modellieren haben wir Blender auch für weitere Schritte eingesetzt, z.B. Texturierung, Shader, Rigging und Animation. Somit lässt sich alles direkt in einem Tool erledigen.

Die Texturen stammen größenteils von ambientCG

Arbeit mit Blender

Um effizient modellieren zu können, war es wichtig, sich zuerst mit den verschiedenen Shortcuts, Modifikatoren und Einstellungen in Blender vertraut zu machen. Erst durch den sicheren Umgang der Grundlagen konnten wir komplexere Objekte wie z.B. den Spielercharakter schnell umsetzen.

Das Modellieren begann meist mit einem einfachen Grundobjekt wie einem Würfel oder Zylinder, das dann durch Transformationen oder Extrusionen weiter ausgearbeitet wurde. Damit die Modelle zueinander passen, haben wir oft ältere Modelle als Referenz daneben gestellt. Komplexe Objekte entstanden durch das Zusammensetzen mehrerer Teilmodelle. Eine saubere Topologie war entscheidend, um die Modelle korrekt bearbeiten, texturieren und animieren zu können. Dabei haben wir darauf geachtet, unnötig komplexe Flächen wie sogenannte n-Gons (Polygone mit mehr als vier Ecken) zu vermeiden. Diese sind problematisch, weil:

  • UV-Mapping erschweren
  • schlecht Deformieren bei der Animation
  • sie sich in der Game-Engine unvorhersehbar triangulieren können

Stattdessen wurden hauptsächlich Quads (Vierecke) verwendet, da sie sich besser nachbearbeiten und deformieren lassen.

Folgendes ist eine Collage einiger Modelle:

Modelle

Beispielprozess Münze

Wir starten mit einem flach skalierten Zylinder an der Z-Achse, der als Grundform dient. Dann werden die obere und untere Fläche der Münze markiert. Mit der Inset-Funktion wird eine kleinere Teilfläche erzeugt, die dann mit Extrude along Normals nach innen gedrückt wird, um eine Vertiefung der Münze zu modellieren. Danach wählen wir abwechselnd jeden zweiten Eckpunkt entlang des inneren Rings aus, skalieren diese nach innen und formen eine sternförmige Fläche. Diese Fläche wird herausgezogen, wodurch dann die Prägung der Münze entsteht.

Münze

Räume und Gänge

Für den Dungeon wurden Räume und Gänge als wiederverwendbare Bausteine erstellt. Diese Modelle lassen sich in Blender und Unity kombinieren, um das Dungeon-Layout zu erzeugen. Über spezielle Gänge (Gänge die nach oben/unten führen) konnten sogar Räume auf unterschiedlichen Höhen miteinander verbunden werden.

Räume

Texturierung

Beim Texturieren werden sogenannte Texturmaps auf die 3D-Oberflächen der Modelle projiziert. Diese Texturen bestimmen das Aussehen eines Objekts, also z.B. welche Farbe oder Materialeigenschaft eine Fläche hat.

Ein vollständiges Material besteht meist aus mehreren Komponenten:

  • Color oder auch Albedo genannt (Farbtextur)
  • Normal Map (Oberflächendetails wie Beulen oder Rillen)
  • Metallic / Smoothness

Da Unity nicht alle Formate von Grund auf unterstützt, und dessen Verwendung eigene Custom-Shader erfordern würde, haben wir z.B. auf Roughness Maps verzichtet.

Texturen1

Texturen2

Texturen3

UV-Mapping

Damit eine Textur korrekt auf ein 3D-Modell dargestellt werden kann, benötigt man sogenannte UV-Koordinaten. Der Begriff "UV" steht für die beiden Achsen U(horizontal) und V (vertikal). In Blender verwendet man das UV-Unwrapping um die Geometrie des Modells auf eine flache Fläche zu projizieren. Dadurch lässt sich im UV-Editor genau bestimmen, welcher Teil der Textur auf welcher Fläche erscheint. Damit die Textur sauber verläuft, haben wir das UV-Raster oft manuell angepasst.

UVediting3

Die folgenden Bilder zeigen den Unterschied zwischen einer automatisch generierten UV-Map und einer von uns manuell überarbeiteten Version.

UVediting1

UVediting2

UVediting4

UVediting5

Shading und Normalen

Neben Texturen ist auch die Berechnung von Licht entscheidend für die visuelle Qualität eines Modells. Dabei spielen die Normalen eine wichtige Rolle. Sie geben an in welche Richtung eine Fläche zeigt und beeinflussen so, wie Licht auf ein Objekt trifft und reflektiert wird. Je nach gewünschtem Look kann man in Blender zwischen Flat Shading und Smooth Shading wählen. Beim Flat Shading verleiht man jeder Fläche einen Normalenvektor, wodurch das Modell sehr kantig wirkt. Smooth Shading hingegen berechnet den Mittelwert benachbarter Flächen, was zu glatten Übergängen führt. Dies ist ideal für runde Objekte.

Shading

Damit die Modelle in Unity korrekt gerendert werden, ist auch die Ausrichtung der Flächen, also der Normalen, entscheidend. Jede Fläche hat eine Außen- und Innenseite. In Blender lassen sich diese Seiten farblich darstellen: blau für außen, rot für innen. Dadurch konnten wir falsch ausgerichtete Flächen erkennen und korrigieren. Dies ist besonders relevant für Backface Culling. In Game-Engines wie Unity werden die Innenseiten nicht gerendert. Das spart Rechenleistung, kann aber zu unerwarteten Effekten führen. Wenn z.B. der Boden eines Raumes kopiert und als Decke verwendet wird, kann man durch die Decke hindurch schauen.

Zu Demonstrationszwecken wurde hier die Flächenausrichtung geändert.

Flächenausrichtung

Backface Culling:

BackfaceCulling

Export nach Unity

Beim Export nach Unity mussten folgende Dinge beachtet werden:

  • Achsenumrechnung: Blender: X = Seite, Y = vorne, Z = oben; Unity: X = vorne, Y = oben, Z = Seite
  • Der Ursprung sollte sich geometrisch im Mittelpunkt des Objekts befinden
  • Skalierung normalisieren (X, Y, Z = 1)
  • Exportformat: .fbx export