{"data":{"id":"38548","slug":"botanical-glasshouse-and-palm-house-botanical-glasshou-2a3e3df1","title":"Ventilator shaft run, 3 m (Botanical Glasshouse and Palm House)","summary":"Three metre length of ventilator line shaft on two cast iron hanger brackets, with a crank arm and a connecting link to the ridge lights, and a shaft that turns. Ports both ends so the line runs the length of a house.","description":"Three metre length of ventilator line shaft on two cast iron hanger brackets, with a crank arm and a connecting link to the ridge lights, and a shaft that turns. Ports both ends so the line runs the length of a house. Overall 3.00 by 0.57 by 0.39 m (X by Y by Z). Metre units, +Y up, the working face toward +Z, with a free origin as described below. The origin sits on the shaft centre line at the middle of the run, because the piece hangs from the roof structure rather than standing on anything; the brackets reach up to the purlin above. Rigid node-transform clips: shaft-spin. No skinning. No collision or navigation data. Original CC0 geometry: no botanic garden, palm house, horticultural society, nursery or seed house is named or depicted, no real building is reproduced, and every label, board and plate face is blank.","status":"published","url":"https://3dassets.dev/assets/botanical-glasshouse-and-palm-house-botanical-glasshou-2a3e3df1","cdnUrl":"https://cdn.3dassets.dev/assets/38548/v1/model.glb","downloadUrl":"https://3dassets.dev/download/botanical-glasshouse-and-palm-house-botanical-glasshou-2a3e3df1","thumbnailUrl":"https://cdn.3dassets.dev/assets/38548/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/38548/v1/poster.webp","blurhash":"U24.PQV|4opH%g.8S4My00%f_MR69E4T%L?b","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"historical","title":"Historical"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"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":8704,"triangles":128,"vertices":292,"meshes":3,"materials":2,"textures":0,"animations":["shaft-spin"],"boundingBox":{"min":[-1.5,-0.24500533999337376,-0.09997863337617226],"max":[1.5,0.32996047874946444,0.28999999165534973]},"sizeMeters":[3,0.575,0.39],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T15:44:39.906Z","updatedAt":"2026-09-12T15:44:40.030Z","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/38548/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 VentilatorShaftRun3MBotanicalGlasshouseAndPalmHouse(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/38548/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/38548/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/38548/v1/model.glb\" alt=\"Ventilator shaft run, 3 m (Botanical Glasshouse and Palm House)\" 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/38548/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/38548/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}}}