Deathmatch-Model

Ich setze hierbei voraus, dass man weiss, wie man Character-Models erstellt. Also, dass man bereits ein fertiggeskintes Model hat.

Was benötigen wir?

  • HL2 und Steam (brauch ich glaub ich nicht erwähnen.)
  • GCFScape (zum Entpacken der original Modelfiles)
  • MDLDecompiler (zum Decompilieren des Original-Models)
  • Milkshape (zum Verknüpfen der Bones mit dem Mesh)
  • Ein Bildbearbeitungsprogramm mit dem man TGA-Files erstellen kann (Für dies Tutorial benutze ich Photoshop → Adobe )
  • VTF-Plugin für Photoshop
  • Texteditor

Verzeichnisse anlegen

Als erstes legen wir uns ein paar Verzeichnisse an. Und zwar gehen wir in das Verzeichnis SteamApps\<username>\half-life 2 deathmatch\ Dort erstellen wir ein models und ein materials Verzeichnis, falls noch nicht vorhanden. In diesen Verzeichnissen müssen wir weitere Unterverzeichnisse erstellen. Ich habe an dieser Stelle mal eine Übersicht eingefügt, wie eure Verzeichnisstruktur aussehen muß.

  • SteamApps\<username>\half-life 2 deathmatch\materials\models\player\Orc (Orc ist mein Model)
  • SteamApps\<username>\half-life 2 deathmatch\materials\VGUI\playermodels\humans\Group03
  • SteamApps\<username>\half-life 2 deathmatch\models\humans\Group03
  • SteamApps\<username>\half-life 2 deathmatch\hl2mp\materials\models\player\Orc
  • SteamApps\<username>\half-life 2 deathmatch\hl2mp\materials\VGUI\playermodels\humans\Group03
  • SteamApps\<username>\half-life 2 deathmatch\hl2mp\materialsrc\models\player\Orc
  • SteamApps\<username>\half-life 2 deathmatch\hl2mp\materialsrc\VGUI\playermodels\humans\Group03
  • SteamApps\<username>\half-life 2 deathmatch\hl2mp\models\humans\Group03
  • SteamApps\<username>\half-life 2 deathmatch\hl2mp\modelsrc\humans\Group03

Basismodel entpacken

Zudem wäre es praktisch ein temporäres Verzeichnis anzulegen, in dem das zu ersetzende Model abgelegt werden kann. Dies benutzen wir dann auch gleich mal, in dem wir GCFScape starten und die Datei source models.gcf aus dem SteamApps Verzeichnis herein laden. Dort gehen wir in das Verzeichnis \hl2\models\Humans\Group03\ und extrahieren alle sieben Dateien eines Models, welches wir im Deathmatch ersetzen wollen in das angelegte temporäre Verzeichnis (jede einzelne Datei mit der rechten Maustaste anklicken und extract anwählen). Ich habe für dies Tutorial mal das Model male_09 gewählt.

Basismodel decompilieren

So, GCFScape kann dann auch gleich wieder geschlossen und das Model decompiliert werden. Dazu starten wir den MDLDecompiler und wählen das gerade extrahierte Model aus. Nun erhalten wir eine Reihe von *.smd Datein, von denen wir die lod1* bis lod6* löschen können und eine *.qc-Datei, die wir nachher noch benötigen um unser neues Model zu compilen. Die Dateien ragdoll.smd und male_09_reference.smd müssen auch erhalten bleiben. Also, diese nicht löschen!

Skelett und eigenes Model laden

Weiter mit Milkshape. Bitte einmal starten und unter File → Import → Half-Life SMD die Datei male_09_reference.smd auswählen und importieren. Wir benötigen hier allerdings nur das Skelett.
Wenn wir das Skelett reingeladen haben, importieren wir als nächstes unser Model und passen es weitestgehend unserem Skelett an (thx an Dunkelbier fürs Model).

Skelett und eigenes Model verbinden

Jetzt wird ein Wenig knifflig. Wir attachen nun den Mesh ans Skelett. Dazu bitte einmal den Reiter Joints (oben rechts) anwählen. Hier sehen wir alle benannten Knochen des blauen Skeletts und können sie nach belieben auswählen. Gesagt wie getan! Wir wählen dann auch gleich mal einen an (vergewissert euch vorher, dass im Reiter Model, Select und Vertex angeklickt ist) und selektieren die Vertexe, die wir dem Knochen zuweisen wollen und klicken dann auf Assign.
Das ganze wiederholen wir solange, bis alle Vertexe assigned sind. Schaut euch das extrahierte Model einmal an, damit ihr seht wie die Bones im Original zugewiesen sind.
Kleiner Tip: falls es zu frickelig wird, kann man sich alle nicht attachten Vertexe anzeigen lassen und die, die man nicht braucht mit „Shift+rechte Maustaste“ deselektieren.

Skin auflegen

Wenn alle Vertexe fertig zugewiesen sind, legen wir noch den Skin auf unser Model. Und zwar, laden wir die *.tga-Files (Reiter Materials → New → None → Skin auswählen) rein, wählen eine Gruppe aus und weisen (Assign unter Materials anklicken) dieser Gruppe den Skin zu. Nun wird das ganze als *.smd exportiert (Reference anklicken).

Physic-Model

Für unser Playermodel brauchen wir jetzt noch ein Physic-Model. Dafür müssen wir nun ersteinmal das Grafikprogramm starten und ein *.tga Bild mit den Massen 16×16 und einem rein Schwarzen Inhalt unter dem Namen phy.tga abspeichern. (Am besten dahin, wo unsere anderen Skinsdateien liegen).
Weiter in Milkshape!
Nun importieren wir die Datei physmodel.smd und klicken auf Group. Dort sehen wir die Gruppe phy. Dieser Gruppe weisen wir nun den gerade erstellten phy.tga-Skin zu (Gruppe anwählen → im Reiter Materials alle löschen → New anklicken → Skin reinladen → Umbenennen in phy → Assign anklicken).
Das Model nun noch als phymodel.smd exportieren und fertig.

So, mit Milkshape sind wir dann auch durch und kann also geschlossen werden.

Skin konvertieren

Als nächstes müssen wir den Skin konvertieren, damit er in einem für die Source-Engine lesbarem Dateiformat vorliegt. Dazu muss ersteinmal der Skin als *.tga-File vorliegen. Dies machen wir mit Photoshop. Skin reinladen → Speichern unter → TGA anwählen → Speichern → fertig.

Nun ziehen wir einfach unseren *.tga-Skin auf die Datei vtex.exe im Verzeichnis sourcesdk\bin und erhalten im Verzeichnis half-life 2 deathmatch\materials\models\player\Orc (Orc ist hier mein Modlename bzw. Model, für das ich dies Verzeichnis erst erstellet habe) den compilierten Skin. Dies sind *.vtf-Dateien. Diese Dateien kopieren wir nun in das Verzeichnis half-life 2 deathmatch\hl2mp\materials\models\player\Orc.

.vmt erstellen

Zu diesen Skin-Dateien erstellen wir noch *.vmt-Dateien. Dazu den Texteditor starten und volgenden Inhalt eintippen.

"vertexlitgeneric"
{
    "$baseTexture" "models/player/Orc/orc_body"
    "$model" 1
}

Orc_body ist hier mein Skinname. Die Datei speicheren wir nun unter dem gleichen Namen wie unsere Skindatei nur mit der Endung .vmt ab. (Datei → Speichern unter → Bei Typ „alle Datein“ auswählen → bei Dateiname MeinSkin.vmt eingeben.)

In die Datei phy.vmt kommt folgendes rein.

"vertexlitgeneric"
{
    "$baseTexture" "models\player\Orc/phy"
}

Model compilieren

So, was nun? Hmm, ach ja! Das Model muss ja noch compiled werden, damit die Source-Engine damit etwas anfangen kann… Wir öffnen in unserem Modelverzeichnis die Datei mdldecompiler.qc und löschen den Eintrag in der ersten Zeile, der noch auf unser temporäres Verzeichnis hinweist (das, in dem wir das Original-Model decompiled haben.) In der zweiten Zeile benennen wir das Model von male_09_reference.smd in unser Model um. Meins heisst ja Orc.smd. Dann, die Zeile in dem das Verzeichnis des Materials also des Skins steht, wird in unser Skin-Verzeichnis umbenannt. Die Zeilen, die auf die lod-Dateien verweisen löschen wir raus. (Die Lod-Models sind eigentliche dazu da, um die Dateilgenauigkeit des Spielers auf grössere Entfernungen herunter zu setzen. Solltet Ihr also den Deathmatch nur mit eigenen Models dichtpacken, solltet Ihr euch überlegen diese Datein evtl. doch zu verwenden.)

Bei mir sieht die QC-Datei nun so aus.

$cd "C:\Steam\SteamApps\MeinAccount\half-life 2 deathmatch\hl2mp\modelsrc\Humans\Group03\"
$modelname "Humans\Group03\male_09.mdl"
$model "male_09" "Orc.smd" {
//-doesn't work     eyeball righteye ValveBiped.Bip01_Head1 -1.298 -2.652 72.706 eyeball_r 1.000  4.000 grn_pupil_r 0.660
//-doesn't work     eyeball lefteye ValveBiped.Bip01_Head1 1.287 -2.659 72.689 eyeball_l 1.000  -4.000 grn_pupil_l 0.660
     mouth 0 "mouth"  ValveBiped.Bip01_Head1 0.000 1.000 0.000
}

