{"data":{"id":"35631","slug":"ferry-terminal-and-harbour-crossing-ferry-terminal-and-edb91ab1","title":"Linkspan bridge section (Ferry Terminal and Harbour Crossing)","summary":"Hinged linkspan bridge 6 m long and 7 m wide carrying two vehicle lanes out to a ship: a chequered steel deck with yellow kerbs and handrails on a welded box girder, pinned to a pair of charcoal shore bearings it tilts on as the tide moves the ship.","description":"Hinged linkspan bridge 6 m long and 7 m wide carrying two vehicle lanes out to a ship: a chequered steel deck with yellow kerbs and handrails on a welded box girder, pinned to a pair of charcoal shore bearings it tilts on as the tide moves the ship. Overall 7.20 by 2.38 by 6.49 m (X by Y by Z). Metre units, +Y up, the working face toward +Z, with a free origin on its fixing surface. The origin is the centre of the shore hinge line at deck bearing level, with the girder below it and the bridge cantilevering toward +Z, so the section is placed in the air at whatever height the ship's vehicle deck sits at. The shore bearings, the hinge pin and the girder are static, and the lifting cables and rams belong to the tower rather than the bridge: only the deck node tilts, because one rigid node cannot both tilt a deck and telescope a ram. Rigid node-transform clips: tilt. No skinning. No collision or navigation data. Original CC0 geometry: no operator, shipping line, port authority or maker marks anywhere, and every livery and sign face is invented.","status":"published","url":"https://3dassets.dev/assets/ferry-terminal-and-harbour-crossing-ferry-terminal-and-edb91ab1","cdnUrl":"https://cdn.3dassets.dev/assets/35631/v1/model.glb","downloadUrl":"https://3dassets.dev/download/ferry-terminal-and-harbour-crossing-ferry-terminal-and-edb91ab1","thumbnailUrl":"https://cdn.3dassets.dev/assets/35631/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35631/v1/poster.webp","blurhash":"U6Csmm?G00fSah%Mt7D%00E2_NM{W9D*RR-:","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"animated","title":"Animated"},{"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":20884,"triangles":656,"vertices":1502,"meshes":34,"materials":4,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-3.5999999046325684,-0.20501143361908514,-0.44979400627780497],"max":[3.5999999046325684,2.174909230351728,6.040106870658987]},"sizeMeters":[7.2,2.38,6.49],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T16:40:51.833Z","updatedAt":"2026-09-11T16:40:52.033Z","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/35631/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 LinkspanBridgeSectionFerryTerminalAndHarbourCrossing(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35631/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/35631/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35631/v1/model.glb\" alt=\"Linkspan bridge section (Ferry Terminal and Harbour Crossing)\" 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/35631/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/35631/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}}}