Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5

Meshtree erstellen
#1

Meshtree-Tutorial

Einleitung:

Im Wadmerger Animationseditor gibt es auch einen Meshtree Editor. Damit kann man den Meshtree eines animierten Objektes bearbeiten. Wer schon einmal auf gut Glück daran herum gespielt hat und etwas verändert hat, hat sicher schon merkwürdige Fehler bemerkt. Wenn der Wadmerger nicht gleich abstürzt, drehen sich die Körperteile in merkwürdigen Positionen, oder aber es drehen sich im fertigen Level ganze Objekte durch den Raum. Deshalb soll dieses Tutorial dazu dienen den Meshtree zu verstehen und zu lernen ihn gezielt zu verändern.
Im Grunde ist es gar nicht schwer zu verstehen, man muss nur beim Ändern ganz genau aufpassen, weil schon ein kleiner Fehler zu großen Problemen führen kann.

Aufbau des Meshtree:
Meshtree erstellen:
Reihenfolge der Meshes:
Spezial-Meshes:
Zitieren
#2

Aufbau des Meshtree:

Laden wir uns als Beispiel doch erst einmal das Lara-Objekt. Es ist schließlich das wichtigste im ganzen Spiel.
Wenn wir uns den Meshtree ansehen sieht der so aus:

Code:
Mesh 0
|-Mesh 1
| |-Mesh 2
|   |-Mesh 3
|-Mesh 4
| |-Mesh 5
|   |-Mesh 6
|-Mesh 7
  |-Mesh 8
  | |-Mesh 9
  |   |-Mesh 10
  |-Mesh 11
  | |-Mesh 12
  |   |-Mesh 13
  |-Mesh 14


Das ganze ist im Prinzip aufgebaut wie ein Stammbaum. Mesh 0 ist immer der Urahn der Familie. Bei Lara und bei allen Gegnern ist das immer die Hüfte.
Alle Meshes die einmal eingerückt sind sind seine direkten Kinder. Das sind bei Lara der linke und der rechte Oberschenkel, sowie der Oberkörper. Alles Meshes die weiter eingerückt sind, sind eben weitere Nachfahren. So ist Mesh 2, der linke Unterschenkel, ein Kind von Mesh 1, dem linken Oberschenkel. Der Fuß (Mesh 3) ist wiederum ein Kind der Unterschenkels.

Die Eltern-Kind-Beziehungen haben nun die Funktion, die Bewegungsmöglichkeiten zu regeln. Jedes Kind hängt an seinem Elter fest. Das bedeutet, wenn sich das Eltern-Mesh bewegt, bewegt sich das Kind immer mit. Das Kind ist immer an einer bestimmten Stelle am Eltern-Mesh befestigt, und kann sich um diesen Punkt herum drehen. Der Befestigungspunkt wird im Wadmerger durch bewegen der Meshes bei "No Animation" eingestellt. Dreht ich das Eltern-Mesh bleibt das Kind-Mesh an dieser relativen Position zum Eltern-Mesh, und dreht sich so mit.

Weil das so ist, ist es bei manchen Objekten auch manchmal nötig zusätzliche Meshes zu verwenden, die komplett unsichtbar sind, und im Spiel gar nicht zu sehen sind.
Bei Doppeltüren beispielsweise gibt es immer ein unsichtbares Mesh 0 an dem dann die beiden Türflügel als Kind-Meshes hängen.

Wenn man das weiß, ergibt der ganze Meshtree auch einen Sinn. Der Unterschenkel ist das Kind vom Oberschenkel, weil er sich ja mit diesem mit bewegen soll. Wenn man seinen Oberschenkel bewegt, bewegt sich schließlich auch immer das ganze Bein mit, und bleibt nicht am Boden. Genauso muss der Fuß ein Kind-Mesh vom Unterschenkel sein, weil der Fuß am Unterschekel befestigt ist. Also gilt: Überall, wo zwei Körperteile durch ein Gelenk verbunden sind, muss eine Eltern-Kind-Beziehung der Meshes gelten.
Zitieren
#3

Meshtree erstellen:

Das Grundprinzip ist doch gar nicht so kompliziert, oder? Nun ist noch die Frage, wie man den Meshtree erstellt. Dazu dienen die Checkboxen mit "Push" und "Pop". Um zu verstehen, wie diese funktionieren, deaktivieren wir doch mal bei allen Meshes die "Push"s und "Pop"s. Dabei fangen wir unten, also bei Mesh 14 an, weil es sonst zu Problemen kommen kann.
Ist alles deaktiviert sieht der Meshtree nun so aus:

Code:
Mesh 0
|-Mesh 1
  |-Mesh 2
    |-Mesh 3
      |-Mesh 4
        |-Mesh 5
          |-Mesh 6
            |-Mesh 7
              |-Mesh 8
                |-Mesh 9
                  |-Mesh 10
                    |-Mesh 11
                      |-Mesh 12
                        |-Mesh 13
                          |-Mesh 14

Das ist also die ursprünglich Einstellung des Meshtrees: Jedes Mesh ist jeweils Kind des vorherigen. Dieser Meshtree entspricht z.B. dem eines bewegliches Seiles, wobei jedes Seilstück natürlich am vorigen befestigt ist, und wo es keine Verzweigungen gibt. Ein solches Seil findet man auch im Coastal-Wad als Animating14.
Bei Lara bedeutet dieser Meshtree aber, dass der rechte Oberschenkel am linkebn Fuß befestigt ist. Wenn sie also ihr linkes Bein hebt, löst sich das rechte bein und bewegt sich mit nach vorne.
Wenn man ein neues Objekt von Grund auf neu erstellt, hat man auch zunächst einen solchen Meshtree.

Um das zu ändern braucht man nun "Push" und "Pop". Dabei muss man beachten: Ein "Push" und ein "Pop" bilden immer ein Paar. Jedes "Pop" ist genau einem "Push" zugeordnet und umgekehrt. Das bedeutet man kann nicht einfach beliebig ein paar "Push"s oder "Pop"s setzen, ohne ihre jeweils dazugehörigen "Pop"s bzw. "Push"s. Dann passieren solche Fehler, dass im Spiel Gegenstände durch den Raum wirbeln. Das kommt dann daher, weil sich diese ganzen Objekte plötzlich als Kinder des einen Objektes betrachten, bei dem man den Meshtree versaut hat.

"Push" und "Pop" legen immer ein Geschwisterpaar fest. Dabei muss das "Push" immer vor dem dazugehörigen "Pop" kommen. "Push" ist also immer da ältere Kind (niedrigere Meshnummer) und "Pop" das jüngere (höhere Meshnummer). Dabei sollte man auch immer das "Push" zuerst setzen und danach erst das "Pop". UN dumgekehrt zuerst das "Pop" entfernen und danch das dazugehörige "Push". Wenn man erst das "Pop" setzt gibt es gar kein Mesh, von dem dieses Mesh das Kind sind kann, was dann in einer Fehlermeldung im Wadmerger resultiert.

Nun überlegen wir: Der rechte Oberschenkel soll ja ein Kind der Hüfte (Mesh 0) sein, und damit ein Geschwister vom linken Oberschenkel, der ja auch an der Hüfte hängt. Das heißt sie bekommen ein "Push" und ein "Pop". Das Mesh mit der niedrigen Nummer bekommt immer da "Push". Also aktivieren wir bei Mesh 1 "Push". Das ist nun das ältere Kind. Bei Mesh 4 wird als jüngeres Kind "Pop" aktiviert. Und tatsächlich: Nun hängt der rechte Oberschenkel auch wieder an der Hüfte, statt am linken Fuß.

Nun sieht der Meshtree also so aus:

Code:
Mesh 0
|-Mesh 1 (Push)
| |-Mesh 2
|   |-Mesh 3
|-Mesh 4 (Pop)
  |-Mesh 5
    |-Mesh 6
      |-Mesh 7
        |-Mesh 8
          |-Mesh 9
            |-Mesh 10
              |-Mesh 11
                |-Mesh 12
                  |-Mesh 13
                    |-Mesh 14

Allerdings hängt der Oberkörper noch am rechten Fuß. Er soll aber auch an der Hüfte hängen. Also muss logischerweise Mesh 7 ein Kind von Mesh 0 sein. Das dritte Kind also.
Mesh 1 ist das älteste Kind, aber da ist Push ja schon aktiviert. Mesh 4 muss aber das nächst-ältere Geschwister von Mesh 7 werden, und das ist das Entscheidende: Also muss bei ihm das "Push" aktiviert werden. Zusätzlich zu dem bereits aktiverten "Pop". Bei Mesh 7 wird natürlich das zugehörige "Pop" aktivert.

