Overview
A highly detailed 3D model of the iconic Vienna ULF (Ultra Low Floor) tram, modelled after line 25 to Floridsdorf, car number 727. The model is built for Blender 5.1+ and ships with a fully functional path-following rig, ready for cinematic shots, archviz projects, or any scene that needs a realistic Vienna-style tram.
Highlights
Fully rigged — follows any Bezier curve automatically
Rigid-body articulation at the real-world joint positions (no Spline IK)
Realistic proportions based on reference material
Clean modifier-based, non-destructive setup
Optimised with instanced segments for efficient memory use
Tileable and procedural materials — no texture streaming overhead
Wiener Linien branding, correct destination displays, accurate interior
HDRI included for instant rendering
Technical Specifications
Vertices: 226,162
Faces: 215,584
Triangles: 433,399
Objects: 1,882 (segments built as instances)
Format: .blend (native, Blender 5.1+)
Renderer: Optimised for Cycles (not tuned for EEVEE)
UV-mapped: Yes
Materials & Textures
This asset is designed for efficient scene memory and clean scalability:
Procedural and tileable materials throughout — no large texture atlases needed
One PBR texture set is used for the driver's seat fabric
All other materials (body paint, metal, glass, interior plastics, signage) are procedural or built on tileable patterns
Easy to recolour or adapt without re-baking
Rigging System
The tram uses a clean Empty-chain rig with drivers and a small Python script that dynamically adapts to any curve length. No Spline IK is used — instead, rigid sections articulate only at the real joint positions, exactly like the actual ULF. This produces realistic articulation without mesh distortion.
Included in the rig:
Bezier curve track (ULF_Track) as a starting reference
ULF_Pivot empties (Front, Rear, 01–04) driving the segments
Python script "curve_length" for automatic length adaptation
Animate a single Offset Factor — the entire tram follows
Scene Structure
Clean outliner organisation: ULF_Tram collection with Mesh, Helpers, ULF_Pivots, and ULF_Track. Easy to append into any existing Blender project.
What's Included
Complete ULF tram model (exterior + interior)
Procedural and tileable materials
One PBR texture set (driver's seat)
HDRI for lighting and reflections
Fully rigged path-following animation system
Python script for dynamic curve adaptation
Bezier curve track (ULF_Track)
Clean, labelled outliner structure
What's NOT Included
All preview images and videos show the tram inside a custom scene for context. The following are not part of this product:
City environment, buildings, street furniture, stops
Passengers and driver character
Other vehicles or traffic
How to Use
Append the ULF_Tram collection into your scene
Create or select a Bezier curve for your track
Set the Follow Path target on all ULF_Pivot empties to your curve
Run the included "curve_length" script in the Scripting tab
Animate the Offset Factor of ULF_Pivot.Front — the whole tram follows
Enable "Auto Run Python Scripts" in Preferences → Save & Load
Requirements
Blender 5.1 or later (driver issues in 5.0.1 prevent correct playback)
Cycles renderer (the asset is not optimised for EEVEE)
No external add-ons required
Support & Background
For a detailed breakdown of the rigging process and development background, visit: https://larry.at/vienna-ulf-tram-english/
For questions or support, feel free to contact me directly.
Video Preview: