Warum Vulkan/DXVK für TSC sinnvoller ist als DX9 oder der experimentelle DX12-Modus
Train Simulator Classic basiert technisch weiterhin auf einer sehr alten DirectX-9-Renderpipeline. Genau dort liegen viele der typischen Probleme: CPU-Limit, alte Render-State-Logik, schwaches Ressourcenmanagement, instabile Frametimes und Probleme mit modernen Treibern. Der experimentelle DX12-Modus von TSC war laut Dovetail selbst nicht vollständig optimiert und sollte Feedback sammeln; bei Problemen wurde weiterhin empfohlen, auf der normalen 64-bit-Version zu spielen.
Vulkan über DXVK ist für TSC deshalb interessant, weil es nicht versucht, TSC intern zu einer modernen DX12-Engine umzubauen, sondern die vorhandenen D3D9-Aufrufe in eine moderne Vulkan-Ausgabe übersetzt. DXVK ist genau dafür gebaut: Es ist eine Vulkan-basierte Implementierung für Direct3D 8/9/10/11.
Für unser Framework bedeutet das:
TSC bleibt logisch D3D9, aber die Ausgabe läuft moderner über Vulkan. Dadurch können wir alte TSC-Hooks, D3D9-States und Shader-Pfade weiter nutzen, aber trotzdem von DXVK/Vulkan bei Frametimes, Backend-Stabilität und modernen GPU-Treibern profitieren.
DirectX 9 im TSC
Vorteile
-
Originaler Renderpfad von TSC
-
höchste Kompatibilität mit alten Strecken, Assets und Shadern
-
funktioniert ohne zusätzliche Wrapper
-
unser
d3d9.dll-Proxy kann direkt in den D3D9-Pfad eingreifen
-
RenderStates wie
SetRenderState, SetSamplerState, DrawPrimitive, DrawIndexedPrimitive sind direkt abfangbar
-
ideal für Debugging, Shader-Hooks und klassische D3D9-Modding-Techniken
Nachteile
-
sehr alte API
-
stark CPU-/Drawcall-limitiert
-
moderne Treiber optimieren D3D9 oft nicht mehr so aggressiv wie moderne APIs
-
Framepacing kann unruhig sein
-
viele Probleme entstehen aus alter Render-State-Logik
-
schlechte Kontrolle über moderne GPU-Features
-
Z-Fighting, Alpha-Test-Flimmern und MIP-Shimmering bleiben enginebedingt bestehen
-
Downsampling/AA löst nicht alle alten TSC-Probleme
Kurz gesagt
DX9 ist der stabilste und kompatibelste Originalpfad, aber technisch auch der limitierendste.
DirectX 12 Experimental im TSC
Vorteile
-
theoretisch moderneres Backend
-
kann auf bestimmten Systemen oder Szenarien bessere GPU-Auslastung bringen
-
langfristig wäre DX12 als nativer Renderpfad moderner als DX9
-
potentiell besseres Ressourcenmanagement, wenn vollständig sauber implementiert
Nachteile
-
in TSC offiziell als experimental eingeführt
-
Dovetail schrieb selbst, dass der DX12-Build noch nicht vollständig optimiert war und Feedback gesammelt werden sollte
-
kann je nach Strecke, Asset, System und Treiber instabiler sein
-
für Modding schwieriger, weil klassische D3D9-Hooks nicht mehr direkt greifen
-
unsere bestehenden
d3d9.dll-Hooks, RenderState-Hooks und Shader-Override-Ansätze passen dort nicht sauber
-
bringt nicht automatisch bessere Bildqualität
-
löst Z-Fighting/enge Mesh-Überlagerungen nicht grundsätzlich
-
für alte TSC-Inhalte kann DX12 sogar mehr neue Probleme erzeugen, weil die Engine ursprünglich nicht dafür gebaut wurde
Kurz gesagt
DX12 Experimental ist interessant, aber für ein tiefes TSC-Framework aktuell weniger kontrollierbar und weniger vorhersehbar als D3D9/DXVK.
Vulkan über DXVK
Vorteile
-
nutzt den bestehenden D3D9-Pfad von TSC, gibt ihn aber über Vulkan aus
-
DXVK ist speziell eine Übersetzungsschicht von Direct3D 8/9/10/11 zu Vulkan
-
unser Proxy kann weiterhin als
RailWorks\d3d9.dll arbeiten
-
DXVK kann als Backend aus
RailWorks\dxvk\d3d9.dll geladen werden
-
moderne Vulkan-Treiber können oft bessere Frametimes liefern als alter nativer DX9-Treiberpfad
-
DXVK bietet zusätzliche Konfigurationsmöglichkeiten über
dxvk.conf; die Datei wird üblicherweise im Arbeitsverzeichnis beziehungsweise beim Spiel-Exe-Pfad gesucht
-
Optionen wie
d3d9.alphaToCoverage, d3d9.maxFrameLatency und LOD-/Sampler-Einstellungen können gezielt getestet werden
-
guter Mittelweg: alte TSC-Kompatibilität behalten, aber moderneres Backend nutzen
-
ideal für unser Framework, weil wir D3D9-Hooks behalten und trotzdem Vulkan als Ausgabe verwenden können
Nachteile
-
zusätzliche Übersetzungsschicht
-
nicht jede D3D9-Spezialität verhält sich exakt wie beim nativen DX9-Pfad
-
manche alte Fixed-Function- oder Shader-Edge-Cases können anders reagieren
-
DXVK-Konfiguration muss manuell angelegt werden; DXVK erzeugt die
dxvk.conf nicht automatisch
-
Debugging wird komplexer, weil man TSC → Proxy → DXVK → Vulkan betrachtet
-
nicht jedes Flimmerproblem wird gelöst, besonders nicht echtes Z-Fighting durch Mesh-auf-Mesh
-
kann je nach GPU/Treiber/Strecke eigene Nebenwirkungen haben
Kurz gesagt
Vulkan/DXVK ist für TSC aktuell der beste Kompromiss:
mehr Modernität als DX9, aber deutlich mehr Kontrolle und Kompatibilität als der experimentelle DX12-Pfad.
Mein Fazit
Für TSC ist Vulkan über DXVK aktuell der sinnvollste Weg, weil wir damit drei Dinge kombinieren:
-
D3D9-Kompatibilität
TSC läuft weiterhin über seinen bekannten Renderpfad.
-
Framework-Kontrolle
Unser d3d9.dll-Proxy kann weiterhin RenderStates, Shader, SamplerStates, Depth und Postprocessing kontrollieren.
-
Modernes Backend
Die eigentliche Ausgabe läuft über Vulkan/DXVK statt über den alten nativen DX9-Treiberpfad.
Deshalb ist Vulkan/DXVK für unser TSC Visual Framework besser geeignet als nativer DX9 oder der experimentelle DX12-Modus. DX9 ist zu alt und limitiert, DX12 Experimental ist zu unkontrollierbar, aber Vulkan/DXVK gibt uns genau den Mittelweg: alte Engine behalten, modernes Backend nutzen, Framework-Hooks weiter verwenden.
Und das ist eine Zusammenfassung aus all meinen recherchierten Quellen.
Der TSc ist eigentlich ein DirectX9.0 Spiel. Es wurde nachträglich auf DX12 möglich gemacht.
Man kann sowohl als DX9 bzw. Vulkan oder DX12 starten. Mit der jeweiligen EXE Startversion versteht sich.
Und nein kann man nicht. Bei sehr vielen Usern startet TSC im DX12 Modus überhaupt nicht.