Code:
Mesh 0
|-Mesh 1 (Push)
| |-Mesh 2
|   |-Mesh 3
|-Mesh 4 (Pop + Push)
| |-Mesh 5
|   |-Mesh 6
|-Mesh 7 (Pop)
  |-Mesh 8
    |-Mesh 9
      |-Mesh 10
        |-Mesh 11
          |-Mesh 12
            |-Mesh 13
              |-Mesh 14

Wenn Mesh 0 noch ein Kind bekommen sollte, etwa weil man Lara einen Schwanz verpassen will, dann müsste man auch bei Mesh 7 noch "Push" aktivieren und beim neuen Mesh für den Schwanzansatz eben "Pop". Die anderen Schwanzteile sollten natürlich aneinander hängen, und brauchen keine weiteren Einstellungen.
Man kann sich für Mesh-Geschwister also merken: Das älteste Kind bekommt immer "Push", das jüngste "Pop", und alle dazwischen beides.

Code:
Mesh 0
|-Mesh 1 (Push)
| |-Mesh 2
|   |-Mesh 3
|-Mesh 4 (Pop + Push)
| |-Mesh 5
|   |-Mesh 6
|-Mesh 7 (Pop + Push)
| |-Mesh 8
|   |-Mesh 9
|     |-Mesh 10
|       |-Mesh 11
|         |-Mesh 12
|           |-Mesh 13
|             |-Mesh 14
|-Mesh 15 (Pop)
  |-Mesh 16
    |-Mesh 17
      |-Mesh 18

Aber Moment mal! Fehlt da nicht etwas? Ja richtig die Arme sind noch ganz falsch. Also lassen wir das Gedankenspiel mit dem Schwanz erstmal bei Seite.
Der linke Arm hängt ja schon richtigerweise am Oberkörper. Der rechte jedoch an der linken Hand. Hier ist es ähnlich wie mit den Beinen. Die Meshes der Oberarme müssen also Geschwister werden, und beide Kinder des Oberkörpers. Also aktiviert man bei Mesh 8 "Push" und bei Mesh 10 "Pop". Der Kopf muss natürlich auch an den Oberkörper, also kann man auch gleich "Push" aktiveren, und bei Mesh 14, also dem Kopf, "Pop".
Wenn man alles richtig gemacht hat sieht der Meshtree wieder so aus:

Code:
Mesh 0
|-Mesh 1 (Push)
| |-Mesh 2
|   |-Mesh 3
|-Mesh 4 (Pop + Push)
| |-Mesh 5
|   |-Mesh 6
|-Mesh 7 (Pop)
  |-Mesh 8 (Push)
  | |-Mesh 9
  |   |-Mesh 10
  |-Mesh 11 (Pop + Push)
  | |-Mesh 12
  |   |-Mesh 13
  |-Mesh 14 (Pop)


Mit dieser einfachen Regel: älteres Kind = "Push" - jüngeres Kind = "Pop" lässt sich im Prinzip jeder beliebiger Meshtreee erstellen. Die maximale Anzahl an Meshes für ein Objekt ist dabei 32. Also Mesh 0 bis Mesh 31. Alle darüber hinaus sind im Spiel unsichtbar.
Zitieren
#4

Reihenfolge der Meshes:

Nun fragt man sich aber vielleicht: Wenn ich einen neuen Gegner erstelle, woher weiß ich dann welches Mesh das ältere Kind und welches das jüngere ist? Kommt also zuerst das linke Bein, dann das rechte, und dann der Oberkörper, oder kann auch erst das rechte Bein kommen? Oder der Oberkörper auch vor den Beinen?
Die Antwort ist: Es ist im Prinzip egal, in welcher Reihenfolge die Kinder eines Meshes angeordnet sind.
Ein menschlicher Gegner beispielsweise kann den gleichen Meshtree haben wie Lara:

Code:
Mesh 0 / Hüfte
|-Mesh 1 / li. OS (Push)
| |-Mesh 2 / li. US
|   |-Mesh 3 / li. Fuß
|-Mesh 4 re. OS (Pop + Push)
| |-Mesh 5 re. US
|   |-Mesh 6 re. Fuß
|-Mesh 7 / Oberkörper (Pop)
  |-Mesh 8 / li. OA (Push)
  | |-Mesh 9 / li. UA
  |   |-Mesh 10 / li. Hand
  |-Mesh 11 / re. OA (Pop + Push)
  | |-Mesh 12 / re. UA
  |   |-Mesh 13 / re. Hand
  |-Mesh 14 / Kopf (Pop)

