Brushwork aus der Map in ein ASE-Mapobjekt umwandeln

In diesem Tutorial möchte ich dir zeigen, wie du dein selbst erstelltes Brushwork aus einer Map-Datei als Mapobjekt in eine ASE-Datei umwandeln kannst. Bevor du aber loslegst, solltest du sicherstellen, dass du den Q3Map2-Kompiler mindestens in Version 2.5.16 und den GtkRadiant 1.4 oder neuer für World of Padman installiert und konfiguriert hast. Mit älteren Versionen könnte es bei der Anwendung dieses Tutorials zu Fehlern kommen.

Vorbemerkungen

Das erstellen eines ASE-Mapobjektes aus vorhandenem Brushwork deiner Map kann einige Vorteile haben. Das Rotieren und Skalieren von komplexem Brushwork kann im Radiant häufig zu unerwünschten Effekten und Verschiebungen in deiner Konstruktion führen. Der Export deines Brushworks als Modell im ASE-Format ist dann sinnvoll, da es einfach als Mapobjekt wieder in den Radiant importiert werden kann, um es dann ohne Einschränkungen rotiert und skaliert werden kann. Ein weiterer Vorteil ist, dass ein ASE-Mapobjekt die Texturen aus deiner Map referenziert und somit keine extra UV-Map benötigt. Auch handelt es sich dabei um eine einfache Textdatei und lässt sich direkt in einem Texteditor (z. B. Notepad++) bearbeiten, um ggf. nachträglich geänderte Texturpfade anzupassen zu können. Auch in dem Fall, dass dich die einstellbaren Gridgrößen im Radiant zu sehr einschränken, kann ein Export hilfreich. Hast du schon einmal darüber nachgedacht dein Brushwork einfach vielfach größer und somit detaillierter zu bauen und danach einfach als Mapobjekt viel kleiner skaliert wieder einzufügen?

Natürlich hat so ein ASE-Mapobjekt auch Nachteile. Du kannst das ASE-Mapobjekt nur über das Entity misc_model einbauen, es muss also fest in die BSP deiner Map eingerechnet werden. Es ist nicht möglich das ASE-Mapobjekt über das Enity misc_externalmodel oder über den Key model2 eines beliebigen func-Entities einzubinden. Im Gegensatz zum MD3-Format werden ASE-Mapobjekte während der Lichtberechnung auch nicht automatisch berücksichtigt, d.h. sie erscheinen in der Map später sehr hell. Dies lässt sich aber im Nachhinein leicht beheben (siehe letzter Abschnitt). Du siehst also, das MD3-Format hat trotzdem seine Berechtigung.

Brushwork vorbereiten

Um ein ASE-Mapobjekt zu erstellen, brauchst du nichts weiter als dein fertig texturiertes Brushwork, welches du in eine leere MAP-Datei kopiert hast. Es muss mindestens einen Brush mit der Eigenschaft structural haben, da ansonsten später keine ASE-Datei erzeugt wird. Die Positionierung des Brushworks hin zum Koordinatenursprung des Grids im Radiant ist entscheidend, da dieser gleichzeitig den Tag, also den Koordinatenursprung des ASE-Mapobjekts definiert. Daher sollte zum Beispiel ein Tisch zentriert oberhalb des Koordinatenursprungs des Grids im Radiant positioniert werden, während eine Lampe zentriert unterhalb positioniert werden sollte. Zentrierst du dein Brushwork vor dem Konvertieren nicht richtig, erscheint es auch am Entity misc_model nicht zentriert.

Brushwork mit info_player_start und Raum mit caulk-Textur

Brushwork mit info_player_start und Raum mit caulk-Textur

Baue um das Brushwork einen Raum, der die Konstruktion komplett einhüllt und belege alle sechs Brushes des Raums mit der Textur common/caulk. Außerdem sollten alle Oberflächen deines Brushworks, die man später im Spiel nach Positionierung des Mapobjekts sowieso nicht sehen kann, ebenfalls mit der caulk Textur versehen sein. Diese Flächen werden dann nicht texturiert und auf diesem Weg unnötige Polygone eingespart. Als letztes musst du noch das Entity info_player_start irgendwo innerhalb des Raums einfügen und die Map unter dem Namen des späteren Mapobjekts abspeichern, z. B. meinASEmapobjekt.map.

Brushwork umwandeln

Es gibt verschiedene Möglichkeiten dein Brushwork umzuwandeln. Alle benutzen jedoch die gleiche Methode. Du kannst deine kleine Map z.B. über das Build-Menü des Radianten kompilieren. Dazu musst du den Befehlt map2ase auswählen, der genau für diesen Zweck von uns dort angelegt wurde.

Build-Menü im Radiant mit map2ase-Befehl

Build-Menü im Radiant mit map2ase-Befehl

