BSP to XSI Converter

Der BSP to XSI Converter ist ein Tool mit dem man kompilierte Map Files der Source Engine in ein OBJ/MTL zurückverwandeln kann. Weiterhin wird ein vollständiges SoftImage|XSI Script gebaut, welches den Import, die Lichtquellen und die Materialien setzt.

Entstanden ist dieses Tool schon vor einer sehr langen Zeit, und ich habe es auch nicht mehr weiter entwickelt. Es befinden sich aber bereits Fragmente in Ihm mit denen man die Modells auch noch umwandeln könnte. Ist aber nicht zu Ende entwickelt.

Das Tool kann auch ganze Verzeichnisse gefüllt mit BSP Dateien auf einem Schlag zu OBJ/MTL und zu XSI verwandeln. Das dauert in der Regel nicht wirklich lange. Man muss vorher jedoch natürlich alle GCFs entsprechend auspacken, damit die Texturen den Materialien zugeordnet werden können. Inklusive der Bumpmaps.

Der Konverter holt sich aus den LUMPs die entsprechenden Geometriedaten und Texture Einstellungen. Wandelt es in ein OBJ und berechnet die UV. Weiterhin sucht es das VMT im GCF Baum um die Material Einstellungen mit der eigentlichen Textur ausfindig zu machen. Das ganze wird dann in das MTL gesteckt.

Da im XSI 7.5 teilweise der MTL Import nicht 100% klappt, werden im XSI Script noch diverse Anpassungen des Materials vorgenommen. Die Lichtquellen und dessen Eigenschaften werden ebenfalls im XSI Script notiert, so dass man am Ende die ganze Map im XSI|SoftImage hat.

So sieht dann in SoftImage|XSI das Endergebnis aus:

Wer mehr wissen will muss Weiterlesen …

Vorbereitungen vom BSP2XSI Converter können eine sehr lange Zeit dauern … und viel Platz fressen …

Als erstes muss mal alle benötigten GCF auspacken und irgendwo „hinlegen“. Am besten ist es wenn man alle GCFs in ein Verzeichnis mit dem Namen des GCF wirft. Der BSP2XSI erkennt das automatisch. Wichtig ist das alle ausgepackten GCF unter einem gemeinsamen Verzeichnis liegen. Mein GCF Monster liegt z.B. unter t:/original. Dieser Vorgang dauert und kostet relativ viel Speicherplatz. Mindestens so viel wie die GCFs …

Damit nicht genug ! Der nächste Schritt ist die Umwandlung aller VTF Dateien in TGA Dateien. Es ist schon etwas her, ich weiß aber das ich dazu auch ein Script hatte, welches 2 Tage lief um mir alle TGA Dateien zu erstellen. Die TGA Dateien kann man aber irgendwo anders speichern. Ich hab die unter t:/tga mit dem gleichen Path. Aber das ist dem BSP2XSI Converter egal, er findet die schon.

Wenn man dann soweit ist kann man im Konverter die Einstellungen übernehmen

Der BSP2XSI Konverter erstellt automatisch ein Filenamen Cache. Wenn man den noch nicht hat, oder ihn gelöscht hat, dauert der erste Durchgang relativ lange, er sucht nämlich die angegebenen Verzeichnisse nach den Dateien ab und baut den Cache auf. Ist der Cache einmal da, geht das Rasend schnell. Die Cachedatei wird in HOME unter dem Namen BSP2XSI.cache gespeichert.

Das Logfile des BSP2XSI Converters ist eine sehr umfassende Quelle für alle Fehlerbehebungen. Es protokolliert quasi alles was es tut, in dem Log kann man Fehler am schnellsten erkennen.

Der Anfang des Logs :

Summary of all file pathnames
-------------------------------
 Protocol Output File : S:\BSP2XSI\Import\bsp2xsi_dm_lockdown.txt
 BSP Input File : T:\original\bsp_files\dm_lockdown.bsp
 Mapname : dm_lockdown
 OBJ Output File : S:\BSP2XSI\Import\bsp2xsi_dm_lockdown.obj
 MTL Output File : S:\BSP2XSI\Import\bsp2xsi_dm_lockdown.mtl
 XSI Output File : S:\BSP2XSI\Import\bsp2xsi_dm_lockdown.js
 GCF Search Path : T:\original
 TGA Search Path : T:\tga
-------------------------------

hält die verwendeten Verzeichnisse und Dateinamen fest. Wenn er irgendwo ein Fehler bemerkt, wird der hier Ausführlich bemeckert. Als nächstes wird, sofern vorhanden, der Cache eingelesen und das BSP wird analysiert :

Creating Filename Cache : reading 871123 entries from cache file OK
 - Found 27122 directories with 871123 files
Starting process ... please wait ...
Creating base XSI Script ... OK
Setting up BSP environment ... OK
Starting BSP file import
 - Reading BSP file ... OK
 - Reading LUMPs ... found 64 lumps OK
 - Fetching Vertices ... found 12618 vertices OK
 - Reconstruction Edges ... found 31950 edges OK
 - Build Faces ... found 50945 faces OK
 - Fetching texture datas ... found 502 datas OK
 - Generate texture tables ... found 502 entries OK
 - Build texture data ... found 485 datas OK
 - Generate texture infos ... found 2768 infos OK
 - Finalize original faces with textures ... found 6536 real faces OK
 - Reading entities ... found 605 entities OK
Importing BSP file was successfully

Spätestens hier würden grobe Fehler auffallen, weil zum Beispiel die LUMPs nicht gelesen worden sind, oder es gibt nur 1 Face oder so. Aber dann geht es richtig los:

Setting up OBJ/MTL exporter BSP join ... OK
Starting convertation from BSP to OBJ/MTL
 - Search Material : plaster/plasterwall026a
 - Found : T:\original\source_2007_shared_materials\hl2\materials\Plaster\plasterwall026a.vmt
 - Search Base texture : plaster/plasterwall026a
 - Base Texture found : T:\tga\source_materials\hl2\materials\Plaster\plasterwall026a.tga
 - Search Material : tile/tilestair001a
 - Found : T:\original\source_materials\hl2\materials\Tile\tilestair001a.vmt
 - Search Base texture : tile/tilestair001a
 - Base Texture found : T:\tga\source_materials\hl2\materials\Tile\tilestair001a.tga

Hier sieht man wie er zu einer Face das Material Plasterwall entdeckt. Er sucht nach dem angegebenen Material Namen im GCF Verzeichnis und wird fündig. Danach liest er das VMT und sucht die Base Texture und die Bumpmap aus dem TGA Verzeichnis. Wenn er es gefunden hat, ist alles in Butter. Das gleiche dann für alle anderen Materialien … bis er dann irgendwann mal meint:

Writting OBJ/MTL file
Adding lights into the XSI Script
Removing default light, settim camera culling on and switch to texture decal in viewports
Rotating the whole map and frame all viewports
Toggle camera visibility and lightcone display
Closing XSI Script file

DONE

Time for Convert : 5855 Milliseconds ...

Start XSI and run the script S:\BSP2XSI\Import\bsp2xsi_dm_lockdown.js
 that import anything for you and setup the environment

Have Fun

In diesen Meldungen werden dann noch die Einstellungen für Lichter, Kamera und alles andere bezüglich des XSI Scripts gemacht. Das Resultat sind jetzt ein paar Dateien im Export Path:

Nachdem uns das Logfile des BSP2XSI Converters gesagt hat wir sollen XSI starten und dieses Script ausführen … so tun wir es auch:

Und beobachten wie er nun alles für uns vollautomatisch importiert und alle Einstellungen tätigt. Es alles klappt sieht es dann so aus:

Was man dann damit macht ist einem selbst überlassen. Man kann jetzt ganz wunderbar eigene Models Passgenau entwerfen oder es für irgendetwas anderes verwenden.

Das ganze Rendert sieht so aus:

Bekannte Probleme

Lichtquellen haben teilweise sehr eigenartige Intensity Werte. Das liegt an der Beschaffenheit der Source Engine. Quasi bei allen Maps musste ich dort manuell etwas nachhelfen, war aber nicht so wild, da alle Lichtquellen in einer Gruppe liegen

Model (VVX, SMD) werden nicht importiert. Gewissen Fragmente hatte ich damals fertiggestellt, aber nicht mehr weiter verfolgt

Displacements werden ignoriert

Entwicklung ist eingestellt worden. Unbekannt ob es mit den Maps der neusten Source Engine überhaupt noch funktioniert. Das Thema wird auch nicht weiter behandelt

Downloaden kann man es hier : bsp2xsi_v3

Und hier noch ein paar Bilder: