{"data":{"id":"36036","slug":"steampunk-airship-dock-and-workshop-airship-tail-unit-e72e167b","title":"Airship cruciform tail unit (Steampunk Airship Dock and Workshop)","summary":"The four fin tail with a hinged rudder on each vertical fin and an elevator on each stabiliser.","description":"The cruciform empennage: four fabric covered fins on steel spars round a root fairing, with a hinged control surface on the trailing edge of each. The two vertical surfaces share the rudder node and the two horizontal surfaces share the elevator node, so one channel drives each system. Tip bracing wires are modelled static, because a wire is not reachable with a rigid node transform. The origin sits on the ship axis at the fin root. Assembled about the ship axis, the envelope centre is the datum: the nose cone sits 11.6 m forward of it, the tail unit 10.0 m aft, the keel truss 4.0 m below and the gondola 2.2 m below the keel. Bounding size 6.00 x 6.00 x 3.54 m (X x Y x Z). Metre units, +Y up, +Z forward. Named pivot nodes: rudder, elevator. Rigid node-transform clips: steer and tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/steampunk-airship-dock-and-workshop-airship-tail-unit-e72e167b","cdnUrl":"https://cdn.3dassets.dev/assets/36036/v1/model.glb","downloadUrl":"https://3dassets.dev/download/steampunk-airship-dock-and-workshop-airship-tail-unit-e72e167b","thumbnailUrl":"https://cdn.3dassets.dev/assets/36036/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36036/v1/poster.webp","blurhash":"UCB|HORk00j@?bofD%WB00of~qofD%M{%L%M","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"stylized","title":"Stylized"},{"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":62672,"triangles":1504,"vertices":3100,"meshes":14,"materials":2,"textures":0,"animations":["steer","tilt"],"boundingBox":{"min":[-2.999955797912502,-2.999955797912502,-2.0400178174869876],"max":[2.999955797912502,2.999955797912502,1.5]},"sizeMeters":[6,6,3.54],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T19:54:01.733Z","updatedAt":"2026-09-11T19:54:01.832Z","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/36036/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 AirshipCruciformTailUnitSteampunkAirshipDockAndWorkshop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36036/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/36036/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36036/v1/model.glb\" alt=\"Airship cruciform tail unit (Steampunk Airship Dock and Workshop)\" 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/36036/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/36036/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}}}