{"data":{"id":"44","slug":"steam-era-railway-and-rolling-stock","title":"Country station","summary":"Walk a 28 by 64 metre country station built from the Steam Era Railway and Rolling Stock pack: an express locomotive and carriages at the platform, a goods train on the second track, canopies, a footbridge, signal box, water tower and a level crossing.","url":"https://3dassets.dev/demos/steam-era-railway-and-rolling-stock","coverUrl":"https://cdn.3dassets.dev/media/steam-era-railway-and-rolling-stock-demo-1.png","featured":true,"pack":{"slug":"steam-era-railway-and-rolling-stock","title":"Steam Era Railway and Rolling Stock","url":"https://3dassets.dev/packs/steam-era-railway-and-rolling-stock","summary":"Original steam locomotives, tenders, carriages, goods wagons, modular track and lineside structures for a working steam-age railway.","assetCount":64,"totalBytes":9544424,"starterScene":{"slug":"steam-era-railway-and-rolling-stock-stat-d2357295-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/14778/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-stat-d2357295-starter-scene","fileSize":1099904}},"placementCount":62,"assetCount":24,"spawn":{"position":[-3,1.3,15],"yaw":180},"publishedAt":"2026-09-07T15:56:15.504Z","updatedAt":"2026-09-07T15:56:15.504Z","description":"One station from 24 of the pack's 64 models, on plain grass in the outdoor preset with warm light.\n\nYou start on the platform beside the compartment carriages, with the 4-6-2 express and its tender at the head of the train. The goods train on the far track has an 0-6-0, its tender, loaded mineral wagons, a covered van and the brake van. Two canopies, the nameboard, lamp posts, a parcels trolley, a sack barrow, a mail sack and milk churns dress the platform; the footbridge crosses the tracks to the signal box, the water tower and the water crane, and the level crossing closes the line at the south end under semaphore signals.\n\nThis pack ships animation clips: the locomotives, tenders, wagons, the water crane and the crossing gates play as you come within three metres and rewind when you leave. Walking stays at platform height.","scene":{"version":1,"spawn":{"position":[-3,1.3,15],"yaw":180},"bounds":{"min":[-14,0,-30],"max":[14,12,34]},"ground":{"style":"plain"},"environment":{"preset":"outdoor","floor":"#8a9a6c","light":"warm","shadows":true},"placements":[{"asset":"steam-era-railway-and-rolling-stock-platform-module-e0cc0aef","position":[-3,0,-12],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-platform-module-e0cc0aef","position":[-3,0,-6],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-platform-module-e0cc0aef","position":[-3,0,0],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-platform-module-e0cc0aef","position":[-3,0,6],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-platform-module-e0cc0aef","position":[-3,0,12],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-platform-module-ra-293fc360","position":[-3,0,-19.4],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-platform-module-ra-293fc360","position":[-3,0,19.4],"rotation":180},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,-24],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,-20],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,-16],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,-12],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,-8],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,-4],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,0],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,4],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,8],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,12],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,16],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,20],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[0,0,24],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,-24],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,-20],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,-16],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,-12],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,-8],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,-4],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,0],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,4],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,8],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,12],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,16],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,20],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","position":[4.5,0,24],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-express-pacific-4--e04974dc","position":[0,0,-18],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-bogie-tender-e8ef03f1","position":[0,0,-6.7],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-compartment-coach-3fe695bf","position":[0,0,5.2],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-compartment-coach-3fe695bf","position":[0,0,20.2],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-goods-0-6-0-673ef503","position":[4.5,0,-20],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-six-wheel-tender-af17bb59","position":[4.5,0,-12],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-open-mineral-wagon-2d8a73cc","position":[4.5,0,-5.5],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-open-mineral-wagon-2d8a73cc","position":[4.5,0,0.3],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-box-van-a71580fa","position":[4.5,0,6.2],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-brake-van-8d7a6f07","position":[4.5,0,12.5],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-platform-canopy-89c3608f","position":[-3,1.3,0],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-platform-canopy-89c3608f","position":[-3,1.3,-6],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-station-nameboard-28b3e5b3","position":[-3.5,1.3,8],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-parcels-trolley-fb4fc4f8","position":[-2.5,1.3,-3],"rotation":20},{"asset":"steam-era-railway-and-rolling-stock-sack-barrow-78fe2b6a","position":[-3.8,1.3,4],"rotation":300},{"asset":"steam-era-railway-and-rolling-stock-mail-sack-e9f271a8","position":[-2.6,1.3,4.6],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-lamp-post-1e42f0ef","position":[-4,1.3,-10],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-lamp-post-1e42f0ef","position":[-4,1.3,4],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-lamp-post-1e42f0ef","position":[-4,1.3,10],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-milk-churn-2dd0fcde","position":[-3.8,1.3,6],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-milk-churn-2dd0fcde","position":[-3.3,1.3,6.2],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-milk-churn-2dd0fcde","position":[-3.55,1.3,6.6],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-footbridge-59be8b67","position":[2,0,-14],"rotation":90},{"asset":"steam-era-railway-and-rolling-stock-signal-box-89e4fccd","position":[-10,0,-22],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-water-tower-87222c2b","position":[10,0,-18],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-water-crane-5f5b75c0","position":[7.5,0,-9],"rotation":270},{"asset":"steam-era-railway-and-rolling-stock-semaphore-signal-9ca4609d","position":[-2,0,26],"rotation":0},{"asset":"steam-era-railway-and-rolling-stock-semaphore-signal-9ca4609d","position":[7,0,-27],"rotation":180},{"asset":"steam-era-railway-and-rolling-stock-level-crossing-70ed6fd5","position":[2.2,0,30],"rotation":0}],"points":[{"position":[-1.5,1.3,8],"title":"Carriages","text":"Two compartment carriages behind the tender, standing at the platform. You start on the platform, 1.3 m up, which is five 6 m modules with an end ramp each side.","asset":"steam-era-railway-and-rolling-stock-compartment-coach-3fe695bf"},{"position":[-1.5,1.3,-8],"title":"Express locomotive","text":"The 4-6-2 express locomotive and its bogie tender on 4 m plain track sections. The loco and tender have clips: wheels and rods turn as you approach.","asset":"steam-era-railway-and-rolling-stock-express-pacific-4--e04974dc"},{"position":[2.5,1.3,-4],"title":"Goods train","text":"On the second track an 0-6-0 goods engine with its six-wheel tender, two loaded mineral wagons, a covered van and the brake van.","asset":"steam-era-railway-and-rolling-stock-goods-0-6-0-673ef503"},{"position":[-3,1.3,-3],"title":"Under the canopy","text":"Two platform canopies, the station nameboard, lamp posts, a parcels trolley, a sack barrow, a mail sack and milk churns.","asset":"steam-era-railway-and-rolling-stock-platform-canopy-89c3608f"},{"position":[-3,1.3,-13],"title":"Footbridge","text":"The station footbridge crosses both tracks, with the signal box, the water tower and the water crane beyond it.","asset":"steam-era-railway-and-rolling-stock-footbridge-59be8b67"},{"position":[-2,1.3,21],"title":"Level crossing","text":"The level crossing with its gates at the south end, and a semaphore signal on each approach. The gates have clips.","asset":"steam-era-railway-and-rolling-stock-level-crossing-70ed6fd5"}],"poster":{"position":[20,12,30],"lookAt":[0,2,-6]}},"bounds":{"min":[-14,0,-30],"max":[14,12,34]},"assets":[{"id":"14752","slug":"steam-era-railway-and-rolling-stock-platform-module-e0cc0aef","title":"Station platform module (Steam Era Railway and Rolling Stock)","summary":"A 6 m station platform module with a stone face, timber edging and white coping marks.","description":"A 6 m station platform module: a stone retaining face, a paved surface, a timber safety edging strip and painted coping marks. Chain modules end to end on the platform-a and platform-b ports. The module origin sits on the platform face at ground level, and the body runs toward +X away from the track. Platform surface at y=1.25, which is 0.75 m above a matching railhead. Place the face 1.62 m from the track centreline. Bounding size 3.40 x 1.26 x 6.00 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-platform-module-e0cc0aef","cdnUrl":"https://cdn.3dassets.dev/assets/14752/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-platform-module-e0cc0aef","thumbnailUrl":"https://cdn.3dassets.dev/assets/14752/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14752/v1/poster.webp","blurhash":"U8Eo=7^+00WF?a4nIU-;009F-;of4o~q-pIU","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":19872,"triangles":348,"vertices":1044,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.001196341109458668,0.0002250740073854729,0],"max":[3.399952432676733,1.2599081387615736,6]},"sizeMeters":[3.401,1.26,6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:48.160Z","updatedAt":"2026-09-07T15:55:48.260Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14752/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StationPlatformModuleSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14752/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14752/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14752/v1/model.glb\" alt=\"Station platform module (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14752/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14752/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14773","slug":"steam-era-railway-and-rolling-stock-platform-module-ra-293fc360","title":"Station platform end ramp module (Steam Era Railway and Rolling Stock)","summary":"The platform module with a sloping end ramp closing the +Z end of a platform run.","description":"The 6 m platform module with a 2.8 m sloping ramp added at its +Z end to close a platform run, plus a ramped timber edging strip. Only the platform-a port remains usable. The module origin sits on the platform face at ground level, and the body runs toward +X away from the track. Platform surface at y=1.25, which is 0.75 m above a matching railhead. Place the face 1.62 m from the track centreline. Bounding size 3.40 x 1.26 x 8.80 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-platform-module-ra-293fc360","cdnUrl":"https://cdn.3dassets.dev/assets/14773/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-platform-module-ra-293fc360","thumbnailUrl":"https://cdn.3dassets.dev/assets/14773/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14773/v1/poster.webp","blurhash":"UCDvcn%M00Rj%L9FIV%M00IU?bxuIU~q-:My","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":20740,"triangles":364,"vertices":1092,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.0013668370948218822,-0.00013864241015415502,0],"max":[3.400074543575763,1.2599081387615736,8.800000190734863]},"sizeMeters":[3.401,1.26,8.8],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:53.350Z","updatedAt":"2026-09-07T15:55:53.452Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14773/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StationPlatformEndRampModuleSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14773/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14773/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14773/v1/model.glb\" alt=\"Station platform end ramp module (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14773/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14773/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14737","slug":"steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","title":"Plain track straight 4 m (Steam Era Railway and Rolling Stock)","summary":"A 4 m plain track module: ballast shoulder, timber sleepers, cast chairs and flat bottom rail.","description":"A 4 m module of plain double-headed permanent way with a trapezoidal ballast shoulder, six timber sleepers, cast chairs and swept flat bottom rail. Ballast base at y=0, sleeper tops at y=0.35 and railhead top at y=0.50; 1,435 mm gauge with rail centres at x = +/- 0.7525. The module origin sits on the rail-a port at the track centreline and the module runs toward +Z. Bounding size 4.10 x 0.50 x 4.00 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","cdnUrl":"https://cdn.3dassets.dev/assets/14737/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-track-straight-4m-921a7240","thumbnailUrl":"https://cdn.3dassets.dev/assets/14737/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14737/v1/poster.webp","blurhash":"U5CP*BWW00s9D%W;tRaJ00of~VRk_3sARipJ","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":18892,"triangles":328,"vertices":984,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-2.049999952316284,-0.00011078022422907063,0],"max":[2.049999952316284,0.49995345629281684,4]},"sizeMeters":[4.1,0.5,4],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:44.828Z","updatedAt":"2026-09-07T15:55:44.913Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14737/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PlainTrackStraight4MSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14737/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14737/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14737/v1/model.glb\" alt=\"Plain track straight 4 m (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14737/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14737/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14718","slug":"steam-era-railway-and-rolling-stock-express-pacific-4--e04974dc","title":"Steam express locomotive 4-6-2 (Steam Era Railway and Rolling Stock)","summary":"An original express pacific with a wide firebox, trailing truck, high running plate and smoke deflectors.","description":"A 13.8 m 4-6-2 express passenger locomotive: leading bogie, three coupled axles on 2.04 m wheels, a trailing truck under a wide firebox, high running plate, short chimney and smoke deflectors either side of the smokebox. Outside cylinders drive the middle axle through a full outside motion. Wheel flanges rest on y=0, so the rail plane sits at y=0.03; place the vehicle at y=0.47 over a matching track module. Coupler ports sit on the buffer faces at y=1.09. Bounding size 2.86 x 4.06 x 13.80 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: wheel-driver-1-right, wheel-driver-1-left, wheel-driver-2-right, wheel-driver-2-left, wheel-driver-3-right, wheel-driver-3-left, wheel-bogie-1-right, wheel-bogie-1-left, wheel-bogie-2-right, wheel-bogie-2-left and 6 more. Rigid node-transform clips: wheel-roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-express-pacific-4--e04974dc","cdnUrl":"https://cdn.3dassets.dev/assets/14718/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-express-pacific-4--e04974dc","thumbnailUrl":"https://cdn.3dassets.dev/assets/14718/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14718/v1/poster.webp","blurhash":"U36bDNZ~8w.SugD%Myt+00Z*%zj:hhx]x[,p","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":339272,"triangles":9628,"vertices":28884,"meshes":38,"materials":6,"textures":0,"animations":["wheel-roll"],"boundingBox":{"min":[-1.4296823124913647,-1.4305114759416426e-8,-6.900000095367432],"max":[1.4296823124913647,4.060100087127273,6.900000095367432]},"sizeMeters":[2.859,4.06,13.8],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:42.460Z","updatedAt":"2026-09-07T15:55:42.559Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14718/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function SteamExpressLocomotive462SteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14718/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14718/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14718/v1/model.glb\" alt=\"Steam express locomotive 4-6-2 (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14718/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14718/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"14720","slug":"steam-era-railway-and-rolling-stock-bogie-tender-e8ef03f1","title":"Bogie locomotive tender (Steam Era Railway and Rolling Stock)","summary":"An eight-wheel bogie tender for express work, with high coping sides and a deep coal space.","description":"An 8.8 m bogie locomotive tender on two four-wheel bogies: deep water tank, tall coping sides, a coal space with a heaped load, rear ladder and steps. Suits the express pacific and the 4-6-0. Wheel flanges rest on y=0, so the rail plane sits at y=0.03; place the vehicle at y=0.47 over a matching track module. Coupler ports sit on the buffer faces at y=1.09. Bounding size 2.76 x 3.63 x 8.80 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: bogie-front-wheel-1-right, bogie-front-wheel-1-left, bogie-front-wheel-2-right, bogie-front-wheel-2-left, bogie-rear-wheel-1-right, bogie-rear-wheel-1-left, bogie-rear-wheel-2-right, bogie-rear-wheel-2-left. Rigid node-transform clips: wheel-roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-bogie-tender-e8ef03f1","cdnUrl":"https://cdn.3dassets.dev/assets/14720/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-bogie-tender-e8ef03f1","thumbnailUrl":"https://cdn.3dassets.dev/assets/14720/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14720/v1/poster.webp","blurhash":"U25YQY?^Mds.yED%DijE00MeRiR6Zh-:%2wO","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":139408,"triangles":4492,"vertices":13476,"meshes":22,"materials":6,"textures":0,"animations":["wheel-roll"],"boundingBox":{"min":[-1.380055407243452,9.536743172944284e-9,-4.400000095367432],"max":[1.380055407243452,3.6300682059125124,4.400000095367432]},"sizeMeters":[2.76,3.63,8.8],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:40.408Z","updatedAt":"2026-09-07T15:55:40.530Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14720/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function BogieLocomotiveTenderSteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14720/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14720/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14720/v1/model.glb\" alt=\"Bogie locomotive tender (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14720/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14720/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"14724","slug":"steam-era-railway-and-rolling-stock-compartment-coach-3fe695bf","title":"Compartment carriage (Steam Era Railway and Rolling Stock)","summary":"A bogie compartment carriage with eight doors a side, crimson and cream panels and a roof of torpedo vents.","description":"A 15.0 m bogie compartment carriage: eight compartment doors per side each with a droplight, fixed quarterlights between, waist and cantrail beading, arched roof with torpedo ventilators, trussed underframe and footboards. Wheel flanges rest on y=0, so the rail plane sits at y=0.03; place the vehicle at y=0.47 over a matching track module. Coupler ports sit on the buffer faces at y=1.09. Bounding size 3.26 x 3.92 x 15.00 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: bogie-front-wheel-1-right, bogie-front-wheel-1-left, bogie-front-wheel-2-right, bogie-front-wheel-2-left, bogie-rear-wheel-1-right, bogie-rear-wheel-1-left, bogie-rear-wheel-2-right, bogie-rear-wheel-2-left. Rigid node-transform clips: wheel-roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-compartment-coach-3fe695bf","cdnUrl":"https://cdn.3dassets.dev/assets/14724/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-compartment-coach-3fe695bf","thumbnailUrl":"https://cdn.3dassets.dev/assets/14724/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14724/v1/poster.webp","blurhash":"U48D%~=yR4%3E24.brs;00NFbvE2~B~WaO%L","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":212140,"triangles":5976,"vertices":17928,"meshes":24,"materials":8,"textures":0,"animations":["wheel-roll"],"boundingBox":{"min":[-1.6294931332636537,9.536743172944284e-9,-7.5],"max":[1.6294931332636537,3.9196573232012404,7.5]},"sizeMeters":[3.259,3.92,15],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:42.135Z","updatedAt":"2026-09-07T15:55:42.249Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14724/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function CompartmentCarriageSteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14724/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14724/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14724/v1/model.glb\" alt=\"Compartment carriage (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14724/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14724/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"14716","slug":"steam-era-railway-and-rolling-stock-goods-0-6-0-673ef503","title":"Steam goods locomotive 0-6-0 (Steam Era Railway and Rolling Stock)","summary":"An original 1930s inside-framed 0-6-0 goods locomotive with outside cylinders and full valve gear.","description":"A 9.0 m 0-6-0 goods locomotive of a generic 1930s mixed-traffic design: lathed boiler barrel with cleading bands, smokebox with a hinged door and dart, brass dome and safety valves, lofted firebox, side-window cab, and outside cylinders driving the middle axle through crosshead, connecting rod, coupling rods and a simplified Walschaerts gear. Driving wheels are 1.56 m across the treads. Wheel flanges rest on y=0, so the rail plane sits at y=0.03; place the vehicle at y=0.47 over a matching track module. Coupler ports sit on the buffer faces at y=1.09. Bounding size 2.70 x 3.97 x 9.00 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: wheel-driver-1-right, wheel-driver-1-left, wheel-driver-2-right, wheel-driver-2-left, wheel-driver-3-right, wheel-driver-3-left, coupling-rod-right, motion-right, coupling-rod-left, motion-left. Rigid node-transform clips: wheel-roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-goods-0-6-0-673ef503","cdnUrl":"https://cdn.3dassets.dev/assets/14716/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-goods-0-6-0-673ef503","thumbnailUrl":"https://cdn.3dassets.dev/assets/14716/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14716/v1/poster.webp","blurhash":"U168a2*~00TKP-4Tj0?]00E1.lxsy_%z.5^7","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":270752,"triangles":7396,"vertices":22188,"meshes":26,"materials":6,"textures":0,"animations":["wheel-roll"],"boundingBox":{"min":[-1.3500143467359491,-2.6666836405730976e-8,-4.5],"max":[1.3500143467359491,3.9739503692139215,4.5]},"sizeMeters":[2.7,3.974,9],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:41.316Z","updatedAt":"2026-09-07T15:55:41.430Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14716/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function SteamGoodsLocomotive060SteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14716/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14716/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14716/v1/model.glb\" alt=\"Steam goods locomotive 0-6-0 (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14716/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14716/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"14717","slug":"steam-era-railway-and-rolling-stock-six-wheel-tender-af17bb59","title":"Six wheel locomotive tender (Steam Era Railway and Rolling Stock)","summary":"A six-wheel tender with a coal space, curved side coping, water filler and rear steps.","description":"A 7.0 m six-wheel locomotive tender: a water tank wrapped around an open coal space, curved side coping, water filler dome, rear footsteps and grab rails, on three axles with journal axleboxes and leaf springs. Wheel flanges rest on y=0, so the rail plane sits at y=0.03; place the vehicle at y=0.47 over a matching track module. Coupler ports sit on the buffer faces at y=1.09. Bounding size 2.70 x 3.38 x 7.00 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: wheel-1-right, wheel-1-left, wheel-2-right, wheel-2-left, wheel-3-right, wheel-3-left. Rigid node-transform clips: wheel-roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-six-wheel-tender-af17bb59","cdnUrl":"https://cdn.3dassets.dev/assets/14717/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-six-wheel-tender-af17bb59","thumbnailUrl":"https://cdn.3dassets.dev/assets/14717/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14717/v1/poster.webp","blurhash":"U25#|b?^DiI=.lI;Rox[00H?MyMxL~$~rYw4","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":135292,"triangles":3812,"vertices":11436,"meshes":19,"materials":7,"textures":0,"animations":["wheel-roll"],"boundingBox":{"min":[-1.3500572321860032,2.8610229518832853e-8,-3.5],"max":[1.3500572321860032,3.3799224731690547,3.5]},"sizeMeters":[2.7,3.38,7],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:41.385Z","updatedAt":"2026-09-07T15:55:41.498Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14717/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function SixWheelLocomotiveTenderSteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14717/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14717/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14717/v1/model.glb\" alt=\"Six wheel locomotive tender (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14717/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14717/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"14769","slug":"steam-era-railway-and-rolling-stock-open-mineral-wagon-2d8a73cc","title":"Open mineral wagon loaded with coal (Steam Era Railway and Rolling Stock)","summary":"The open mineral wagon carrying a heaped coal load above the side rails.","description":"The 5.6 m open mineral wagon loaded with a heaped coal cargo standing proud of the side rails. Body, underframe and running gear are unchanged. Wheel flanges rest on y=0, so the rail plane sits at y=0.03; place the vehicle at y=0.47 over a matching track module. Coupler ports sit on the buffer faces at y=1.09. Bounding size 2.38 x 2.59 x 5.60 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: wheel-1-right, wheel-1-left, wheel-2-right, wheel-2-left. Rigid node-transform clips: wheel-roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-open-mineral-wagon-2d8a73cc","cdnUrl":"https://cdn.3dassets.dev/assets/14769/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-open-mineral-wagon-2d8a73cc","thumbnailUrl":"https://cdn.3dassets.dev/assets/14769/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14769/v1/poster.webp","blurhash":"U59jJy={8{bb~VIpRPxZ0057Nat79axZE3T0","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":118412,"triangles":2904,"vertices":8712,"meshes":13,"materials":5,"textures":0,"animations":["wheel-roll"],"boundingBox":{"min":[-1.1901411970646836,1.19209286886246e-9,-2.799999952316284],"max":[1.1950914820225693,2.5898949428317306,2.799999952316284]},"sizeMeters":[2.385,2.59,5.6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:52.335Z","updatedAt":"2026-09-07T15:55:52.441Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14769/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function OpenMineralWagonLoadedWithCoalSteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14769/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14769/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14769/v1/model.glb\" alt=\"Open mineral wagon loaded with coal (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14769/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14769/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"14729","slug":"steam-era-railway-and-rolling-stock-box-van-a71580fa","title":"Covered goods van (Steam Era Railway and Rolling Stock)","summary":"A planked covered goods van with a sliding door, arched roof and a vent light.","description":"A 5.9 m four-wheel covered goods van: planked body with external ironwork, a sliding side door with a runner rail, an arched roof, a small side vent light and a brake lever. Wheel flanges rest on y=0, so the rail plane sits at y=0.03; place the vehicle at y=0.47 over a matching track module. Coupler ports sit on the buffer faces at y=1.09. Bounding size 2.43 x 3.64 x 5.90 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: wheel-1-right, wheel-1-left, wheel-2-right, wheel-2-left. Rigid node-transform clips: wheel-roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-box-van-a71580fa","cdnUrl":"https://cdn.3dassets.dev/assets/14729/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-box-van-a71580fa","thumbnailUrl":"https://cdn.3dassets.dev/assets/14729/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14729/v1/poster.webp","blurhash":"U49Z+R~UMwOZ%g9un#xa000LIps:$*^hIXJC","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":110420,"triangles":2756,"vertices":8268,"meshes":14,"materials":6,"textures":0,"animations":["wheel-roll"],"boundingBox":{"min":[-1.2151179817244062,1.19209286886246e-9,-2.950000047683716],"max":[1.2151179817244062,3.640125799197995,2.950000047683716]},"sizeMeters":[2.43,3.64,5.9],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:43.189Z","updatedAt":"2026-09-07T15:55:43.282Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14729/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function CoveredGoodsVanSteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14729/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14729/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14729/v1/model.glb\" alt=\"Covered goods van (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14729/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14729/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"14733","slug":"steam-era-railway-and-rolling-stock-brake-van-8d7a6f07","title":"Goods brake van (Steam Era Railway and Rolling Stock)","summary":"A goods brake van with an end veranda, guard duckets, a stove chimney and a hand brake wheel.","description":"A 6.4 m four-wheel goods brake van: a planked cabin with a veranda at each end behind iron railings, guard duckets projecting from both sides, a stove chimney on the roof and a hand brake column with a wheel. Wheel flanges rest on y=0, so the rail plane sits at y=0.03; place the vehicle at y=0.47 over a matching track module. Coupler ports sit on the buffer faces at y=1.09. Bounding size 2.89 x 4.02 x 6.40 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: wheel-1-right, wheel-1-left, wheel-2-right, wheel-2-left. Rigid node-transform clips: wheel-roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-brake-van-8d7a6f07","cdnUrl":"https://cdn.3dassets.dev/assets/14733/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-brake-van-8d7a6f07","thumbnailUrl":"https://cdn.3dassets.dev/assets/14733/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14733/v1/poster.webp","blurhash":"U48|ki^$0058OaIoWA%100D*~A?G=s?HNHE3","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":135252,"triangles":3244,"vertices":9732,"meshes":14,"materials":6,"textures":0,"animations":["wheel-roll"],"boundingBox":{"min":[-1.4450000524520874,1.19209286886246e-9,-3.200000047683716],"max":[1.4450000524520874,4.020008827614989,3.200000047683716]},"sizeMeters":[2.89,4.02,6.4],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:44.140Z","updatedAt":"2026-09-07T15:55:44.258Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14733/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function GoodsBrakeVanSteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14733/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14733/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14733/v1/model.glb\" alt=\"Goods brake van (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14733/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14733/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"14753","slug":"steam-era-railway-and-rolling-stock-platform-canopy-89c3608f","title":"Platform canopy (Steam Era Railway and Rolling Stock)","summary":"A 6 m platform canopy on cast columns, with a scalloped valance and a slated roof.","description":"A 6 m platform canopy: three cast iron columns with spandrel brackets, a timber and slate roof overhanging the platform edge, scalloped valance boards along both edges and light screens at each end. Sits on a platform module. Bounding size 3.60 x 4.52 x 6.00 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-platform-canopy-89c3608f","cdnUrl":"https://cdn.3dassets.dev/assets/14753/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-platform-canopy-89c3608f","thumbnailUrl":"https://cdn.3dassets.dev/assets/14753/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14753/v1/poster.webp","blurhash":"UGA0];s:IAWB~qRiM_ogE1M{bHt74oWAbIj]","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":41884,"triangles":808,"vertices":2424,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[0.14983520302906173,-0.00016542366638283568,0],"max":[3.750164802931403,4.520129684591787,6]},"sizeMeters":[3.6,4.52,6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:48.256Z","updatedAt":"2026-09-07T15:55:48.451Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14753/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PlatformCanopySteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14753/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14753/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14753/v1/model.glb\" alt=\"Platform canopy (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14753/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14753/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14756","slug":"steam-era-railway-and-rolling-stock-station-nameboard-28b3e5b3","title":"Station nameboard (Steam Era Railway and Rolling Stock)","summary":"A blank enamelled station nameboard on two cast iron posts with knee braces.","description":"A 3.5 m station nameboard: a blank enamelled board in a timber frame carried on two cast iron posts with knee braces. The board carries no lettering so it can be labelled for any location. Bounding size 3.50 x 2.00 x 0.32 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-station-nameboard-28b3e5b3","cdnUrl":"https://cdn.3dassets.dev/assets/14756/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-station-nameboard-28b3e5b3","thumbnailUrl":"https://cdn.3dassets.dev/assets/14756/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14756/v1/poster.webp","blurhash":"ULB:gFt7E2t8~W-:M|RkE1-:xuM|4.t6-:WB","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":16816,"triangles":300,"vertices":900,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1.75,0.00003353695257224398,-0.16175787154998159],"max":[1.75,1.9999664630474276,0.16175787154998159]},"sizeMeters":[3.5,2,0.324],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:49.336Z","updatedAt":"2026-09-07T15:55:49.444Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14756/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StationNameboardSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14756/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14756/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14756/v1/model.glb\" alt=\"Station nameboard (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14756/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14756/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14763","slug":"steam-era-railway-and-rolling-stock-parcels-trolley-fb4fc4f8","title":"Parcels trolley (Steam Era Railway and Rolling Stock)","summary":"A four wheel platform parcels trolley with end rails and loaded crates.","description":"A 1.84 m four wheel platform parcels trolley: a planked deck on iron channels, spoked iron wheels, end rails and two timber crates aboard. Bounding size 1.21 x 1.04 x 1.84 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-parcels-trolley-fb4fc4f8","cdnUrl":"https://cdn.3dassets.dev/assets/14763/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-parcels-trolley-fb4fc4f8","thumbnailUrl":"https://cdn.3dassets.dev/assets/14763/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14763/v1/poster.webp","blurhash":"U7AmSP=_0MI@~VV?IWt800D*-P%20Lof-nkD","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":51504,"triangles":1036,"vertices":3108,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.6049476717303284,-0.000024398109112255817,-0.9200000166893005],"max":[0.6049476717303284,1.0399697604503755,0.9200000166893005]},"sizeMeters":[1.21,1.04,1.84],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:52.037Z","updatedAt":"2026-09-07T15:55:52.128Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14763/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ParcelsTrolleySteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14763/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14763/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14763/v1/model.glb\" alt=\"Parcels trolley (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14763/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14763/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14759","slug":"steam-era-railway-and-rolling-stock-sack-barrow-78fe2b6a","title":"Sack barrow (Steam Era Railway and Rolling Stock)","summary":"A two wheel sack barrow with a timber frame and spoked iron wheels.","description":"A 1.2 m two wheel sack barrow with a timber frame, cross rails, an iron toe plate and spoked iron wheels. Bounding size 0.56 x 1.20 x 0.73 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-sack-barrow-78fe2b6a","cdnUrl":"https://cdn.3dassets.dev/assets/14759/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-sack-barrow-78fe2b6a","thumbnailUrl":"https://cdn.3dassets.dev/assets/14759/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14759/v1/poster.webp","blurhash":"U59jZHIt00-j~N9G5B~pNcRj%0xuo}n+jFkV","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":23700,"triangles":456,"vertices":1368,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.28001219412374384,-0.00000969372583081718,-0.36413945169246775],"max":[0.28001219412374384,1.2000000476837158,0.3685401976108551]},"sizeMeters":[0.56,1.2,0.733],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:50.457Z","updatedAt":"2026-09-07T15:55:50.555Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14759/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SackBarrowSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14759/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14759/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14759/v1/model.glb\" alt=\"Sack barrow (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14759/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14759/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14762","slug":"steam-era-railway-and-rolling-stock-mail-sack-e9f271a8","title":"Mail sack (Steam Era Railway and Rolling Stock)","summary":"A tied canvas mail sack with a neck cord and a label.","description":"A 0.86 m canvas mail sack, filled and tied at the neck with a cord ring and a blank label. Bounding size 0.73 x 0.78 x 0.62 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-mail-sack-e9f271a8","cdnUrl":"https://cdn.3dassets.dev/assets/14762/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-mail-sack-e9f271a8","thumbnailUrl":"https://cdn.3dassets.dev/assets/14762/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14762/v1/poster.webp","blurhash":"U7Cs1__2009F4:Rks:WV00Dk~B%M={%L%KWB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":13200,"triangles":224,"vertices":672,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.36329140792153636,0,-0.3100170789939474],"max":[0.36329140792153636,0.7799999713897705,0.3100170789939474]},"sizeMeters":[0.727,0.78,0.62],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:50.568Z","updatedAt":"2026-09-07T15:55:50.690Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14762/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function MailSackSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14762/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14762/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14762/v1/model.glb\" alt=\"Mail sack (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14762/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14762/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14757","slug":"steam-era-railway-and-rolling-stock-lamp-post-1e42f0ef","title":"Platform lamp post (Steam Era Railway and Rolling Stock)","summary":"A cast iron platform lamp post with a square glazed lantern and a blank sign plate.","description":"A 4.3 m cast iron platform lamp post: a fluted column, a square glazed lantern with a domed cap and finial, and a small blank sign plate on the column. Bounding size 0.68 x 4.28 x 0.68 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-lamp-post-1e42f0ef","cdnUrl":"https://cdn.3dassets.dev/assets/14757/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-lamp-post-1e42f0ef","thumbnailUrl":"https://cdn.3dassets.dev/assets/14757/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14757/v1/poster.webp","blurhash":"U15E,1%M004m?bWVDit6D%of-;Rk00Rj_3%L","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":22160,"triangles":420,"vertices":1260,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.33987122855071644,0,-0.33987122855071644],"max":[0.33987122855071644,4.28000020980835,0.33987122855071644]},"sizeMeters":[0.68,4.28,0.68],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:49.795Z","updatedAt":"2026-09-07T15:55:49.887Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14757/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PlatformLampPostSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14757/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14757/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14757/v1/model.glb\" alt=\"Platform lamp post (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14757/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14757/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14761","slug":"steam-era-railway-and-rolling-stock-milk-churn-2dd0fcde","title":"Milk churn (Steam Era Railway and Rolling Stock)","summary":"A conical steel milk churn with strapping bands and side handles.","description":"A 0.78 m conical steel milk churn with three strapping bands, two side handles and a lidded neck, as loaded into brake vans from station platforms. Bounding size 0.54 x 0.78 x 0.54 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-milk-churn-2dd0fcde","cdnUrl":"https://cdn.3dassets.dev/assets/14761/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-milk-churn-2dd0fcde","thumbnailUrl":"https://cdn.3dassets.dev/assets/14761/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14761/v1/poster.webp","blurhash":"U59Qs;x]00IA_4of4nRj00WV-:n%4nay-;oe","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":40132,"triangles":800,"vertices":2400,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.2680148899360341,0,-0.2680148899360341],"max":[0.2680148899360341,0.7799999713897705,0.2680148899360341]},"sizeMeters":[0.536,0.78,0.536],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:50.579Z","updatedAt":"2026-09-07T15:55:50.688Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14761/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function MilkChurnSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14761/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14761/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14761/v1/model.glb\" alt=\"Milk churn (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14761/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14761/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14754","slug":"steam-era-railway-and-rolling-stock-footbridge-59be8b67","title":"Station footbridge (Steam Era Railway and Rolling Stock)","summary":"A lattice sided footbridge with a roofed deck and stairs at both ends, clearing the loading gauge.","description":"A 16 m station footbridge: a lattice sided deck 4.7 m above the railhead so it clears the loading gauge, a light roof over the span and a stepped stair tower at each end. Bounding size 2.20 x 7.82 x 15.98 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-footbridge-59be8b67","cdnUrl":"https://cdn.3dassets.dev/assets/14754/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-footbridge-59be8b67","thumbnailUrl":"https://cdn.3dassets.dev/assets/14754/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14754/v1/poster.webp","blurhash":"U48qB6ozDit5~q4.4noJ00adRPa~4m?F?b%g","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":60032,"triangles":1200,"vertices":3600,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1.0998611740805928,-0.00003538655016699366,-7.989999771118164],"max":[1.0998611740805928,7.819987174505411,7.989999771118164]},"sizeMeters":[2.2,7.82,15.98],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:48.930Z","updatedAt":"2026-09-07T15:55:49.023Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14754/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StationFootbridgeSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14754/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14754/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14754/v1/model.glb\" alt=\"Station footbridge (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14754/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14754/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14744","slug":"steam-era-railway-and-rolling-stock-signal-box-89e4fccd","title":"Signal box (Steam Era Railway and Rolling Stock)","summary":"A brick and timber signal box with a full window band, hipped slate roof and an external stair.","description":"A 7.8 m signal box: brick locking room below, timber operating floor above with a continuous window band on three sides, a hipped slate roof, a brick chimney, a nameboard and an external timber stair with an iron handrail. Bounding size 7.80 x 6.24 x 4.70 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-signal-box-89e4fccd","cdnUrl":"https://cdn.3dassets.dev/assets/14744/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-signal-box-89e4fccd","thumbnailUrl":"https://cdn.3dassets.dev/assets/14744/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14744/v1/poster.webp","blurhash":"U6DlsK~W00S57OtS-Ss900E1x^IV:hrrE29Z","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":30084,"triangles":532,"vertices":1596,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-3.549999952316284,0,-2.3499099388329783],"max":[4.25,6.2399891314407725,2.3499099388329783]},"sizeMeters":[7.8,6.24,4.7],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:46.524Z","updatedAt":"2026-09-07T15:55:46.636Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14744/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SignalBoxSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14744/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14744/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14744/v1/model.glb\" alt=\"Signal box (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14744/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14744/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14747","slug":"steam-era-railway-and-rolling-stock-water-tower-87222c2b","title":"Water tower (Steam Era Railway and Rolling Stock)","summary":"A brick based water tower with a riveted steel tank, walkway rail, delivery pipe and ladder.","description":"A 6.9 m water tower: a brick base with an arched opening, a riveted steel tank with corner stiffeners and stiffening rails, a walkway handrail on top, a delivery pipe down one corner and an access ladder. Bounding size 5.73 x 6.90 x 5.00 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-water-tower-87222c2b","cdnUrl":"https://cdn.3dassets.dev/assets/14747/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-water-tower-87222c2b","thumbnailUrl":"https://cdn.3dassets.dev/assets/14747/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14747/v1/poster.webp","blurhash":"UAC~uL^k00MxPqS$Q,j?56J6I:Sh+Z$jxbn+","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":47052,"triangles":916,"vertices":2748,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-2.7266666351892557,0.00005187109900850473,-2.5],"max":[3.000037139568528,6.900000095367432,2.5]},"sizeMeters":[5.727,6.9,5],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:47.252Z","updatedAt":"2026-09-07T15:55:47.357Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14747/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WaterTowerSteamEraRailwayAndRollingStock(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/14747/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14747/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14747/v1/model.glb\" alt=\"Water tower (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14747/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14747/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"14748","slug":"steam-era-railway-and-rolling-stock-water-crane-5f5b75c0","title":"Water crane (Steam Era Railway and Rolling Stock)","summary":"A swinging water crane with a leather bag on a named pivot, and a fire devil brazier.","description":"A 3.1 m water crane: a cast column on a stone base, a swinging delivery arm with a leather bag on a named pivot node, a control lever and a fire devil brazier beside it to stop the column freezing. Bounding size 2.89 x 3.10 x 1.75 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: crane-arm. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-water-crane-5f5b75c0","cdnUrl":"https://cdn.3dassets.dev/assets/14748/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-water-crane-5f5b75c0","thumbnailUrl":"https://cdn.3dassets.dev/assets/14748/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14748/v1/poster.webp","blurhash":"U37B4V?v0000RlIVV@-:02s+?HEN~q?b9F00","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":25984,"triangles":452,"vertices":1356,"meshes":5,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.550000011920929,0,-0.550000011920929],"max":[2.340012748034731,3.0999999046325684,1.2000711217932363]},"sizeMeters":[2.89,3.1,1.75],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:48.496Z","updatedAt":"2026-09-07T15:55:48.748Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14748/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function WaterCraneSteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14748/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14748/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14748/v1/model.glb\" alt=\"Water crane (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14748/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14748/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"14746","slug":"steam-era-railway-and-rolling-stock-semaphore-signal-9ca4609d","title":"Lower quadrant semaphore signal (Steam Era Railway and Rolling Stock)","summary":"A lattice post semaphore signal with the arm at danger, spectacle plate, lamp and ladder.","description":"A 6.9 m lower quadrant semaphore signal on a riveted lattice post: a signal arm at danger on a named pivot node, a two lens spectacle plate, a lamp case, a ladder to the arm and a balance lever at the foot. Rotate the signal-arm node about X to clear the signal. Bounding size 1.93 x 6.90 x 0.96 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: signal-arm. Rigid node-transform clips: trigger. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-semaphore-signal-9ca4609d","cdnUrl":"https://cdn.3dassets.dev/assets/14746/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-semaphore-signal-9ca4609d","thumbnailUrl":"https://cdn.3dassets.dev/assets/14746/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14746/v1/poster.webp","blurhash":"U25O4?%f004UD5M|%}-o~Vxt4:E2J9nj$iXR","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":54848,"triangles":1044,"vertices":3132,"meshes":6,"materials":5,"textures":0,"animations":["trigger"],"boundingBox":{"min":[-0.4948739792467088,-0.000021356570057445845,-0.3499999940395355],"max":[1.4400000429153441,6.900000095367432,0.6059025536733642]},"sizeMeters":[1.935,6.9,0.956],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:48.307Z","updatedAt":"2026-09-07T15:55:48.545Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14746/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function LowerQuadrantSemaphoreSignalSteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14746/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14746/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14746/v1/model.glb\" alt=\"Lower quadrant semaphore signal (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14746/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14746/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"14741","slug":"steam-era-railway-and-rolling-stock-level-crossing-70ed6fd5","title":"Level crossing with gates (Steam Era Railway and Rolling Stock)","summary":"A 4 m level crossing module with a timber road deck, stone approaches and two five bar gates.","description":"A 4 m level crossing: the road surface crosses the track on timber check boards flanked by stone approaches, with a five bar gate hung on each side of the line. Each gate is a named pivot node at its hanging post. Ballast base at y=0, sleeper tops at y=0.35 and railhead top at y=0.50; 1,435 mm gauge with rail centres at x = +/- 0.7525. The module origin sits on the rail-a port at the track centreline and the module runs toward +Z. Bounding size 9.40 x 2.12 x 4.00 m (X x Y x Z). Metre units, +Y up, +Z forward, resting at y=0. Named pivot nodes: gate-1, gate-2. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steam-era-railway-and-rolling-stock-level-crossing-70ed6fd5","cdnUrl":"https://cdn.3dassets.dev/assets/14741/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steam-era-railway-and-rolling-stock-level-crossing-70ed6fd5","thumbnailUrl":"https://cdn.3dassets.dev/assets/14741/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/14741/v1/poster.webp","blurhash":"U6DStA?b00I;IT~Wxu0K009F?Zs:-=00IB~p","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":44576,"triangles":792,"vertices":2376,"meshes":7,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-4.699999904632568,0.00023651332600849173,0],"max":[4.699999904632568,2.1200777673628908,4]},"sizeMeters":[9.4,2.12,4],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-07T15:55:45.860Z","updatedAt":"2026-09-07T15:55:45.961Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/14741/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function LevelCrossingWithGatesSteamEraRailwayAndRollingStock(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/14741/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/14741/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/14741/v1/model.glb\" alt=\"Level crossing with gates (Steam Era Railway and Rolling Stock)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/14741/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/14741/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}}]}}