• Was behandelt dieses Tutorial?
    Dieses Tutorial zeigt, wie man mit XSI und dem Source SDK ein einfaches Model, in diesem Beispiel einen Getränkekarton, modelliert, texturiert und letzten Endes kompiliert. Das Tutorial geht aber dabei nicht genau auf die Funktionsweise von XSI ein, sondern behandelt diese nur in wieweit es für das Beispiel notwendig ist.
  • Voraussetzungen
    Für das Tutorial benötigst du das Softimage® | XSI Mod Tool in der Version 4.2 oder höher, sowie das Source Addon von Valve. Das Source SDK muss natürlich auch installiert sein. Kenntnisse im Modeln benötigst du nicht, aber es ist hilfreich, wenn dir die Grundbegriffe schon bekannt sind. Im Tutorial wird folgende Textur verwendet.
    Textur
    (aufs Bild klicken für TGA Version)
  • Karton Modeln
    • Einen Cube erstellen
      Als Grundform für den Karton nutzen wir einen Cube (Würfel) . Diesen kannst du im linken Menu (Model Menu) unter „Get – Primitive – Polygon Mesh“ der Szene hinzufügen. Im erscheinenden Dialog setzt du die Kantenlänge auf 6.00 . Du kannst den Namen des Objektes auch von Cube in Karton ändern. Beachte dabei, dass die Namensänderung erst nach dem Drücken von Enter übernommen wird. Wenn alle Einstellungen gemacht sind, kannst du das kleine Dialogfenster einfach schließen. In den vier Ansichtsfenstern von XSI solltest du nun den Würfel sehen können. In den einzelnen Fenstern kannst du dich auch bewegen. In der oberen Menüleiste findest du dazu die entsprechenden Werkzeuge. Besonders oft wirst du wohl Zoom (Shortcut Z) , Orbit (Rotation, Shortcut O) und Pan (Bewegen, Shortcut S) benötigen. Das Orbit Tool funktioniert logischer Weise nur in der 3D Ansicht.

      Cube Einfügen
    • Den Cube anpassen
      Unser Getränkekarton soll ja nicht die Form eines Würfels haben, sondern die typische, längliche Form erhalten. Dazu benötigen wir das Scale Tool , welches du in der rechten Menuleiste findest. Um es zu benutzen muss der Würfel natürlich ausgewählt sein, falls er das nicht sein sollte, kannst du dies mit dem Select Tool (der große Mauszeiger in der rechten Menuleiste) machen. Du kannst sowohl alle Achsen gleichzeitig, als auch alles einzeln, oder nur zwei von den dreien skalieren. Wir beginnen mit der Z Achse (Tiefe) und verringern diese auf 2/3 der Ausgangsgröße. Dazu kannst du entweder in den Fenstern mit dem Mauszeiger den Würfel entsprechend verzerren, oder einfach in den Felder rechts von den Achsen (beim Scale Tool) den entsprechenden Wert eingeben, in diesem Falle bei Z 0.6666 (2/3). Das gleiche machen wir mit der Y Achse (Höhe), diese verdoppeln wir. Wir sollten nun einen Karton haben, der 12 Kästchen hoch , 6 Kästchen breit und 4 Kästchen tief ist. Um die Veränderungen festzulegen, musst du nun nur noch die „Transformationen einfrieren“ . Dazu klickst du auf Transform (über dem Scale Tool) und wählst „Freeze All Transformations“ . Die eben veränderten Werte sollten wieder zu 1 wechseln, doch die Form des Kartons bleibt erhalten.

      Skalieren
    • Eine Textur zuweisen
      Um dem Karton eine Textur zuzuweisen muss dieser markiert sein. Mit „Render – Get-Texture – Image“ kannst du einen Dialog öffnen, in welchem du eine Textur laden kannst. Um die Textur dieses Tutorials zu nutzen, musst du auf „New – From File“ klicken und die Textur auswählen. Nun muss die Textur aufgetragen werden. Dazu klickst du etwas weiter unten im gleichen Dialog bei Textur Projektion auf New und wählst „Cubic“ . Diese Zuweisung ist zwar noch sehr grob, erfüllt aber als Basis für das weitere Anpassen ihren Zweck. Im 3D Fenster können wir nun den texturierten Karton begutachten. Dazu muss aber der Rendermodus auf „Textured“ oder besser „Textured Decal“ gesetzt werden. Dies kann man im kleinen Dropdownmenu am oberen Fensterrand (es sollte noch auf „Wireframe“ stehen).

      Karton Leer Texture Select Texture View
    • Flächen Gruppieren
      Damit wir die Textur korrekt anpassen können müssen wir erst einmal die verschiedenen Faces (Flächen), die gleich texturiert werden sollen (z.B. Vorder- und Rückseite) gruppieren, damit wir sie dann getrennt vom Rest des Objektes im Texture Editor anpassen können. Dazu müssen wir zu aller erst die entsprechenden Flächen Auswählen, wozu du das Select Tool nutzen kannst. Dieses kann neben Objekten auch Flächen und Punkte (...) auswählen. Um Flächen auszuwählen musst du beim Select Tool von Object auf Polygon wechseln. Das Tool funktioniert dabei bei allen Auswahltypen gleich. mit der rechten Maustaste wählt man die Bereiche aus, deren Flächen (in unserem Falle) ausgewählt werden sollen. Mit der mittleren Maustaste hebt man eine Auswahl auf und mit der linken invertiert man sie (umkehren). In der Top Ansicht lassen sich besonders leicht Vorder- und Rückseite markieren. In der 3D Ansicht können wir dann sehen, ob die Auswahl so ist, wie wir sie haben wollten – ausgewählte Flächen werden rot markiert. Es ist wichtig dass auch wirklich nur die beiden Faces markiert sind. Hast du dies geschafft kannst du sie mit Cluster (weit unten in der rechten Menuleiste) gruppieren. Die roten Flächen werden jetzt weiß. Drücke Enter um die Eigenschaften der Gruppierung aufzurufen. Ändere den Namen von Polygon in „Vorne/Hinten“ oder etwas ähnlich einfach wieder erkennbaren. Das Gleiche machst du jetzt mit den Seiten. Die Ober- und Unterseite müssen einzeln behandelt werden, da sie verschiedene Texturen erhalten werden.

      Poly Select
    • Die XSI Oberfläche für das Texturieren anpassen
      Die vier Fenster können neben den standardmäßig verwendeten 2D und 3D Ansichten auch andere Inhalte haben. Für das weitere Vorgehen benötigen wir den Texture Editor und einen Explorer. Den Inhalt der Fenster kannst du ändern, indem du auf die lila hinterlegte Fensterbezeichnung klickst. Am besten funktionierst du die beiden unteren Fenster um. Wenn der Karton markiert ist, sollte im Texture Editor gleich die eben ausgewählte Textur erscheinen. Im Explorer kannst du in den Unterkategorien des Karton Objektes die eben erstellten Cluster wieder finden. Das ganze sollte dann wie in diesem Bild ausschauen.

      Obefläche
      (aufs Bild klicken für große Version)
    • Der Texture Editor
      In der Menuleiste des Textur Editors findest du die gleichen Buttons für Rotate , Translate und Scale wieder, die du bereits aus der rechten Menuleiste kennst (zumindest das Scale Tool). Ist keiner dieser Buttons angeklickt, ist automatisch das Select Tool aktiviert. Dieses kannst du nun genauso für das Auswählen der Eckpunkte der Flächen nutzen, wie du es eben beim Zuweisen der Cluster getan hast. Um die Textur der Vorder- und Rückseite anzupassen musst du nun im Explorer „Vorne/Hinten“ auswählen – die zur Gruppe gehörenden Faces werden wieder markiert und im Texture Editor siehst du nun nur noch diese Faces (da sie übereinander liegen siehst du genau genommen nur ein Face). Zieh die Eckpunkte der Fläche so zurecht, dass die Fläche nicht mehr die gesamte Textur, sondern nur den mittleren Teil (die Frontseite unseres Getränkekartons) bedeckt. Die Änderungen kannst du direkt im 3D Fenster begutachten. Wenn die Fläche sich am richtigen Platz befindet, kannst du dich den anderen Clustern zuwenden. Achte dabei darauf, dass du sowohl die Flächen von der Ober-, als auch von der Unterseite noch um 90° drehen musst. Wenn du damit fertig bist kann man unseren Karton schon als solchen erkennen. Nur eine Öffnung fehlt noch.

      Texture Editor Front angepasst
    • Die Öffnung modeln
      Für die Öffnung nehmen wir eine neue Grundform, einen Zylinder. Diesen findest du im gleichen Menu, in dem du auch den Cube hinzufügt hast. Der Zylinder benötigt keine Zwischenfragmente und 8 Seiten sollten ausreichen. Die Größe werden wir im Nachhinein anpassen. Bewege den Zylinder nun mit dem Translate Tool an die Stelle, an der die Öffnung sein soll (das abgerundete, grüne Rechteck auf der Oberseite). Mit dem Scale Tool kannst du nun die Größe anpassen. Damit wir die Proportionen nicht verzerren, müssen wir unten in der rechten Menuleiste Uni anklicken. Dies sorgt dafür, dass beim Skalieren die Proportionen beibehalten werden. Da das untere Ende des Zylinders im Karton steckt, werden wir die Unterseite des Zylinders nie sehen, weswegen wir diese Faces einfach löschen können. Dazu musst du sie mit dem Select Tool auswählen und dann Entf drücken. Hat der Zylinder nun die gewünschte Form musst du die Transformationen wieder einfrieren. Weise dem Zylinder nun die Textur zu (du musst das Bild nicht neu laden, im entsprechenden Dialog findest du es bereits in der Auswahlliste). Nutze die Cylindrical Projection und verkleinere die Flächen der Öffnung im Textur Editor soweit, dass die auf den Grünen Punkt passen. So erscheint die ganze Öffnung in grün.
      Das eigentliche Model ist nun fertig, überprüfe aber nochmals, ob alle Texturen am richtigen Platz sind und ob alle Transformationen eingefriert wurden. Das Model sollte nun wie im Bild aussehen.

      Fertiges Model
    • Model exportieren
      Für das Kompilieren muss das Model im SMD Format vorliegen. Mit dem Source Addon von Valve lässt sich unser Model aber ganz einfach als SMD speichern. Den Exportdialog findest du unter „ValveSource – Export SMD ...“. Speicher das Model als „accountname\sourcesdk_content\hl2\modelsrc\hlp_tutorial\hohesHLP.smd“. Es ist wichtig, dass du diesen Pfad übernimmst, da sich das weitere Tutorial darauf bezieht. Fehler mit Pfadangaben geschehen schnell und sind sehr ärgerlich.

      Export
    • Pysbox erstellen
      Für die Physikengine machen wir nun noch kurz eine einfachere Version unseres Models, da es eine Verschwendung von Rechenzeit wäre, wenn die Physikengine alle Details (in unserem Falle die Öffnung) mitberechnen würde. Damit wir unsere bisherige Arbeit nicht zerstören, solltest du das Model erst einmal unter einem anderen Namen speichern . Hebe nun die Oberseite des Kartons soweit an, dass die Öffnung nicht mehr sichtbar ist und lösche dann die Öffnung. Exportiere das Model nun ein zweites Mal, wähle aber im Exportdialog aus dem Dropdownmenu „Physbox (SMD)“ aus und speichere das Model unter „accountname\sourcesdk_content\hl2\modelsrc\hlp_tutorial\hohesHLP_phys.smd“. Nun sind wir mit den Arbeiten in XSI fertig und können zum Kompilieren übergehen.
  • Kompilieren
    • Was benötigen wir?
      Für das Model benötigen wir eine Textur (die Rohfassung im TGA Format kann Half-Life 2 nicht laden). Dann ein so genanntes QC Script, in welches wir hineinschreiben, welche Models kompiliert werden sollen und welche Eigenschaften und Texturen diese nutzen. Natürlich benötigen wir auch die fertigen SMD Dateien, aber die haben wir ja bereits. .
    • Vorbereitungen
      Da wir das Model für Half-Life 2 anfertigen, müssen wir das SDK dementsprechend einstellen. Dies ist denkbar einfach. Öffne das SDK Fenster in Steam und wähle im Dropdownmenu Half-Life 2. Die SDK Tools passen die verwendeten Pfade nun automatisch an.
    • Textur umwandeln
      Um die Arbeit zu vereinfachen machen wir uns eine Verknüpfung zum Texturumwandlungstool vtex.exe) im Ordner „account\sourcesdk\bin“ und hängen ihr die Parameter „-mkdir“ und „-shader vertexlitgeneric“ an. Der erste erlaubt es dem Tool Ordner zu erstellen, falls diese noch nicht vorhanden sind, der zweite lässt das Tool automatisch eine Materialdatei erstellen, so dass wir uns nicht mehr ums VMT Schrieben kümmern müssen. Jetzt musst du die Textur im TGA Format (hohesHLP.tga, siehe Seitenanfang) in den Ordner „accountname\sourcesdk_content\hl2\materialsrc\models\hlp_tutorial\“ kopieren und von dort aus auf die Verknüpfung ziehen. Vtex.exe erstellt nun automatisch im Ordner „accountname\half-life 2\hl2\materials\models\hlp_tutorial\“ die Dateien hohesHLP.vft und hohesHLP.vmt. Letzteres ist das Material, auf welches später das Model zugreifen wird. Die VFT Datei ist die eigentliche Textur (ohne zusätzliche Informationen).
    • QC Script schreiben
      QC Scripts sind nichts anderes als Textdateien. erstelle im Ordner, in dem auch die SMD Dateien liegen eine neue Textdatei und nenne sie in hohesHLP.qc um. Du kannst die Datei weiter mit Notepad oder dem Editor öffnen. In die Datei kommt nun folgender Code.
      $modelname "hlp_tutorial/hohesHLP.mdl" // Name des fertigen Models
      $cdmaterials "models/hlp_tutorial" // Materialverzeichnis
      $staticprop
      $scale 1.0 // Skalierung
      $body studio "hohesHLP" // Name der SMD Datei
      $sequence idle "hohesHLP" loop fps 15 // Idle Animation
      $collisionmodel "hohesHLP_phys.smd" { // Name der Phys SMD Datei
      $Mass 1.50 // Masse in Kilogramm
      }
      $keyvalues {
      prop_data {
      "base" "Plastic.Small"
      }
      }
      In der ersten Zeile wir mit $modelname die eigentliche Modeldatei angegeben. Dabei wird der Pfad bis zum Ordner „modelsrc“ bereits durch das SDK vorgegeben, so dass wir nur noch die Unterordner (in diesem Falle „hlp_tutorial“) angeben müssen.
      Mit $cdmaterials wird der Ordner angegeben, in dem sich das eben erstellte Material befindet. Auch hier müssen wir nur die Unterordner angeben.
      Mit $scale können wir das Model im Nachhinein verkleinern oder vergrößern. Da wir aber schon in XSI die richtige Größe hatten (eine XSI Einheit entspricht auch einer Unit in Half-Life 2), können wir diesen Wert bei 1.0 lassen.
      Interessant ist $sequence, denn obwohl wir keine Animation haben, müssen wir eine angeben, auch wenn diese keine Informationen enthält, denn Half-Life 2 kennt keine Animationsfreien Models.
      Die Physbox wird mit $collisionmodel angegeben, das SDK geht automatisch davon aus, dass die Datei im gleichen Ordner wie die erste Model Datei liegt, weswegen wir nur den Namen angeben müssen. Mit dem Unterpunkt $mass können wir das Gewicht definieren.
      Ein sehr wichtiger Eintrag ist $keyvalues, ohne diesen weiß die Physikengine nicht, was sie mit dem Modle anfangen soll. Bei $keyvalues kann man vieles angeben, z.B. auch wie sich die PhysCannon verhalten soll, doch wir brauchen für unsere Zwecke nur den Materialtyp (Plastik).
    • Model kompilieren
      Endlich ist es soweit, wenn wir bisher alles richtig gemacht haben, sollten wir das Model ohne Probleme kompilieren können. Allerdings müssen wir noch eine Kleinigkeit vorweg erledigen. Das Kompilierungstool studiomdl.exe) kann keine Ordner anlegen. Deswegen müssen wir den Unterordner „accountname\half-life 2\hl2\models\hlp_tutorial\“ zuvor selber anlegen. Nun starten wir die Eingabeaufforderung (Start – Ausführen – CMD). Falls sich Steam nicht auf dem Laufwerk befindet, auf dem Windows installiert ist, müssen wir zuerst auf das Steamlaufwerk wechseln (in meinem Falle D:\).
      C:\>D:
      D:\>
      Jetzt wechseln wir in das SDK Verzeichnis. Da Steam den Pfad im System hinterlegt hat können wir dies einfach mit der Verkürzung %sourcesdk%.
    • D:\>cd %sourcesdk%
      D:\Steam\SteamApps\accountname\sourcesdk>
      Jetzt rufen wir die studiomdl.exe auf und übergeben ihr gleichzeitig unser QC Script.
      D:\Steam\SteamApps\acountname\sourcesdk>bin\studiomdl ..\sourcesdk_content\hl2\modelsrc\hlp_tutorial\hohesHLP.qc
      Wenn alles gut geht sollte die studiomdl.exe folgendes ausgeben (hier gekürzt).
      Working on "hohesHLP.qc"
      SMD MODEL hohesHLP.smd
      SMD MODEL hohesHLP_phys.smd
      Model has 1 convex sub-parts
      Collision model completed.
      ---------------------
      writing d:\steam\steamapps\accountname\half-life 2\hl2\models/hlp_tutorial/hohesHLP.mdl:
      bones 708 bytes (1)
      (...)
      ---------------------
      writing d:\steam\steamapps\accountname\half-life 2\hl2\models/hlp_tutorial/hohesHLP.vvd:
      vertices 2352 bytes (49 vertices)
      ---------------------
      Generating optimized mesh "d:\steam\steamapps\accountname\half-life 2\hl2\models/hlp_tutorial/hohesHLP.sw.vtx":
      body parts: 8 bytes
      (...)
      ---------------------
      Generating optimized mesh "d:\steam\steamapps\accountname\half-life 2\hl2\models/hlp_tutorial/hohesHLP.dx80.vtx":
      body parts: 8 bytes
      (...)
      ---------------------
      Generating optimized mesh "d:\steam\steamapps\accountname\half-life 2\hl2\models/hlp_tutorial/hohesHLP.dx90.vtx":
      body parts: 8 bytes
      (...)

      Completed "hohesHLP.qc"

    • Model nutzen
      Zum ersten Test können wir nun das Model in den Model Viewer des SDKs laden, das Model hohesHLP.mdl befindet sich im Unterordner „hlp_tutorial“. Wenn im Viewer alles gut aussieht können wir auch gleich versuchen das Model ingame zu betrachten. Dazu in Hammer einfach ein paar prop_physics mit unsrem Model als World Model erstellen und die Map kompilieren. Im Spiel sollte das ganze nun wie auf dem Bild aussehen. Zudem sollten die Kartons physikalisch beeinflussbar sein, das heißt wir sollten die aufheben, wegschießen etc. können.


      Model InGame
      (aufs Bild klicken für große Version)