Tutorials

Hier finden sie Tutorials zum Thema Spieleentwicklung.


Converting Ms3d-animations to DirectX Datum: 12.5.2010 Autor: Christoph P. Schwierigkeitsgrad: Mittel
Einführung in DirectX Shader Datum: 15.5.2010 Autor: Christoph P. Schwierigkeitsgrad: Einfach
Dual-Paraboloid-Shadow-Mapping Datum: 23.5.2010 Autor: Christoph P. Schwierigkeitsgrad: Mittel
Einführung in Milkshape 3D Datum: 17.6.2010 Autor: Christoph P. Schwierigkeitsgrad: Einfach

Einführung in Milkshape 3D

Vorwort

Milkshape 3D ist eine 3D Modellierungssoftware, die besonders für Einsteiger sehr gut geeignet ist. In diesem Tutorial wird gezeigt, wie eine einfache Windkraftanlage modelliert, texturiert und animiert wird. Es gibt einen ausführlichen Einblick in Milkshape 3D. Es ist sowohl für Neulinge, als auch für fortgeschrittene Benutzer geeignet.

Das folgende Kapitel ist hauptsächlich für Neulinge gedacht, es gibt einen kurzen Überblick über die Funktionen von Milkshape 3D. Alle, die schon mit Milkshape 3D gearbeitet haben, können dieses Kapitel überspringen.

Diejenigen die Milkshape 3D noch nicht auf ihrem PC installiert haben, können sich hier eine 30-Tage-Testversion downloaden.

Überblick über Milkshape 3D

Milkshape 3D bietet die wichtigsten Funktionen, die nötig sind, um 3D-Modelle erstellen und animieren zu können.
Die kleinste Einheit eines Milkshape 3D - Modells, bildet dabei der Vertex (Eckpunkt). Die Vertizes bilden wiederum die Basis für die Dreiecke und die Dreiecke die Basis für die kompletten Modelle. "Klebt" man Bilder auf die Dreiecke (Texture Mapping), bekommt man ein Modell, daß auch schön anzusehen ist. Bringt man dann das Modell noch dazu, sich zu bewegen (Animation), beschreibt das nun insgesamt das, was Milkshape 3D uns ermöglicht zu tun.

Nun aber zu den Funktionen und Werkzeugen: Auf der rechten Seite befinden sich vier Registerkarten.

In der ersten, namens Model, sind die wichtigsten Modellierungs-Werkzeuge untergebracht. Mit diesen Werkzeugen können Objekte ausgewählt, bewegt, rotiert, skaliert werden und es können neue Primitiven (einfache Objekte) und Joints (Gelenke) hinzugefügt werden.

Registerkarte Model
Registerkarte Model

In der Registerkarte Groups werden die Dreiecke (in Milkshape 3D Faces genannt) für die Anwendung von Materialien gruppiert. Ein Material bestimmt wie die Oberfläche dargestellt werden soll, d.h. welche Farben und Texturen einer Oberfläche zugewiesen werden. Für die Gruppierung wählt man die Dreiecke mit Model->Select->Face aus und per Groups->Regroup werden die Gruppen festgelegt.

In der Registerkarte Materials können dann mit New, die dafür passenden Materialien erstellt werden. Per 'none' - Buttons können bis zu zwei Texturen bestimmt werden und oberhalb der Buttons können die Farben gewählt werden. Für die Zuweisung müssen dann in der Groups-Registerkarte zuerst die Gruppen mit Select ausgewählt werden und mit Materials->Assign können sie dann festgelegt werden.

Die letzte Registerkarte Joints dient dazu, den vorher zum Modell hinzugefügten Joints, Vertizes zuzuweisen. Dazu wählt man die Vertizes mit Model->Select->Vertex aus und per Joints->Assign werden sie mit dem aktuell ausgewählten Joint verknüpft. Mit Joints->SelAssigned lässt sich die Auswahl überprüfen. Die Auswahl ist dabei unabhängig von der Auswahl in der Registerkarte Groups.
Mit dem, sich unterhalb befindenten Bereich, Vertex Weights, kann eine Animationstechnik namens Skinning realisiert werden, welchen Einsteiger aber ignorieren können. Genauso wie den Bereich Smoothing Groups auf der Registerkarte Groups, der für forgeschrittene Beleuchtung eine Rolle spielt.

Ganz unten in Milkshape 3D befindet sich die Animationsleiste, die mit Klick auf den Anim-Button aktiviert werden kann. Auf ihr werden Joints und zugehörige Vertizes animiert, indem man in beliebigen Zeitabständen Posen des Modells in Keyframes (Schlüsselbilder) aufzeichnet. Gesetzt werden die Keyframes mit Animate->Set Keyframe. Die Bilder (Frames) zwischen den Zeitabständen berechnet dann die Software.

Und zu guter letzt noch ein paar Worte zum Menü. In ihm befinden sich viele nützliche Werkzeuge und wichtige Funktionen wie Edit->Duplicate Selection zum Kopieren von Auswahlen, Vertex->Mirror zum Spiegeln und Vertex->Weld To Nearest um Vertizes zu verschweißen. Die Werkzeuge für die Animation befinden sich im Menü und unzählige Import- und Exportmöglichkeiten für verschiedene Dateiformate.

Modellierung der Windkraftanlage

Als allererstes modellieren wir den Rotor. Wie schön, daß es unter Tools->Extended Primitives->Mechanical->Propeller 3 einen Propeller gibt, der einem Rotor, wie wir ihn brauchen, ähnlich sieht.

Propeller
Propeller

Da wir die gekrümmten Abschnitte am Ende der Propellerblätter nicht brauchen, entfernen wir diese und setzen die übrig gebliebenen Abschlußplatten auf die neuen Enden. Dazu müssen die Dreiecke eines solchen Abschnitts mit Model->Select->Face ausgewählt und mit Entf gelöscht werden:

Propellerblätter-Enden
Propellerblätter-Enden
Hinweis zu Auswahlen:
Tipp:
Sind die Objekte stark ineinander verschachtelt, ist das Auswählen von Objekten oft schwer. In diesem Fall sollten alle Ansichten von Milkshape 3D für die Auswahl benutzt werden. Im Kontextmenü (Maus-Rechts-Klick) unter Projection, befinden sich alle in Milkshape 3D verfügbaren Ansichten.

Die vom Propellerblatt übrig gebliebene Platte, bewegen wir nun nach Klick auf Model->Move, mit der Maus, zum neuen Ende des Propellerblatts. Damit keine Spalten zwischen den Dreiecken entstehen, sollte die Naht an den Vertizes zusammengeschweißt werden. Dazu wählen wir alle Vertizes der Naht aus (den mittleren Vertex der Platte nicht mitauswählen) und klicken im Menü auf Vertex->Weld To Nearest. Wer überprüfen will, ob es geklappt hat, kann sich im Menü Tools->Show Model Statistics die Anzahl der Vertizes vor und nach dem Verschweißen ansehen. Ist die Anzahl geringer, ist anzunehmen, daß es funktioniert hat. Zu dieser Methode des Verschweißens, gibt es auch noch eine Alternative, und zwar per Strg + N (Vertex->Snap Together) können mehrere Vertizes auf die gleiche Position gesetzt werden. Das würde für unseren Fall bedeuten, daß man jeweils nur zwei Vertizes bearbeiten könnte und es somit mehr Arbeit in Anspruch nehmen würde.

Tipp:
Beim Zusammensetzen von Dreiecken oder auch bei anderen genauen Arbeiten, ist es zu empfehlen die Ansicht per Maus-Scrolling zu zoomen. Durch Ungenauigkeiten können zB. Spalten zwischen den Dreiecken entstehen, die beim Rendern des Modells unschön aussehen. Hält man die Shift-Taste gedrückt, kann schneller gezoomt werden.

Dieser Vorgang wird nun bei allen Propellerblättern wiederholt und als Lohn dürfen wir den Propeller sodann Rotor nennen. Um den Rotor noch mehr wie einen Rotor aussehen zu lassen, werden wir seine Blätter noch zuspitzen. Beim folgenden Bild sind die Stellen rot eingezeichnet, die wir, separat voneinander, skalieren werden:

Skalieren des Rotors
Skalieren des Rotors

Das Skalieren machen wir per Model->Scale->Scale und nebenliegenden Textboxes, nachdem wir die jeweils passenden Vertizes selektiert haben. Für die äußeren Vertizes verwenden wir dazu als Wert ca. 0.25 und für die inneren ca. 0.75. Diese Werte schreiben wir jeweils in jede der Textboxes und klicken anschließend auf den nebenliegenden Scale-Button.
Als nächstes erstellen wir für die Rotornabe unsere eigene Bodenplatte. Dazu entfernen wir am unteren Ende alles, außer das kleine Zwölf-Eck:

Bodenplatte der Rotornabe - a
Bodenplatte der Rotornabe - a

Wie das Entfernen und die Basis des Umgangs mit Dreiecken funktioniert, solltet ihr nun selbst wissen und ich werde deshalb, ab jetzt, die Erklärungen diesbezüglich auf ein Minimum beschränken.
Das zuvor genannte Zwölf-Eck wird nun mit Model->Scale und Maus (Links-Klick und ziehen), auf der X- und Z-Achse so skaliert, daß es als neue Bodenplatte verwendet werden kann, so zu sehen im folgenden Bild:

Bodenplatte der Rotornabe - b
Bodenplatte der Rotornabe - b

Diese Platte muß dann, wie vorher die Abschlußplatten der Rotorblätter, per Vertex->Weld To Nearest verschweißt werden und fertig ist der Rotor.

Nun brauchen wir das Gehäuse, das sich in der Fachsprache Gondel nennt. Dafür wählen wir die Dreiecke der Rotornabe aus und klicken im Menü zuerst auf Edit->Duplicate Selection und anschließend auf Vertex->Mirror Top <--> Bottom. Das Ergebnis sollte dann dem, am folgenden Bild, gleichen:

Spiegeln der Gondel
Spiegeln der Gondel
Tipp:
Im Kontextmenü sollte Draw Backfaces standardmäßig immer deaktiviert sein, da man sonst fehlende oder verkehrt orientierte Dreiecke leicht übersehen kann.

Danach schieben wir die zwei Teile zusammen, aber diesmal verschweißen wir sie nicht, da der Rotor sich ja später in der Animation, drehen soll:

Zusammensetzen der Gondel mit der Rotornabe
Zusammensetzen der Gondel mit der Rotornabe
Tipp:
Möchte man vermeiden, daß beim Verschieben oder Skalieren mit der Maus, Objekte in unerwünschte Richtungen transformiert werden, sollte man die Achsen, die man nicht verwendet, sperren. Dafür gibt es in der Model-Registerkarte, bei allen Transformationen, die X,Y,Z-Buttons unter den Textboxes. Mit diesen lassen sich die gewünschten Achsen sperren bzw. entsperren.

Für die nächsten baulichen Maßnahmen ist es notwendig, das bis jetzt Modellierte, in seine endgültig vorgesehene Lage zu drehen. Dazu alles auswählen und in die Textbox ober dem Z-Button bei Model->Rotate, 90.0 hineinschreiben. Mit Klick auf Scale, wird dadurch alles um 90 Grad um die Z-Achse gedreht.

Bevor wir nun die Gondel in ihre endgültige Form bringen, erstellen wir vorher noch den Turm, um ihn mit der Gondel abgleichen zu können. Das ist schnell erledigt, denn wir brauchen nur einen passenden Zylinder, der unten ein wenig breiter ist, als oben.
Wir klicken auf Model->Cylinder und ändern die Optionen auf 1 Stack (Stapel) und 'Don't close'. Dann ziehen wir in einer beliebigen Frontalansicht, mit der Maus, einen Zylinder in die Höhe, den wir dann, wie auch den Rotor mit Gondel, so zurechtrücken, daß das Bild einer Windkraftanlage entspricht. Die unteren Vertizes skalieren wir dann noch, indem wir in alle Textboxes bei Model->Scale, 2.0 hineinschreiben und auf Scale klicken. Das sollte dann in etwa so aussehen:

Zusammensetzen der Windkraftanlage
Zusammensetzen der Windkraftanlage
Tipp:
Muß man oft zwischen der Auswahl und den Transformationen in der Registerkarte Model hin- und herschalten, empfiehlt es sich die Funktionstasten F1 bis F8 dafür zu verwenden. Dies funktioniert übrigens auch, wenn man sich gerade auf einer anderen Registerkarte befindet.

