Imported switches are used when the Railtool cannot generate a special switch type reliably.
Most standard switches can be created directly with the Railtool. However, more complex constructions (for example DW, EKW, DKW, special double crossovers, or asymmetric real-world layouts) vary a lot between networks and often require manual modelling.
In those cases, the switch is built in a 3D program (usually Blender), exported as FBX, imported into SubwaySim 2, and finally wrapped into a Blueprint so the Railtool can use it like any other switch.
This page covers:
modelling → paths → export → import → animations → Blueprint → Railtool connection
Use imported switches when:
You do NOT need imported switches for:
Crossings (no moving parts) are generated by Railtool and do not need custom building.
The Modding SDK ships with a variety of imported switches that are used by the base game.
You can find them here:
SubwaySim2_Modding / RailwaySystem / ImportedSwitches
Inside this folder, you will see many switch assets.
Important:
1. Make sure you are in Selection Mode in the Unreal Editor
(important: not in Railtool mode while placing the BP)
2. Drag the desired BP_… imported switch into your level.
3. You can freely move and rotate it like any normal actor.
4. Align it to your intended layout.
(This is manual placement, so take your time.)
Once the switch is placed, it needs to be connected to the Railtool track network:
After this step:
If none of the provided switches fit your needs, you can create your own imported switch.
Typical reasons include:
The full workflow looks like this:
1) Planning & naming 2) Modelling rails + frogs + guards 3) Creating drivable paths (critical!) 4) Sleepers, clamps, gravel 5) UVs & materials 6) Rigging blades + throw bars 7) Animations (NLA) 8) Export FBX 9) Import into Unreal (SkeletalMesh, StaticMeshes, paths, animations) 10) Animation Blueprint (ABP) 11) Switch Blueprint (RTImportedSwitchActor) 12) Test in level + connect with Railtool
This is the same concept used by base game imported switches.
Quick translation list used in references and modelling:
| English | German |
|---|---|
| Rail | Gleis |
| Blade | Zunge |
| Stock (Rail) | Backenschiene |
| Frog | Herzstück |
| Flangeway | Rillenweite |
| Guard Rail | Radlenker |
| Guide Rail | Leitschiene |
| Switch Motor | Weichenmotor |
| Sleepers | Schwellen |
| Hollow Sleeper (Tub) | Trogschwelle |
We generally build everything in the 60E1 rail profile.
That means:
The blade rail is the moving part of the switch. The stock rail is the fixed rail the blade presses against.
Key details:
This transition is critical:
The frog is where rails intersect and split.
It is usually the most complex part because:
The throw bar and motor move the blades.
Important behavior:
If you animate blade movement:
Guard rails and guide rails keep wheels aligned over frogs.
When a guard rail does not fit cleanly:
Switches use several clamp types:
Clamps often become the biggest performance cost if modelled fully. (We cover optimization later.)
Crossings are NOT switches. They have no moving parts. Railtool can generate them → no custom build required.
A standard switch (single turnout) can be generated by Railtool. No custom build needed in most cases.
DW is basically two switches extremely close together that intersect. These currently must be custom built because Railtool cannot reliably generate them.
EKW is a crossing with a switch integrated. Custom build required.
DKW is like EKW but allows switching between tracks in multiple directions. Even more complex → custom build required.
DKW has two typical constructions:
Outside blades:
Inside blades:
Before modelling, decide:
Example naming:
DW-60E1-100-6:1LR
Some softwares don’t like “:” so you may see:
DW-60E1-100-1_6LR
Keep the naming consistent across:
We assume you are working inside a prepared file like:
60E1-Rail.blend
This file already contains prepared meshes and references. Follow its folder / collection structure:
First we set up our angle, example 1:6:
1) Place a single vertex in world origin 2) Extrude it 6 m along X-Axis 3) Extrude it 1 m along Y-Axis 4) Fill the 2 lonely verts → you now have a triangle
The edge that is ~6.08 m long will be called “c”.
Next we make a 100° circle and align it so that the bottom vertex sits in the origin. Recommended:
Example: 1024 verts.
Delete unnecessary verts (keep only the range you need).
Now:
How to align precisely (recommended):
This is faster and more precise than eyeballing.
Now you have the left curve more or less done.
You still need a right curve:
Now add a straight edge, convert them to curves. At this point your switch layout curves should look correct.
Paths define where trains can drive. They MUST be correct, otherwise routing will fail.
Workflow:
Important rule:
Naming recommendation:
(and more if needed)
These paths will later be referenced inside the Switch Blueprint SwitchConfigurations.
Rails:
Flangeway / wheel space:
After that you should have rails + clearance along the curves.
Next, sleepers:
After lengthening and vertex merging you should have sleepers aligned.
At first the frog area will look wrong because rails intersect.
Step 1: Cut out the parts where the flangeway and rail intersect.
Step 2: Model the frog:
Frogs will always look a bit weird in Blender – don’t worry. Focus on clearance and correct geometry.
Blades:
Now:
Stock rail:
Repeat for all blade/stock sections.
Goal:
Guard rail:
If a guard does not fit:
Hollow sleepers:
Throw bar:
Make sure:
Clamps are the most tedious part.
Helper setup:
Placement workflow:
1) take RailClamp mesh 2) edge snap it to the middle of the first sleeper and middle of the rail 3) duplicate it along X by 0.6 m (sleeper spacing) 4) press Shift+R to repeat until you cover the full length 5) move clamps to align with the curve of the rail 6) rotate all clamps individually to match the rail direction
Why not instances/arrays:
Blade clamps:
Guard clamps:
Special clamps:
Clamps are a lot of geometry. You have two approaches:
Correct way (best performance, more work):
This is easier for symmetrical switches (especially DKW quarters).
Lazy way (often good enough to start):
Recommendation:
Take a gravel mesh (GravelOEBB or GravelSubway depending on usage) and apply curve modifiers (often multiple curve passes).
Then:
UV important:
UVs are quite simple because we use a tileable trimsheet: RailTileSet.
Workflow:
Consistency matters:
Imported switches need blade movement.
We use an Armature.
1) Create your root bone:
Name: **Rail**
2) Assign a vertex group called “Rail” to everything that is static (non-moving):
Fast workflow:
3) For each blade:
Naming convention:
Blade(direction from → direction to)_(left/right blade)(bone index starting at thick end)
Examples:
Throw bars:
Skinning:
Example: A DW usually has 2 animations:
Typical timing example:
Example rotation values (will vary):
Important:
Graph Editor:
Output requirement:
Export groups (recommended):
Folder structure:
Paths requirement:
Import categories:
Import the SkeletalMesh like a vehicle:
Verify:
StaticMeshes:
Paths:
Create an Animation Blueprint for the switch.
Rules:
Workflow (recommended):
(triple check for typos and correct order)
If blades don’t move:
This Blueprint is what you actually place in the world and what Railtool integrates with.
It combines:
1) Create Blueprint Class 2) Parent Class: RTImportedSwitchActor 3) Name it coherently, e.g.:
BP_IS_DW_60E1_100_1_6LR
In the Blueprint:
Optional:
Open the Blueprint Details and locate:
RailTool2 → SwitchConfigurations
Each SwitchConfiguration defines one valid route through the switch.
Each configuration links:
Example idea:
Path = PathLeft
SW1 = 1 (end)
SW2 = 0
* Route “Right”:
Path = PathRight
SW1 = 0
SW2 = 2
Notes:
Some imported switches need optional toggles:
Typical setup:
If your switch uses motor meshes:
1) Make sure you are in Selection Mode 2) Drag your BP_… imported switch into the level 3) Move/rotate it into position 4) Connect it with Railtool ControlPoints:
→ [[manual:subwaysim:map_construction:laying_tracks|Laying Tracks]]
Validate:
Example 1:6:
1/6 = 0.1666... atan(0.1666...) = 9.462322208...
Rounded to 4 decimals:
9.4623°
It can be useful to maintain a list of known angles to avoid repeating the math.
Once your imported switch is placed and connected successfully, continue building your track network as usual: