Das Alpha-Problem des TSD/TSM
(Neue Erkenntnisse Stand 23.2.04:

Das Verfahren funktioniert nur dann, wenn man bei den MSTS-Optionen die "Dynamischen Schatten" abschaltet. Deshalb ist es nur für die Anwender geeignet. Autoren sollten von einer Veröffentlichung derart geänderter Shape-Dateien absehen, da es für sie keinerlei Möglichkeit gibt, die Optionseinstellungen der Anwender sicher zu steuern.

This method works if you disable dynamic shadows. The tool below is beta version. Use of your own risk. English translation of the text below see train-sim.com forum.)

Bisheriger Text, Stand 21.2.04:

Hinweis: Die Methode zur Umgehung des Alpha-Problems bei TSD/TSM führt auf einigen Systemen zum Absturz des Trainsimulators. Auf vielen Rechnern funktioniert es einwandfrei. Oder ist es umgekehrt?

Ein Tool, das die unten beschriebenen Änderungen durchführt, in Betaversion. Einfach in ein beliebiges Verzeichnis entpacken. Es werden weder Systemdateien noch die Registry verändert.

Download 261 kB

Das Problem:

Wenn man durch ein Fenster o.ä. sieht, das mit einem Alphamaterial versehen ist, verschwinden die Standard-Streckenobjekte dahinter. Das sieht besonders dumm aus, wenn man durch ein Fahrzeug hindurchschaut.

Die Ursache:

Der TSD/TSM kann die mit ihm erstellten Objekte nicht als "sortiert" kennzeichnen. Deshalb "weiß" der MSTS nicht, ob sich andere Objekte vor oder hinter dem TSD/TSM-Objekt befinden, zeichnet die Fenster und alles dahinter (außer im eigenen Objekt) ist futsch...

Die Lösung:

Das TSD/TSM-Objekt als "sortiert" kennzeichnen. Dies geht durch eine kleine Änderung in der S-Datei, die hier am Beispiel der alten V 200.0 erklärt wird. Dazu darf die Datei nicht komprimiert sein. Man öffnet sie mit Wordpad, führt die Änderung durch und speichert im Unicode-Format. Ggf. wieder komprimieren.

Wichtige Hinweise:

Bitte unbedingt Copyright beachten. Eine geänderte S-Datei darf nur mit Wissen und Genehmigung des Autors weitergegeben oder gar veröffentlicht werden.

Das Verfahren wurde vom Verfasser nach bestem Wissen und Gewissen an vielen Dateien erfolgreich ausprobiert. Eine Funktionsgarantie gibt es nicht, ebensowenig eine Haftung des Verfassers für Schäden irgendwelcher Art. Es wird dringend empfohlen, vor jeglicher Änderung eine Sicherungskopie der Originaldatei anzufertigen. Das Verfahren wird nur für erfahrene MSTS-ler empfohlen.

1. Änderung, ziemlich am Anfang

Den Eintrag "volumes" suchen. Die "1" durch eine "2" ersetzen und den Abschnitt "vol_sphere" einfach einmal kopieren. Genau auf die Klammern achten! Ohne diese Änderung stürzt der MSTS später ab, wenn er frisch gestartet ist. Nicht in diese Falle tappen.

alt:

volumes ( 1

  vol_sphere (

    vector ( 0 2.118 0 ) 9.35059

  )

)

neu:

volumes ( 2

  vol_sphere (

    vector ( 0 2.118 0 ) 9.35059

  )

  vol_sphere (

    vector ( 0 2.118 0 ) 9.35059

  )

)

2. Änderung

Ich weiß nicht, ob sie wirklich notwendig ist. Die anderen 3D-Programme erzeugen sie aber auch.
Den Eintrag "sort_vectors" suchen. Die "0" durch eine "1" ersetzen und genau den gleichen Vector wie bei "vol_sphere" einsetzen, aber ohne die Zahl hinter der Klammer.

alt:

sort_vectors ( 0 )

neu:

sort_vectors ( 1

  vector ( 0 2.118 0 )

)

3. Änderung, die eigentliche Markierung

Den ersten Eintrag "sub_object_header " suchen. Gibt es bei TSD/TSM-Dateien nur einmal pro LOD. Die "400" wird zur "500" (eigentliche Markierung als sortiert), die erste "-1" wird zur "0" (Index auf den sort_vector), die zweite "-1" zur "1" (Index auf vol_sphere). Der Rest bleibt. Sollte statt der "400" eine "000" zu finden sein, muss sie durch "100" statt "500" ersetzt werden. Die "400" ist ein Bitflag, das specular lighting verhindert.

alt:

sub_object_header ( 00000400 -1 -1 000001d2 000001c4

neu:

sub_object_header ( 00000500 0 1 000001d2 000001c4

Abspeichern, und das war es.

Versuch einer noch einfacheren Lösung:

Es wird nur eine einzige Zeile geändert, vol_sphere und sort_vectors bleiben wie sie sind:

alt:

sub_object_header ( 00000400 -1 -1 000001d2 000001c4

neu:

sub_object_header ( 00000500 -1 0 000001d2 000001c4

oder

alt:

sub_object_header ( 00000000 -1 -1 000001d2 000001c4

neu:

sub_object_header ( 00000100 -1 0 000001d2 000001c4