Nun wird endlich die Gondel finalisiert. Dazu folgendes Bild:

Modellieren der Gondel
Modellieren der Gondel

Als erstes sollte der hintere Teil der Gondel etwas in die Länge gezogen und auf der X- und Z-Achse so skaliert werden, daß der zweite Ring von Vertizes, gleich groß wie der erste ist. Um die hintere Rundung zu erhalten, müssen die anderen Ringe ebenfalls auf diesen Achsen skaliert werden. Mit wechselnden Skalieren und Verschieben, sollte es dann ungefähr so aussehen, wie am Bild oberhalb. Ist die Arbeit an der Gondel beendet, kann man sie mit dem Turm zusammenfügen. Geschweißt werden muß hier nicht.
Das nun fertige Drahtgittermodell (Mesh) stellt ihr am besten mit dem Mittelpunkt des unteren Turmendes auf den Koordinatenursprung (Origin), um ihn bei späterer Verwendung, zB. vor dem Rendern mit einer Engine, einfacher platzieren zu können. Das folgende Bild zeigt das Ergebnis dieses Kapitels, den fertigen Mesh:

Ergebnis-Modellierung
Ergebnis-Modellierung

Texturierung der Windkraftanlage

Wie weiter oben schon beschrieben, müssen jetzt Dreiecke zu Gruppen zusammengefaßt und ihnen Materialien zugewiesen werden. Die dafür nötigen Texturen, können ganz einfach mit einem Grafikprogramm selbst erstellt werden, denn es handelt sich nur um eine kleine, weiße und eine etwas größere, rot-weiß-rote Textur. Die rot-weiß-rote Textur wird für die Spitzen der Rotorblätter verwendet und die rein weiße Textur für das restliche Modell. Wir fangen an mit dem Erstellen der Materialien:

Registerkarte Materials
Registerkarte Materials

Mit Klick auf Materials->New werden Materialien erstellt, mit Materials->Rename können die Namen geändert werden. Die Farben lassen wir so wie sind, aber die Pfade der beiden Texturen müssen mit Klick auf den jeweils oberen der beiden Materials-> 'none' - Buttons, angegeben werden, damit Milkshape 3D sie auch findet. Dann bestimmen wir die Gruppen, denen die jeweiligen Materialien zugeordnet werden sollen:

Registerkarte Groups
Registerkarte Groups

Eigentlich würden zwei Gruppen für zwei Materialien reichen. Ich habe das Modell, um es besser editieren zu können, aber in vier Gruppen unterteilt: Turm (tower), Rotor (rotor), Gondel (nacelle), Rotorblätter-Spitzen (blade_tops).
Das Gruppieren ist nicht schwer: man wählt per Model->Select->Face die gewünschten Dreiecke aus (Vertizes funktionieren nicht) und klickt auf Groups->Regroup. Mit Klick auf Groups->Select kann man überprüfen ob es geklappt hat. Das war's, was die Technik betrifft. Teilt nun das Modell in die genannten Gruppen auf. Die Gruppe der Rotorblätter-Spitzen sieht folgendermaßen aus:

Rotorblätter-Spitzen
Rotorblätter-Spitzen

Möchte man dann einer Gruppe ein Material zuweisen, wählt man die Gruppe wiederum mit Groups->Select aus und klickt auf Materials->Assign, selbstverständlich während das gewünschte Material in der Liste blau markiert ist. Wenn im Kontextmenü die Option Textured aktiviert ist, wird sodann die texturierte Oberfläche angezeigt.
Nun muß die Textur noch wie gewünscht platziert werden. Dies wird mit dem Textur-Koordinaten-Editor erledigt, der sich im Menü unter Window->Texture-Coordinate-Editor befindet. Als erstes passen wir die Textur für die Rotorblätter-Spitzen an, deshalb müsst ihr, bevor ihr den Editor öffnet, mit Groups->Select diese auswählen. Die Arbeit mit dem Textur-Koordinaten-Editor ist übrigens nicht immer ganz einfach, auf folgendem Bild seht ihr warum:

Textur-Koordinaten-Editor
Textur-Koordinaten-Editor

Erstens, muß man es zunächst mal schaffen, sich bei den vielen Linien und Vertizes zu orientieren und zweitens wird, hin und wieder, ein Objekt aus einer problematischen Perspektive dargestellt, so wie in unserem Fall das mittlere Rotorblatt.
In der Drop-Down-Liste im Textur-Koordinaten-Editor, in der standardmäßig 'Front' aktiviert ist, können die Ansichten gewählt werden. Die Ansicht 'Front' zeigt das Modell, so wie wir es positioniert haben, "von der Seite". Ich habe für die Bearbeitung diese Ansicht übernommen, da die genaue Verteilung der Pixel auf den Rotorblätter-Oberflächen egal ist und diese Ansicht die schnellste Bearbeitung ermöglicht. Zuerst solltet ihr euch die Ansicht auf eine vernünftige Größe skalieren. Schreibt dazu in die Textbox vor dem Scale-Button einen Wert, der für euch passt und klickt dann auf den nebenliegenden Button. '4' sollte passen. Außerdem solltet ihr noch die Checkbox Redraw aktivieren, da dadurch die 3D-Ansicht, bei jeder von euch gemachten Änderung, aktualisiert wird. Danach klickt auf Remap und eure Darstellung müsste dann so aussehen, wie auf dem oberen Bild. Ziel ist es alle drei Rotorblätter-Spitzen über die ganze Textur zu strecken. Gearbeitet wird hauptsächlich mit den vier Buttons Select, Move, Rotate und Scale, sie haben prinzipiell die gleiche Funktion wie im Haupteditor, nur daß hier die Extra-Funktionen fehlen.
Nun zur Aufgabe: Das mittlere Rotorblatt solltet ihr zunächst mal beiseite schieben, da es eher hinderlich als förderlich ist. Dann zieht die Innenseiten der beiden noch verbliebenen Rotorblätter, auf die jeweils gegenüberliegende Seite der Textur:

Textur-Zuordnung - ab
Textur-Zuordnung - ab

Die beiden Vertexringe solltet ihr dabei ungefähr auf eine Linie bringen, um Verzerrungen zu vermeiden. Dann zum schwierigsten Teil, dem von vorne dargestellten, dritten Rotorblatt. Wenn ihr es per Maus auf der Y-Achse um so viel vergrößert, also skaliert, bis zwei Vertexringe zu erkennen sind, solltet ihr euch orientieren können. Nehmt die beiden Ringe und zieht sie ebenfalls auf die jeweils gegenüberliegende Seite der Textur und bringt sie anschließend auch auf eine Linie. Um ein Durcheinander zu vermeiden, könnt ihr dies ohne Probleme neben der Textur tun, solange ihr die obere und unteren Grenze der Textur beachtet. Am Ende muß es dann so aussehen:

Textur-Zuordnung - c
Textur-Zuordnung - c

Die weiße Textur könnt ihr übrigens, so wie sie ist, belassen, es muß keine Anpassung im Textur-Koordinaten-Editor gemacht werden. In diesem Fall ist uns erlaubt ungenau zu arbeiten, denn wenn ein Bereich die selbe Farbe verwendet, so wie es auch teilweise bei unseren Rotorblätter-Spitzen der Fall ist, ist es egal, wie die Textur dort zugeordnet wird. Aber Achtung, sobald die Textur in diesem Bereich verschiedene Werte aufweist, gibt es möglicherweise starke Verzerrungen.
Nun sind wir mit der Texturierung fertig. Überprüft noch mal euer Ergebnis in der 3D-Ansicht und wenn ihr zufrieden seit widmen wir uns dem nächsten Kapitel, der Animation.

Ergebnis-Texturierung
Ergebnis-Texturierung

Animation der Windkraftanlage

Für die Animation müssen wir als erstes Joints erstellen. Joints sind Gelenke, die prinzipiell so arbeiten wie die im menschlichen Körper. Ihre Position und Orientierung bestimmen die Position ihrer zugewiesenen Vertizes. Klickt auf Model->Joint und fügt dann durch Mausklick zwei Joints hinzu. Der erste sollte in der Mitte der Gondel, oberhalb des Turms, platziert werden. Er ist der Root-Joint (Wurzel-Joint), der oberste in der Joint-Hierarchie. Dann fügt bei ausgewähltem Root-Joint einen zweiten Joint in der Mitte der Rotornabe hinzu, er ist für die Drehung des Rotors verantwortlich. Um einen Joint auszuwählen, müsst ihr, nicht schwer zu erraten, auf Model->Select->Joint klicken.
Danach müssen den Joints die Vertizes zugeordnet werden, die sich mit den Joints mitbewegen sollen. Der Root-Joint bekommt die Gruppen - 'Turm' und 'Gondel' zugeteilt und der Rotor-Joint die Gruppen - 'Rotor' und 'Rotorblätter-Spitzen'. Wählt dazu mit Groups->Select die passenden Gruppen aus und mit Klick auf Joints->Assign werden sie, dem in der Liste ausgewählten Joint, zugewiesen:

Registerkarte Joints
Registerkarte Joints

Überprüfen könnt ihr eure Zuordnung, indem ihr auf Joints->SelAssigned klickt.
Nun können wir unsere Windkraftanlage, genauer gesagt, unseren Rotor, animieren. Klickt dazu auf den Anim-Button ganz unten rechts in Milkshape 3D und danach auf Model->Select->Joint und wählt den Rotor-Joint aus, sodaß er rot dargestellt wird:

Die zwei Joints, mit ausgewähltem Rotor-Joint
Die zwei Joints, mit ausgewähltem Rotor-Joint

Bevor wir loslegen stellen wir die Anzahl an Frames (Bilder) ein, die unsere Animationssequenz haben soll. Schreibt in die beiden rechten Textboxes, neben dem Anim-Button, den gewünschten Wert hinein. Ich habe mich für 39 entschieden, sodaß jeder zehnte Frame als Keyframe (Schlüsselbild), mit einem, um 90 Grad weiter gedrehten Rotor, gesetzt werden kann:

Animationsleiste
Animationsleiste

Nun setzen wir den ersten Keyframe mit Klick im Menü, auf Animate->Set Keyframe. Dann bewegt den Marker auf der Frameleiste zu Frame 10. In der zweiten Textbox von links, wird übrigens angezeigt, bei welchen Frame sich der Marker gerade befindet.
Dreht dann den Rotor mithilfe der Maus um 90 Grad weiter, am besten in einer Ansicht, die den Rotor frontal zeigt (siehe letztes Bild). Mit Klick auf Animate->Set Keyframe speichert ihr diese Pose. Das gleiche macht ihr bei Frame 20. Der letzte Frame, wurde deshalb als der 39. Frame gewählt, da wir einen einigermaßen ruckfreien Übergang zum erneuten Anfang der Animation, also den ersten Frame, haben wollen. Wir legen die Rotation des Rotors auf -9 bzw. 351 Grad fest und klicken ein letztes Mal auf Animate->Set Keyframe. Das letzte Bild zeigt nochmal die vier Ansichten beim Festlegen der Animationssequenz:

Animation
Animation

Nun können wir die Animation abspielen, indem wir auf den, nach rechts weisenden Pfeil in der Animationsleiste klicken. Der Rotor der Windkraftanlage sollte sich dann drehen. Heureka!

Die Aufgabe eine Windkraftanlage zu modellieren, texturieren und animieren wäre vollbracht. Nun könnt ihr das Modell mit den vielen Export-Möglichkeiten, die Milkshape 3D zu bieten hat, speichern und es in eine 3D-Grafik-Engine importieren.

Hinweis:
Solltet ihr bei der Darstellung mit einer Grafik-Engine Löcher im Modell sehen, könnte das daran liegen, daß Dreiecke des Modells mit der falschen Vertex-Reihenfolge gerendert werden. Durch Auswählen der betroffenen Dreiecke in Milkshape 3D und anschließenden Klick im Menü auf Face->Reverse Vertex Order könnt ihr dieses Problem beheben, sofern es nicht an fehlenden Dreiecken liegt.

Ich habe mein Modell bereits mit einer Engine getestet und alles hat funktioniert, wie es sollte. Ihr könnt es hier mit Texturen, in einer zip-Datei downloaden.

Ich hoffe ihr habt nun einen guten Einblick in Milkshape 3D bekommen und findet euch nun selbst in Milkshape 3D zurecht,

Christoph.


Nach oben

Copyright 2015 (c) by Christoph P.
Impressum    AGB