$cdmaterials "models\player\Orc\"
$cdmaterials "models\Humans\Male\"
$cdmaterials "models\Humans\Male\"
// Model uses material "eyeball_r.vmt"
// Model uses material "mouth.vmt"
// Model uses material "eyeball_l.vmt"
// Model uses material "citizen_sheet.vmt"
// Model uses material "erdim_cylmap.vmt"
// Model uses material "grn_pupil_r.vmt"
// Model uses material "glint.vmt"
// Model uses material "grn_pupil_l.vmt"
$attachment "eyes" "ValveBiped.Bip01_Head1" 3.77 -3.79 0.01 rotate 0.00 -80.10 -90.00
$attachment "mouth" "ValveBiped.Bip01_Head1" 1.00 -5.70 -0.00 rotate 0.00 -80.00 -90.00
$attachment "chest" "ValveBiped.Bip01_Spine2" 5.00 4.00 -0.00 rotate -0.00 90.00 90.00
$attachment "forward" "ValveBiped.forward" 0.00 0.00 0.00 rotate 0.00 0.00 -0.00
$attachment "anim_attachment_RH" "ValveBiped.Anim_Attachment_RH" -0.00 -0.00 -0.00 rotate -90.00 -90.00 0.00
$attachment "anim_attachment_LH" "ValveBiped.Anim_Attachment_LH" -0.00 0.00 0.00 rotate -90.00 -90.00 0.00
$attachment "anim_attachment_head" "ValveBiped.Bip01_Head1" -0.00 0.00 0.00 rotate -90.00 -90.00 0.00
$includemodel "humans/male_shared.mdl"
$includemodel "humans/male_ss.mdl"
$includemodel "humans/male_gestures.mdl"
$includemodel "humans/male_postures.mdl"
$surfaceprop "flesh"
$eyeposition 0.000 0.000 70.000
$illumposition -1.764 0.000 36.350
$sequence ragdoll "ragdoll" ACT_DIERAGDOLL 1 fps 30.00
$ikchain rhand ValveBiped.Bip01_R_Hand knee  0.707 0.707 0.000
$ikchain lhand ValveBiped.Bip01_L_Hand knee  0.707 0.707 0.000
$ikchain rfoot ValveBiped.Bip01_R_Foot knee  0.707 -0.707 0.000
$ikchain lfoot ValveBiped.Bip01_L_Foot knee  0.707 -0.707 0.000
$collisionjoints "phymodel.smd" {

    $mass 90.0
    $inertia 10.00
    $damping 0.01
    $rotdamping 1.50
    $rootbone "valvebiped.bip01_pelvis"
    $jointmerge "ValveBiped.Bip01_Pelvis" "ValveBiped.Bip01_Spine1"
..............................
.....................
...............
..........
.......
......

Letzte Schritte

So, einfach schliessen und die Frage ob das ganze gespeichert werden soll mit ja bestätigen.

Fast geschafft!

Jetzt nochmal in unser Model-Verzeichnis und die Dateien:

  • mdldecompiler.qc
  • unserModel.smd
  • phymodel.smd
  • ragdoll.smd

rüber ins Verzeichnis half-life 2 deathmatch\hl2mp\modelsrc\Humans\Group03 ziehen. Die *.qc-Datei ziehen wir nun auf die Datei studiomdl.exe im Verzeichnis sourcesdk\bin.
Das ganze rattert nun einmal durch und erstellt im Verzeichnis half-life 2 deathmatch\models\Humans\Group03 unser fertigen Model-Dateien. Alle Dateien aus diesem Verzeichnis ins Verzeichnis half-life 2 deathmatch\hl2mp\models\Humans\Group03 verschieben oder kopieren und es könnte eigentlich los gehen. Wir brauchen aber ja noch ein Foto von unserem Model, das wir bei der Auswahl im Game später sehen.

Dies läuft genauso ab wie mit dem Model ansich. Wir extrahieren uns mit GCFScape ein Textur aus der Half-Life 2 deathmatchmaterials\VGUI\playermodels\humans\group03 unsere Datein. Bei mir male09.* und laden diese, nachdem das VTF-Plugin installiert wurde, in Photoshop rein. Nun einfach ein neues Bild drüber legen und wieder abspeichern.

Die Verwendung aller Dokumente einschließlich der Abbildungen ausschließlich zu nichtkommerziellen Zwecken. Verbreitung des Dokuments auf Speichermedien, (insbesondere auf CD-ROMs als Beilage zu Zeitschriften und Magazinen oder sog. "Mission-Packs" etc.) ist untersagt.
 
half-life_2/tutorials/deathmatch_model.txt · Zuletzt geändert: 2009/07/22 16:42 von GottZ