Alternativ kannst du natürlich auch ganz ohne das Build-Menü kompilieren, indem du dir eine Batch-Datei (BAT) erstellt, die die folgenden Kommandos enthält. Das ist eine einfache Textdatei, die unter Windows auch durch einen einfachen Doppelklick direkt gestartet werden kann. Diese enthält die Pfade zum Q3Map2-Kompiler und zu deiner Map, die du natürlich entsprechend deiner Situation selbst anpassen musst. Eigentlich handelt es sich um zwei Befehle, die hintereinander ausgeführt werden. Zuerst wird aus der MAP-Datei eine BSP-Datei erstellt und zweiten Schritt aus der BSP-Datei eine ASE-Datei.

"C:\meinpfadzuq3map2\q3map2.exe" -meta -patchmeta "C:\Programme\World of Padman\wop\maps\meinASEmapobjekt.map"
"C:\meinpfadzuq3map2\q3map2.exe" -convert -format ase "C:\Programme\World of Padman\wop\maps\meinASEmapobjekt.bsp"

Als dritte Variante kannst du auch Q3Map2Build zum Kompilieren verwenden. Dazu aktivierst du bei BSP in einem ersten Schritt unter Options nur die Schalter -meta -patchmeta, klickst auf Save und dann auf Build. Alle anderen Berechnungsphasen musst du deaktivieren (VIS, LIGHT und BSPC). In einem zweiten Schritt aktivierst du wieder bei BSP unter Options nur -convert und gibst daneben die Zeichenfolge ase ein, wenn sie dort nicht schon aufgeführt sein sollte. Dann klickst du wieder auf Save und dann auf Build. Auch hier bleiben alle anderen Berechnungsphasen deaktiviert (VIS, LIGHT und BSPC).

Q3Map2Build BSP 1. Schritt (links) und BSP 2. Schritt (rechts)

Q3Map2Build BSP 1. Schritt (links) und BSP 2. Schritt (rechts)

Egal, welche Variante du verwendest, nachdem das Kompilieren erfolgreich beendet wurde, findest du die neue ASE-Datei im Maps-Unterverzeichnis deiner WoP-Installation. Erstelle der Ordnung halber ein neues Verzeichnis deiner Wahl z. B. unter models/mapobjects/meinemapobjekte/ und verschiebe dein ASE-Mapobjekt dort hin.

Detailliertere Patches

Solltest du zusätzlich zu Brushes auch Patches, also Curved Surfaces verwendet haben und dir diese nach dem Kompilieren des ASE-Modells zu eckig vorkommen, kannst du über den Parameter subdivisions mit Angabe eines Wertes von 0 und größer die Anzahl der Unterteilungen erhöhen, die in Ihrer Geometrie vorgenommen werden sollen. Je größer der Wert, desto höher die Triangulation, was aber die Leistung im Spiel beeinträchtigen kann. Hier ist also in Abhängigkeit der Größe der verwendeten Patches ausprobieren angesagt. Der Parameter kann direkt im ersten BSP-Schritt der BAT-Datei berücksichtigt werden.

"C:\meinpfadzuq3map2\q3map2.exe" -meta -patchmeta -subdivisions 2 "C:\Programme\World of Padman\wop\maps\meinASEmapobjekt.map"
"C:\meinpfadzuq3map2\q3map2.exe" -convert -format ase "C:\Programme\World of Padman\wop\maps\meinASEmapobjekt.bsp"

Alternativ kannst du auch den map2ase-Befehl im Hauptmenü des Radiants unter Build > Customize… selbst anpassen. Q3Map2Build bietet diesen Parameter leider nicht an, zumindest habe ich ihn noch nicht gefunden.

map2ase-Befehl im Build-Menü des Radiants anpassen

map2ase-Befehl im Build-Menü des Radiants anpassen

Mapobjekt importieren und Spawnflags setzen

Nun bist du in der Lage dein zuvor umgewandeltes Brushwork als neues Mapobjekt in deine Map über das Entity misc_model zu importieren. Öffne anschließend den Entity-Inspektor, indem du die Taste N drückst und gib als Key spawnflags mit dem Wert 4 ein. Dies führt dazu, dass der Q3Map2-Kompiler das Modell bei der LIGHT-Berechnungsphase berücksichtigt und es so automatisch mit einer Lightmap versieht. Solltest du das Mapobjekt zusätzlich auch automatisch clippen wollen, musst du für den Key spawnflags statt der 4 eine 6 eingeben.

  • spawnflags 2: automatisches clippen
  • spawnflags 4: lightmap erzeugen
  • spawnflags 6: automatisches clippen & lightmap erzeugen
Import des ASE-Mapobjekts über misc_model und erzeugte Lightmap mittels spawnflags 4

Import des ASE-Mapobjekts über misc_model und erzeugte Lightmap mittels spawnflags 4

Außer der im ersten Abschnitt bereits beschriebenen Einschränkungen kannst du dein ASE-Mapobjekt, wie jedes andere Mapobjekt auch, durch Skalieren und Rotieren anpassen. Weitere Informationen dazu findest du im Tutorial Umgang mit Mapobjekten.