Die Beine können aber auch in anderer Reihenfolge sein, und auch der Oberkörper vor den Beinen:

Code:
Mesh 0 / Hüfte
|-Mesh 1 / Oberkörper (Push)
| |-Mesh 2 / li. OA (Push)
| | |-Mesh 3 / li. UA
| |   |-Mesh 4 / li. Hand
| |-Mesh 5 / re. OA (Pop + Push)
| | |-Mesh 6 / re. UA
| |   |-Mesh 7 / re. Hand
| |-Mesh 8 / Kopf (Pop)
|-Mesh 9 re. OS (Pop + Push)
| |-Mesh 10 re. US
|   |-Mesh 11 re. Fuß
|-Mesh 12 / li. OS (Pop)
  |-Mesh 13 / li. US
    |-Mesh 14 / li. Fuß

Der Oberkörper kann sogar zwischen den Beinen im Meshtree stehen:

Code:
Mesh 0 / Hüfte
|-Mesh 1 re. OS (Push)
| |-Mesh 2 re. US
|   |-Mesh 3 re. Fuß
|-Mesh 4 / Oberkörper (Pop + Push)
| |-Mesh 5 / Kopf (Push)
| |-Mesh 6 / li. OA (Pop + Push)
| | |-Mesh 7 / li. UA
| |   |-Mesh 8 / li. Hand
| |-Mesh 9 / re. OA (Pop)
|   |-Mesh 10 / re. UA
|     |-Mesh 11 / re. Hand
|-Mesh 12 / li. OS (Pop)
  |-Mesh 13 / li. US
    |-Mesh 14 / li. Fuß


In jeden Fall kann sich der Gegner auf gleiche Art bewegen.
Bei Animating-Objekten, oder Türen, Puzzlen und anderen ist man tatsächlich fast völlig frei darin, in welcher Reihenfolge man Mesh-Geschwister anordnet.
Zitieren
#5

Spezial-Meshes:

Bei einigen Objekten muss man allerdings beachten, dass es Meshes mit besonderen Funktionen gibt. Diese besonderen Funktionen ist an ein Mesh mit einer bestimmten Nummer gebunden. Dies sind bei Gegnern einmal Meshes, mit denen sie angreifen. Bei Nahkampfattacken, erleidet Lara Schaden, wenn sie mit diesen Meshes berührt wird. Bei einem Gegner im Slot CROCODILE sind das z.B. immer die Meshes 8 und 9, weil diese beim originalen Krokodil den Kopf bilden, mit dem es zubeißt. Baut man einen anderen Gegner in diesem Slot, der einen anderen Meshtree hat, und bei diesen ist Mesh 8 ein Fuß, dann kann er Lara nur verletzen, wenn er nach ihr tritt und sie mit dem Fuß berührt. Soll er sie beim schlagen verletzen, muss man die Meshes so anordnen, dass Mesh 8 seine Hand ist.
Bei Gegner die schießen, gibt es auch ein bestimmtes Mesh, aus dem sie heraus schießen. Wenn man nun z.B. einen Gegner aus einem anderen Tomb Raider Teil kopiert, dann hat der einen anderen Meshtree, sodass das Mesh, aus dem der Gegner schießt, bei diesem nun sein Bein sein kann. So schießt er dann immer aus dem Bein heraus. Ist das Mesh beim neuen Gegner gar nicht vorhanden, weil er weniger Meshes hat, dann kann er Lara gar nicht mehr verletzen. Damit er richtig funktionierte musste man da die Meshes dann umordnen, und gegebenenfalls zusätzliche Meshes einfügen, die unsichtbar irgendwo dran hängen, nur damit die Hand mit der Waffe auch die richtige Meshnummer hat.

Deshalb sollte man sich bei Gegnern immer am originalen Meshtree orientieren. Zusätzliche Meshes kann man aber beliebig hinzufügen (bis Nummer 31), da diese sicher nicht mit Spezialfunktionen belegt sind.

Weitere Spezialfunktionen sind:
Ausrichtung auf Lara. Das sind bei menschlichen Gegnern, wie Baddy1, Baddy2 und SAS der jeweilige Oberkörper und der Kopf, die sich zu Lara hin drehen, wenn diese seitlich steht.
Zerbröseln. Z.B. der Kopf und der Schild beim Skelett.
Effekte, wie Rauch oder Feuer. Die Hand mit der Fackel beim Guide z.B.

Beim Switch_Type7 ist es immer das letzte Mesh in der Reihenfolge, unabhängig von der Anzahl, auf das Geschossen werden muss, und das dann zerbröselt.

Bei Fahrzeugen muss man besonders aufpassen.
Da gibt es einmal die Räder. Diese Meshes drehen sich automatisch bei der Fahrt, ohne dass das in der Animation eingestellt ist. Diese Meshes müssen also auch im selbst gebauten Fahrzeug die Räder sein, oder eben komplett unsichtbar irgendwo dran hängen. Sie sollten keine Kinder haben, da diese sich sonst ständig mitdrehen würden.
Beim MOTORBIKE sind das die Meshes 2, 4 und 8.
Beim JEEP die Meshes 9, 10, 12 und 13.
Dann gibt es bei beiden noch die Rücklichter. Beim MOTORBIKE ist Mesh 9 Rücklicht (aus) und Mesh 10 Rücklicht (an). Beim JEEP ist Mesh 15 das Rücklicht links (aus) und 14 das Rücklicht links (an) sowie Mesh 16 das Rücklicht rechts (aus) und 17 das Rücklicht rechts (an). Normalerweise sind immer die ausgeschalteten Rücklichter sichtbar und die angeschalteten Rücklichter unsichtbar im Spiel. Beim bremsen ist es dann anders herum. Diese Meshes kann man also auch nur für Rücklichter oder ähnliches verwenden, oder man muss bei seinem neuen Fahrzeug jeweils zweimal das gleiche Mesh verwenden, damit es immer sichtbar ist.
Beim MOTORBIKE gibt es noch den Scheinwerfer (Mesh 3) der nur sichtbar ist, wenn Lara darauf sitzt.
Eine weitere Schwierigkeit bei den Fahrzeugen ist, dass man nicht mehr Meshes verwenden kann, als die originalen Fahrzeuge haben. Also für das MOTORBIKE nur 10 und für den JEEP 17. Alle weiteren die man hinzufügt sind im Spiel generell unsichtbar.
Zitieren
#6

Knuddel  Danke, das Tutorial ist spitze!

Gut beschrieben, nicht zu viel aber auch nicht zu knapp - man kann alles sehr gut nachvollziehen!

Endlich hab ich verstanden, was bei mir immer falsch lief, diese "jedes Push braucht nen Pop Partner-Regel" Squint  Sehr wichtige Sache, ich bewundere Leute, die sowas herausfinden Thumbs up 

see u
Tifa Nazah
Zitieren
#7

Super Tutorial! Thumbs up 
Ich habe zwar auch schon Meshtrees erstellt, aber das war viel mit Try-and-Error. Hrhr 
Zwischendurch hatte ich auch schon mal durchs Level wirbelnde Statics und so was.
Zitieren
#8

Cool das werde ich mir durchlesen müssen, dankeschön! Smile 
Codo,index.php?page=Thread&postID=63821#post63821 schrieb:Zwischendurch hatte ich auch schon mal durchs Level wirbelnde Statics und so was.
Ach das geht? Big Grin  Ich dachte das würde nur bei moveables funktionieren Big Grin 
 Visit my Youtube page
Watch the complete walkthrough of my level "Rescue the princess"
[Bild: youtube.comhgat.jpg]
Zitieren
#9

Die sind so komisch um Lara rumgeflogen, wenn sie in die Nähe kam. Hrhr 

Ich glaube, ich hatte weniger Meshes drin als beim Originalobjekt in dem Slot, und die waren dann auch noch doof verknüpft. Dann weiß die Engine wohl nicht, wo das Objekt zu Ende ist, und nimmt sich einfach irgendwelchen in der Nähe vorhandenen Meshes.
Zitieren
#10

Nee, das kommt wirklich eifnach davon, wenn man die Push Pull Partner Regel ingnoriert - das hab ich andauernd gehabt beim Versuch den Jeep zu ändern Squint  Nicht die Anzahl der Meshes spielt ne Rolle sondern die Anzahl der unvollständigen Paare...

Aber das ist nun Geschichte Dank "Uranos" - Meshtree Power Weiß...

see u
Tifa Nazah
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste