{"data":{"id":303,"slug":"art-gallery-and-exhibition-rooms","title":"Art Gallery and Exhibition Rooms","summary":"A realistic public art gallery: modular white wall, floor and lighting track a hung room is built from, framed and unframed canvases, plinths, vitrines and stands, and the front of house from the reception desk to the shop. All artwork is abstract placeholder composition.","description":"Everything a developer needs to build a gallery of two or three rooms and the front of house in front of them. The room is modular: a 2 m by 3.2 m white wall panel with a dark edge reveal and a cornice tiles into a run of any length, with a matching doorway module, a fire exit module, a 4.2 m tall bay, a movable partition on feet, a 2 m skirting run and a 2 m floor tile in boarded and poured finishes. Over it runs 2 m lighting track with clamp on spot heads, and picture lights on brackets. The display side is a hang: framed canvases in four sizes and two palettes, an unframed stretched canvas, a diptych, a picture rail with hanging wires, plinths at three heights, a vitrine case with a lifting lid, a wall mounted display case, a sculpture stand with a turning platter, a bust pedestal, an abstract form for a plinth top, a wall text panel, a room name plate, a caption card set, an interactive screen on a stand and a projector plinth. Front of house is a reception desk, a ticket scanner, a cloakroom counter and rail, a bank of six bag lockers, a shop counter with its merchandise shelf, cafe settings, a pushchair park, a wheelchair, a floor plan board, an audio guide charging rack, benches, an invigilator chair, rope barrier posts, retractable belt stanchions, an art handling trolley, an artwork crate, a gloves and tools tray, a humidity monitor, a cleaning trolley and a bin. Every painted surface in the pack is an abstract composition of colour blocks on a plain ground and every panel, plate and label carries plain bars instead of characters: nothing reproduces, imitates or evokes any existing artwork, artist, style or institution, there is no readable text and no name anywhere, and the art is placeholder geometry meant to be replaced with the work being shown. What moves is rigid node transforms only: the doorway and fire exit leaves, the six locker doors, the vitrine and crate lids, the sculpture turntable, the interactive screen tilt, and the castors and wheels under the trolleys and the wheelchair. What does not move is said in each description and is deliberate: canvases are hung and fixed, ropes, belts, hanging wires, coat hangers and the waste sack are cloth, webbing or cable and this library has no skinning, a lighting beam is not geometry so a spot is aimed once, and the folding wheelchair frame and the retracting belt cassette are linkages no single rigid node can carry. All original CC0 geometry, no brands and no logos.","url":"https://3dassets.dev/packs/art-gallery-and-exhibition-rooms","coverUrl":"https://cdn.3dassets.dev/assets/35871/v1/poster.webp","assetCount":58,"aiGenerated":true,"aiGeneratedAssetCount":58,"aiModels":["Claude Opus 5"],"aiModelUnspecifiedCount":0,"featured":true,"licenseLabel":"CC0 1.0 Universal","totalBytes":2295212,"totalTriangles":99212,"starterScene":{"id":"35871","slug":"art-gallery-and-exhibition-rooms-two-roo-1bc77295-starter-scene","title":"Two room gallery and front of house (Art Gallery and Exhibition Rooms)","summary":"A public art gallery laid from 2 m floor tiles and built from 2 m white wall modules: a hung room of framed and unframed canvases at eye line under picture lights and a run of lighting track, with benches down the middle and a rope barrier across the main wall, a doorway...","description":"A public art gallery laid from 2 m floor tiles and built from 2 m white wall modules: a hung room of framed and unframed canvases at eye line under picture lights and a run of lighting track, with benches down the middle and a rope barrier across the main wall, a doorway through to a sculpture room of plinths, a vitrine, a turntable stand and a bust pedestal behind a belt barrier, and the front of house beyond the front wall, with the reception desk, ticket scanner, cloakroom counter, locker bank, shop counter, cafe settings, floor plan board, pushchair park and the handling and cleaning trolleys. Every canvas and panel is an abstract composition of colour blocks and every label carries plain bars, so nothing here is a reproduction of any existing work and there is no lettering to replace.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-two-roo-1bc77295-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/35871/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-two-roo-1bc77295-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/35871/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35871/v1/poster.webp","blurhash":"U7ECnCng00D%OaW=R5V@00o#~pxu$cxV%gba","category":{"slug":"environments","title":"Environments & Scenes"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"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":889028,"triangles":43676,"vertices":47590,"meshes":245,"materials":12,"textures":0,"animations":[],"boundingBox":{"min":[-10.179960328797288,-0.06003021365965735,-7.179960328797288],"max":[4.259910278796666,4.199999809265137,5]},"sizeMeters":[14.44,4.26,12.18],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:40.704Z","updatedAt":"2026-09-11T18:04:40.801Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35871/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TwoRoomGalleryAndFrontOfHouseArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35871/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35871/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35871/v1/model.glb\" alt=\"Two room gallery and front of house (Art Gallery and Exhibition Rooms)\" 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/35871/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/35871/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},"assets":[{"id":"35815","slug":"art-gallery-and-exhibition-rooms-gallery-wall-module-744f878b","title":"Gallery Wall Module (Art Gallery and Exhibition Rooms)","summary":"A 2 m by 3.2 m module of white gallery wall with a dark shadow reveal down each edge and a capping cornice, the panel a hung room in this pack is built from.","description":"A 2 m by 3.2 m module of white gallery wall with a dark shadow reveal down each edge and a capping cornice, the panel a hung room in this pack is built from. Overall 2.00 by 3.20 by 0.20 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Tiles on the 2 m wall grid through wall-left and wall-right, so a room of any length is this one module repeated and a corner is a run turned 90 degrees. 160 mm thick, so two runs meeting at a corner leave a 160 mm square that a third module or a column fills. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-gallery-wall-module-744f878b","cdnUrl":"https://cdn.3dassets.dev/assets/35815/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-gallery-wall-module-744f878b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35815/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35815/v1/poster.webp","blurhash":"U8F6C5-p009Fxu%MRj9F00WB~qofxuxuRiD%","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"}],"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":10552,"triangles":432,"vertices":370,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.999932881629394,-2.3841858265427618e-8,-0.09996032879728803],"max":[0.999932881629394,3.200000047683716,0.09996032879728803]},"sizeMeters":[2,3.2,0.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:00.876Z","updatedAt":"2026-09-11T18:04:00.985Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35815/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GalleryWallModuleArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35815/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35815/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35815/v1/model.glb\" alt=\"Gallery Wall Module (Art Gallery and Exhibition Rooms)\" 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/35815/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/35815/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35818","slug":"art-gallery-and-exhibition-rooms-gallery-wall-module-t-a0c16a09","title":"Gallery Wall Module Tall (Art Gallery and Exhibition Rooms)","summary":"The gallery wall module at 4.2 m, for the double height room a large hung work needs, on the same 2 m grid and the same port heights.","description":"The gallery wall module at 4.2 m, for the double height room a large hung work needs, on the same 2 m grid and the same port heights. Overall 2.00 by 4.20 by 0.20 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Ports sit at the same 1.6 m height as the 3.2 m module, so a tall bay drops into a standard run and the step in height happens at the joint. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-gallery-wall-module-t-a0c16a09","cdnUrl":"https://cdn.3dassets.dev/assets/35818/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-gallery-wall-module-t-a0c16a09","thumbnailUrl":"https://cdn.3dassets.dev/assets/35818/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35818/v1/poster.webp","blurhash":"U7Eyb}D?00?Sje%NWB9F00xr~qIWt8xuRjIT","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"}],"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":10676,"triangles":432,"vertices":376,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.99985039119416,9.536743306171047e-8,-0.10001281709835026],"max":[0.99985039119416,4.199999809265137,0.10001281709835026]},"sizeMeters":[2,4.2,0.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:01.214Z","updatedAt":"2026-09-11T18:04:01.315Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35818/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GalleryWallModuleTallArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35818/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35818/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35818/v1/model.glb\" alt=\"Gallery Wall Module Tall (Art Gallery and Exhibition Rooms)\" 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/35818/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/35818/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35817","slug":"art-gallery-and-exhibition-rooms-gallery-doorway-modul-9976f7ba","title":"Gallery Doorway Module (Art Gallery and Exhibition Rooms)","summary":"A 2 m wall module with a 1 m by 2.1 m opening, a dark threshold strip, lined jambs and a timber leaf on the left jamb, the way a visitor gets from one hung room to the next.","description":"A 2 m wall module with a 1 m by 2.1 m opening, a dark threshold strip, lined jambs and a timber leaf on the left jamb, the way a visitor gets from one hung room to the next. Overall 2.00 by 3.20 by 0.36 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Drops into the 2 m wall run through wall-left and wall-right at the same port height as the plain module. The leaf swings on the left jamb; the frame, the threshold and the lining are fixed. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-gallery-doorway-modul-9976f7ba","cdnUrl":"https://cdn.3dassets.dev/assets/35817/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-gallery-doorway-modul-9976f7ba","thumbnailUrl":"https://cdn.3dassets.dev/assets/35817/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35817/v1/poster.webp","blurhash":"U8ECtSWB00oz_4%M8_9F01fk?aaxskxuX9IU","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"}],"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":32216,"triangles":1404,"vertices":1206,"meshes":4,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.999932881629394,-2.3841858265427618e-8,-0.1799102787966658],"max":[0.999932881629394,3.200000047683716,0.1799102787966658]},"sizeMeters":[2,3.2,0.36],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:00.922Z","updatedAt":"2026-09-11T18:04:01.042Z","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/35817/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 GalleryDoorwayModuleArtGalleryAndExhibitionRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35817/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/35817/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35817/v1/model.glb\" alt=\"Gallery Doorway Module (Art Gallery and Exhibition Rooms)\" 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/35817/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/35817/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35816","slug":"art-gallery-and-exhibition-rooms-fire-exit-module-7518136b","title":"Fire Exit Module (Art Gallery and Exhibition Rooms)","summary":"A 2 m wall module with a fire exit: a green leaf on a push bar under a lit green over door box, for the escape route every public room needs.","description":"A 2 m wall module with a fire exit: a green leaf on a push bar under a lit green over door box, for the escape route every public room needs. Overall 2.00 by 3.20 by 0.36 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The same 2 m wall module as the doorway, so an escape route sits in a run without a special bay. The leaf swings out on the left jamb and the push bar travels with it; the over door box is emissive geometry, not a light source, and carries no lettering. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-fire-exit-module-7518136b","cdnUrl":"https://cdn.3dassets.dev/assets/35816/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-fire-exit-module-7518136b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35816/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35816/v1/poster.webp","blurhash":"U8Dvs99F00_3~W%M0K9F4Ut7yCM|S0xuspD%","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"}],"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":35108,"triangles":1728,"vertices":1484,"meshes":5,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.999932881629394,-2.3841858265427618e-8,-0.1799102787966658],"max":[0.999932881629394,3.200000047683716,0.1799102787966658]},"sizeMeters":[2,3.2,0.36],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:00.897Z","updatedAt":"2026-09-11T18:04:01.023Z","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/35816/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 FireExitModuleArtGalleryAndExhibitionRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35816/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/35816/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35816/v1/model.glb\" alt=\"Fire Exit Module (Art Gallery and Exhibition Rooms)\" 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/35816/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/35816/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35819","slug":"art-gallery-and-exhibition-rooms-movable-partition-wal-1b35e01f","title":"Movable Partition Wall (Art Gallery and Exhibition Rooms)","summary":"A 1.8 m by 2.4 m movable partition on two cast feet: a white faced panel in a dark edge frame, the wall a curator adds across a room for one show.","description":"A 1.8 m by 2.4 m movable partition on two cast feet: a white faced panel in a dark edge frame, the wall a curator adds across a room for one show. Overall 1.80 by 2.39 by 0.62 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Freestanding, so it needs no host wall and carries no ports: it is placed where a plan wants it and moved when the show changes. The feet run across the panel, so a row of partitions stands 1.8 m apart on centres with a 20 mm joint. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-movable-partition-wal-1b35e01f","cdnUrl":"https://cdn.3dassets.dev/assets/35819/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-movable-partition-wal-1b35e01f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35819/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35819/v1/poster.webp","blurhash":"UGE{kOxu00IUxu%MaeD%00WB~qoLkCWBaeoL","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":14876,"triangles":648,"vertices":558,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.9000480308877279,-1.7881394143159923e-9,-0.31002824346127755],"max":[0.9000480308877279,2.390000104904175,0.31002824346127755]},"sizeMeters":[1.8,2.39,0.62],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:03.810Z","updatedAt":"2026-09-11T18:04:03.923Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35819/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function MovablePartitionWallArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35819/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35819/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35819/v1/model.glb\" alt=\"Movable Partition Wall (Art Gallery and Exhibition Rooms)\" 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/35819/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/35819/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35820","slug":"art-gallery-and-exhibition-rooms-gallery-floor-tile-8d6d082b","title":"Gallery Floor Tile (Art Gallery and Exhibition Rooms)","summary":"A 2 m square of boarded gallery floor: an oak slab with four proud joint lines running along Z, the tile every room in this pack stands on.","description":"A 2 m square of boarded gallery floor: an oak slab with four proud joint lines running along Z, the tile every room in this pack stands on. Overall 2.00 by 0.07 by 2.00 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Tiles on the 2 m floor grid through floor-north, floor-south, floor-east and floor-west, so a floor of any shape is this one tile repeated. The boards run along Z, so a change of direction is a tile rotated 90 degrees. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-gallery-floor-tile-8d6d082b","cdnUrl":"https://cdn.3dassets.dev/assets/35820/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-gallery-floor-tile-8d6d082b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35820/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35820/v1/poster.webp","blurhash":"U8DJ03-:00WF%Mf6R*of00IU~VWA9GkCo3Rj","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"}],"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":6164,"triangles":156,"vertices":204,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.000030213659657350733,-1],"max":[1,0.06602133161786225,1]},"sizeMeters":[2,0.066,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:03.825Z","updatedAt":"2026-09-11T18:04:03.938Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35820/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GalleryFloorTileArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35820/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35820/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35820/v1/model.glb\" alt=\"Gallery Floor Tile (Art Gallery and Exhibition Rooms)\" 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/35820/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/35820/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35821","slug":"art-gallery-and-exhibition-rooms-gallery-floor-tile-po-6f8dcb2f","title":"Gallery Floor Tile Poured (Art Gallery and Exhibition Rooms)","summary":"The floor tile as a poured resin screed with two saw cut joints, for the sculpture room or the service side where a boarded floor would read as domestic.","description":"The floor tile as a poured resin screed with two saw cut joints, for the sculpture room or the service side where a boarded floor would read as domestic. Overall 2.00 by 0.07 by 2.00 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-gallery-floor-tile-po-6f8dcb2f","cdnUrl":"https://cdn.3dassets.dev/assets/35821/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-gallery-floor-tile-po-6f8dcb2f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35821/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35821/v1/poster.webp","blurhash":"U7DJO|-;00Rj-;ayRjof00IU~qWB4nofofRj","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"}],"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":5164,"triangles":132,"vertices":148,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.000030213659657350733,-1],"max":[1,0.06602133161786225,1]},"sizeMeters":[2,0.066,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:04.101Z","updatedAt":"2026-09-11T18:04:04.206Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35821/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GalleryFloorTilePouredArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35821/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35821/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35821/v1/model.glb\" alt=\"Gallery Floor Tile Poured (Art Gallery and Exhibition Rooms)\" 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/35821/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/35821/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35822","slug":"art-gallery-and-exhibition-rooms-skirting-run-1bf36e91","title":"Skirting Run (Art Gallery and Exhibition Rooms)","summary":"A 2 m run of gallery skirting: a dark 120 mm board with a white bead on top, the trim that takes the scuffs where a wall meets a floor.","description":"A 2 m run of gallery skirting: a dark 120 mm board with a white bead on top, the trim that takes the scuffs where a wall meets a floor. Overall 2.00 by 0.14 by 0.03 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Tiles on the 2 m grid through skirt-left and skirt-right and is only 26 mm deep, so it stands against a wall module face rather than inside it. Placed at the wall face, not at its centre line. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-skirting-run-1bf36e91","cdnUrl":"https://cdn.3dassets.dev/assets/35822/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-skirting-run-1bf36e91","thumbnailUrl":"https://cdn.3dassets.dev/assets/35822/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35822/v1/poster.webp","blurhash":"U48E6%ofD%t7_3~qR*Rj00?b_3M{0000?b-;","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"}],"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":4540,"triangles":120,"vertices":123,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.00006164671858928383,-0.01696829126865444],"max":[1,0.13605688885604672,0.01696829126865444]},"sizeMeters":[2,0.136,0.034],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:04.143Z","updatedAt":"2026-09-11T18:04:04.333Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35822/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SkirtingRunArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35822/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35822/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35822/v1/model.glb\" alt=\"Skirting Run (Art Gallery and Exhibition Rooms)\" 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/35822/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/35822/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35823","slug":"art-gallery-and-exhibition-rooms-lighting-track-sectio-c570a9a8","title":"Lighting Track Section (Art Gallery and Exhibition Rooms)","summary":"A 2 m section of three circuit lighting track: a dark extrusion with a steel spine and two drop rods to a ceiling plate 500 mm above it, the rail every spot in this pack clamps to.","description":"A 2 m section of three circuit lighting track: a dark extrusion with a steel spine and two drop rods to a ceiling plate 500 mm above it, the rail every spot in this pack clamps to. Overall 2.00 by 0.51 by 0.09 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Origin at the underside of the track with the geometry rising to the ceiling plates 514 mm above it, so the model is placed at ceiling height minus 0.514 rather than at the ceiling itself. Tiles through track-left and track-right, so a run of any length is this section repeated. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-lighting-track-sectio-c570a9a8","cdnUrl":"https://cdn.3dassets.dev/assets/35823/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-lighting-track-sectio-c570a9a8","thumbnailUrl":"https://cdn.3dassets.dev/assets/35823/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35823/v1/poster.webp","blurhash":"U27BG%t89F%ME1~q?bD%00bY_4ai~q0000?c","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"}],"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":10284,"triangles":256,"vertices":424,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.000025177584053185514,-0.04499648980677872],"max":[1,0.51394066876438,0.04499648980677872]},"sizeMeters":[2,0.514,0.09],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:06.631Z","updatedAt":"2026-09-11T18:04:06.731Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35823/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LightingTrackSectionArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35823/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35823/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35823/v1/model.glb\" alt=\"Lighting Track Section (Art Gallery and Exhibition Rooms)\" 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/35823/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/35823/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35824","slug":"art-gallery-and-exhibition-rooms-track-spot-head-44353656","title":"Track Spot Head (Art Gallery and Exhibition Rooms)","summary":"A track mounted spotlight: a shoulder clamp, a knuckle and a barrel with a baffled emissive lens, the head a gallery aims at one work.","description":"A track mounted spotlight: a shoulder clamp, a knuckle and a barrel with a baffled emissive lens, the head a gallery aims at one work. Overall 0.11 by 0.21 by 0.11 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Origin at the lens with the clamp top 210 mm above it, so the head is placed at track underside minus 0.21 and reads as clamped to the rail. It is static: a spot aimed once stays aimed, and the beam is not geometry, so nothing here can carry it. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-track-spot-head-44353656","cdnUrl":"https://cdn.3dassets.dev/assets/35824/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-track-spot-head-44353656","thumbnailUrl":"https://cdn.3dassets.dev/assets/35824/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35824/v1/poster.webp","blurhash":"U05#qt_N0000oJV@8_tR00M{~q%3_3tRR*Mx","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":13376,"triangles":312,"vertices":541,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.05500747531740674,0,-0.054161502261144634],"max":[0.05500747531740674,0.20999999344348907,0.054161502261144634]},"sizeMeters":[0.11,0.21,0.108],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:06.647Z","updatedAt":"2026-09-11T18:04:06.758Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35824/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TrackSpotHeadArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35824/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35824/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35824/v1/model.glb\" alt=\"Track Spot Head (Art Gallery and Exhibition Rooms)\" 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/35824/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/35824/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35825","slug":"art-gallery-and-exhibition-rooms-picture-light-7ad62720","title":"Picture Light (Art Gallery and Exhibition Rooms)","summary":"A 500 mm picture light on a swan bracket: a wall plate, an arm and a half round shade with an emissive strip under it, the lamp hung over one framed work.","description":"A 500 mm picture light on a swan bracket: a wall plate, an arm and a half round shade with an emissive strip under it, the lamp hung over one framed work. Overall 0.50 by 0.24 by 0.27 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Origin at the bottom of the wall plate with the plate face on the wall at z=0, so the lamp is placed at the wall face and at the height its plate should sit. The emissive strip is geometry, not a light source, and the beam it would throw is not modelled. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-picture-light-7ad62720","cdnUrl":"https://cdn.3dassets.dev/assets/35825/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-picture-light-7ad62720","thumbnailUrl":"https://cdn.3dassets.dev/assets/35825/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35825/v1/poster.webp","blurhash":"U45#ke_39FWE_4-;j?Rj00M{?caw009Ft8xt","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":9812,"triangles":284,"vertices":330,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.25,-0.000006410377106108589,-0.022005737420176835],"max":[0.25,0.24000640739687382,0.25000573753938615]},"sizeMeters":[0.5,0.24,0.272],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:06.959Z","updatedAt":"2026-09-11T18:04:07.071Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35825/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PictureLightArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35825/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35825/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35825/v1/model.glb\" alt=\"Picture Light (Art Gallery and Exhibition Rooms)\" 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/35825/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/35825/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35826","slug":"art-gallery-and-exhibition-rooms-gallery-bench-83e0e89e","title":"Gallery Bench (Art Gallery and Exhibition Rooms)","summary":"A 1.56 m backless gallery bench: five oak slats on two cast ends with a tie rail, the seat that goes in the middle of a hung room.","description":"A 1.56 m backless gallery bench: five oak slats on two cast ends with a tie rail, the seat that goes in the middle of a hung room. Overall 1.56 by 0.47 by 0.46 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-gallery-bench-83e0e89e","cdnUrl":"https://cdn.3dassets.dev/assets/35826/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-gallery-bench-83e0e89e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35826/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35826/v1/poster.webp","blurhash":"UCCPqxt6D+t7~V?aIUIU00%K%1IV01M{?as:","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":19300,"triangles":792,"vertices":738,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.7799999713897705,-0.00003288785709025521,-0.23004319125595252],"max":[0.7799999713897705,0.464971383304749,0.23004319125595252]},"sizeMeters":[1.56,0.465,0.46],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:06.979Z","updatedAt":"2026-09-11T18:04:07.087Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35826/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GalleryBenchArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35826/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35826/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35826/v1/model.glb\" alt=\"Gallery Bench (Art Gallery and Exhibition Rooms)\" 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/35826/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/35826/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35827","slug":"art-gallery-and-exhibition-rooms-gallery-bench-backed-108d0a9e","title":"Gallery Bench Backed (Art Gallery and Exhibition Rooms)","summary":"The gallery bench with a three slat back, for the wall side of a room where a visitor sits facing one work rather than facing both ways.","description":"The gallery bench with a three slat back, for the wall side of a room where a visitor sits facing one work rather than facing both ways. Overall 1.56 by 0.86 by 0.46 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-gallery-bench-backed-108d0a9e","cdnUrl":"https://cdn.3dassets.dev/assets/35827/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-gallery-bench-backed-108d0a9e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35827/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35827/v1/poster.webp","blurhash":"UHEyC}M|0Lt7~U-pE1IU01%0%1M|0MkD%2Rj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":30160,"triangles":1332,"vertices":1208,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.7799999713897705,-0.00003288785709025521,-0.23004319125595252],"max":[0.7799999713897705,0.8649694729144402,0.23004319125595252]},"sizeMeters":[1.56,0.865,0.46],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:09.570Z","updatedAt":"2026-09-11T18:04:09.693Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35827/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GalleryBenchBackedArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35827/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35827/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35827/v1/model.glb\" alt=\"Gallery Bench Backed (Art Gallery and Exhibition Rooms)\" 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/35827/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/35827/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35828","slug":"art-gallery-and-exhibition-rooms-gallery-bench-blue-ec6ae78a","title":"Gallery Bench Blue (Art Gallery and Exhibition Rooms)","summary":"The gallery bench with painted blue slats, so a white room has one strong block of colour in the middle of its floor.","description":"The gallery bench with painted blue slats, so a white room has one strong block of colour in the middle of its floor. Overall 1.56 by 0.47 by 0.46 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-gallery-bench-blue-ec6ae78a","cdnUrl":"https://cdn.3dassets.dev/assets/35828/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-gallery-bench-blue-ec6ae78a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35828/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35828/v1/poster.webp","blurhash":"UC8#Z[ozVXt8yZ%hR5M_4TXUkrRNHqRO%#of","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":19344,"triangles":792,"vertices":738,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.7799999713897705,-0.00003288785709025521,-0.23004319125595252],"max":[0.7799999713897705,0.464971383304749,0.23004319125595252]},"sizeMeters":[1.56,0.465,0.46],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:09.585Z","updatedAt":"2026-09-11T18:04:09.708Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35828/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GalleryBenchBlueArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35828/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35828/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35828/v1/model.glb\" alt=\"Gallery Bench Blue (Art Gallery and Exhibition Rooms)\" 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/35828/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/35828/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35830","slug":"art-gallery-and-exhibition-rooms-rope-barrier-post-c6fb6eb9","title":"Rope Barrier Post (Art Gallery and Exhibition Rooms)","summary":"A rope barrier post with a 1.5 m rope: a weighted base, a polished column, a ball head and a sagging red rope reaching the next post along +X.","description":"A rope barrier post with a 1.5 m rope: a weighted base, a polished column, a ball head and a sagging red rope reaching the next post along +X. Overall 1.67 by 0.99 by 0.34 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The rope runs from this post to a point 1.5 m along +X, so posts stand at 1.5 m centres and the last rope in a run ends at a wall eye. The rope is rigid geometry frozen in its hanging curve: this library has no skinning, so a rope cannot swing and pretending otherwise would cost a consumer a clip that reads as broken. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-rope-barrier-post-c6fb6eb9","cdnUrl":"https://cdn.3dassets.dev/assets/35830/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-rope-barrier-post-c6fb6eb9","thumbnailUrl":"https://cdn.3dassets.dev/assets/35830/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35830/v1/poster.webp","blurhash":"UB9G8gtl5lM{}[t7EfNG5Q$ixZJ80}%2=yRk","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":21596,"triangles":472,"vertices":996,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.17000000178813934,-0.000007995564691675588,-0.16827753709519636],"max":[1.504026174545288,0.9879999756813049,0.16827753709519636]},"sizeMeters":[1.674,0.988,0.337],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:09.905Z","updatedAt":"2026-09-11T18:04:10.109Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35830/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function RopeBarrierPostArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35830/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35830/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35830/v1/model.glb\" alt=\"Rope Barrier Post (Art Gallery and Exhibition Rooms)\" 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/35830/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/35830/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35829","slug":"art-gallery-and-exhibition-rooms-retractable-belt-stan-858bab82","title":"Retractable Belt Stanchion (Art Gallery and Exhibition Rooms)","summary":"A retractable belt stanchion: a weighted base, a post with a cassette head and a 1.2 m red belt drawn out along +X to the next post.","description":"A retractable belt stanchion: a weighted base, a post with a cassette head and a 1.2 m red belt drawn out along +X to the next post. Overall 1.38 by 1.09 by 0.32 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The belt is drawn out 1.2 m along +X to a clip, so stanchions stand at 1.2 m centres and the last belt in a run ends at a wall receiver. Nothing retracts: the belt is rigid geometry in its drawn out state, because a spooling webbing strap is not a rigid node transform. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-retractable-belt-stan-858bab82","cdnUrl":"https://cdn.3dassets.dev/assets/35829/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-retractable-belt-stan-858bab82","thumbnailUrl":"https://cdn.3dassets.dev/assets/35829/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35829/v1/poster.webp","blurhash":"U97^V-o}0yVs}[bF9ujaIos.xZI:5l%M={9t","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":14528,"triangles":392,"vertices":579,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.1599999964237213,-0.000009820297249940602,-0.15831979976151647],"max":[1.2174999713897705,1.090000033378601,0.15831979976151647]},"sizeMeters":[1.377,1.09,0.317],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:09.801Z","updatedAt":"2026-09-11T18:04:09.905Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35829/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function RetractableBeltStanchionArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35829/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35829/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35829/v1/model.glb\" alt=\"Retractable Belt Stanchion (Art Gallery and Exhibition Rooms)\" 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/35829/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/35829/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35831","slug":"art-gallery-and-exhibition-rooms-air-grille-e7b01242","title":"Air Grille (Art Gallery and Exhibition Rooms)","summary":"A 600 mm by 300 mm supply grille: a dark frame with nine steel blades, the vent a sealed hung room needs high on a wall.","description":"A 600 mm by 300 mm supply grille: a dark frame with nine steel blades, the vent a sealed hung room needs high on a wall. Overall 0.60 by 0.30 by 0.03 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Origin at the bottom of the frame with the back face at z=0 and the blades proud of it, so it is placed on a wall face at the height it should sit. Static: the blades are fixed and the damper behind them is not modelled. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-air-grille-e7b01242","cdnUrl":"https://cdn.3dassets.dev/assets/35831/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-air-grille-e7b01242","thumbnailUrl":"https://cdn.3dassets.dev/assets/35831/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35831/v1/poster.webp","blurhash":"U48z[a-;9E%g?b_Nj@M{00t7-;M{jst7xuoe","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":8840,"triangles":216,"vertices":346,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.30000001192092896,-0.00002289186324880288,-0.000015107426475407387],"max":[0.30000001192092896,0.30002289782371316,0.033997437308396085]},"sizeMeters":[0.6,0.3,0.034],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:12.329Z","updatedAt":"2026-09-11T18:04:12.440Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35831/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function AirGrilleArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35831/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35831/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35831/v1/model.glb\" alt=\"Air Grille (Art Gallery and Exhibition Rooms)\" 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/35831/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/35831/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35832","slug":"art-gallery-and-exhibition-rooms-gallery-bin-46c5aca6","title":"Gallery Bin (Art Gallery and Exhibition Rooms)","summary":"A 0.7 m gallery waste bin: a dark drum on a recessed plinth with a steel top ring and an open aperture, the one piece of housekeeping a public room shows.","description":"A 0.7 m gallery waste bin: a dark drum on a recessed plinth with a steel top ring and an open aperture, the one piece of housekeeping a public room shows. Overall 0.44 by 0.69 by 0.44 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-gallery-bin-46c5aca6","cdnUrl":"https://cdn.3dassets.dev/assets/35832/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-gallery-bin-46c5aca6","thumbnailUrl":"https://cdn.3dassets.dev/assets/35832/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35832/v1/poster.webp","blurhash":"UF9@YQ%N00IT_Nay9Eof%NRjD%oft8j[Riay","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":17668,"triangles":384,"vertices":836,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.2199999988079071,0,-0.2199999988079071],"max":[0.2199999988079071,0.6899984703356976,0.2199999988079071]},"sizeMeters":[0.44,0.69,0.44],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":1,"publishedAt":"2026-09-11T18:04:12.395Z","updatedAt":"2026-09-11T19:12:52.810Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35832/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GalleryBinArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35832/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35832/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35832/v1/model.glb\" alt=\"Gallery Bin (Art Gallery and Exhibition Rooms)\" 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/35832/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/35832/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35833","slug":"art-gallery-and-exhibition-rooms-framed-canvas-8bc16ce3","title":"Framed Canvas (Art Gallery and Exhibition Rooms)","summary":"A 0.9 m by 0.7 m framed canvas in a dark moulding: a plain ground with an abstract composition of three colour blocks, a placeholder for a consumer's own artwork.","description":"A 0.9 m by 0.7 m framed canvas in a dark moulding: a plain ground with an abstract composition of three colour blocks, a placeholder for a consumer's own artwork. Overall 0.90 by 0.70 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Back face at z=0, so it hangs on a wall face at the height its bottom rail should sit, eye line about 1.45 m to the centre. The painted face is an abstract composition of colour blocks, not a reproduction of any existing work, and it is meant to be swapped for the consumer's own texture or geometry. Static: a hung picture does not move, and the wire behind it is not modelled. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-framed-canvas-8bc16ce3","cdnUrl":"https://cdn.3dassets.dev/assets/35833/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-framed-canvas-8bc16ce3","thumbnailUrl":"https://cdn.3dassets.dev/assets/35833/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35833/v1/poster.webp","blurhash":"UFDvNC-T00Fzxt-;jc9G00OY~W#QjGM|X5%M","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":18532,"triangles":864,"vertices":746,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.44999998807907104,-0.00002135983096268612,0.000006409346272662209],"max":[0.44999998807907104,0.7000213475375046,0.05999358998317511]},"sizeMeters":[0.9,0.7,0.06],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:12.735Z","updatedAt":"2026-09-11T18:04:12.842Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35833/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FramedCanvasArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35833/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35833/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35833/v1/model.glb\" alt=\"Framed Canvas (Art Gallery and Exhibition Rooms)\" 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/35833/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/35833/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35834","slug":"art-gallery-and-exhibition-rooms-framed-canvas-large-ea42e95d","title":"Framed Canvas Large (Art Gallery and Exhibition Rooms)","summary":"The framed canvas at 1.6 m by 1.2 m, the size a hung room puts on the wall a visitor sees first, with the same abstract block composition.","description":"The framed canvas at 1.6 m by 1.2 m, the size a hung room puts on the wall a visitor sees first, with the same abstract block composition. Overall 1.60 by 1.20 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Back face at z=0, so it hangs on a wall face at the height its bottom rail should sit, eye line about 1.45 m to the centre. The painted face is an abstract composition of colour blocks, not a reproduction of any existing work, and it is meant to be swapped for the consumer's own texture or geometry. Static: a hung picture does not move, and the wire behind it is not modelled. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-framed-canvas-large-ea42e95d","cdnUrl":"https://cdn.3dassets.dev/assets/35834/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-framed-canvas-large-ea42e95d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35834/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35834/v1/poster.webp","blurhash":"UFEoup-900F|xu-;jc9F00OY~W#7afM|W-%M","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":18604,"triangles":864,"vertices":748,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.800000011920929,0.00003052149016280481,0.000018615508746811643],"max":[0.800000011920929,1.1999695023516948,0.059981383820700965]},"sizeMeters":[1.6,1.2,0.06],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:12.805Z","updatedAt":"2026-09-11T18:04:12.903Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35834/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FramedCanvasLargeArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35834/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35834/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35834/v1/model.glb\" alt=\"Framed Canvas Large (Art Gallery and Exhibition Rooms)\" 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/35834/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/35834/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35835","slug":"art-gallery-and-exhibition-rooms-framed-canvas-tall-30a5b9cb","title":"Framed Canvas Tall (Art Gallery and Exhibition Rooms)","summary":"The framed canvas in portrait at 0.7 m by 1.35 m, for the narrow pier between two openings, with the same abstract block composition.","description":"The framed canvas in portrait at 0.7 m by 1.35 m, for the narrow pier between two openings, with the same abstract block composition. Overall 0.70 by 1.35 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Back face at z=0, so it hangs on a wall face at the height its bottom rail should sit, eye line about 1.45 m to the centre. The painted face is an abstract composition of colour blocks, not a reproduction of any existing work, and it is meant to be swapped for the consumer's own texture or geometry. Static: a hung picture does not move, and the wire behind it is not modelled. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-framed-canvas-tall-30a5b9cb","cdnUrl":"https://cdn.3dassets.dev/assets/35835/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-framed-canvas-tall-30a5b9cb","thumbnailUrl":"https://cdn.3dassets.dev/assets/35835/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35835/v1/poster.webp","blurhash":"U8BDH9%1005RtktQVtIB0KS4~D$3#mjZOYbu","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":18620,"triangles":864,"vertices":748,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.34999390556977683,-1.1920929132713809e-8,0.0000064077571550226475],"max":[0.34999390556977683,1.350000023841858,0.059993591572292754]},"sizeMeters":[0.7,1.35,0.06],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:15.103Z","updatedAt":"2026-09-11T18:04:15.203Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35835/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FramedCanvasTallArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35835/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35835/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35835/v1/model.glb\" alt=\"Framed Canvas Tall (Art Gallery and Exhibition Rooms)\" 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/35835/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/35835/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35836","slug":"art-gallery-and-exhibition-rooms-framed-canvas-panoram-3b72b2a4","title":"Framed Canvas Panorama (Art Gallery and Exhibition Rooms)","summary":"The framed canvas as a 2.2 m by 0.66 m panorama, for a long wall or the space over a bench, with the same abstract block composition.","description":"The framed canvas as a 2.2 m by 0.66 m panorama, for a long wall or the space over a bench, with the same abstract block composition. Overall 2.20 by 0.66 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Back face at z=0, so it hangs on a wall face at the height its bottom rail should sit, eye line about 1.45 m to the centre. The painted face is an abstract composition of colour blocks, not a reproduction of any existing work, and it is meant to be swapped for the consumer's own texture or geometry. Static: a hung picture does not move, and the wire behind it is not modelled. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-framed-canvas-panoram-3b72b2a4","cdnUrl":"https://cdn.3dassets.dev/assets/35836/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-framed-canvas-panoram-3b72b2a4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35836/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35836/v1/poster.webp","blurhash":"UBC?ZS-79FTf%2~qt7Io00TK~WvzI@00bF?a","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":21864,"triangles":864,"vertices":753,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-1.100000023841858,0.00003692680121991643,0.0000552375178402148],"max":[1.100000023841858,0.659963086311802,0.05994476181160756]},"sizeMeters":[2.2,0.66,0.06],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:15.126Z","updatedAt":"2026-09-11T18:04:15.331Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35836/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FramedCanvasPanoramaArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35836/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35836/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35836/v1/model.glb\" alt=\"Framed Canvas Panorama (Art Gallery and Exhibition Rooms)\" 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/35836/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/35836/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35838","slug":"art-gallery-and-exhibition-rooms-framed-canvas-cool-6183845a","title":"Framed Canvas Cool (Art Gallery and Exhibition Rooms)","summary":"The framed canvas in the cool palette, so a wall of several works reads as a hang rather than as one picture repeated.","description":"The framed canvas in the cool palette, so a wall of several works reads as a hang rather than as one picture repeated. Overall 0.90 by 0.70 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Back face at z=0, so it hangs on a wall face at the height its bottom rail should sit, eye line about 1.45 m to the centre. The painted face is an abstract composition of colour blocks, not a reproduction of any existing work, and it is meant to be swapped for the consumer's own texture or geometry. Static: a hung picture does not move, and the wire behind it is not modelled. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-framed-canvas-cool-6183845a","cdnUrl":"https://cdn.3dassets.dev/assets/35838/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-framed-canvas-cool-6183845a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35838/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35838/v1/poster.webp","blurhash":"UECGuw%L00N2tQ%gn,IA00Rn_Nt1nUniS0S~","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":19364,"triangles":864,"vertices":749,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.44999998807907104,-0.00002135983096268612,0.000006409346272662209],"max":[0.44999998807907104,0.7000213475375046,0.05999358998317511]},"sizeMeters":[0.9,0.7,0.06],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:15.641Z","updatedAt":"2026-09-11T18:04:15.840Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35838/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FramedCanvasCoolArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35838/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35838/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35838/v1/model.glb\" alt=\"Framed Canvas Cool (Art Gallery and Exhibition Rooms)\" 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/35838/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/35838/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35837","slug":"art-gallery-and-exhibition-rooms-stretched-canvas-11aa1dd4","title":"Stretched Canvas (Art Gallery and Exhibition Rooms)","summary":"A 1 m by 0.8 m unframed stretched canvas: linen returns on a 45 mm stretcher with an abstract block composition carried round nothing, edges left plain.","description":"A 1 m by 0.8 m unframed stretched canvas: linen returns on a 45 mm stretcher with an abstract block composition carried round nothing, edges left plain. Overall 1.00 by 0.80 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Back face at z=0, so it hangs on a wall face at the height its bottom edge should sit. The painted face is an abstract block composition, a placeholder for the consumer's own artwork, and the returns are left as plain linen. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-stretched-canvas-11aa1dd4","cdnUrl":"https://cdn.3dassets.dev/assets/35837/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-stretched-canvas-11aa1dd4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35837/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35837/v1/poster.webp","blurhash":"UEIEz@^k00Tz-:~qt84o00JA-Wvfn%t7M{Mx","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":10740,"triangles":432,"vertices":377,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.5,-0.00002135997640101417,-0.000022659546251083823],"max":[0.5,0.8000213659368653,0.05850949127807002]},"sizeMeters":[1,0.8,0.059],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:15.534Z","updatedAt":"2026-09-11T18:04:15.652Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35837/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StretchedCanvasArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35837/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35837/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35837/v1/model.glb\" alt=\"Stretched Canvas (Art Gallery and Exhibition Rooms)\" 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/35837/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/35837/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35839","slug":"art-gallery-and-exhibition-rooms-diptych-panel-pair-990f98b4","title":"Diptych Panel Pair (Art Gallery and Exhibition Rooms)","summary":"A diptych: two 0.6 m by 0.9 m framed panels hung 80 mm apart as one work, with a shared abstract composition split across the gap.","description":"A diptych: two 0.6 m by 0.9 m framed panels hung 80 mm apart as one work, with a shared abstract composition split across the gap. Overall 1.28 by 0.90 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. One model, so the pair keeps its 80 mm gap wherever it is placed; back faces at z=0. Both panels are abstract block compositions and neither reproduces any existing work. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-diptych-panel-pair-990f98b4","cdnUrl":"https://cdn.3dassets.dev/assets/35839/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-diptych-panel-pair-990f98b4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35839/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35839/v1/poster.webp","blurhash":"U9C%BS^400Kj-:?bs:4n00KO_Nv#RmNFNHxv","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":36600,"triangles":1728,"vertices":1501,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.6399999856948853,0.000025328313389194612,-9.152199876745482e-7],"max":[0.6399999856948853,0.8999746474722238,0.060000914549435444]},"sizeMeters":[1.28,0.9,0.06],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:17.984Z","updatedAt":"2026-09-11T18:04:18.101Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35839/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DiptychPanelPairArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35839/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35839/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35839/v1/model.glb\" alt=\"Diptych Panel Pair (Art Gallery and Exhibition Rooms)\" 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/35839/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/35839/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35840","slug":"art-gallery-and-exhibition-rooms-picture-rail-section-a4fd475a","title":"Picture Rail Section (Art Gallery and Exhibition Rooms)","summary":"A 2 m section of picture rail with two hanging wires: a dark rail, steel wires dropping 940 mm and sliding hooks on their ends, the system a gallery rehangs a room with.","description":"A 2 m section of picture rail with two hanging wires: a dark rail, steel wires dropping 940 mm and sliding hooks on their ends, the system a gallery rehangs a room with. Overall 2.00 by 1.04 by 0.04 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Origin at the bottom of the hooks with the rail 1 m above them, so the section is placed at rail height minus 1.0 and the hooks land at the top of a picture. Tiles through rail-left and rail-right, so a run of any length is this section repeated. Static: the wires are rigid geometry, because a hanging cable is not a rigid node transform. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-picture-rail-section-a4fd475a","cdnUrl":"https://cdn.3dassets.dev/assets/35840/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-picture-rail-section-a4fd475a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35840/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35840/v1/poster.webp","blurhash":"U35E${fl9Eo3_4xvM_RPIV%goyRiIU-=xvIn","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"}],"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":15360,"triangles":604,"vertices":610,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1,5.066395081243513e-10,-0.01599169896542253],"max":[1,1.0449616015166618,0.023024017976007595]},"sizeMeters":[2,1.045,0.039],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:18.002Z","updatedAt":"2026-09-11T18:04:18.117Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35840/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PictureRailSectionArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35840/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35840/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35840/v1/model.glb\" alt=\"Picture Rail Section (Art Gallery and Exhibition Rooms)\" 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/35840/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/35840/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35842","slug":"art-gallery-and-exhibition-rooms-display-plinth-58fbcf1d","title":"Display Plinth (Art Gallery and Exhibition Rooms)","summary":"A 0.5 m square display plinth 0.6 m high: a white box on a recessed dark shadow gap, the stand a small work sits on.","description":"A 0.5 m square display plinth 0.6 m high: a white box on a recessed dark shadow gap, the stand a small work sits on. Overall 0.51 by 0.60 by 0.51 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The shadow gap is 20 mm in on every side, so the plinth reads as floating rather than as a block on a floor. Top is flat and bare: what stands on it is the consumer's. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-display-plinth-58fbcf1d","cdnUrl":"https://cdn.3dassets.dev/assets/35842/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-display-plinth-58fbcf1d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35842/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35842/v1/poster.webp","blurhash":"UGJkl#?b00IU~qj[E1of00M{M{of-;ofM{WB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":7548,"triangles":432,"vertices":368,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.2540011367878751,3.3527614018424856e-10,-0.2540011367878751],"max":[0.2540011367878751,0.6000000238418579,0.2540011367878751]},"sizeMeters":[0.508,0.6,0.508],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:18.517Z","updatedAt":"2026-09-11T18:04:18.642Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35842/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DisplayPlinthArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35842/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35842/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35842/v1/model.glb\" alt=\"Display Plinth (Art Gallery and Exhibition Rooms)\" 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/35842/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/35842/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35841","slug":"art-gallery-and-exhibition-rooms-display-plinth-medium-c1c6d13a","title":"Display Plinth Medium (Art Gallery and Exhibition Rooms)","summary":"The display plinth at 0.9 m, the usual height for a small sculpture a visitor looks down into.","description":"The display plinth at 0.9 m, the usual height for a small sculpture a visitor looks down into. Overall 0.51 by 0.90 by 0.51 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-display-plinth-medium-c1c6d13a","cdnUrl":"https://cdn.3dassets.dev/assets/35841/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-display-plinth-medium-c1c6d13a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35841/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35841/v1/poster.webp","blurhash":"UBIOhG_3009F~qofD%of00IUofxu-;j[IUWB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":7592,"triangles":432,"vertices":368,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.2540143974272955,3.3527614018424856e-10,-0.2540143974272955],"max":[0.2540143974272955,0.8999999761581421,0.2540143974272955]},"sizeMeters":[0.508,0.9,0.508],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:18.500Z","updatedAt":"2026-09-11T18:04:18.620Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35841/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DisplayPlinthMediumArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35841/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35841/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35841/v1/model.glb\" alt=\"Display Plinth Medium (Art Gallery and Exhibition Rooms)\" 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/35841/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/35841/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35844","slug":"art-gallery-and-exhibition-rooms-display-plinth-tall-644a3810","title":"Display Plinth Tall (Art Gallery and Exhibition Rooms)","summary":"The display plinth at 1.2 m on a 0.4 m footprint, for a small work held at eye level.","description":"The display plinth at 1.2 m on a 0.4 m footprint, for a small work held at eye level. Overall 0.41 by 1.20 by 0.41 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-display-plinth-tall-644a3810","cdnUrl":"https://cdn.3dassets.dev/assets/35844/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-display-plinth-tall-644a3810","thumbnailUrl":"https://cdn.3dassets.dev/assets/35844/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35844/v1/poster.webp","blurhash":"U7GbxH_30000~qof9Fay00M{?bxu?bj[D%ae","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":10560,"triangles":432,"vertices":370,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.20397428197590495,3.3527614018424856e-10,-0.20397428197590495],"max":[0.20397428197590495,1.2000000476837158,0.20397428197590495]},"sizeMeters":[0.408,1.2,0.408],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:20.832Z","updatedAt":"2026-09-11T18:04:20.927Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35844/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DisplayPlinthTallArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35844/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35844/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35844/v1/model.glb\" alt=\"Display Plinth Tall (Art Gallery and Exhibition Rooms)\" 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/35844/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/35844/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35843","slug":"art-gallery-and-exhibition-rooms-abstract-sculpture-fo-7c2b2888","title":"Abstract Sculpture Form (Art Gallery and Exhibition Rooms)","summary":"A 0.69 m abstract sculpture form: a linen block, a steel block offset on top of it and a red drum leaning off the stack, placeholder geometry for a plinth top.","description":"A 0.69 m abstract sculpture form: a linen block, a steel block offset on top of it and a red drum leaning off the stack, placeholder geometry for a plinth top. Overall 0.28 by 0.69 by 0.26 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Deliberately abstract. It is not a figure, a likeness or a copy of any existing sculpture, and it exists so a plinth or a turntable in this pack is not photographed bare. Replace it with the work being shown. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-abstract-sculpture-fo-7c2b2888","cdnUrl":"https://cdn.3dassets.dev/assets/35843/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-abstract-sculpture-fo-7c2b2888","thumbnailUrl":"https://cdn.3dassets.dev/assets/35843/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35843/v1/poster.webp","blurhash":"UBDvAz=|000yD4n4yXO?DOofpIRj_Nx]D%Md","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":8564,"triangles":288,"vertices":341,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.1450000060722232,-5.9604645663569045e-9,-0.13000428034018516],"max":[0.13000428034018516,0.6899999976158142,0.13000428034018516]},"sizeMeters":[0.275,0.69,0.26],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:20.775Z","updatedAt":"2026-09-11T18:04:20.881Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35843/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function AbstractSculptureFormArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35843/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35843/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35843/v1/model.glb\" alt=\"Abstract Sculpture Form (Art Gallery and Exhibition Rooms)\" 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/35843/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/35843/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35845","slug":"art-gallery-and-exhibition-rooms-bust-pedestal-63a0efdf","title":"Bust Pedestal (Art Gallery and Exhibition Rooms)","summary":"A 1.1 m slim pedestal with a plain abstract head form on it: a tapered steel mass on a dark neck, placeholder geometry where a gallery would stand a portrait bust.","description":"A 1.1 m slim pedestal with a plain abstract head form on it: a tapered steel mass on a dark neck, placeholder geometry where a gallery would stand a portrait bust. Overall 0.36 by 1.48 by 0.36 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The form is a plain abstract mass with no features: it is not a likeness of any person and carries no detail that could read as one. Replace it with the work being shown. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-bust-pedestal-63a0efdf","cdnUrl":"https://cdn.3dassets.dev/assets/35845/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-bust-pedestal-63a0efdf","thumbnailUrl":"https://cdn.3dassets.dev/assets/35845/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35845/v1/poster.webp","blurhash":"UBC?r]-;004n4oWB?bt700M{~q%MxuofRjRj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":18292,"triangles":712,"vertices":702,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.17902997203105198,3.3527614018424856e-10,-0.17902997203105198],"max":[0.17902997203105198,1.4800000190734863,0.17902997203105198]},"sizeMeters":[0.358,1.48,0.358],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:21.287Z","updatedAt":"2026-09-11T18:04:21.387Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35845/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BustPedestalArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35845/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35845/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35845/v1/model.glb\" alt=\"Bust Pedestal (Art Gallery and Exhibition Rooms)\" 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/35845/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/35845/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35846","slug":"art-gallery-and-exhibition-rooms-vitrine-case-ca6b50af","title":"Vitrine Case (Art Gallery and Exhibition Rooms)","summary":"A 1.44 m vitrine: a white plinth carrying a glass box on dark corner posts with a lifting lid frame, the case a small or fragile work is shown in.","description":"A 1.44 m vitrine: a white plinth carrying a glass box on dark corner posts with a lifting lid frame, the case a small or fragile work is shown in. Overall 0.64 by 1.42 by 0.64 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The lid frame and its glass top lift on the back edge as one node, so a consumer can open the case; the box, the posts and the plinth are fixed. The two forms inside are abstract placeholder blocks, not a copy of any existing object. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-vitrine-case-ca6b50af","cdnUrl":"https://cdn.3dassets.dev/assets/35846/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-vitrine-case-ca6b50af","thumbnailUrl":"https://cdn.3dassets.dev/assets/35846/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35846/v1/poster.webp","blurhash":"U9DS?%_3000K00My_3xu00IU?bxu~W%MM{In","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":31812,"triangles":1356,"vertices":1256,"meshes":7,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.32001495288613335,3.3527614018424856e-10,-0.32001495288613335],"max":[0.32001495288613335,1.4200005866028238,0.32001495288613335]},"sizeMeters":[0.64,1.42,0.64],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:21.343Z","updatedAt":"2026-09-11T18:04:21.451Z","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/35846/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 VitrineCaseArtGalleryAndExhibitionRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35846/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/35846/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35846/v1/model.glb\" alt=\"Vitrine Case (Art Gallery and Exhibition Rooms)\" 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/35846/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/35846/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35847","slug":"art-gallery-and-exhibition-rooms-wall-display-case-6f548ac4","title":"Wall Display Case (Art Gallery and Exhibition Rooms)","summary":"A 1.2 m by 0.7 m wall mounted display case: a dark carcass with two white shelves, small abstract blocks on them and a glass front.","description":"A 1.2 m by 0.7 m wall mounted display case: a dark carcass with two white shelves, small abstract blocks on them and a glass front. Overall 1.20 by 0.70 by 0.20 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Origin at the bottom of the carcass with the back face at z=0, so it is placed on a wall face at the height it should hang. The blocks on the shelves are abstract placeholders. Static: the glass front is fixed, because a case opened by a key is opened once a year. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-wall-display-case-6f548ac4","cdnUrl":"https://cdn.3dassets.dev/assets/35847/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-wall-display-case-6f548ac4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35847/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35847/v1/poster.webp","blurhash":"U8BzIN?b00o}-;^,t7D%00Ip~pr=IUIVWB-n","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":20916,"triangles":900,"vertices":826,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,0.0000015058412526913756,0.000021359728897149544],"max":[0.6000000238418579,0.6999984818056847,0.19997864176121893]},"sizeMeters":[1.2,0.7,0.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:23.731Z","updatedAt":"2026-09-11T18:04:23.851Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35847/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WallDisplayCaseArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35847/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35847/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35847/v1/model.glb\" alt=\"Wall Display Case (Art Gallery and Exhibition Rooms)\" 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/35847/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/35847/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35848","slug":"art-gallery-and-exhibition-rooms-sculpture-turntable-s-ae754a55","title":"Sculpture Turntable Stand (Art Gallery and Exhibition Rooms)","summary":"A 0.75 m sculpture stand with a powered turntable: a white plinth, a steel deck ring and a turning platter carrying an abstract form.","description":"A 0.75 m sculpture stand with a powered turntable: a white plinth, a steel deck ring and a turning platter carrying an abstract form. Overall 0.71 by 1.47 by 0.71 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The platter and whatever stands on it turn as one node about the stand centre; the plinth and the deck ring are fixed. The form on it is abstract placeholder geometry: replace it and keep the node name to keep the clip. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-sculpture-turntable-s-ae754a55","cdnUrl":"https://cdn.3dassets.dev/assets/35848/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-sculpture-turntable-s-ae754a55","thumbnailUrl":"https://cdn.3dassets.dev/assets/35848/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35848/v1/poster.webp","blurhash":"UADSzV-;004.00V@?vo}00Rj_NtR_3t7IARj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":29872,"triangles":944,"vertices":1199,"meshes":5,"materials":5,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.3540000021457672,3.3527614018424856e-10,-0.3540000021457672],"max":[0.3540000021457672,1.4700000286102295,0.3540000021457672]},"sizeMeters":[0.708,1.47,0.708],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:23.752Z","updatedAt":"2026-09-11T18:04:23.867Z","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/35848/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 SculptureTurntableStandArtGalleryAndExhibitionRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35848/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/35848/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35848/v1/model.glb\" alt=\"Sculpture Turntable Stand (Art Gallery and Exhibition Rooms)\" 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/35848/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/35848/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35850","slug":"art-gallery-and-exhibition-rooms-wall-text-panel-c987f386","title":"Wall Text Panel (Art Gallery and Exhibition Rooms)","summary":"A 1.1 m by 0.85 m wall text panel: a white board with a coloured header band and six plain grey bars standing in for body text, carrying no readable characters.","description":"A 1.1 m by 0.85 m wall text panel: a white board with a coloured header band and six plain grey bars standing in for body text, carrying no readable characters. Overall 1.10 by 0.85 by 0.03 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Back face at z=0, so it is placed on a wall face at the height its bottom edge should sit, usually 0.9 m. The bars are bars: there is no lettering anywhere on this model, so nothing has to be localised or removed. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-wall-text-panel-c987f386","cdnUrl":"https://cdn.3dassets.dev/assets/35850/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-wall-text-panel-c987f386","thumbnailUrl":"https://cdn.3dassets.dev/assets/35850/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35850/v1/poster.webp","blurhash":"UFHe%wtR00%MtT~qxZD$00f,x]RPxVtRNJIA","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":19936,"triangles":864,"vertices":743,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.550000011920929,0.00001601896665964775,0.000011825744880320649],"max":[0.550000011920929,0.8499839929542692,0.033011352765843514]},"sizeMeters":[1.1,0.85,0.033],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:24.278Z","updatedAt":"2026-09-11T18:04:24.390Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35850/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WallTextPanelArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35850/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35850/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35850/v1/model.glb\" alt=\"Wall Text Panel (Art Gallery and Exhibition Rooms)\" 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/35850/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/35850/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35849","slug":"art-gallery-and-exhibition-rooms-room-name-vinyl-plate-b51cdbef","title":"Room Name Vinyl Plate (Art Gallery and Exhibition Rooms)","summary":"A 0.6 m by 0.22 m room name plate: a white plate with a coloured edge band and two plain grey bars, the marker beside a doorway, with no readable characters.","description":"A 0.6 m by 0.22 m room name plate: a white plate with a coloured edge band and two plain grey bars, the marker beside a doorway, with no readable characters. Overall 0.60 by 0.22 by 0.03 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Back face at z=0, so it is placed on a wall face beside a doorway at about 1.5 m. No lettering: the bars stand in for whatever the room is called. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-room-name-vinyl-plate-b51cdbef","cdnUrl":"https://cdn.3dassets.dev/assets/35849/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-room-name-vinyl-plate-b51cdbef","thumbnailUrl":"https://cdn.3dassets.dev/assets/35849/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35849/v1/poster.webp","blurhash":"UMHeh0rqMd$jxa~ps9RP00tR-;R*W=D*X8oz","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":9896,"triangles":432,"vertices":372,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.30000001192092896,5.9604643443123e-10,0.0000021357866251976027],"max":[0.30000001192092896,0.2199999988079071,0.02600912511068819]},"sizeMeters":[0.6,0.22,0.026],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:24.254Z","updatedAt":"2026-09-11T18:04:24.354Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35849/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function RoomNameVinylPlateArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35849/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35849/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35849/v1/model.glb\" alt=\"Room Name Vinyl Plate (Art Gallery and Exhibition Rooms)\" 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/35849/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/35849/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35852","slug":"art-gallery-and-exhibition-rooms-label-card-set-0cf01acd","title":"Label Card Set (Art Gallery and Exhibition Rooms)","summary":"A set of three caption cards on a dark rail: white cards with a colour tick and two plain grey bars each, the labels that go beside a hang.","description":"A set of three caption cards on a dark rail: white cards with a colour tick and two plain grey bars each, the labels that go beside a hang. Overall 0.86 by 0.15 by 0.02 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Back faces at z=0, so the set is placed on a wall face at about 1.4 m, or on the side of a plinth. No lettering anywhere: the bars stand in for the caption. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-label-card-set-0cf01acd","cdnUrl":"https://cdn.3dassets.dev/assets/35852/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-label-card-set-0cf01acd","thumbnailUrl":"https://cdn.3dassets.dev/assets/35852/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35852/v1/poster.webp","blurhash":"U7ATcqwhIA-iM|~pxYMy00NF?bNMy900E3.7","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":26344,"triangles":1404,"vertices":1204,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.4300000071525574,2.38418573772492e-9,0.000015930763113676354],"max":[0.4300000071525574,0.14597875579305283,0.017976103962672407]},"sizeMeters":[0.86,0.146,0.018],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:26.605Z","updatedAt":"2026-09-11T18:04:26.694Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35852/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LabelCardSetArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35852/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35852/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35852/v1/model.glb\" alt=\"Label Card Set (Art Gallery and Exhibition Rooms)\" 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/35852/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/35852/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35851","slug":"art-gallery-and-exhibition-rooms-interactive-screen-st-11dc98d4","title":"Interactive Screen Stand (Art Gallery and Exhibition Rooms)","summary":"A 1.35 m interactive screen on a floor stand: a weighted base, a steel column and a dark screen head with a lit face that tilts to the visitor.","description":"A 1.35 m interactive screen on a floor stand: a weighted base, a steel column and a dark screen head with a lit face that tilts to the visitor. Overall 0.64 by 1.42 by 0.38 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The head tilts on its column boss; the base and the column are fixed. The lit face is emissive geometry, not a light source, and shows no interface, so nothing on it has to be localised. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-interactive-screen-st-11dc98d4","cdnUrl":"https://cdn.3dassets.dev/assets/35851/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-interactive-screen-st-11dc98d4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35851/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35851/v1/poster.webp","blurhash":"U77-c.%N004-~qxu4nD%xvogRiRi00Rj_3xu","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":11540,"triangles":292,"vertices":355,"meshes":4,"materials":3,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.3199999928474426,0.000003204744079084512,-0.19000426665911194],"max":[0.3199999928474426,1.4199868506289104,0.19000426665911194]},"sizeMeters":[0.64,1.42,0.38],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:26.542Z","updatedAt":"2026-09-11T18:04:26.646Z","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/35851/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 InteractiveScreenStandArtGalleryAndExhibitionRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35851/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/35851/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35851/v1/model.glb\" alt=\"Interactive Screen Stand (Art Gallery and Exhibition Rooms)\" 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/35851/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/35851/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35853","slug":"art-gallery-and-exhibition-rooms-projector-plinth-a04fe070","title":"Projector Plinth (Art Gallery and Exhibition Rooms)","summary":"A 0.75 m projector plinth: a white box with a dark projector body, a steel lens barrel and a ventilated back, for a work shown as projection.","description":"A 0.75 m projector plinth: a white box with a dark projector body, a steel lens barrel and a ventilated back, for a work shown as projection. Overall 0.51 by 0.86 by 0.56 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The projected image is not modelled: a beam and a bright rectangle on a wall are a renderer's job, not geometry, and faking them with a cone would light nothing. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-projector-plinth-a04fe070","cdnUrl":"https://cdn.3dassets.dev/assets/35853/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-projector-plinth-a04fe070","thumbnailUrl":"https://cdn.3dassets.dev/assets/35853/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35853/v1/poster.webp","blurhash":"U9F={*~q009F00M{?axu00D%~qxu?bofIUWB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":18756,"triangles":648,"vertices":699,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.25398739300293405,3.3527614018424856e-10,-0.2790150119729128],"max":[0.25398739300293405,0.8600000143051147,0.2790150119729128]},"sizeMeters":[0.508,0.86,0.558],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:27.046Z","updatedAt":"2026-09-11T18:04:27.141Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35853/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ProjectorPlinthArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35853/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35853/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35853/v1/model.glb\" alt=\"Projector Plinth (Art Gallery and Exhibition Rooms)\" 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/35853/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/35853/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35854","slug":"art-gallery-and-exhibition-rooms-reception-desk-0494fe21","title":"Reception Desk (Art Gallery and Exhibition Rooms)","summary":"A 2.4 m gallery reception desk: a blue faced counter with an oak top, a raised transaction shelf, a dark monitor on a stalk and a low return for a seated visitor.","description":"A 2.4 m gallery reception desk: a blue faced counter with an oak top, a raised transaction shelf, a dark monitor on a stalk and a low return for a seated visitor. Overall 2.50 by 1.63 by 0.80 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static. The monitor is fixed because a desk screen is set once and left; the emissive face is geometry, not a light source, and carries no interface. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-reception-desk-0494fe21","cdnUrl":"https://cdn.3dassets.dev/assets/35854/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-reception-desk-0494fe21","thumbnailUrl":"https://cdn.3dassets.dev/assets/35854/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35854/v1/poster.webp","blurhash":"U9D0in_400xu^F_4ksMx00iZ^%I^069E$_oH","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":19452,"triangles":672,"vertices":617,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-1.25,-0.00002258325402477654,-0.3999832148197882],"max":[1.25,1.6299999952316284,0.3999832148197882]},"sizeMeters":[2.5,1.63,0.8],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:27.211Z","updatedAt":"2026-09-11T18:04:27.397Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35854/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ReceptionDeskArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35854/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35854/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35854/v1/model.glb\" alt=\"Reception Desk (Art Gallery and Exhibition Rooms)\" 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/35854/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/35854/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35855","slug":"art-gallery-and-exhibition-rooms-ticket-scanner-c58814f2","title":"Ticket Scanner (Art Gallery and Exhibition Rooms)","summary":"A 1.05 m ticket scanner pedestal: a dark column on a weighted base with an angled steel head and a green emissive read pad.","description":"A 1.05 m ticket scanner pedestal: a dark column on a weighted base with an angled steel head and a green emissive read pad. Overall 0.34 by 1.03 by 0.34 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static: the flap and the gate a real scanner drives are not modelled, because a gate is its own piece of furniture. The read pad is emissive geometry, not a light source. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-ticket-scanner-c58814f2","cdnUrl":"https://cdn.3dassets.dev/assets/35855/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-ticket-scanner-c58814f2","thumbnailUrl":"https://cdn.3dassets.dev/assets/35855/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35855/v1/poster.webp","blurhash":"U56a@vxu00IA~qof4nRj_3of8_V[-;ofD%Rj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":12796,"triangles":540,"vertices":466,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.1699900786881043,3.3527614018424856e-10,-0.1699900786881043],"max":[0.1699900786881043,1.0299991086758857,0.1699900786881043]},"sizeMeters":[0.34,1.03,0.34],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:29.293Z","updatedAt":"2026-09-11T18:04:29.388Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35855/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TicketScannerArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35855/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35855/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35855/v1/model.glb\" alt=\"Ticket Scanner (Art Gallery and Exhibition Rooms)\" 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/35855/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/35855/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35856","slug":"art-gallery-and-exhibition-rooms-cloakroom-counter-aaf8ca5c","title":"Cloakroom Counter (Art Gallery and Exhibition Rooms)","summary":"A 1.8 m cloakroom counter with the rail behind it: a white faced counter with an oak top, a steel hanging rail on two posts and eight hangers carrying coloured tags.","description":"A 1.8 m cloakroom counter with the rail behind it: a white faced counter with an oak top, a steel hanging rail on two posts and eight hangers carrying coloured tags. Overall 1.90 by 1.60 by 1.00 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static. The rail does not turn and the hangers do not swing: coats are cloth, this library has no skinning, and a spinning empty rail would read as a fault rather than as a feature. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-cloakroom-counter-aaf8ca5c","cdnUrl":"https://cdn.3dassets.dev/assets/35856/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-cloakroom-counter-aaf8ca5c","thumbnailUrl":"https://cdn.3dassets.dev/assets/35856/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35856/v1/poster.webp","blurhash":"UCGS7M~W00x[00jE?bNG004n${xv?dtSM_RP","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":22524,"triangles":640,"vertices":1002,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.949999988079071,-0.00006438219858695415,-0.6599750003463404],"max":[0.949999988079071,1.5999863010306752,0.3400540134946569]},"sizeMeters":[1.9,1.6,1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:29.499Z","updatedAt":"2026-09-11T18:04:29.599Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35856/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CloakroomCounterArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35856/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35856/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35856/v1/model.glb\" alt=\"Cloakroom Counter (Art Gallery and Exhibition Rooms)\" 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/35856/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/35856/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35857","slug":"art-gallery-and-exhibition-rooms-bag-locker-bank-813e3635","title":"Bag Locker Bank (Art Gallery and Exhibition Rooms)","summary":"A 1.2 m bank of six bag lockers: a steel carcass with red, blue and yellow doors on coin latches, each door on its own hinge.","description":"A 1.2 m bank of six bag lockers: a steel carcass with red, blue and yellow doors on coin latches, each door on its own hinge. Overall 1.28 by 1.86 by 0.52 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Six doors, each its own node on its own left hand hinge, so a consumer can open one locker without the rest. The carcass, the latches and the top cap are fixed. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-bag-locker-bank-813e3635","cdnUrl":"https://cdn.3dassets.dev/assets/35857/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-bag-locker-bank-813e3635","thumbnailUrl":"https://cdn.3dassets.dev/assets/35857/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35857/v1/poster.webp","blurhash":"U5Av|K~A0002T_tjrDMg8_NEx]xvr3w1o=Kc","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":15880,"triangles":936,"vertices":920,"meshes":14,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6399999856948853,2.3841858265427618e-8,-0.2500271558848911],"max":[0.6399999856948853,1.860000898195411,0.2699986346761203]},"sizeMeters":[1.28,1.86,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:30.022Z","updatedAt":"2026-09-11T18:04:30.143Z","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/35857/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 BagLockerBankArtGalleryAndExhibitionRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35857/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/35857/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35857/v1/model.glb\" alt=\"Bag Locker Bank (Art Gallery and Exhibition Rooms)\" 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/35857/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/35857/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35858","slug":"art-gallery-and-exhibition-rooms-shop-counter-d42a2ff0","title":"Shop Counter (Art Gallery and Exhibition Rooms)","summary":"A 1.6 m shop counter with its merchandise shelf: a red faced counter with an oak top, a till block, and a four shelf display unit behind it stocked with coloured blocks.","description":"A 1.6 m shop counter with its merchandise shelf: a red faced counter with an oak top, a till block, and a four shelf display unit behind it stocked with coloured blocks. Overall 1.70 by 1.70 by 1.43 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Two pieces in one model, the counter and the shelf unit 0.9 m behind it, so a shop corner is one placement. The blocks on the shelves are abstract stock, not branded goods. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-shop-counter-d42a2ff0","cdnUrl":"https://cdn.3dassets.dev/assets/35858/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-shop-counter-d42a2ff0","thumbnailUrl":"https://cdn.3dassets.dev/assets/35858/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35858/v1/poster.webp","blurhash":"UFIEIeQS00OrP;EfZNxF01T0ITxu:-v~NtT0","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":35868,"triangles":1776,"vertices":1617,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.8500000238418579,-2.3841858265427618e-8,-1.080028700933875],"max":[0.8500000238418579,1.7000000476837158,0.3500432290968345]},"sizeMeters":[1.7,1.7,1.43],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:30.038Z","updatedAt":"2026-09-11T18:04:30.157Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35858/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShopCounterArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35858/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35858/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35858/v1/model.glb\" alt=\"Shop Counter (Art Gallery and Exhibition Rooms)\" 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/35858/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/35858/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35859","slug":"art-gallery-and-exhibition-rooms-cafe-table-and-chairs-584c9de5","title":"Cafe Table And Chairs (Art Gallery and Exhibition Rooms)","summary":"A cafe setting: a 0.8 m round oak table on a weighted pedestal with two yellow shell chairs facing each other, for the foyer end of a gallery.","description":"A cafe setting: a 0.8 m round oak table on a weighted pedestal with two yellow shell chairs facing each other, for the foyer end of a gallery. Overall 0.80 by 0.90 by 1.81 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. One model, so a cafe corner is one placement. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-cafe-table-and-chairs-584c9de5","cdnUrl":"https://cdn.3dassets.dev/assets/35859/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-cafe-table-and-chairs-584c9de5","thumbnailUrl":"https://cdn.3dassets.dev/assets/35859/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35859/v1/poster.webp","blurhash":"UFDSmvxaITxs~T9bNa%K019Iohs.0M-l%2NI","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":41612,"triangles":1592,"vertices":1777,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.4000000059604645,-0.000015498276348613338,-0.9049999713897705],"max":[0.4000000059604645,0.9000121916295786,0.9049999713897705]},"sizeMeters":[0.8,0.9,1.81],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:32.299Z","updatedAt":"2026-09-11T18:04:32.406Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35859/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CafeTableAndChairsArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35859/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35859/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35859/v1/model.glb\" alt=\"Cafe Table And Chairs (Art Gallery and Exhibition Rooms)\" 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/35859/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/35859/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35860","slug":"art-gallery-and-exhibition-rooms-cafe-table-and-chairs-a767551a","title":"Cafe Table And Chairs Green (Art Gallery and Exhibition Rooms)","summary":"The cafe setting with green chairs, so a row of tables alternates instead of repeating one colour across a foyer.","description":"The cafe setting with green chairs, so a row of tables alternates instead of repeating one colour across a foyer. Overall 0.80 by 0.90 by 1.81 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-cafe-table-and-chairs-a767551a","cdnUrl":"https://cdn.3dassets.dev/assets/35860/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-cafe-table-and-chairs-a767551a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35860/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35860/v1/poster.webp","blurhash":"U9AT_$x[0eX-_MMKEMt+00Hs=yoM01k;^in4","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":41672,"triangles":1592,"vertices":1777,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.4000000059604645,-0.000015498276348613338,-0.9049999713897705],"max":[0.4000000059604645,0.9000121916295786,0.9049999713897705]},"sizeMeters":[0.8,0.9,1.81],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":1,"publishedAt":"2026-09-11T18:04:32.232Z","updatedAt":"2026-09-11T19:12:38.703Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35860/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CafeTableAndChairsGreenArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35860/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35860/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35860/v1/model.glb\" alt=\"Cafe Table And Chairs Green (Art Gallery and Exhibition Rooms)\" 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/35860/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/35860/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35862","slug":"art-gallery-and-exhibition-rooms-pushchair-park-66d2a110","title":"Pushchair Park (Art Gallery and Exhibition Rooms)","summary":"A pushchair park: a low steel corral of four wheel bays under a blue header board, for the point where a visitor route enters the hung rooms.","description":"A pushchair park: a low steel corral of four wheel bays under a blue header board, for the point where a visitor route enters the hung rooms. Overall 1.80 by 1.21 by 0.86 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static, and empty: the pushchairs themselves are not modelled. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-pushchair-park-66d2a110","cdnUrl":"https://cdn.3dassets.dev/assets/35862/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-pushchair-park-66d2a110","thumbnailUrl":"https://cdn.3dassets.dev/assets/35862/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35862/v1/poster.webp","blurhash":"UCCZw^R500bv01soxYM{V?IUIU%2~W.9IoI9","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":39488,"triangles":1068,"vertices":1990,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.8999999761581421,6.615557123224036e-7,-0.42993559455560165],"max":[0.8999999761581421,1.20534747248512,0.42993559455560165]},"sizeMeters":[1.8,1.205,0.86],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:32.899Z","updatedAt":"2026-09-11T18:04:33.026Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35862/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PushchairParkArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35862/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35862/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35862/v1/model.glb\" alt=\"Pushchair Park (Art Gallery and Exhibition Rooms)\" 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/35862/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/35862/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35861","slug":"art-gallery-and-exhibition-rooms-wheelchair-cae8a096","title":"Wheelchair (Art Gallery and Exhibition Rooms)","summary":"A visitor wheelchair: a steel folding frame with a blue seat and back, arm rests, foot plates, two large rear wheels and two front castors, the loan chair a gallery keeps at its desk.","description":"A visitor wheelchair: a steel folding frame with a blue seat and back, arm rests, foot plates, two large rear wheels and two front castors, the loan chair a gallery keeps at its desk. Overall 0.71 by 1.00 by 0.86 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The rear wheels and the front castors roll on one clip; the frame, the seat and the foot plates are fixed. It does not fold: a folding cross brace is a linkage, and a linkage is not reachable with one rigid node transform. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-wheelchair-cae8a096","cdnUrl":"https://cdn.3dassets.dev/assets/35861/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-wheelchair-cae8a096","thumbnailUrl":"https://cdn.3dassets.dev/assets/35861/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35861/v1/poster.webp","blurhash":"U97eF-V?00tm%%V?H=tTDhWBtTo#iuW=p0sR","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":51872,"triangles":1592,"vertices":3035,"meshes":9,"materials":3,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.35500105898356527,-1.1920928966180355e-8,-0.357802679151343],"max":[0.35500105898356527,0.9968734979629517,0.500005332224118]},"sizeMeters":[0.71,0.997,0.858],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:32.881Z","updatedAt":"2026-09-11T18:04:33.001Z","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/35861/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 WheelchairArtGalleryAndExhibitionRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35861/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/35861/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35861/v1/model.glb\" alt=\"Wheelchair (Art Gallery and Exhibition Rooms)\" 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/35861/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/35861/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35863","slug":"art-gallery-and-exhibition-rooms-floor-plan-board-4f776135","title":"Floor Plan Board (Art Gallery and Exhibition Rooms)","summary":"A 1.9 m floor plan board: a white panel on a steel A frame showing an abstract block plan with a coloured route and a legend column, carrying no readable characters.","description":"A 1.9 m floor plan board: a white panel on a steel A frame showing an abstract block plan with a coloured route and a legend column, carrying no readable characters. Overall 1.14 by 1.87 by 0.60 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The plan is abstract blocks and a coloured route line, not a map of any real building, and there is no lettering on it. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-floor-plan-board-4f776135","cdnUrl":"https://cdn.3dassets.dev/assets/35863/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-floor-plan-board-4f776135","thumbnailUrl":"https://cdn.3dassets.dev/assets/35863/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35863/v1/poster.webp","blurhash":"U69jv1f600oz_3t74nIU00oy~qM{Dit7.8Rj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":31808,"triangles":1220,"vertices":1356,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.5699999928474426,0,-0.3000381583058241],"max":[0.5699999928474426,1.8664876222610474,0.3000381583058241]},"sizeMeters":[1.14,1.866,0.6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:35.004Z","updatedAt":"2026-09-11T18:04:35.119Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35863/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FloorPlanBoardArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35863/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35863/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35863/v1/model.glb\" alt=\"Floor Plan Board (Art Gallery and Exhibition Rooms)\" 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/35863/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/35863/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35864","slug":"art-gallery-and-exhibition-rooms-audio-guide-rack-e9c11dc6","title":"Audio Guide Rack (Art Gallery and Exhibition Rooms)","summary":"A 0.6 m wall rack of eight audio guide handsets: a dark back plate with two rows of cradles, each holding a handset with a green charge light.","description":"A 0.6 m wall rack of eight audio guide handsets: a dark back plate with two rows of cradles, each holding a handset with a green charge light. Overall 0.62 by 0.46 by 0.09 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Origin at the bottom of the back plate with its back face at z=0, so it is placed on a wall face at about 1 m. Static: the handsets are part of the rack, and lifting one out would need eight nodes for a prop nobody looks at twice. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-audio-guide-rack-e9c11dc6","cdnUrl":"https://cdn.3dassets.dev/assets/35864/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-audio-guide-rack-e9c11dc6","thumbnailUrl":"https://cdn.3dassets.dev/assets/35864/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35864/v1/poster.webp","blurhash":"UACj66%M00Rj?c-;M_9F00kC~qRPM{WBs:oe","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":28500,"triangles":1164,"vertices":1276,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.3100000023841858,0.000009461055260839846,0.000014190824013595935],"max":[0.3100000023841858,0.460000613648445,0.08499359064615103]},"sizeMeters":[0.62,0.46,0.085],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:35.267Z","updatedAt":"2026-09-11T18:04:35.371Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35864/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function AudioGuideRackArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35864/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35864/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35864/v1/model.glb\" alt=\"Audio Guide Rack (Art Gallery and Exhibition Rooms)\" 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/35864/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/35864/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35866","slug":"art-gallery-and-exhibition-rooms-invigilator-chair-79aa3fb9","title":"Invigilator Chair (Art Gallery and Exhibition Rooms)","summary":"An invigilator chair: a steel framed stacking chair with a red shell, the seat a gallery attendant keeps in the corner of every hung room.","description":"An invigilator chair: a steel framed stacking chair with a red shell, the seat a gallery attendant keeps in the corner of every hung room. Overall 0.45 by 0.90 by 0.45 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-invigilator-chair-79aa3fb9","cdnUrl":"https://cdn.3dassets.dev/assets/35866/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-invigilator-chair-79aa3fb9","thumbnailUrl":"https://cdn.3dassets.dev/assets/35866/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35866/v1/poster.webp","blurhash":"UHDH]SJk0L,@}YJ75k-B0yR*-UxaAZsV$*R*","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":15452,"triangles":660,"vertices":592,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.22498808294433725,-3.5762786065873797e-9,-0.22498808294433725],"max":[0.22498808294433725,0.8999999761581421,0.22498808294433725]},"sizeMeters":[0.45,0.9,0.45],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":1,"publishedAt":"2026-09-11T18:04:35.826Z","updatedAt":"2026-09-11T19:12:27.378Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35866/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function InvigilatorChairArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35866/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35866/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35866/v1/model.glb\" alt=\"Invigilator Chair (Art Gallery and Exhibition Rooms)\" 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/35866/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/35866/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35865","slug":"art-gallery-and-exhibition-rooms-art-handling-trolley-d447f869","title":"Art Handling Trolley (Art Gallery and Exhibition Rooms)","summary":"A 1.2 m art handling trolley: a padded deck between two padded uprights on a steel frame with four castors, the way a hung work crosses a floor.","description":"A 1.2 m art handling trolley: a padded deck between two padded uprights on a steel frame with four castors, the way a hung work crosses a floor. Overall 1.20 by 1.04 by 0.66 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The four castors roll on one clip; the deck, the uprights and the padding are fixed. The straps a real trolley carries are webbing, which this library cannot animate, so they are not modelled. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-art-handling-trolley-d447f869","cdnUrl":"https://cdn.3dassets.dev/assets/35865/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-art-handling-trolley-d447f869","thumbnailUrl":"https://cdn.3dassets.dev/assets/35865/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35865/v1/poster.webp","blurhash":"U38XLUxZ00s=_4xvITIU00W=%gNG^*xsRoM}","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":31552,"triangles":1116,"vertices":1701,"meshes":7,"materials":3,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.6000000238418579,2.980232241545089e-10,-0.33000275977898386],"max":[0.6000000238418579,1.0414338284515035,0.33002045845844985]},"sizeMeters":[1.2,1.041,0.66],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:35.803Z","updatedAt":"2026-09-11T18:04:35.920Z","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/35865/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 ArtHandlingTrolleyArtGalleryAndExhibitionRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35865/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/35865/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35865/v1/model.glb\" alt=\"Art Handling Trolley (Art Gallery and Exhibition Rooms)\" 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/35865/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/35865/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35867","slug":"art-gallery-and-exhibition-rooms-artwork-crate-2ab3435e","title":"Artwork Crate (Art Gallery and Exhibition Rooms)","summary":"A 1.3 m plywood artwork crate: a battened case with skids, corner plates and a lifting lid, the box a work travels and waits in.","description":"A 1.3 m plywood artwork crate: a battened case with skids, corner plates and a lifting lid, the box a work travels and waits in. Overall 1.30 by 0.98 by 0.62 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The lid lifts on its back edge as one node; the case, the battens and the skids are fixed. The red block on the face is a plain handling mark, not a logo or a label. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-artwork-crate-2ab3435e","cdnUrl":"https://cdn.3dassets.dev/assets/35867/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-artwork-crate-2ab3435e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35867/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35867/v1/poster.webp","blurhash":"UIEe}W~V01E2-oxuofRk01IV%2ahIos:a$Ip","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":19888,"triangles":636,"vertices":689,"meshes":5,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6499999761581421,-0.00002929514025978852,-0.3099535993044728],"max":[0.6499999761581421,0.9799967963370663,0.30995360168865865]},"sizeMeters":[1.3,0.98,0.62],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:37.907Z","updatedAt":"2026-09-11T18:04:38.002Z","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/35867/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 ArtworkCrateArtGalleryAndExhibitionRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35867/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/35867/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35867/v1/model.glb\" alt=\"Artwork Crate (Art Gallery and Exhibition Rooms)\" 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/35867/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/35867/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35868","slug":"art-gallery-and-exhibition-rooms-gloves-and-tools-tray-029ffe6f","title":"Gloves And Tools Tray (Art Gallery and Exhibition Rooms)","summary":"A 0.42 m handling tray: a steel tray with two folded pairs of white cotton gloves, a roll of tape and three small tools, what a handler carries into a hung room.","description":"A 0.42 m handling tray: a steel tray with two folded pairs of white cotton gloves, a roll of tape and three small tools, what a handler carries into a hung room. Overall 0.42 by 0.09 by 0.30 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Static. It sits on a plinth, a trolley deck or a floor. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-gloves-and-tools-tray-029ffe6f","cdnUrl":"https://cdn.3dassets.dev/assets/35868/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-gloves-and-tools-tray-029ffe6f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35868/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35868/v1/poster.webp","blurhash":"U7BpnU?b00IS_N%NIUIo00IT~ptT009F-p-p","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":14812,"triangles":376,"vertices":549,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.20999999344348907,0.000007478276351606528,-0.15000640420356778],"max":[0.20999999344348907,0.08999710211658626,0.15000640420356778]},"sizeMeters":[0.42,0.09,0.3],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:38.022Z","updatedAt":"2026-09-11T18:04:38.137Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35868/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GlovesAndToolsTrayArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35868/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35868/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35868/v1/model.glb\" alt=\"Gloves And Tools Tray (Art Gallery and Exhibition Rooms)\" 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/35868/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/35868/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35869","slug":"art-gallery-and-exhibition-rooms-humidity-monitor-06f8e534","title":"Humidity Monitor (Art Gallery and Exhibition Rooms)","summary":"A 0.16 m wall mounted humidity and temperature monitor: a white case with a dark face, a lit readout panel and a vent slot, the box that watches a hung room.","description":"A 0.16 m wall mounted humidity and temperature monitor: a white case with a dark face, a lit readout panel and a vent slot, the box that watches a hung room. Overall 0.16 by 0.12 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. Origin at the bottom of the case with its back face at z=0, so it is placed on a wall face at about 1.6 m. The readout is emissive geometry with no characters on it. Static. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-humidity-monitor-06f8e534","cdnUrl":"https://cdn.3dassets.dev/assets/35869/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-humidity-monitor-06f8e534","thumbnailUrl":"https://cdn.3dassets.dev/assets/35869/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35869/v1/poster.webp","blurhash":"UGHV9xD%00D%~q?bD%D%00-;xuxaM{xtxuIU","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":9272,"triangles":264,"vertices":298,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.07999999821186066,0.000003052521431665123,-0.0000032036983652963813],"max":[0.07999999821186066,0.11999694613746388,0.061997924994644446]},"sizeMeters":[0.16,0.12,0.062],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:38.617Z","updatedAt":"2026-09-11T18:04:38.726Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35869/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function HumidityMonitorArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35869/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35869/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35869/v1/model.glb\" alt=\"Humidity Monitor (Art Gallery and Exhibition Rooms)\" 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/35869/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/35869/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35870","slug":"art-gallery-and-exhibition-rooms-cleaning-trolley-2b2eba6d","title":"Cleaning Trolley (Art Gallery and Exhibition Rooms)","summary":"A 0.9 m cleaning trolley: a steel frame with two shelves, a yellow waste sack on a hoop, a mop and a bottle caddy, on four castors.","description":"A 0.9 m cleaning trolley: a steel frame with two shelves, a yellow waste sack on a hoop, a mop and a bottle caddy, on four castors. Overall 0.52 by 1.45 by 0.54 m (X by Y by Z). Metre units, +Y up, the side a visitor uses toward +Z, resting on y=0. The four castors roll on one clip; the frame, the shelves, the sack and the mop are fixed. The sack is rigid geometry in its hanging shape, because a slack sack is cloth and this library has no skinning. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-cleaning-trolley-2b2eba6d","cdnUrl":"https://cdn.3dassets.dev/assets/35870/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-cleaning-trolley-2b2eba6d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35870/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35870/v1/poster.webp","blurhash":"U88;V.bc00nfITfPxvf901oI~oNfohofacR%","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"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":37324,"triangles":1372,"vertices":2222,"meshes":10,"materials":6,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.26002969969715783,-1.7881393449270533e-9,-0.24500000551342965],"max":[0.26002969969715783,1.4499946699068476,0.28999999165534973]},"sizeMeters":[0.52,1.45,0.535],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:38.659Z","updatedAt":"2026-09-11T18:04:38.764Z","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/35870/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 CleaningTrolleyArtGalleryAndExhibitionRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35870/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/35870/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35870/v1/model.glb\" alt=\"Cleaning Trolley (Art Gallery and Exhibition Rooms)\" 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/35870/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/35870/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35871","slug":"art-gallery-and-exhibition-rooms-two-roo-1bc77295-starter-scene","title":"Two room gallery and front of house (Art Gallery and Exhibition Rooms)","summary":"A public art gallery laid from 2 m floor tiles and built from 2 m white wall modules: a hung room of framed and unframed canvases at eye line under picture lights and a run of lighting track, with benches down the middle and a rope barrier across the main wall, a doorway...","description":"A public art gallery laid from 2 m floor tiles and built from 2 m white wall modules: a hung room of framed and unframed canvases at eye line under picture lights and a run of lighting track, with benches down the middle and a rope barrier across the main wall, a doorway through to a sculpture room of plinths, a vitrine, a turntable stand and a bust pedestal behind a belt barrier, and the front of house beyond the front wall, with the reception desk, ticket scanner, cloakroom counter, locker bank, shop counter, cafe settings, floor plan board, pushchair park and the handling and cleaning trolleys. Every canvas and panel is an abstract composition of colour blocks and every label carries plain bars, so nothing here is a reproduction of any existing work and there is no lettering to replace.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-two-roo-1bc77295-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/35871/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-two-roo-1bc77295-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/35871/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35871/v1/poster.webp","blurhash":"U7ECnCng00D%OaW=R5V@00o#~pxu$cxV%gba","category":{"slug":"environments","title":"Environments & Scenes"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"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":889028,"triangles":43676,"vertices":47590,"meshes":245,"materials":12,"textures":0,"animations":[],"boundingBox":{"min":[-10.179960328797288,-0.06003021365965735,-7.179960328797288],"max":[4.259910278796666,4.199999809265137,5]},"sizeMeters":[14.44,4.26,12.18],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:40.704Z","updatedAt":"2026-09-11T18:04:40.801Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35871/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TwoRoomGalleryAndFrontOfHouseArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35871/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35871/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35871/v1/model.glb\" alt=\"Two room gallery and front of house (Art Gallery and Exhibition Rooms)\" 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/35871/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/35871/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35872","slug":"art-gallery-and-exhibition-rooms-single-room-hang-a32f2fd9","title":"Single room hang (Art Gallery and Exhibition Rooms)","summary":"One hung room on its own at working scale: a three module white wall with a framed canvas, a portrait canvas and a diptych at eye line, picture lights over them, a run of picture rail with its wires, a lighting track and three spots above, a backless bench and a backed bench...","description":"One hung room on its own at working scale: a three module white wall with a framed canvas, a portrait canvas and a diptych at eye line, picture lights over them, a run of picture rail with its wires, a lighting track and three spots above, a backless bench and a backed bench on the floor, a rope barrier across the front of the hang, a caption card set, a wall text panel and the invigilator chair in the corner. The compositions on the canvases are abstract colour blocks, meant to be replaced.","status":"published","url":"https://3dassets.dev/assets/art-gallery-and-exhibition-rooms-single-room-hang-a32f2fd9","cdnUrl":"https://cdn.3dassets.dev/assets/35872/v1/model.glb","downloadUrl":"https://3dassets.dev/download/art-gallery-and-exhibition-rooms-single-room-hang-a32f2fd9","thumbnailUrl":"https://cdn.3dassets.dev/assets/35872/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35872/v1/poster.webp","blurhash":"U6Gbhs0000=}5]IUH=X500.9Rin#}%~W%hD*","category":{"slug":"environments","title":"Environments & Scenes"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"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":270896,"triangles":11816,"vertices":12110,"meshes":57,"materials":10,"textures":0,"animations":[],"boundingBox":{"min":[-4,-0.06003021365965735,-3.179960328797288],"max":[2,3.200000047683716,1]},"sizeMeters":[6,3.26,4.18],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T18:04:41.054Z","updatedAt":"2026-09-11T18:04:41.157Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35872/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SingleRoomHangArtGalleryAndExhibitionRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35872/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35872/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35872/v1/model.glb\" alt=\"Single room hang (Art Gallery and Exhibition Rooms)\" 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/35872/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/35872/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}],"demo":{"slug":"art-gallery-and-exhibition-rooms","title":"Art Gallery and Exhibition Rooms","url":"https://3dassets.dev/demos/art-gallery-and-exhibition-rooms"}}}