Train Fever Converter (BR146)

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


  • Mit diesem Tool lassen sich Wavefront Objektdateien in die für Train Fever nötigen *.msh- & *.msh.blob-Dateien umwandeln. Seit Version 1.0 ist auch die Umwandlung von TrainFever-Dateien in Wavefront Objekte möglich. Das ganze wird in C geschrieben, kann somit auf jedem Betriebssystem, auf dem C-Compiler verfügbar sind, ausgeführt werden.


    Den Sourcecode und eine für Windows kompilierte Version gibt's im Downloadbereich:

    v1.3.3.5 siehe Downloadbereich!


    Das Archiv enthält:

    • das Tool (TFC_BR146.exe)
    • zwei Beispielskripts (*.bat)

    Das Tool kann an eine beliebige Stelle entpackt werden (Pfad merken!). Das Skript "run.bat" wird in den selben Ordner kopiert in dem eure zu konvertierende Datei(sammlung) liegt. Das Startskript muss folgender Maßen angepasst werden (einfacher Texteditor genügt):

    • "C:\Pfad\Zur\Exe\TFC_BR146.exe" -> Den Pfad entsprechend eurer gewählten Stelle anpassen.
    • "BeispielProjekt" -> Name der zu konvertierenden Datei(en) ohne Endung (also ohne ".obj"/".msh"/".msh.blob") eintragen.

    Wichtig: Die Anführungszeichen nicht unterschlagen!


    Hier habe ich zum Testen den alten Güterbahnhof mal in *.obj umgewandelt und in Blender importiert.
    cargo_old_lod_0_station.msh + cargo_old_lod_0_station.msh.blob -----TFC_BR146.exe-----> cargo_old_lod_0_station.obj


    Hier noch, als zusätzliches Beispiel, der Code des Skripts "run.bat":

    Code
    cd /D "D:\Spiele\Steam\SteamApps\common\Train Fever\res\models\mesh\station\train"
    "C:\TF_Modding\TFC_BR146.exe" /make "cargo_old_lod_0_station" MESH OBJ


    Für Wünsche bin ich immer offen! Ebenso gerne auch Kritik oder Ratschläge! Bugs dürfen auch hier rein!


    Vielen Dank!
    BR146


    Und ein ganz großes Danke an alle, die mich bei der Entwicklung unterstützt haben, den ohne euch wäre ich nicht bis hier her gekommen. :thumbup:

    9 Mal editiert, zuletzt von BR146 () aus folgendem Grund: V1.3.3.5 online

  • Danke für den Link! Die genauere *.msh.blob-Erklärung könnte hilfreich sein. Nur dem Programm vertraue ich iwie nicht so ganz... (Kein Sourcecode? Das find ich verdächtig... Außerdem auf Windows angewiesen sein wird hier manchen nicht gerade glücklich machen)


    P.S.: Ich bin von 64bit-Werten ausgegangen. Sind aber wohl 32bit.
    P.P.S.: Vor morgen Mittag werde ich wohl nicht weiter machen können. Schreibe morgen eine Prüfung und sollte mal noch drauf lernen (vor lauter TF vergessen :S ).

    2 Mal editiert, zuletzt von BR146 ()

  • Zu den Werten in der .msh.blob kann ich folgendes sagen:
    Alle Vektor-Komponenten (Position, UV, Normals, Tangents) werden als floats (32 Bit) gespeichert. Die Indexwerte sind alles 32 Bit unsigned integer.
    In welcher Reihenfolge die einzelnen Blöcke in der .msh.blob stehen ist nicht festgelegt, dafür gibt es ja die .msh.

  • Nach einigen Umbauten im Programm (Speicherverwaltung, schönerer Code) geht es nun. Ein Fehler war unter anderem, dass die Indexierung bei Null beginnt und nicht wie in Obj-Dateien bei eins.


    Habe mein Zwergsignal als Testobjekt verwendet. Die Konvertierung hat funktioniert. Hier noch ein Beweisfoto: :thumbsup:


    Blender Export-Einstellungen:


    Die Flächen sollten nebenbei bemerkt immer Dreiecke sein. In Blender ggf. den Modifier "Triangulate" drübersausen lassen...


    Die Textur wurde übrigens nur aus Blender als PNG exportiert und dann zu TGA umgewandelt. Kein spiegeln nötig ^^ .


    Und noch eine Anmerkung zu dem verlinkten Programm oben:
    Meine Blob-Datei ist kleiner als die durch dieses Programm erstellte. Ich spare mir die Tangenten(berechnung). Außerdem verwende ich Vertex-Positionen doppelt. Das verlinkte Programm erstellt für jede Fläche einen extra Satz an Vertices - viele werden also verdoppelt! :thumbdown:


    Ich werde jetzt erstmal das Programm noch etwas aufräumen....

  • Ah, ok.... ist das Tool von der englischen Seite ? Egal, du bist ja jetzt "beteiligt" :) Ist für mich kein Problem wenn das Teil noch nicht so anwenderfreundlich ist, ich bin da echt genügsam, hab da schon schlimmeres mitgemacht ;)


    Die meiste ModdingErfahrung hab ich aus der Freespace COmmunity, und die Tools waren auch nicht gerade sehr anwenderfreundlich... Solange sie das gewünschte Ergebnis bringen ist das die Hauptsache.


    Mal abgsehen davon, ich bau ja in Truespace... ist uralt, und praktisch ohne Community, aber ich liebe das Teil einfach...


    Den UV-Space muß ich praktisch manuell machen mit Trial & Error.. Dann speicher ich das als Cob, leider legt Truespace die Texturkoordinaten vertauscht an... Dann jage ich es durch den Freespace Model Converter und speicher als Modelfile... Dann konvertier ich es zurück ins cob format (dadurch wird der UV-Space korrigiert)... Dann muß ich das ganze mittels 3d Explorer in ein anderes Format umwandeln um es überhaupt erst in 3ds oder blender öffnen zu können.... Bin also recht schmerzunempfindlich ;) Ich werd höchstens vielleicht ein paar Dummie-Fragen stellen müssen bis ich einmal ein Model durchkonvertiert hab, ich hoffe das geht in Ordnung für dich

  • ist das Tool von der englischen Seite ? Egal, du bist ja jetzt "beteiligt"

    Was heißt beteiligt? Ich habe meinen Konverter von Grund auf selbst geschrieben. :D Lediglich die von Merk gelieferten Infos sowohl hier und auch im Lexikon haben gereicht. Danke nochmals dafür! Und ein wenig studieren der TF-Dateien im HEX-Viewer war nötig.


    Sobald du es als Wavefront OBJ-Datei speichern kannst (z.B. aus Blender exportieren) solltest du Glücklich werden :) Geplant ist übrigens auch eine Funktion zum Rotierenen eines ganzen Objektes. Wie's mit anderen Dateiformaten aus sieht, keine Ahnung.


    Ich werd höchstens vielleicht ein paar Dummie-Fragen stellen müssen bis ich einmal ein Model durchkonvertiert hab

    Naja, ist eigentlich nur Dateinamen angeben und fertig 8) . Wenn die Objektdatei richtig ist. Nur die *.mdl (Modell) und *.mtl (Material) Dateien müssen noch von Hand geschrieben werden. Nur dazu fehlen mir noch einige (quasi alle) Infos.


    P.S.: v0.1 siehe erster Post!

    3 Mal editiert, zuletzt von BR146 ()

  • Ach, die Mdl's werden nicht so schlimm. Ist ja zum Teil nur Copy und Paste, nur die Bounding Box infos sind mir noch suspekt, da muß man einfach probieren.


    Wavefront-format ist gut, das kann sogar Truespace :) Würde mich aber wundern wenn dabei de Texture-Koordinaten intact blieben. Wir werden sehen ;)

  • Was ist denn an den Bounding-Box Infos suspekt?


    Du erstellst damit quasi einen Quader um dein Objekt, welches die Maße deines Fahrzeugs enthält. Die 5 Werte sind die Abstände vom Ausgangspunkt des Objekts. Sie sind alle in der Reihenfolge X, Y, Z aufgeführt. Die Werte kann man in Blender an seinen Modellen übrigens prima auslesen.

    • Die Beträge von Min X und Max X entsprechen z.B. der Länge. Überlagernde Teile sollten allerdings außerhalb dieser Box liegen.
    • Die Beträge von Min Y und Max Y entsprechen der Fahrzeugbreite. Der Betrag sollte bei beiden in etwa gleich sein (nur unterschiedliches Vorzeichen)
    • Min Z ist bei Fahrzeugen in der Regel 0, da sie ja auf den Schienen / auf der Straße aufliegen sollen.
    • Max Z ist die Höhe des Fahrzeugs
    Code
    boundingInfo = {
      bbMax = {
       9.49, 1.49, 5.9128289222717, 
      },
      bbMin = {
       -9.49, -1.49, 0, 
      },


    Meine Lok ist also ca. 19m lang, 6m hoch und 3m breit

  • Mir ist schon klar was eine Bounding Box ist :)


    Aber ich kam mit dem Werten hier nicht ganz klar, insbesondere die Riesen Zahl nach dem Komma...


    Aber jetzt verstehe ich endlich wie diese 6 Werte zu den X,Y und Z Werten passen, also vielen Dank für die Erläuterung, auch was jetzt was am Model ist :)


    ich würde deinen Post liken, aber ich hab bis jetzt noch immer keinen Like-Button gesehen...daher einfach ein Dickes Danke an dieser Stelle. :)

  • Vermutlich ist da ein AddBlocker dran schuld :D
    Und das war nicht unbedingt nur auf dich bezogen. Ich lese nur ganz oft, das Leute die BoundingBox nicht verstehen. Deshalb wollte ich das hier nochmal ausführlicher erklären.


    Die Nachkommazahlen wurden vermutlich einfach vom 3D-Programm so ausgegeben. Sind halt sehr genau :D

  • woops, schuldig im Sinne der Anklage, jetzt seh ich den Like button :)


    Passt schon, alles gut, war nicht zickig gemeint von meiner Seite ;) Und ich hatte die Werte selbst ja tatsächlich nicht verstanden, hast mir hier auf jeden Fall eine Menge Frust erspart.... Bin mal gespannt ob ich am WE ein Gebäude ins Spiel bringen kann.

  • Wird die Größe des Models denn angepaßt?
    Woher soll ich denn wissen wie ich das Objekt scalen soll?
    Wieviele triangles und vertices kann man denn überhaupt max. nehmen?

  • Komme auch mal wieder zum Lesen, viel zu tun für die Uni.


    Wäre das ganze auch umgekehrt möglich?
    Also .msh/msh.blobb -> .obj

    Ist möglich, muss nur noch implementiert werden ;) . Ja, werde ich machen. Ganz allgemein: gerade durch solche Wünsche werde ich motiviert, das Ganze zu erweitern! Also immer her mit Wünschen 8) !


    Wird die Größe des Models denn angepaßt?

    Nein. Es werden die Werte 1:1 übernommen.


    Woher soll ich denn wissen wie ich das Objekt scalen soll?

    Eine "1" in Blender bedeutet, wenn ich mich gerade richtig erinnere, 1m. Aber ansonsten einfach mal mit paar Skalierungen austesten. Hatte vorher alles in mm, da war alles nachher rießig :D


    Wieviele triangles und vertices kann man denn überhaupt max. nehmen?

    In einem Livestream wurde mal von 5000 - 20000 Vertices gesprochen...

BlueBrixx