{"data":{"id":310,"slug":"submarine-interior-and-control-room","title":"Submarine Interior and Control Room","summary":"Modular submarine interior: pressure hull rings and deck plates, a dogged watertight door, periscopes, a helm with two yokes, ballast, sonar and fire control consoles, torpedo tubes and a weapon on its cradle, bunks, a galley, a diesel and the machinery aft.","description":"A modern realistic submarine interior for building a boat of any length and fitting it out. The hull is modular: 2 m pressure hull ring sections on a 3.8 m outer diameter with internal frames, stringers, cable runs and bilge pipework, a cutaway variant with the shell above the centre line removed so a compartment can be seen into, 2 by 3 m deck plate sections plain, grated and with a hatch in them, and a watertight bulkhead with a dogged oval door that stands across a ring joint. Around them the fit-out a boat actually carries: a search periscope with folding training handles and a head that trains, the attack scope in its graduated well, a helm with two control yokes, a ballast board with blowing levers and vent handwheels, a chart table with a lit tracing top, sonar, radar and fire control consoles, a switchboard, gauge clusters, a chronometer board, an engine order telegraph, a klaxon and deckhead lamps that come rigged for red. Forward, two torpedo tube breeches with swinging doors, a weapon on its loading cradle, a stowage rack and a rack of compressed air bottles. Aft, a six cylinder diesel, the main motor with its tail shaft, a battery bank, tanks and a tool locker. Between them the crew spaces: a three tier bunk stack, a wardroom table and bench, a galley range and sink, a coffee urn, a heads cubicle, lockers, crates, a folding step, first aid, breathing apparatus, an extinguisher and a hose reel. Doors, hatches, drawers, valve wheels, yokes, levers, the periscope head and handles, the telegraph, the hose drum and the tail shaft are named nodes on their own pivots and ship rigid open, close, spin, steer, tilt and fold clips: node transforms only, no skinning. Cabling, flexible hose, bunk curtains, chain lashings, the sonar trace and water are static, because a flexible run is a linkage and a trace is a shader rather than geometry, and neither is reachable with one rigid node transform. Every dial face, builder's plate and locker label is abstract, so no navy, class, boat, pennant number, crest, builder or instrument maker is depicted anywhere. Every file is self-contained CC0 geometry with no collision or navigation data.","url":"https://3dassets.dev/packs/submarine-interior-and-control-room","coverUrl":"https://cdn.3dassets.dev/assets/36520/v1/poster.webp","assetCount":58,"aiGenerated":true,"aiGeneratedAssetCount":58,"aiModels":["Claude Opus 5"],"aiModelUnspecifiedCount":0,"featured":true,"licenseLabel":"CC0 1.0 Universal","totalBytes":12881568,"totalTriangles":335676,"starterScene":{"id":"36520","slug":"submarine-interior-and-control-room-cuta-12ad93fc-starter-scene","title":"Cutaway Pressure Hull (Submarine Interior and Control Room)","summary":"A 26 m run of pressure hull built from the pack's own 2 m ring sections, shown as a cutaway: every ring forward of the sealed after compartment has the shell above the centre line removed, so the frames and stringers stand as an open cage and all three compartments are looked...","description":"A 26 m run of pressure hull built from the pack's own 2 m ring sections, shown as a cutaway: every ring forward of the sealed after compartment has the shell above the centre line removed, so the frames and stringers stand as an open cage and all three compartments are looked straight down into. Aft, behind a dogged watertight bulkhead, the machinery space: a six cylinder diesel down the port side, the main motor with its tail shaft running into the sealed after section under the conning tower base, a battery bank, a switchboard, the fresh water tank and a rack of compressed air bottles. Amidships, the accommodation and the control room on one continuous deck: bunks, the heads, the galley range and sink, the wardroom table and bench, then the helm with its two yokes, the planesman at his seat, the ballast board, the chart table, sonar, radar, fire control, the search periscope and the attack scope in its well, the telegraph on the centre line and the ladder up to the escape hatch. Forward, through an open doorway, the torpedo space: two tube breeches in the bow, a weapon on its loading cradle, a second lashed in the stowage rack, lockers and crates. Service pipe runs, cable trays, deckhead lamps and the red watch lighting are hung off the frames down the length of the boat.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-cuta-12ad93fc-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/36520/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-cuta-12ad93fc-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/36520/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36520/v1/poster.webp","blurhash":"U78}6}-;M|%2e._Nxuof00IU?bR*a#00IUkC","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":6256124,"triangles":167552,"vertices":350295,"meshes":354,"materials":12,"textures":0,"animations":[],"boundingBox":{"min":[-13.350000023841858,0,-1.9138882160186768],"max":[13.000098426090181,6.58,1.9138882160186768]},"sizeMeters":[26.35,6.58,3.828],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:50.985Z","updatedAt":"2026-09-11T21:13:51.202Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36520/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CutawayPressureHullSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36520/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36520/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36520/v1/model.glb\" alt=\"Cutaway Pressure Hull (Submarine Interior and Control Room)\" 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/36520/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/36520/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},"assets":[{"id":"36465","slug":"submarine-interior-and-control-room-hull-ring-section-3af3b61a","title":"Pressure Hull Ring Section (Submarine Interior and Control Room)","summary":"A 2 m length of pressure hull on a 3.8 m outer diameter: a 150 mm shell, three internal ring frames with an inner face bar, twelve longitudinal stringers, two clipped cable runs and a lagged service pipe down each bilge.","description":"A 2 m length of pressure hull on a 3.8 m outer diameter: a 150 mm shell, three internal ring frames with an inner face bar, twelve longitudinal stringers, two clipped cable runs and a lagged service pipe down each bilge. Butt it end to end on its hull-aft and hull-fore ports to build a boat of any length. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-hull-ring-section-3af3b61a","cdnUrl":"https://cdn.3dassets.dev/assets/36465/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-hull-ring-section-3af3b61a","thumbnailUrl":"https://cdn.3dassets.dev/assets/36465/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36465/v1/poster.webp","blurhash":"U7Bpz*_3009F_N%MITD%00D$ofxuDiM{s:%M","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"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":179416,"triangles":4488,"vertices":9302,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1.000012194855291,0,-1.899999976158142],"max":[1.000012194855291,3.799999952316284,1.899999976158142]},"sizeMeters":[2,3.8,3.8],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:08.844Z","updatedAt":"2026-09-11T21:13:08.981Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36465/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PressureHullRingSectionSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36465/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36465/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36465/v1/model.glb\" alt=\"Pressure Hull Ring Section (Submarine Interior and Control Room)\" 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/36465/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/36465/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36463","slug":"submarine-interior-and-control-room-hull-ring-section--6121be4b","title":"Pressure Hull Ring Section, Cutaway (Submarine Interior and Control Room)","summary":"The same 2 m hull ring with the shell above the centre line removed and a rolled edge rail down each cut, so the frames, stringers, cable runs and bilge pipework stand as an open cage over a visible compartment.","description":"The same 2 m hull ring with the shell above the centre line removed and a rolled edge rail down each cut, so the frames, stringers, cable runs and bilge pipework stand as an open cage over a visible compartment. This is the section a cutaway set is built from; it shares the hull-aft and hull-fore ports. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-hull-ring-section--6121be4b","cdnUrl":"https://cdn.3dassets.dev/assets/36463/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-hull-ring-section--6121be4b","thumbnailUrl":"https://cdn.3dassets.dev/assets/36463/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36463/v1/poster.webp","blurhash":"U2AKBi-;00RP_3%gMx8_00IUtSMxj]f+IAaK","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"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":172932,"triangles":4324,"vertices":8954,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1.000098426090182,0.00010147681768746253,-1.9138882160186768],"max":[1.000098426090182,3.649898618549744,1.9138882160186768]},"sizeMeters":[2,3.65,3.828],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:08.699Z","updatedAt":"2026-09-11T21:13:08.943Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36463/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PressureHullRingSectionCutawaySubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36463/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36463/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36463/v1/model.glb\" alt=\"Pressure Hull Ring Section, Cutaway (Submarine Interior and Control Room)\" 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/36463/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/36463/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36466","slug":"submarine-interior-and-control-room-deck-plate-section-37d6e9e0","title":"Deck Plate Section (Submarine Interior and Control Room)","summary":"A 2 by 3 m deck plate section 140 mm deep: three transverse bearers and two edge coamings carrying a chequered steel plate. It lays the walking flat inside a hull ring section 550 mm below the centre line, and its deck-aft and deck-fore ports run the flat the length of the boat.","description":"A 2 by 3 m deck plate section 140 mm deep: three transverse bearers and two edge coamings carrying a chequered steel plate. It lays the walking flat inside a hull ring section 550 mm below the centre line, and its deck-aft and deck-fore ports run the flat the length of the boat. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-deck-plate-section-37d6e9e0","cdnUrl":"https://cdn.3dassets.dev/assets/36466/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-deck-plate-section-37d6e9e0","thumbnailUrl":"https://cdn.3dassets.dev/assets/36466/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36466/v1/poster.webp","blurhash":"U8BWoR%M00Rj-;IUM{%M00IU_4t78_.8xuD%","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"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":156476,"triangles":3840,"vertices":8216,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1.000061037018952,-0.000060427989866981835,-1.5],"max":[1.000061037018952,0.14400088190204743,1.5]},"sizeMeters":[2,0.144,3],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:08.927Z","updatedAt":"2026-09-11T21:13:09.048Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36466/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DeckPlateSectionSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36466/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36466/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36466/v1/model.glb\" alt=\"Deck Plate Section (Submarine Interior and Control Room)\" 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/36466/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/36466/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36464","slug":"submarine-interior-and-control-room-deck-plate-with-ha-f39b0953","title":"Deck Plate Section with Hatch (Submarine Interior and Control Room)","summary":"The same deck plate section built as four rails round a 780 mm opening, with a raised coaming and a dished lid hinged on its after edge.","description":"The same deck plate section built as four rails round a 780 mm opening, with a raised coaming and a dished lid hinged on its after edge. The lid carries its clamping handwheel and two drop bolts and swings on the hatch node; the wheel is part of the leaf, because a node transform here does not nest inside another one. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: hatch. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-deck-plate-with-ha-f39b0953","cdnUrl":"https://cdn.3dassets.dev/assets/36464/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-deck-plate-with-ha-f39b0953","thumbnailUrl":"https://cdn.3dassets.dev/assets/36464/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36464/v1/poster.webp","blurhash":"U5B3{N-=00RPIU9FbG-;00Mx_3R*%M~qxaD$","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":66024,"triangles":1512,"vertices":3290,"meshes":4,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-1.000061037018952,0.00007736114326620247,-1.5],"max":[1.000061037018952,0.32199613058856413,1.5]},"sizeMeters":[2,0.322,3],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:08.780Z","updatedAt":"2026-09-11T21:13:08.962Z","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/36464/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 DeckPlateSectionWithHatchSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36464/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/36464/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36464/v1/model.glb\" alt=\"Deck Plate Section with Hatch (Submarine Interior and Control Room)\" 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/36464/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/36464/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36467","slug":"submarine-interior-and-control-room-deck-plate-grating-96dffde3","title":"Deck Plate Section, Open Grating (Submarine Interior and Control Room)","summary":"The same deck plate section decked in open steel grating instead of plate: twenty two bearer bars on seven cross bars, which is what a machinery space or a bilge access run is floored with. Shares the deck-aft and deck-fore ports.","description":"The same deck plate section decked in open steel grating instead of plate: twenty two bearer bars on seven cross bars, which is what a machinery space or a bilge access run is floored with. Shares the deck-aft and deck-fore ports. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-deck-plate-grating-96dffde3","cdnUrl":"https://cdn.3dassets.dev/assets/36467/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-deck-plate-grating-96dffde3","thumbnailUrl":"https://cdn.3dassets.dev/assets/36467/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36467/v1/poster.webp","blurhash":"U48g,3%g4nR+%MD%M{%M00IT%Ms-D%~qtQD%","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"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":93132,"triangles":2176,"vertices":4878,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1.000061037018952,-0.000060427989866981835,-1.5],"max":[1.000061037018952,0.1379748215473613,1.5]},"sizeMeters":[2,0.138,3],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:11.558Z","updatedAt":"2026-09-11T21:13:11.653Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36467/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DeckPlateSectionOpenGratingSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36467/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36467/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36467/v1/model.glb\" alt=\"Deck Plate Section, Open Grating (Submarine Interior and Control Room)\" 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/36467/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/36467/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36469","slug":"submarine-interior-and-control-room-watertight-bulkhea-edeb80fe","title":"Watertight Bulkhead with Dogged Door (Submarine Interior and Control Room)","summary":"A watertight bulkhead filling a 3.5 m internal hull: stiffened plating, a bolted blank inspection plate and a 720 by 1520 mm oval doorway with a 200 mm sill, closed by a dogged door. The leaf carries six dogs and its dogging wheel and swings on the door node.","description":"A watertight bulkhead filling a 3.5 m internal hull: stiffened plating, a bolted blank inspection plate and a 720 by 1520 mm oval doorway with a 200 mm sill, closed by a dogged door. The leaf carries six dogs and its dogging wheel and swings on the door node. Set it on the joint between two hull ring sections, standing on the deck flat, unrotated: the plating already fills the hull's YZ plane with the door leaf and its dogging wheel toward +X, so turning it 90 degrees lays it fore and aft down the boat instead of across it. Metre units, +Y up, the operator side toward +X, resting on y=0. Named pivoted nodes: door. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-watertight-bulkhea-edeb80fe","cdnUrl":"https://cdn.3dassets.dev/assets/36469/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-watertight-bulkhea-edeb80fe","thumbnailUrl":"https://cdn.3dassets.dev/assets/36469/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36469/v1/poster.webp","blurhash":"U39tW7_3009F~qIU4n%M00Di~q%M9G%N-oe.","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":93720,"triangles":2152,"vertices":4650,"meshes":7,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.11998087178256223,0,-1.75],"max":[0.2247021580775348,3.5,1.75]},"sizeMeters":[0.345,3.5,3.5],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:11.702Z","updatedAt":"2026-09-11T21:13:11.824Z","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/36469/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 WatertightBulkheadWithDoggedDoorSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36469/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/36469/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36469/v1/model.glb\" alt=\"Watertight Bulkhead with Dogged Door (Submarine Interior and Control Room)\" 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/36469/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/36469/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36468","slug":"submarine-interior-and-control-room-watertight-bulkhea-4578a417","title":"Watertight Bulkhead, Open Doorway (Submarine Interior and Control Room)","summary":"The same watertight bulkhead with the door leaf removed, leaving the coamed doorway open. Use it where a compartment has to stay walkable, or as the after face of a bulkhead whose door is modelled on the far side.","description":"The same watertight bulkhead with the door leaf removed, leaving the coamed doorway open. Use it where a compartment has to stay walkable, or as the after face of a bulkhead whose door is modelled on the far side. It stands across the hull unrotated, like the leafed variant. Metre units, +Y up, the operator side toward +X, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-watertight-bulkhea-4578a417","cdnUrl":"https://cdn.3dassets.dev/assets/36468/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-watertight-bulkhea-4578a417","thumbnailUrl":"https://cdn.3dassets.dev/assets/36468/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36468/v1/poster.webp","blurhash":"U28}3@~q004T?wIUIS-=009F?ux]D*t8V=az","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"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":44776,"triangles":1040,"vertices":2227,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.11998087178256223,0,-1.75],"max":[0.18400000035762787,3.5,1.75]},"sizeMeters":[0.304,3.5,3.5],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:11.611Z","updatedAt":"2026-09-11T21:13:11.723Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36468/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WatertightBulkheadOpenDoorwaySubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36468/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36468/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36468/v1/model.glb\" alt=\"Watertight Bulkhead, Open Doorway (Submarine Interior and Control Room)\" 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/36468/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/36468/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36470","slug":"submarine-interior-and-control-room-overhead-hatch-and-77c0778f","title":"Overhead Hatch and Ladder (Submarine Interior and Control Room)","summary":"The climb out of a compartment: a 2.3 m ladder of two stiles and eight rungs from the deck flat to a 1 m trunk coaming at the hull crown, with a grab rail round it and a dished lid hinged on its after edge.","description":"The climb out of a compartment: a 2.3 m ladder of two stiles and eight rungs from the deck flat to a 1 m trunk coaming at the hull crown, with a grab rail round it and a dished lid hinged on its after edge. The lid takes its clamping wheel and blank plate with it on the hatch node. Stands on the deck, under the crown of a hull ring section. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: hatch. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-overhead-hatch-and-77c0778f","cdnUrl":"https://cdn.3dassets.dev/assets/36470/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-overhead-hatch-and-77c0778f","thumbnailUrl":"https://cdn.3dassets.dev/assets/36470/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36470/v1/poster.webp","blurhash":"U56RM*tR00IU~qt74oM{V?j?o#j]8_WA-=t8","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":74528,"triangles":1752,"vertices":3684,"meshes":5,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.5479583003557564,0,-0.5479583003557564],"max":[0.5479583003557564,2.501993199827109,0.5479583003557564]},"sizeMeters":[1.096,2.502,1.096],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:11.750Z","updatedAt":"2026-09-11T21:13:11.874Z","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/36470/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 OverheadHatchAndLadderSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36470/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/36470/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36470/v1/model.glb\" alt=\"Overhead Hatch and Ladder (Submarine Interior and Control Room)\" 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/36470/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/36470/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36471","slug":"submarine-interior-and-control-room-conning-tower-base-12bcf536","title":"Conning Tower Base (Submarine Interior and Control Room)","summary":"The bottom 2.4 m of a fin: a faired tower 2.7 m long and 1.5 m across with free flood slots down each flank, step irons up the after side, a bridge coaming, two masthead fairings and an access trunk with a hinged lid on the hatch node.","description":"The bottom 2.4 m of a fin: a faired tower 2.7 m long and 1.5 m across with free flood slots down each flank, step irons up the after side, a bridge coaming, two masthead fairings and an access trunk with a hinged lid on the hatch node. The underside is flat and seats on the crown of a hull ring section with roughly 220 mm of saddle overlap. It carries no pennant number, crest or marking of any kind. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: hatch. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-conning-tower-base-12bcf536","cdnUrl":"https://cdn.3dassets.dev/assets/36471/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-conning-tower-base-12bcf536","thumbnailUrl":"https://cdn.3dassets.dev/assets/36471/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36471/v1/poster.webp","blurhash":"U6A,:@_300D%aK%MtRM{00IU_Nt6RjRkRjM{","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":108132,"triangles":2548,"vertices":5475,"meshes":5,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-1.350000023841858,-0.00006415509841461997,-0.8500109324486694],"max":[1.350000023841858,3,0.8500109324486694]},"sizeMeters":[2.7,3,1.7],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:14.278Z","updatedAt":"2026-09-11T21:13:14.383Z","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/36471/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 ConningTowerBaseSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36471/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/36471/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36471/v1/model.glb\" alt=\"Conning Tower Base (Submarine Interior and Control Room)\" 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/36471/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/36471/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36472","slug":"submarine-interior-and-control-room-cable-run-and-junc-107628bc","title":"Cable Run and Junction Box (Submarine Interior and Control Room)","summary":"A 2 m hung cable tray carrying four bundles, with two hull hangers and a junction box on the outboard face with a bolted blank cover and four glands. The cable is static: a flexible run is not reachable with one rigid node transform, so it is modelled in the position it hangs in.","description":"A 2 m hung cable tray carrying four bundles, with two hull hangers and a junction box on the outboard face with a bolted blank cover and four glands. The cable is static: a flexible run is not reachable with one rigid node transform, so it is modelled in the position it hangs in. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-cable-run-and-junc-107628bc","cdnUrl":"https://cdn.3dassets.dev/assets/36472/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-cable-run-and-junc-107628bc","thumbnailUrl":"https://cdn.3dassets.dev/assets/36472/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36472/v1/poster.webp","blurhash":"U37nXjE100Rjof?bWUIU00-p~qW.NF00sp-;","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":47124,"triangles":1104,"vertices":2299,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.00003580393366123258,-0.2400233198963323],"max":[1,0.3620357924895694,0.3779991434278638]},"sizeMeters":[2,0.362,0.618],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:14.343Z","updatedAt":"2026-09-11T21:13:14.437Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36472/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CableRunAndJunctionBoxSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36472/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36472/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36472/v1/model.glb\" alt=\"Cable Run and Junction Box (Submarine Interior and Control Room)\" 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/36472/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/36472/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36473","slug":"submarine-interior-and-control-room-service-pipe-run-a0d79913","title":"Service Pipe Run (Submarine Interior and Control Room)","summary":"A 2 m run of three service pipes on two hull brackets, flanged at both ends and banded for identification: a 120 mm sea water main, an 88 mm air line and a 72 mm hydraulic line. Its pipe-aft and pipe-fore ports carry the run the length of a compartment.","description":"A 2 m run of three service pipes on two hull brackets, flanged at both ends and banded for identification: a 120 mm sea water main, an 88 mm air line and a 72 mm hydraulic line. Its pipe-aft and pipe-fore ports carry the run the length of a compartment. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-service-pipe-run-a0d79913","cdnUrl":"https://cdn.3dassets.dev/assets/36473/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-service-pipe-run-a0d79913","thumbnailUrl":"https://cdn.3dassets.dev/assets/36473/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36473/v1/poster.webp","blurhash":"U69%|*xv9I?G~p~qWGV?00?G_LIq028w?Zxv","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"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":106952,"triangles":2600,"vertices":5526,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.000020286608292341413,-0.08777123325296793],"max":[1,0.7093886819423367,0.08777123325296793]},"sizeMeters":[2,0.709,0.176],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:14.552Z","updatedAt":"2026-09-11T21:13:14.739Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36473/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ServicePipeRunSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36473/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36473/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36473/v1/model.glb\" alt=\"Service Pipe Run (Submarine Interior and Control Room)\" 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/36473/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/36473/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36474","slug":"submarine-interior-and-control-room-pipe-junction-with-bd0eacb2","title":"Pipe Junction with Valve Wheels (Submarine Interior and Control Room)","summary":"A junction in a 120 mm sea water main: a globe valve with a 340 mm handwheel on the main, a branch tee dropping to the bilge with its own 240 mm wheel, a pressure dial on a standpipe and two hull brackets. Both wheels turn about Z on the wheel-stop and wheel-branch nodes.","description":"A junction in a 120 mm sea water main: a globe valve with a 340 mm handwheel on the main, a branch tee dropping to the bilge with its own 240 mm wheel, a pressure dial on a standpipe and two hull brackets. Both wheels turn about Z on the wheel-stop and wheel-branch nodes. Shares the pipe-aft and pipe-fore ports with the plain run. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: wheel-stop, wheel-branch. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-pipe-junction-with-bd0eacb2","cdnUrl":"https://cdn.3dassets.dev/assets/36474/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-pipe-junction-with-bd0eacb2","thumbnailUrl":"https://cdn.3dassets.dev/assets/36474/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36474/v1/poster.webp","blurhash":"U57xO1r]4Vt+w0?]NG8{00NF.7WBE24T-p_2","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":130988,"triangles":3156,"vertices":6602,"meshes":9,"materials":7,"textures":0,"animations":["spin"],"boundingBox":{"min":[-1,-0.000015582287100912584,-0.17000000178813934],"max":[1,0.7820026851538026,0.17000000178813934]},"sizeMeters":[2,0.782,0.34],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:14.856Z","updatedAt":"2026-09-11T21:13:14.971Z","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/36474/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 PipeJunctionWithValveWheelsSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36474/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/36474/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36474/v1/model.glb\" alt=\"Pipe Junction with Valve Wheels (Submarine Interior and Control Room)\" 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/36474/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/36474/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36475","slug":"submarine-interior-and-control-room-high-pressure-air--003272f9","title":"High Pressure Air Manifold (Submarine Interior and Control Room)","summary":"A bulkhead mounted air manifold 1.24 m wide: a flanged 150 mm header on a stiffened back plate, four branch valves with 220 mm handwheels, a drain trap and a bank of four pressure dials over them. Each wheel turns about Z on its own wheel-1 to wheel-4 node.","description":"A bulkhead mounted air manifold 1.24 m wide: a flanged 150 mm header on a stiffened back plate, four branch valves with 220 mm handwheels, a drain trap and a bank of four pressure dials over them. Each wheel turns about Z on its own wheel-1 to wheel-4 node. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: wheel-1, wheel-2, wheel-3, wheel-4. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-high-pressure-air--003272f9","cdnUrl":"https://cdn.3dassets.dev/assets/36475/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-high-pressure-air--003272f9","thumbnailUrl":"https://cdn.3dassets.dev/assets/36475/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36475/v1/poster.webp","blurhash":"U5Bptl-:00M|~q?b9F9E00og-:Rj%N%NRiDi","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":250500,"triangles":7692,"vertices":16058,"meshes":11,"materials":7,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.645009440895068,0,-0.09999999692363123],"max":[0.645009440895068,1.5499999523162842,0.21429326223273965]},"sizeMeters":[1.29,1.55,0.314],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:17.053Z","updatedAt":"2026-09-11T21:13:17.151Z","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/36475/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 HighPressureAirManifoldSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36475/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/36475/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36475/v1/model.glb\" alt=\"High Pressure Air Manifold (Submarine Interior and Control Room)\" 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/36475/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/36475/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36476","slug":"submarine-interior-and-control-room-search-periscope-8477413d","title":"Search Periscope (Submarine Interior and Control Room)","summary":"A 3.1 m search periscope through the deck: a gland and well with a brass training ring, a stepped barrel, an eyepiece housing with a rubber brow and a bearing dial, and an optics head with a window band.","description":"A 3.1 m search periscope through the deck: a gland and well with a brass training ring, a stepped barrel, an eyepiece housing with a rubber brow and a bearing dial, and an optics head with a window band. The head trains on the head node and the two training handles fold up against the barrel on the grip-port and grip-stbd nodes. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: grip-port, grip-stbd, head. Rigid node-transform clips: grip-port-open, grip-port-close, grip-stbd-open, grip-stbd-close and spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-search-periscope-8477413d","cdnUrl":"https://cdn.3dassets.dev/assets/36476/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-search-periscope-8477413d","thumbnailUrl":"https://cdn.3dassets.dev/assets/36476/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36476/v1/poster.webp","blurhash":"U15#kc-;00000Kj^_2WS?wj?8_RkNHM{xZ-;","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":101172,"triangles":2368,"vertices":4880,"meshes":11,"materials":7,"textures":0,"animations":["grip-port-open","grip-port-close","grip-stbd-open","grip-stbd-close","spin"],"boundingBox":{"min":[-0.419999977350235,-0.00001862125857382546,-0.29696036825633504],"max":[0.419999977350235,3.0599999380111695,0.4100009510296161]},"sizeMeters":[0.84,3.06,0.707],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:17.107Z","updatedAt":"2026-09-11T21:13:17.203Z","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/36476/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 SearchPeriscopeSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36476/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/36476/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36476/v1/model.glb\" alt=\"Search Periscope (Submarine Interior and Control Room)\" 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/36476/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/36476/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36477","slug":"submarine-interior-and-control-room-attack-periscope-s-028b30fe","title":"Attack Periscope Stand (Submarine Interior and Control Room)","summary":"The attack periscope housed in its well: a 1.3 m stand with a brass bearing ring graduated in 24 divisions, a capped barrel stub, a boxed hoist frame and a hoist handwheel on the wheel-hoist node. Stands on the deck beside the search periscope.","description":"The attack periscope housed in its well: a 1.3 m stand with a brass bearing ring graduated in 24 divisions, a capped barrel stub, a boxed hoist frame and a hoist handwheel on the wheel-hoist node. Stands on the deck beside the search periscope. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: wheel-hoist. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-attack-periscope-s-028b30fe","cdnUrl":"https://cdn.3dassets.dev/assets/36477/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-attack-periscope-s-028b30fe","thumbnailUrl":"https://cdn.3dassets.dev/assets/36477/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36477/v1/poster.webp","blurhash":"U5A,,+_N0000%Nj?M_og00RP.7xuIAWBxvj]","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":127928,"triangles":3080,"vertices":6534,"meshes":5,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.450017413432486,0,-0.450017413432486],"max":[0.6000000262260436,1.3200000524520874,0.450017413432486]},"sizeMeters":[1.05,1.32,0.9],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:17.359Z","updatedAt":"2026-09-11T21:13:17.473Z","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/36477/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 AttackPeriscopeStandSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36477/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/36477/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36477/v1/model.glb\" alt=\"Attack Periscope Stand (Submarine Interior and Control Room)\" 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/36477/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/36477/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36478","slug":"submarine-interior-and-control-room-helm-station-with--5041df91","title":"Helm Station with Control Yokes (Submarine Interior and Control Room)","summary":"The driving position: a 1.7 m console with a raked desk, two aircraft style control yokes on canted columns, a bank of eight dials over a row of eight switches, a small order screen, red and amber order lamps and a foot rail.","description":"The driving position: a 1.7 m console with a raked desk, two aircraft style control yokes on canted columns, a bank of eight dials over a row of eight switches, a small order screen, red and amber order lamps and a foot rail. Both yokes turn about Z on the yoke-port and yoke-stbd nodes. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: yoke-port, yoke-stbd. Rigid node-transform clips: steer. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-helm-station-with--5041df91","cdnUrl":"https://cdn.3dassets.dev/assets/36478/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-helm-station-with--5041df91","thumbnailUrl":"https://cdn.3dassets.dev/assets/36478/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36478/v1/poster.webp","blurhash":"U7Csv{%M00V@~qtR9FIU00RjWARk?c-;RO9G","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":443080,"triangles":11592,"vertices":24132,"meshes":11,"materials":9,"textures":0,"animations":["steer"],"boundingBox":{"min":[-0.8500000238418579,-0.00003353500983238611,-0.3599795626958056],"max":[0.8500000238418579,1.4200100689082968,0.4320472536371135]},"sizeMeters":[1.7,1.42,0.792],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:17.851Z","updatedAt":"2026-09-11T21:13:17.951Z","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/36478/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 HelmStationWithControlYokesSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36478/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/36478/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36478/v1/model.glb\" alt=\"Helm Station with Control Yokes (Submarine Interior and Control Room)\" 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/36478/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/36478/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36479","slug":"submarine-interior-and-control-room-ballast-control-pa-d8bbeb9a","title":"Ballast Control Panel (Submarine Interior and Control Room)","summary":"The trim and blowing position: a 1.5 by 1.85 m panel with a lit mimic board of plain blocks and links, six indicator lamps, four blowing levers in a quadrant, two 300 mm vent handwheels and a bank of four gauges.","description":"The trim and blowing position: a 1.5 by 1.85 m panel with a lit mimic board of plain blocks and links, six indicator lamps, four blowing levers in a quadrant, two 300 mm vent handwheels and a bank of four gauges. The levers rock on lever-1 to lever-4 and the wheels turn on wheel-vent-1 and wheel-vent-2. The mimic carries no lettering, so no system or boat is named. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: lever-1, lever-2, lever-3, lever-4, wheel-vent-1, wheel-vent-2. Rigid node-transform clips: tilt and spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-ballast-control-pa-d8bbeb9a","cdnUrl":"https://cdn.3dassets.dev/assets/36479/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-ballast-control-pa-d8bbeb9a","thumbnailUrl":"https://cdn.3dassets.dev/assets/36479/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36479/v1/poster.webp","blurhash":"U4BDZyaf00Rj?v-;IT0K00WB^+t7_4xv8_IA","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":271188,"triangles":7472,"vertices":15692,"meshes":14,"materials":8,"textures":0,"animations":["tilt","spin"],"boundingBox":{"min":[-0.7499763578204695,0,-0.1200189237274025],"max":[0.7499763578204695,1.850000023841858,0.22199241430686378]},"sizeMeters":[1.5,1.85,0.342],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:19.949Z","updatedAt":"2026-09-11T21:13:20.122Z","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/36479/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 BallastControlPanelSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36479/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/36479/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36479/v1/model.glb\" alt=\"Ballast Control Panel (Submarine Interior and Control Room)\" 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/36479/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/36479/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36480","slug":"submarine-interior-and-control-room-planesman-seat-e3198e71","title":"Planesman's Seat (Submarine Interior and Control Room)","summary":"A bolted pedestal seat for a watchkeeper at the planes: a deck plate, a clamped column with a foot ring, and a padded pan and raked back on arms. The seat swivels about Y on the seat node.","description":"A bolted pedestal seat for a watchkeeper at the planes: a deck plate, a clamped column with a foot ring, and a padded pan and raked back on arms. The seat swivels about Y on the seat node. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: seat. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-planesman-seat-e3198e71","cdnUrl":"https://cdn.3dassets.dev/assets/36480/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-planesman-seat-e3198e71","thumbnailUrl":"https://cdn.3dassets.dev/assets/36480/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36480/v1/poster.webp","blurhash":"U68N|X%g00Dipyt7q[Rj9?jF-DbcJ3Rjr{oy","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":89092,"triangles":2272,"vertices":4414,"meshes":5,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.257999986410141,-0.0000032037572170844075,-0.32853734493255615],"max":[0.257999986410141,0.8821994499282781,0.24001689149278213]},"sizeMeters":[0.516,0.882,0.569],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:19.966Z","updatedAt":"2026-09-11T21:13:20.163Z","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/36480/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 PlanesmanSSeatSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36480/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/36480/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36480/v1/model.glb\" alt=\"Planesman's Seat (Submarine Interior and Control Room)\" 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/36480/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/36480/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36481","slug":"submarine-interior-and-control-room-watchkeepers-stool-f192642d","title":"Watchkeeper's Stool (Submarine Interior and Control Room)","summary":"The same pedestal at standing watch height with a shallow back pad instead of a full one, for a plotter or a sonar operator. The seat swivels about Y on the seat node.","description":"The same pedestal at standing watch height with a shallow back pad instead of a full one, for a plotter or a sonar operator. The seat swivels about Y on the seat node. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: seat. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-watchkeepers-stool-f192642d","cdnUrl":"https://cdn.3dassets.dev/assets/36481/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-watchkeepers-stool-f192642d","thumbnailUrl":"https://cdn.3dassets.dev/assets/36481/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36481/v1/poster.webp","blurhash":"U584#xxv00IAyZkDR3adI;bHxGjrM^jat9bF","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":83908,"triangles":2128,"vertices":4142,"meshes":5,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.257999986410141,-0.0000032037572170844075,-0.2942706346511841],"max":[0.257999986410141,0.871535679066409,0.24001689149278213]},"sizeMeters":[0.516,0.872,0.534],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:20.277Z","updatedAt":"2026-09-11T21:13:20.597Z","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/36481/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 WatchkeeperSStoolSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36481/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/36481/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36481/v1/model.glb\" alt=\"Watchkeeper's Stool (Submarine Interior and Control Room)\" 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/36481/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/36481/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36482","slug":"submarine-interior-and-control-room-navigation-chart-t-a43495dc","title":"Navigation Chart Table (Submarine Interior and Control Room)","summary":"The plot: a 1.6 by 0.9 m chart table with a lit tracing top inside a brass fiddle rail, two chart drawers on drawer-1 and drawer-2, a rack of five rolled charts below, a dividers tray and a plotting light on a jointed arm.","description":"The plot: a 1.6 by 0.9 m chart table with a lit tracing top inside a brass fiddle rail, two chart drawers on drawer-1 and drawer-2, a rack of five rolled charts below, a dividers tray and a plotting light on a jointed arm. The charts themselves carry no printed detail of any kind. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: drawer-1, drawer-2. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-navigation-chart-t-a43495dc","cdnUrl":"https://cdn.3dassets.dev/assets/36482/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-navigation-chart-t-a43495dc","thumbnailUrl":"https://cdn.3dassets.dev/assets/36482/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36482/v1/poster.webp","blurhash":"U59tZ9IT00%gDhxaxcRQ00NG.k%3RrbJx@Sc","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":53964,"triangles":1240,"vertices":2744,"meshes":10,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-1.0499999523162842,0,-0.47002288478227083],"max":[0.8199999928474426,1.632872865418019,0.5109636593379371]},"sizeMeters":[1.87,1.633,0.981],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:20.666Z","updatedAt":"2026-09-11T21:13:20.797Z","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/36482/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 NavigationChartTableSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36482/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/36482/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36482/v1/model.glb\" alt=\"Navigation Chart Table (Submarine Interior and Control Room)\" 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/36482/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/36482/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36483","slug":"submarine-interior-and-control-room-sonar-console-2081dec9","title":"Sonar Console with Waterfall Display (Submarine Interior and Control Room)","summary":"A 1.1 m sonar position: a console with a tall waterfall screen over a bearing strip, nine switches and two tuning knobs on the raked desk, and a headset hook on the cheek.","description":"A 1.1 m sonar position: a console with a tall waterfall screen over a bearing strip, nine switches and two tuning knobs on the raked desk, and a headset hook on the cheek. The screen is a plain lit panel: a drawn trace would imply a contact and a scale that do not exist, and it is static because a trace is not reachable with a node transform. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-sonar-console-2081dec9","cdnUrl":"https://cdn.3dassets.dev/assets/36483/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-sonar-console-2081dec9","thumbnailUrl":"https://cdn.3dassets.dev/assets/36483/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36483/v1/poster.webp","blurhash":"U4AAt1_M004T%zS1IAw}00WB-;Ri~W-;EK4-","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":128732,"triangles":3048,"vertices":6571,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.5500241108087489,0,-0.3499752807621326],"max":[0.7070000171661377,1.8000063910058512,0.3499752807621326]},"sizeMeters":[1.257,1.8,0.7],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:23.273Z","updatedAt":"2026-09-11T21:13:23.507Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36483/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SonarConsoleWithWaterfallDisplaySubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36483/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36483/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36483/v1/model.glb\" alt=\"Sonar Console with Waterfall Display (Submarine Interior and Control Room)\" 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/36483/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/36483/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36484","slug":"submarine-interior-and-control-room-radar-repeater-c6557859","title":"Radar Repeater (Submarine Interior and Control Room)","summary":"A pedestal radar repeater 1.6 m tall: a round screen behind a brass bezel under a raked reading hood, five switches and two brilliance knobs. The screen is a plain lit disc with no trace, sweep or range ring drawn on it.","description":"A pedestal radar repeater 1.6 m tall: a round screen behind a brass bezel under a raked reading hood, five switches and two brilliance knobs. The screen is a plain lit disc with no trace, sweep or range ring drawn on it. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-radar-repeater-c6557859","cdnUrl":"https://cdn.3dassets.dev/assets/36484/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-radar-repeater-c6557859","thumbnailUrl":"https://cdn.3dassets.dev/assets/36484/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36484/v1/poster.webp","blurhash":"U28;c9xu00ITnMMxo~?wH@WEyCo[xZozD*IB","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":65056,"triangles":1536,"vertices":3160,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.3299508595807139,0,-0.2999572689784917],"max":[0.3299508595807139,1.5461384057998657,0.35158386602977315]},"sizeMeters":[0.66,1.546,0.652],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:23.316Z","updatedAt":"2026-09-11T21:13:23.609Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36484/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function RadarRepeaterSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36484/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36484/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36484/v1/model.glb\" alt=\"Radar Repeater (Submarine Interior and Control Room)\" 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/36484/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/36484/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36485","slug":"submarine-interior-and-control-room-fire-control-conso-6871bd79","title":"Fire Control Console (Submarine Interior and Control Room)","summary":"A 1.35 m fire control position: two lit panels over a bank of three dials, ten switches, six solution knobs on the raked desk and a guarded firing key. Every face is abstract, with no scale, plot or marking that names a weapon, a target or a boat.","description":"A 1.35 m fire control position: two lit panels over a bank of three dials, ten switches, six solution knobs on the raked desk and a guarded firing key. Every face is abstract, with no scale, plot or marking that names a weapon, a target or a boat. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-fire-control-conso-6871bd79","cdnUrl":"https://cdn.3dassets.dev/assets/36485/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-fire-control-conso-6871bd79","thumbnailUrl":"https://cdn.3dassets.dev/assets/36485/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36485/v1/poster.webp","blurhash":"U7BgPV%g00Io%gRPIAoM8_RPMxae_N.8Io9Y","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":245632,"triangles":6112,"vertices":12744,"meshes":9,"materials":9,"textures":0,"animations":[],"boundingBox":{"min":[-0.6749962046741302,0,-0.38001649096657275],"max":[0.6749962046741302,1.7000000476837158,0.38001649096657275]},"sizeMeters":[1.35,1.7,0.76],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:23.363Z","updatedAt":"2026-09-11T21:13:23.695Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36485/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FireControlConsoleSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36485/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36485/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36485/v1/model.glb\" alt=\"Fire Control Console (Submarine Interior and Control Room)\" 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/36485/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/36485/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36486","slug":"submarine-interior-and-control-room-electrical-switchb-fcb4a81c","title":"Electrical Switchboard (Submarine Interior and Control Room)","summary":"A 1.3 by 1.95 m switchboard: twenty four moulded breakers in three rows, two isolator handles that rock on lever-iso-1 and lever-iso-2, a bank of three meters, a bolted blank plate, an amber warning strip and an earthing bar.","description":"A 1.3 by 1.95 m switchboard: twenty four moulded breakers in three rows, two isolator handles that rock on lever-iso-1 and lever-iso-2, a bank of three meters, a bolted blank plate, an amber warning strip and an earthing bar. Nothing on it is lettered, so no circuit or maker is named. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: lever-iso-1, lever-iso-2. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-electrical-switchb-fcb4a81c","cdnUrl":"https://cdn.3dassets.dev/assets/36486/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-electrical-switchb-fcb4a81c","thumbnailUrl":"https://cdn.3dassets.dev/assets/36486/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36486/v1/poster.webp","blurhash":"U6AmrHV?00bw~qtQ8_IU9FWU%Mt7$*ofNZR*","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":249088,"triangles":6096,"vertices":13229,"meshes":9,"materials":8,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.6500396899578609,0,-0.20995514292514267],"max":[0.6500396899578609,1.9500000476837158,0.34399979002824693]},"sizeMeters":[1.3,1.95,0.554],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:23.617Z","updatedAt":"2026-09-11T21:13:23.753Z","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/36486/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 ElectricalSwitchboardSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36486/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/36486/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36486/v1/model.glb\" alt=\"Electrical Switchboard (Submarine Interior and Control Room)\" 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/36486/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/36486/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36488","slug":"submarine-interior-and-control-room-depth-gauge-cluste-700280a8","title":"Depth Gauge Cluster (Submarine Interior and Control Room)","summary":"A bulkhead board of three depth and trim gauges in brass bezels, the largest 380 mm across, with four lamps under them on a stiffened back plate 1.04 m wide. The dial faces carry tick marks and a needle and no numerals, so no depth, scale or maker is stated.","description":"A bulkhead board of three depth and trim gauges in brass bezels, the largest 380 mm across, with four lamps under them on a stiffened back plate 1.04 m wide. The dial faces carry tick marks and a needle and no numerals, so no depth, scale or maker is stated. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-depth-gauge-cluste-700280a8","cdnUrl":"https://cdn.3dassets.dev/assets/36488/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-depth-gauge-cluste-700280a8","thumbnailUrl":"https://cdn.3dassets.dev/assets/36488/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36488/v1/poster.webp","blurhash":"U9D9;o-=4nt7_3~qV[D%00Rk%Mt6IVogofs.","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":157928,"triangles":3952,"vertices":8176,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.5199999809265137,0.0000027604206701004053,-0.050016781196401114],"max":[0.5199999809265137,0.6199972443477015,0.09099999815225601]},"sizeMeters":[1.04,0.62,0.141],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:26.359Z","updatedAt":"2026-09-11T21:13:26.649Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36488/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DepthGaugeClusterSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36488/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36488/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36488/v1/model.glb\" alt=\"Depth Gauge Cluster (Submarine Interior and Control Room)\" 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/36488/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/36488/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36487","slug":"submarine-interior-and-control-room-chronometer-and-ba-7bffbdcd","title":"Chronometer and Barograph Board (Submarine Interior and Control Room)","summary":"A timber instrument board 460 mm wide carrying a chronometer and a gimballed barograph in brass bezels, with a blank builder's plate between them. Both faces are tick marks and a needle only, naming no maker and no reading.","description":"A timber instrument board 460 mm wide carrying a chronometer and a gimballed barograph in brass bezels, with a blank builder's plate between them. Both faces are tick marks and a needle only, naming no maker and no reading. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-chronometer-and-ba-7bffbdcd","cdnUrl":"https://cdn.3dassets.dev/assets/36487/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-chronometer-and-ba-7bffbdcd","thumbnailUrl":"https://cdn.3dassets.dev/assets/36487/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36487/v1/poster.webp","blurhash":"U8E2:]tS00H=^+%L9a4:00i_~qtSnhs+W=Nf","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":108156,"triangles":2640,"vertices":5423,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.22999054103090172,0,-0.05998107898543467],"max":[0.22999054103090172,0.6200000047683716,0.11140122570825747]},"sizeMeters":[0.46,0.62,0.171],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:26.328Z","updatedAt":"2026-09-11T21:13:26.597Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36487/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChronometerAndBarographBoardSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36487/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36487/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36487/v1/model.glb\" alt=\"Chronometer and Barograph Board (Submarine Interior and Control Room)\" 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/36487/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/36487/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36489","slug":"submarine-interior-and-control-room-engine-order-teleg-d3c8700a","title":"Engine Order Telegraph (Submarine Interior and Control Room)","summary":"A brass pedestal engine order telegraph 1.6 m tall with a glazed dial each side and a handle that rocks across its quadrant on the telegraph node. The dials carry tick marks and no words, so no order and no maker is named.","description":"A brass pedestal engine order telegraph 1.6 m tall with a glazed dial each side and a handle that rocks across its quadrant on the telegraph node. The dials carry tick marks and no words, so no order and no maker is named. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: telegraph. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-engine-order-teleg-d3c8700a","cdnUrl":"https://cdn.3dassets.dev/assets/36489/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-engine-order-teleg-d3c8700a","thumbnailUrl":"https://cdn.3dassets.dev/assets/36489/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36489/v1/poster.webp","blurhash":"U78gjFRk00tQ~pRk4oxtx^WBMwt7D+j=%0bJ","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":57052,"triangles":1404,"vertices":2868,"meshes":5,"materials":4,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.3400518850429336,0,-0.33654469789706176],"max":[0.3400518850429336,1.5099999940395354,0.38500117931694494]},"sizeMeters":[0.68,1.51,0.722],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:26.385Z","updatedAt":"2026-09-11T21:13:26.794Z","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/36489/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 EngineOrderTelegraphSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36489/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/36489/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36489/v1/model.glb\" alt=\"Engine Order Telegraph (Submarine Interior and Control Room)\" 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/36489/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/36489/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36490","slug":"submarine-interior-and-control-room-klaxon-with-alarm--d18a50a8","title":"Klaxon with Alarm Push (Submarine Interior and Control Room)","summary":"A twin trumpet klaxon on a bulkhead bracket 280 mm wide, with a red alarm push under the smaller horn. It is static: the diaphragm inside a horn is not something a rigid node transform reaches.","description":"A twin trumpet klaxon on a bulkhead bracket 280 mm wide, with a red alarm push under the smaller horn. It is static: the diaphragm inside a horn is not something a rigid node transform reaches. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-klaxon-with-alarm--d18a50a8","cdnUrl":"https://cdn.3dassets.dev/assets/36490/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-klaxon-with-alarm--d18a50a8","thumbnailUrl":"https://cdn.3dassets.dev/assets/36490/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36490/v1/poster.webp","blurhash":"U6BMi8vf00PpP3KOID#800t8~nM{Ht$%?t9[","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":22668,"triangles":488,"vertices":998,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.1700095298548855,0,-0.11821126364523149],"max":[0.1700095298548855,0.3674173057079315,0.2000009182392049]},"sizeMeters":[0.34,0.367,0.318],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:26.482Z","updatedAt":"2026-09-11T21:13:26.949Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36490/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function KlaxonWithAlarmPushSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36490/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36490/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36490/v1/model.glb\" alt=\"Klaxon with Alarm Push (Submarine Interior and Control Room)\" 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/36490/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/36490/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36491","slug":"submarine-interior-and-control-room-deckhead-light-fit-13f2ad9b","title":"Deckhead Light Fitting (Submarine Interior and Control Room)","summary":"A caged bulkhead lamp on a swan neck bracket, 300 mm deep: a spun reflector, a clear lens and a six bar guard over it. Static geometry; the light itself is the scene's, not the model's.","description":"A caged bulkhead lamp on a swan neck bracket, 300 mm deep: a spun reflector, a clear lens and a six bar guard over it. Static geometry; the light itself is the scene's, not the model's. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-deckhead-light-fit-13f2ad9b","cdnUrl":"https://cdn.3dassets.dev/assets/36491/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-deckhead-light-fit-13f2ad9b","thumbnailUrl":"https://cdn.3dassets.dev/assets/36491/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36491/v1/poster.webp","blurhash":"U5A0{{IU00R*~qtR9FWB00of%M%M4TIU%MWV","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":25328,"triangles":568,"vertices":1187,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.11500133214872629,0,-0.029996643410942454],"max":[0.11500133214872629,0.2950013244001225,0.2921067476272583]},"sizeMeters":[0.23,0.295,0.322],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:29.387Z","updatedAt":"2026-09-11T21:13:29.481Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36491/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DeckheadLightFittingSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36491/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36491/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36491/v1/model.glb\" alt=\"Deckhead Light Fitting (Submarine Interior and Control Room)\" 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/36491/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/36491/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36493","slug":"submarine-interior-and-control-room-deckhead-light-rig-914d32a5","title":"Deckhead Light, Rigged for Red (Submarine Interior and Control Room)","summary":"The same caged bulkhead lamp with a red lens in it, which is what a control room is lit by when the watch has to keep its night vision. Use it to light a compartment red without changing the fitting.","description":"The same caged bulkhead lamp with a red lens in it, which is what a control room is lit by when the watch has to keep its night vision. Use it to light a compartment red without changing the fitting. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-deckhead-light-rig-914d32a5","cdnUrl":"https://cdn.3dassets.dev/assets/36493/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-deckhead-light-rig-914d32a5","thumbnailUrl":"https://cdn.3dassets.dev/assets/36493/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36493/v1/poster.webp","blurhash":"UAC5@+*y0K3C?Hs:ITWq00GZ=e{|9tNaxuni","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":25392,"triangles":568,"vertices":1187,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.11500133214872629,0,-0.029996643410942454],"max":[0.11500133214872629,0.2950013244001225,0.2921067476272583]},"sizeMeters":[0.23,0.295,0.322],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:29.429Z","updatedAt":"2026-09-11T21:13:29.550Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36493/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DeckheadLightRiggedForRedSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36493/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36493/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36493/v1/model.glb\" alt=\"Deckhead Light, Rigged for Red (Submarine Interior and Control Room)\" 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/36493/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/36493/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36492","slug":"submarine-interior-and-control-room-sound-powered-tele-e5964b0e","title":"Sound Powered Telephone (Submarine Interior and Control Room)","summary":"A bulkhead telephone 260 mm wide: a handset on its cradle, a brass selector and a red call push, with the lead modelled in the position it hangs. The lead is static, because a flexible cord is not reachable with one rigid node transform.","description":"A bulkhead telephone 260 mm wide: a handset on its cradle, a brass selector and a red call push, with the lead modelled in the position it hangs. The lead is static, because a flexible cord is not reachable with one rigid node transform. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-sound-powered-tele-e5964b0e","cdnUrl":"https://cdn.3dassets.dev/assets/36492/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-sound-powered-tele-e5964b0e","thumbnailUrl":"https://cdn.3dassets.dev/assets/36492/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36492/v1/poster.webp","blurhash":"U88EC}M{00%N~qRj8_xuWAt7RjM{xuofM{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":24756,"triangles":516,"vertices":1115,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.13001068203183377,0,-0.06999145511533357],"max":[0.13001068203183377,0.5675216913223267,0.17888867428267238]},"sizeMeters":[0.26,0.568,0.249],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:29.406Z","updatedAt":"2026-09-11T21:13:29.522Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36492/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SoundPoweredTelephoneSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36492/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36492/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36492/v1/model.glb\" alt=\"Sound Powered Telephone (Submarine Interior and Control Room)\" 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/36492/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/36492/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36494","slug":"submarine-interior-and-control-room-torpedo-tube-breec-779114c7","title":"Torpedo Tube Breech (Submarine Interior and Control Room)","summary":"The inboard end of a 540 mm torpedo tube: a saddled tube barrel, a breech ring and a dished breech door with its locking ring, handwheel and interlock handle, all carried on the breech node so the door swings as one piece.","description":"The inboard end of a 540 mm torpedo tube: a saddled tube barrel, a breech ring and a dished breech door with its locking ring, handwheel and interlock handle, all carried on the breech node so the door swings as one piece. A vent handwheel on the wheel-vent node and a small gauge panel sit on the saddle. No marking, service or maker anywhere. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: breech, wheel-vent. Rigid node-transform clips: open, close and spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-torpedo-tube-breec-779114c7","cdnUrl":"https://cdn.3dassets.dev/assets/36494/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-torpedo-tube-breec-779114c7","thumbnailUrl":"https://cdn.3dassets.dev/assets/36494/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36494/v1/poster.webp","blurhash":"U69%^%~q0000~qs:D%M{9FM{xtj]t8%fjXD%","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":206472,"triangles":5088,"vertices":10470,"meshes":11,"materials":7,"textures":0,"animations":["open","close","spin"],"boundingBox":{"min":[-0.9000149531295109,0,-0.42998462150148337],"max":[0.4312513670264773,1.9299999475479126,0.44600000977516174]},"sizeMeters":[1.331,1.93,0.876],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:29.533Z","updatedAt":"2026-09-11T21:13:29.651Z","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/36494/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 TorpedoTubeBreechSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36494/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/36494/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36494/v1/model.glb\" alt=\"Torpedo Tube Breech (Submarine Interior and Control Room)\" 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/36494/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/36494/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36497","slug":"submarine-interior-and-control-room-torpedo-on-loading-f40aecaa","title":"Torpedo on Loading Cradle (Submarine Interior and Control Room)","summary":"A 5.8 m weapon on its loading cradle: a plain finned body 500 mm across with four tail fins, a five bladed propeller and three identification bands, sitting in two timber bolsters with webbing straps over them on a four wheeled frame with tow handles at both ends.","description":"A 5.8 m weapon on its loading cradle: a plain finned body 500 mm across with four tail fins, a five bladed propeller and three identification bands, sitting in two timber bolsters with webbing straps over them on a four wheeled frame with tow handles at both ends. Static geometry, and the body carries no marking, warhead detail, service or maker. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-torpedo-on-loading-f40aecaa","cdnUrl":"https://cdn.3dassets.dev/assets/36497/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-torpedo-on-loading-f40aecaa","thumbnailUrl":"https://cdn.3dassets.dev/assets/36497/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36497/v1/poster.webp","blurhash":"U59H65.800V@?b_3tRIT00xu~qbt9Z00oe?b","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":123944,"triangles":2992,"vertices":6236,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-2.9390720436649937,-0.00001922725701633543,-0.4500704924027855],"max":[2.9000000953674316,1.213419672405744,0.4500704924027855]},"sizeMeters":[5.839,1.213,0.9],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:32.526Z","updatedAt":"2026-09-11T21:13:32.660Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36497/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TorpedoOnLoadingCradleSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36497/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36497/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36497/v1/model.glb\" alt=\"Torpedo on Loading Cradle (Submarine Interior and Control Room)\" 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/36497/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/36497/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36495","slug":"submarine-interior-and-control-room-torpedo-stowage-ra-b6027bd6","title":"Torpedo Stowage Rack (Submarine Interior and Control Room)","summary":"A two tier stowage rack 4.9 m long: six uprights with grab bars, longitudinal beams, roller saddles on both tiers and lifting eyes on the upright heads, with one plain finned weapon lashed on the lower tier.","description":"A two tier stowage rack 4.9 m long: six uprights with grab bars, longitudinal beams, roller saddles on both tiers and lifting eyes on the upright heads, with one plain finned weapon lashed on the lower tier. Static geometry; chain lashings are modelled where they lie, because a chain is not reachable with one rigid node transform. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-torpedo-stowage-ra-b6027bd6","cdnUrl":"https://cdn.3dassets.dev/assets/36495/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-torpedo-stowage-ra-b6027bd6","thumbnailUrl":"https://cdn.3dassets.dev/assets/36495/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36495/v1/poster.webp","blurhash":"U39j+P-p00%g%M~qj[9F00Rj~qIA9E00og-;","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":187244,"triangles":4648,"vertices":9678,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-2.939072053415984,0.0000456267580193348,-0.5698721264120781],"max":[2.9000000953674316,2.045150907711843,0.5698721264120781]},"sizeMeters":[5.839,2.045,1.14],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:32.524Z","updatedAt":"2026-09-11T21:13:32.658Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36495/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TorpedoStowageRackSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36495/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36495/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36495/v1/model.glb\" alt=\"Torpedo Stowage Rack (Submarine Interior and Control Room)\" 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/36495/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/36495/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36496","slug":"submarine-interior-and-control-room-compressed-air-bot-d4176bc8","title":"Compressed Air Bottle Rack (Submarine Interior and Control Room)","summary":"A framed rack of six compressed air bottles lying in two rows of three, 1.9 m long and 1.3 m tall: end plates, four rails, bottle valves with 140 mm handwheels on the wheel-bottle-1 to wheel-bottle-6 nodes, a riser and cross pipe manifold, and webbing straps over the top row.","description":"A framed rack of six compressed air bottles lying in two rows of three, 1.9 m long and 1.3 m tall: end plates, four rails, bottle valves with 140 mm handwheels on the wheel-bottle-1 to wheel-bottle-6 nodes, a riser and cross pipe manifold, and webbing straps over the top row. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: wheel-bottle-1, wheel-bottle-2, wheel-bottle-3, wheel-bottle-4, wheel-bottle-5, wheel-bottle-6. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-compressed-air-bot-d4176bc8","cdnUrl":"https://cdn.3dassets.dev/assets/36496/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-compressed-air-bot-d4176bc8","thumbnailUrl":"https://cdn.3dassets.dev/assets/36496/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36496/v1/poster.webp","blurhash":"UAB;8,-;4Tt8?^?bVsDj00WAx]RjL~jFpbR*","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":132948,"triangles":5632,"vertices":11663,"meshes":11,"materials":5,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.9700000286102295,0.000054919800097752436,-0.5499636991949475],"max":[1.0449999570846558,1.2399450897366453,0.5499636991949475]},"sizeMeters":[2.015,1.24,1.1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:32.529Z","updatedAt":"2026-09-11T21:13:32.672Z","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/36496/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 CompressedAirBottleRackSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36496/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/36496/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36496/v1/model.glb\" alt=\"Compressed Air Bottle Rack (Submarine Interior and Control Room)\" 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/36496/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/36496/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36498","slug":"submarine-interior-and-control-room-bunk-stack-with-cu-374a4fc5","title":"Bunk Stack with Curtains (Submarine Interior and Control Room)","summary":"A three tier bunk stack 1.96 m long and 2.2 m tall: corner posts, steel pans with crowned mattresses, pillows, fiddle rails, stowage nets under each pan, reading lamps at the heads, and curtain rails with the curtains gathered back at both ends of every berth.","description":"A three tier bunk stack 1.96 m long and 2.2 m tall: corner posts, steel pans with crowned mattresses, pillows, fiddle rails, stowage nets under each pan, reading lamps at the heads, and curtain rails with the curtains gathered back at both ends of every berth. The curtains are static, because hanging cloth is not reachable with one rigid node transform. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-bunk-stack-with-cu-374a4fc5","cdnUrl":"https://cdn.3dassets.dev/assets/36498/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-bunk-stack-with-cu-374a4fc5","thumbnailUrl":"https://cdn.3dassets.dev/assets/36498/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36498/v1/poster.webp","blurhash":"UAAdG.j^00obxvx]RjIT00of~qR*RPj[ofjs","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":353112,"triangles":9168,"vertices":18345,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.980067255382961,0,-0.3599623916939842],"max":[0.980067255382961,2.4703922271728516,0.3599623916939842]},"sizeMeters":[1.96,2.47,0.72],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:32.640Z","updatedAt":"2026-09-11T21:13:32.772Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36498/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BunkStackWithCurtainsSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36498/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36498/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36498/v1/model.glb\" alt=\"Bunk Stack with Curtains (Submarine Interior and Control Room)\" 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/36498/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/36498/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36502","slug":"submarine-interior-and-control-room-wardroom-table-cc218de3","title":"Wardroom Table (Submarine Interior and Control Room)","summary":"A 1.7 by 0.82 m wardroom table on a single bolted pedestal with a foot rail: a timber top inside a brass fiddle rail, a crumb tray underneath and a condiment fiddle at one end.","description":"A 1.7 by 0.82 m wardroom table on a single bolted pedestal with a foot rail: a timber top inside a brass fiddle rail, a crumb tray underneath and a condiment fiddle at one end. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-wardroom-table-cc218de3","cdnUrl":"https://cdn.3dassets.dev/assets/36502/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-wardroom-table-cc218de3","thumbnailUrl":"https://cdn.3dassets.dev/assets/36502/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36502/v1/poster.webp","blurhash":"UFBpLSxu0KIn~TxZNIWW4:%1%MNI59xtenIV","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":37972,"triangles":880,"vertices":1870,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.8600000143051147,0.0000015060573195224691,-0.41996094329343975],"max":[0.8600000143051147,0.7999861204542683,0.41996094329343975]},"sizeMeters":[1.72,0.8,0.84],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:35.458Z","updatedAt":"2026-09-11T21:13:35.671Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36502/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WardroomTableSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36502/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36502/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36502/v1/model.glb\" alt=\"Wardroom Table (Submarine Interior and Control Room)\" 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/36502/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/36502/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36500","slug":"submarine-interior-and-control-room-wardroom-bench-6fcfb55d","title":"Wardroom Bench (Submarine Interior and Control Room)","summary":"A 1.7 m bench seat that is also a locker: a timber carcass with a padded lid hinged on its after edge on the hatch node, a raked back pad on two brackets and a brass grab rail along the top.","description":"A 1.7 m bench seat that is also a locker: a timber carcass with a padded lid hinged on its after edge on the hatch node, a raked back pad on two brackets and a brass grab rail along the top. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: hatch. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-wardroom-bench-6fcfb55d","cdnUrl":"https://cdn.3dassets.dev/assets/36500/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-wardroom-bench-6fcfb55d","thumbnailUrl":"https://cdn.3dassets.dev/assets/36500/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36500/v1/poster.webp","blurhash":"U6DJ0B~U00%LF~^+-P9Z005AtnMx:|RNA0Ne","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":81588,"triangles":2080,"vertices":4057,"meshes":6,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.8500000238418579,0.0000393681184844806,-0.3334985923318877],"max":[0.8500000238418579,0.9960087790367175,0.2300005502548388]},"sizeMeters":[1.7,0.996,0.563],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:35.426Z","updatedAt":"2026-09-11T21:13:35.541Z","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/36500/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 WardroomBenchSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36500/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/36500/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36500/v1/model.glb\" alt=\"Wardroom Bench (Submarine Interior and Control Room)\" 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/36500/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/36500/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36499","slug":"submarine-interior-and-control-room-galley-range-4cfe0632","title":"Galley Range (Submarine Interior and Control Room)","summary":"A 920 mm galley range: a four ring hob inside a brass sea fiddle, an oven with a glazed drop door on the door-oven node, four control knobs and a pilot lamp. Nothing on it is lettered, so no maker is named.","description":"A 920 mm galley range: a four ring hob inside a brass sea fiddle, an oven with a glazed drop door on the door-oven node, four control knobs and a pilot lamp. Nothing on it is lettered, so no maker is named. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: door-oven. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-galley-range-4cfe0632","cdnUrl":"https://cdn.3dassets.dev/assets/36499/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-galley-range-4cfe0632","thumbnailUrl":"https://cdn.3dassets.dev/assets/36499/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36499/v1/poster.webp","blurhash":"UBA,%pt600M{~oj[IUaxD#RjRkt7t5ofM|Rj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":58676,"triangles":1328,"vertices":2776,"meshes":7,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.47049999237060547,0,-0.3505336962107987],"max":[0.47049999237060547,0.999981405714679,0.4280181257303726]},"sizeMeters":[0.941,1,0.779],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:34.294Z","updatedAt":"2026-09-11T21:13:34.395Z","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/36499/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 GalleyRangeSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36499/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/36499/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36499/v1/model.glb\" alt=\"Galley Range (Submarine Interior and Control Room)\" 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/36499/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/36499/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36501","slug":"submarine-interior-and-control-room-galley-sink-unit-78e28cd3","title":"Galley Sink Unit (Submarine Interior and Control Room)","summary":"A 1.1 m stainless sink unit with two pressed bowls, a swan neck mixer and a cupboard under it closed by two doors on the door-1 and door-2 nodes.","description":"A 1.1 m stainless sink unit with two pressed bowls, a swan neck mixer and a cupboard under it closed by two doors on the door-1 and door-2 nodes. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: door-1, door-2. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-galley-sink-unit-78e28cd3","cdnUrl":"https://cdn.3dassets.dev/assets/36501/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-galley-sink-unit-78e28cd3","thumbnailUrl":"https://cdn.3dassets.dev/assets/36501/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36501/v1/poster.webp","blurhash":"U6DS?%~q0000xvR-fhxr009G~q-os$%MD+9F","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":31428,"triangles":744,"vertices":1643,"meshes":7,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.5600000023841858,-0.000016480213943591282,-0.3200341820931505],"max":[0.5600000023841858,1.1699999570846558,0.3689921177251281]},"sizeMeters":[1.12,1.17,0.689],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:35.445Z","updatedAt":"2026-09-11T21:13:35.654Z","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/36501/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 GalleySinkUnitSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36501/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/36501/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36501/v1/model.glb\" alt=\"Galley Sink Unit (Submarine Interior and Control Room)\" 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/36501/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/36501/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36503","slug":"submarine-interior-and-control-room-coffee-urn-91c723cc","title":"Coffee Urn (Submarine Interior and Control Room)","summary":"A 600 mm stainless coffee urn on a rubber mat: a brass lid, a tap over a drip tray, a sight glass and two carrying handles. Static geometry.","description":"A 600 mm stainless coffee urn on a rubber mat: a brass lid, a tap over a drip tray, a sight glass and two carrying handles. Static geometry. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-coffee-urn-91c723cc","cdnUrl":"https://cdn.3dassets.dev/assets/36503/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-coffee-urn-91c723cc","thumbnailUrl":"https://cdn.3dassets.dev/assets/36503/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36503/v1/poster.webp","blurhash":"U17-c,x[00DkX1E24o^%00tR_3RP~p%LWC9a","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":34440,"triangles":788,"vertices":1629,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.21600402855618805,0,-0.15000531029907876],"max":[0.21600402855618805,0.6499999761581421,0.2600029010701303]},"sizeMeters":[0.432,0.65,0.41],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:37.256Z","updatedAt":"2026-09-11T21:13:37.348Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36503/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CoffeeUrnSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36503/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36503/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36503/v1/model.glb\" alt=\"Coffee Urn (Submarine Interior and Control Room)\" 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/36503/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/36503/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36504","slug":"submarine-interior-and-control-room-heads-cubicle-60cab9e9","title":"Heads Cubicle (Submarine Interior and Control Room)","summary":"A 0.96 by 1.04 m heads cubicle 2.1 m tall: three panelled sides and a deckhead frame, a pan on its pedestal, a small basin, a flushing valve on the wheel-flush node and a louvred door on the door node.","description":"A 0.96 by 1.04 m heads cubicle 2.1 m tall: three panelled sides and a deckhead frame, a pan on its pedestal, a small basin, a flushing valve on the wheel-flush node and a louvred door on the door node. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: wheel-flush, door. Rigid node-transform clips: open, close and spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-heads-cubicle-60cab9e9","cdnUrl":"https://cdn.3dassets.dev/assets/36504/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-heads-cubicle-60cab9e9","thumbnailUrl":"https://cdn.3dassets.dev/assets/36504/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36504/v1/poster.webp","blurhash":"U6FY+A0K00xa?wbHITRk00%M?aoz%NWBMxt7","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":98364,"triangles":2292,"vertices":4796,"meshes":8,"materials":5,"textures":0,"animations":["open","close","spin"],"boundingBox":{"min":[-0.49496487910562637,0,-0.5350501763466662],"max":[0.49496487910562637,2.109999895095825,0.5350501763466662]},"sizeMeters":[0.99,2.11,1.07],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:38.287Z","updatedAt":"2026-09-11T21:13:38.400Z","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/36504/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 HeadsCubicleSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36504/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/36504/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36504/v1/model.glb\" alt=\"Heads Cubicle (Submarine Interior and Control Room)\" 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/36504/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/36504/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36505","slug":"submarine-interior-and-control-room-first-aid-locker-61151ce3","title":"First Aid Locker (Submarine Interior and Control Room)","summary":"A 560 mm bulkhead first aid locker with a single door on the door node, marked with a plain raised red cross. No wording, service or maker appears on it.","description":"A 560 mm bulkhead first aid locker with a single door on the door node, marked with a plain raised red cross. No wording, service or maker appears on it. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: door. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-first-aid-locker-61151ce3","cdnUrl":"https://cdn.3dassets.dev/assets/36505/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-first-aid-locker-61151ce3","thumbnailUrl":"https://cdn.3dassets.dev/assets/36505/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36505/v1/poster.webp","blurhash":"UDHLbxD%00kq~qxu9ZE100tR-VnOx[ofMxRj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":19696,"triangles":352,"vertices":799,"meshes":5,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.280017101492186,0,-0.11998535588324101],"max":[0.280017101492186,0.7200000286102295,0.17899456638668193]},"sizeMeters":[0.56,0.72,0.299],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:38.304Z","updatedAt":"2026-09-11T21:13:38.409Z","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/36505/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 FirstAidLockerSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36505/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/36505/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36505/v1/model.glb\" alt=\"First Aid Locker (Submarine Interior and Control Room)\" 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/36505/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/36505/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36506","slug":"submarine-interior-and-control-room-emergency-breathin-108f5339","title":"Emergency Breathing Apparatus Station (Submarine Interior and Control Room)","summary":"A 1.2 m breathing station: four masks on hooks over a charging manifold with four connection valves on the wheel-eba-1 to wheel-eba-4 nodes, and an amber warning strip along the top.","description":"A 1.2 m breathing station: four masks on hooks over a charging manifold with four connection valves on the wheel-eba-1 to wheel-eba-4 nodes, and an amber warning strip along the top. The hoses are modelled as they hang and are static, because flexible hose is not reachable with one rigid node transform. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: wheel-eba-1, wheel-eba-2, wheel-eba-3, wheel-eba-4. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-emergency-breathin-108f5339","cdnUrl":"https://cdn.3dassets.dev/assets/36506/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-emergency-breathin-108f5339","thumbnailUrl":"https://cdn.3dassets.dev/assets/36506/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36506/v1/poster.webp","blurhash":"U5CP|u9F00o#~q_39F4n00-;x]IUt7%2Rj9Z","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":70900,"triangles":3032,"vertices":6444,"meshes":9,"materials":6,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.6000320444349498,0,-0.08002929866316663],"max":[0.6000320444349498,1.5,0.17594253966323825]},"sizeMeters":[1.2,1.5,0.256],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:38.324Z","updatedAt":"2026-09-11T21:13:38.433Z","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/36506/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 EmergencyBreathingApparatusStationSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36506/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/36506/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36506/v1/model.glb\" alt=\"Emergency Breathing Apparatus Station (Submarine Interior and Control Room)\" 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/36506/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/36506/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36507","slug":"submarine-interior-and-control-room-fire-extinguisher--606568ed","title":"Fire Extinguisher on Bracket (Submarine Interior and Control Room)","summary":"A 550 mm extinguisher in two bracket bands on a bulkhead plate, with a squeeze handle, a pressure dial and its horn hose hanging where it hangs. No wording or maker appears on the body.","description":"A 550 mm extinguisher in two bracket bands on a bulkhead plate, with a squeeze handle, a pressure dial and its horn hose hanging where it hangs. No wording or maker appears on the body. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-fire-extinguisher--606568ed","cdnUrl":"https://cdn.3dassets.dev/assets/36507/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-fire-extinguisher--606568ed","thumbnailUrl":"https://cdn.3dassets.dev/assets/36507/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36507/v1/poster.webp","blurhash":"UBDar,#m0071CQX8+HwJ0|S~}Yv~V@WBofoz","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":76836,"triangles":1852,"vertices":3830,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.13898001738935395,0,-0.059993589772048786],"max":[0.1104290761696424,0.6539999954402447,0.22599999606609344]},"sizeMeters":[0.249,0.654,0.286],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:40.058Z","updatedAt":"2026-09-11T21:13:40.163Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36507/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FireExtinguisherOnBracketSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36507/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36507/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36507/v1/model.glb\" alt=\"Fire Extinguisher on Bracket (Submarine Interior and Control Room)\" 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/36507/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/36507/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36508","slug":"submarine-interior-and-control-room-fire-hose-reel-fcc4d893","title":"Fire Hose Reel (Submarine Interior and Control Room)","summary":"A 680 mm swinging arm hose reel on a bulkhead plate: a red drum with five turns of hose wound on it turning about Z on the reel node, a nozzle on its clip and a supply valve on the wheel-hose node.","description":"A 680 mm swinging arm hose reel on a bulkhead plate: a red drum with five turns of hose wound on it turning about Z on the reel node, a nozzle on its clip and a supply valve on the wheel-hose node. The wound hose is part of the drum, because a node transform here does not nest inside another one. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: reel, wheel-hose. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-fire-hose-reel-fcc4d893","cdnUrl":"https://cdn.3dassets.dev/assets/36508/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-fire-hose-reel-fcc4d893","thumbnailUrl":"https://cdn.3dassets.dev/assets/36508/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36508/v1/poster.webp","blurhash":"UECE@1]k0K2[$*xFR*Na0eAW}t]QEeJ7t7$j","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":97512,"triangles":2344,"vertices":4789,"meshes":7,"materials":6,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.3400000035762787,0,-0.1599999964237213],"max":[0.3400000035762787,0.9565550592892316,0.43598180838412437]},"sizeMeters":[0.68,0.957,0.596],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:41.144Z","updatedAt":"2026-09-11T21:13:41.241Z","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/36508/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 FireHoseReelSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36508/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/36508/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36508/v1/model.glb\" alt=\"Fire Hose Reel (Submarine Interior and Control Room)\" 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/36508/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/36508/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36510","slug":"submarine-interior-and-control-room-stores-locker-d0b59ff9","title":"Stores Locker (Submarine Interior and Control Room)","summary":"A 920 mm two door stores locker 1.94 m tall with a plinth, a capping rail, drop handles and a plain coloured label strip on each door. Both doors swing on the door-1 and door-2 nodes. The labels are colour only, so nothing is named.","description":"A 920 mm two door stores locker 1.94 m tall with a plinth, a capping rail, drop handles and a plain coloured label strip on each door. Both doors swing on the door-1 and door-2 nodes. The labels are colour only, so nothing is named. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: door-1, door-2. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-stores-locker-d0b59ff9","cdnUrl":"https://cdn.3dassets.dev/assets/36510/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-stores-locker-d0b59ff9","thumbnailUrl":"https://cdn.3dassets.dev/assets/36510/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36510/v1/poster.webp","blurhash":"UAEo_PIU00ju-;j[IUWB00%M~pM{%Mj[Mxa{","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":24620,"triangles":640,"vertices":1466,"meshes":9,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.4699999988079071,0.000010683784115193828,-0.22997253275817667],"max":[0.4699999988079071,1.9600154141680228,0.2739961515266676]},"sizeMeters":[0.94,1.96,0.504],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:41.450Z","updatedAt":"2026-09-11T21:13:41.550Z","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/36510/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 StoresLockerSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36510/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/36510/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36510/v1/model.glb\" alt=\"Stores Locker (Submarine Interior and Control Room)\" 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/36510/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/36510/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36509","slug":"submarine-interior-and-control-room-stores-locker-low-aacc5953","title":"Stores Locker, Low (Submarine Interior and Control Room)","summary":"The same two door stores locker at 920 mm, which is what goes under a bunk run or against a bulkhead where a tall one would not clear the deckhead. Both doors swing on the door-1 and door-2 nodes.","description":"The same two door stores locker at 920 mm, which is what goes under a bunk run or against a bulkhead where a tall one would not clear the deckhead. Both doors swing on the door-1 and door-2 nodes. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: door-1, door-2. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-stores-locker-low-aacc5953","cdnUrl":"https://cdn.3dassets.dev/assets/36509/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-stores-locker-low-aacc5953","thumbnailUrl":"https://cdn.3dassets.dev/assets/36509/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36509/v1/poster.webp","blurhash":"UBF=~;IU00M{_4%MIUE100xu_2bH%2M{IUt7","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":24280,"triangles":640,"vertices":1471,"meshes":9,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.4699999988079071,0.000010683784115193828,-0.22997253275817667],"max":[0.4699999988079071,0.9400154034391868,0.2739961515266676]},"sizeMeters":[0.94,0.94,0.504],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:41.206Z","updatedAt":"2026-09-11T21:13:41.310Z","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/36509/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 StoresLockerLowSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36509/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/36509/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36509/v1/model.glb\" alt=\"Stores Locker, Low (Submarine Interior and Control Room)\" 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/36509/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/36509/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36511","slug":"submarine-interior-and-control-room-stores-crate-929e4a94","title":"Stores Crate (Submarine Interior and Control Room)","summary":"A 0.8 by 0.56 m timber stores crate 540 mm tall with corner irons, top and bottom cleats, two lashing eyes and a plain coloured label strip. Static geometry, and nothing on it is lettered.","description":"A 0.8 by 0.56 m timber stores crate 540 mm tall with corner irons, top and bottom cleats, two lashing eyes and a plain coloured label strip. Static geometry, and nothing on it is lettered. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-stores-crate-929e4a94","cdnUrl":"https://cdn.3dassets.dev/assets/36511/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-stores-crate-929e4a94","thumbnailUrl":"https://cdn.3dassets.dev/assets/36511/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36511/v1/poster.webp","blurhash":"UDF5gI?G02Ip~VxuM{oJ03NHjEobM{t6RjIV","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":31180,"triangles":712,"vertices":1536,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.41260844469070435,-0.0000033503305698623365,-0.28501173550002756],"max":[0.41260844469070435,0.5412018304945009,0.29400238318564736]},"sizeMeters":[0.825,0.541,0.579],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:42.855Z","updatedAt":"2026-09-11T21:13:43.045Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36511/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StoresCrateSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36511/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36511/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36511/v1/model.glb\" alt=\"Stores Crate (Submarine Interior and Control Room)\" 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/36511/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/36511/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36512","slug":"submarine-interior-and-control-room-stores-crate-small-d73481d3","title":"Stores Crate, Small (Submarine Interior and Control Room)","summary":"The same ironbound timber crate at 0.52 by 0.38 m, for stacking on the larger one or stowing under a bench.","description":"The same ironbound timber crate at 0.52 by 0.38 m, for stacking on the larger one or stowing under a bench. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-stores-crate-small-d73481d3","cdnUrl":"https://cdn.3dassets.dev/assets/36512/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-stores-crate-small-d73481d3","thumbnailUrl":"https://cdn.3dassets.dev/assets/36512/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36512/v1/poster.webp","blurhash":"UDEL$$-:02M|~VxaIpax01RjjEbFE1t7nhM{","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":32096,"triangles":712,"vertices":1561,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.2726084589958191,-0.000011283824389751729,-0.19499487478084682],"max":[0.2726084589958191,0.34120278192029585,0.20400726225699045]},"sizeMeters":[0.545,0.341,0.399],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:43.007Z","updatedAt":"2026-09-11T21:13:43.106Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36512/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StoresCrateSmallSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36512/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36512/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36512/v1/model.glb\" alt=\"Stores Crate, Small (Submarine Interior and Control Room)\" 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/36512/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/36512/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36513","slug":"submarine-interior-and-control-room-folding-step-440b1a07","title":"Folding Step (Submarine Interior and Control Room)","summary":"A bulkhead folding step 600 mm wide: a gripped tread on two stays, modelled down and folding flat against its plate on the step node, with a grab rail over it.","description":"A bulkhead folding step 600 mm wide: a gripped tread on two stays, modelled down and folding flat against its plate on the step node, with a grab rail over it. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: step. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-folding-step-440b1a07","cdnUrl":"https://cdn.3dassets.dev/assets/36513/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-folding-step-440b1a07","thumbnailUrl":"https://cdn.3dassets.dev/assets/36513/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36513/v1/poster.webp","blurhash":"UD9%-cIA00%g~qRP9Ft7D*t7t3WAD*t8xtaw","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":32504,"triangles":656,"vertices":1466,"meshes":5,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.3012000024318695,-0.0000025488818329033602,-0.05999359163429602],"max":[0.3012000024318695,0.7665639890517416,0.32000212777007947]},"sizeMeters":[0.602,0.767,0.38],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:44.051Z","updatedAt":"2026-09-11T21:13:44.159Z","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/36513/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 FoldingStepSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36513/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/36513/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36513/v1/model.glb\" alt=\"Folding Step (Submarine Interior and Control Room)\" 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/36513/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/36513/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36514","slug":"submarine-interior-and-control-room-life-ring-on-brack-449f02bf","title":"Life Ring on Bracket (Submarine Interior and Control Room)","summary":"A 780 mm life ring on a two arm bulkhead bracket, banded in four sectors with a grab line looped round it. Static geometry, and it carries no boat name, port or marking.","description":"A 780 mm life ring on a two arm bulkhead bracket, banded in four sectors with a grab line looped round it. Static geometry, and it carries no boat name, port or marking. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-life-ring-on-brack-449f02bf","cdnUrl":"https://cdn.3dassets.dev/assets/36514/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-life-ring-on-brack-449f02bf","thumbnailUrl":"https://cdn.3dassets.dev/assets/36514/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36514/v1/poster.webp","blurhash":"UEDkcD%10KIo,@s9I:OX00Rj}tozF_OXxGv~","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":101784,"triangles":2544,"vertices":5120,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.4189999997615814,0,-0.20427417010068893],"max":[0.4189999997615814,0.8379999995231628,0.4042741730809212]},"sizeMeters":[0.838,0.838,0.609],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:44.389Z","updatedAt":"2026-09-11T21:13:44.603Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36514/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LifeRingOnBracketSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36514/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36514/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36514/v1/model.glb\" alt=\"Life Ring on Bracket (Submarine Interior and Control Room)\" 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/36514/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/36514/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36515","slug":"submarine-interior-and-control-room-diesel-engine-bloc-267773e3","title":"Diesel Engine Block (Submarine Interior and Control Room)","summary":"A 3.2 m six cylinder diesel: a bedplate on resilient mounts, a crankcase and block, six heads with rocker covers, an exhaust manifold down one flank and a charge air trunk down the other, a blower forward and a flywheel housing aft.","description":"A 3.2 m six cylinder diesel: a bedplate on resilient mounts, a crankcase and block, six heads with rocker covers, an exhaust manifold down one flank and a charge air trunk down the other, a blower forward and a flywheel housing aft. A small instrument panel carries a blank builder's plate. Static geometry: a crankshaft and a valve train are a linkage, and a linkage is not reachable with one rigid node transform. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-diesel-engine-bloc-267773e3","cdnUrl":"https://cdn.3dassets.dev/assets/36515/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-diesel-engine-bloc-267773e3","thumbnailUrl":"https://cdn.3dassets.dev/assets/36515/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36515/v1/poster.webp","blurhash":"U8BX1TyW00$+.l%zM{IB00RPt+V@M0n5S1In","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":285656,"triangles":7152,"vertices":14858,"meshes":9,"materials":9,"textures":0,"animations":[],"boundingBox":{"min":[-1.6200000047683716,-0.00004516787597132893,-0.6876454342782059],"max":[1.6200000047683716,1.8199729648386807,0.8099668731978172]},"sizeMeters":[3.24,1.82,1.498],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:45.641Z","updatedAt":"2026-09-11T21:13:45.747Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36515/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DieselEngineBlockSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36515/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36515/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36515/v1/model.glb\" alt=\"Diesel Engine Block (Submarine Interior and Control Room)\" 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/36515/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/36515/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36516","slug":"submarine-interior-and-control-room-electric-motor-and-14b44502","title":"Electric Motor and Shaft Coupling (Submarine Interior and Control Room)","summary":"A 1.4 m ribbed main motor on a bedframe with a terminal box, brush covers and a blank builder's plate, and 1.6 m of tail shaft aft of it through a bearing pedestal and a stuffing box.","description":"A 1.4 m ribbed main motor on a bedframe with a terminal box, brush covers and a blank builder's plate, and 1.6 m of tail shaft aft of it through a bearing pedestal and a stuffing box. The shaft and its two coupling flanges turn about X on the shaft node and the gland is packed up on the wheel-gland node. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: shaft, wheel-gland. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-electric-motor-and-14b44502","cdnUrl":"https://cdn.3dassets.dev/assets/36516/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-electric-motor-and-14b44502","thumbnailUrl":"https://cdn.3dassets.dev/assets/36516/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36516/v1/poster.webp","blurhash":"U79Qv^_N4TROx[.8s;9F00IT%fWGRPD$j=%M","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":210980,"triangles":5304,"vertices":10811,"meshes":6,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.8500000238418579,-0.000027467974107159288,-0.630043198854467],"max":[2.440000057220459,1.6399295056763394,0.630043198854467]},"sizeMeters":[3.29,1.64,1.26],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:45.763Z","updatedAt":"2026-09-11T21:13:46.190Z","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/36516/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 ElectricMotorAndShaftCouplingSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36516/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/36516/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36516/v1/model.glb\" alt=\"Electric Motor and Shaft Coupling (Submarine Interior and Control Room)\" 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/36516/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/36516/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36517","slug":"submarine-interior-and-control-room-battery-bank-175d6eb4","title":"Battery Bank (Submarine Interior and Control Room)","summary":"A tanked battery bank 2.4 by 1.0 m: a coamed tray holding twelve cells in two rows with vent caps and brass links, a vent trunk with two risers over them, a grating lid to walk on, two meters on the outboard face and an amber warning strip. Static geometry.","description":"A tanked battery bank 2.4 by 1.0 m: a coamed tray holding twelve cells in two rows with vent caps and brass links, a vent trunk with two risers over them, a grating lid to walk on, two meters on the outboard face and an amber warning strip. Static geometry. Metre units, +Y up, the operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-battery-bank-175d6eb4","cdnUrl":"https://cdn.3dassets.dev/assets/36517/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-battery-bank-175d6eb4","thumbnailUrl":"https://cdn.3dassets.dev/assets/36517/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36517/v1/poster.webp","blurhash":"U4BDsM~p00T100.8xuIB009YX7Mxvf.7.SDi","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":330296,"triangles":8032,"vertices":17204,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-1.2000000476837158,0.00007293427349225334,-0.5000030717192838],"max":[1.2799999713897705,1.4999279693220628,0.5460000038146973]},"sizeMeters":[2.48,1.5,1.046],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:47.085Z","updatedAt":"2026-09-11T21:13:47.401Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36517/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BatteryBankSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36517/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36517/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36517/v1/model.glb\" alt=\"Battery Bank (Submarine Interior and Control Room)\" 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/36517/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/36517/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36518","slug":"submarine-interior-and-control-room-fresh-water-tank-fbe184d2","title":"Fresh Water Tank (Submarine Interior and Control Room)","summary":"A welded fresh water tank 1.6 by 0.9 m and 1.5 m tall on two saddles with hold down straps: a bolted manhole on the crown, an external sight glass, a flanged draw connection with a stop valve on the wheel-tank node and a blank builder's plate.","description":"A welded fresh water tank 1.6 by 0.9 m and 1.5 m tall on two saddles with hold down straps: a bolted manhole on the crown, an external sight glass, a flanged draw connection with a stop valve on the wheel-tank node and a blank builder's plate. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: wheel-tank. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-fresh-water-tank-fbe184d2","cdnUrl":"https://cdn.3dassets.dev/assets/36518/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-fresh-water-tank-fbe184d2","thumbnailUrl":"https://cdn.3dassets.dev/assets/36518/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36518/v1/poster.webp","blurhash":"UBAK5T?b00M__4%NIAD%IVofWAIUM{s;xuR%","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":83264,"triangles":1952,"vertices":4116,"meshes":6,"materials":5,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.9200000166893005,0,-0.47002867777728763],"max":[1.2699999803304673,1.6280308802142498,0.47002867777728763]},"sizeMeters":[2.19,1.628,0.94],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:47.382Z","updatedAt":"2026-09-11T21:13:47.489Z","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/36518/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 FreshWaterTankSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36518/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/36518/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36518/v1/model.glb\" alt=\"Fresh Water Tank (Submarine Interior and Control Room)\" 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/36518/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/36518/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36519","slug":"submarine-interior-and-control-room-tool-locker-76779266","title":"Tool Locker (Submarine Interior and Control Room)","summary":"A 1 m tool locker 1.66 m tall: a shadow board of plain tool silhouettes behind a single door on the door node, and one deep drawer under it on the drawer node. The silhouettes are outlines only, naming no tool and no maker.","description":"A 1 m tool locker 1.66 m tall: a shadow board of plain tool silhouettes behind a single door on the door node, and one deep drawer under it on the drawer node. The silhouettes are outlines only, naming no tool and no maker. Metre units, +Y up, the operator side toward +Z, resting on y=0. Named pivoted nodes: door, drawer. Rigid node-transform clips: door-open, door-close, drawer-open and drawer-close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-tool-locker-76779266","cdnUrl":"https://cdn.3dassets.dev/assets/36519/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-tool-locker-76779266","thumbnailUrl":"https://cdn.3dassets.dev/assets/36519/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36519/v1/poster.webp","blurhash":"UFB:${WA00M|~qt79FM{Djay%LxaNGRjt6xu","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":52832,"triangles":1096,"vertices":2464,"meshes":7,"materials":4,"textures":0,"animations":["door-open","door-close","drawer-open","drawer-close"],"boundingBox":{"min":[-0.5099999904632568,0,-0.24001911192928665],"max":[0.5099999904632568,1.6799716391616386,0.29101445506761464]},"sizeMeters":[1.02,1.68,0.531],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:48.888Z","updatedAt":"2026-09-11T21:13:48.998Z","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/36519/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 ToolLockerSubmarineInteriorAndControlRoom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36519/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/36519/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36519/v1/model.glb\" alt=\"Tool Locker (Submarine Interior and Control Room)\" 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/36519/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/36519/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36520","slug":"submarine-interior-and-control-room-cuta-12ad93fc-starter-scene","title":"Cutaway Pressure Hull (Submarine Interior and Control Room)","summary":"A 26 m run of pressure hull built from the pack's own 2 m ring sections, shown as a cutaway: every ring forward of the sealed after compartment has the shell above the centre line removed, so the frames and stringers stand as an open cage and all three compartments are looked...","description":"A 26 m run of pressure hull built from the pack's own 2 m ring sections, shown as a cutaway: every ring forward of the sealed after compartment has the shell above the centre line removed, so the frames and stringers stand as an open cage and all three compartments are looked straight down into. Aft, behind a dogged watertight bulkhead, the machinery space: a six cylinder diesel down the port side, the main motor with its tail shaft running into the sealed after section under the conning tower base, a battery bank, a switchboard, the fresh water tank and a rack of compressed air bottles. Amidships, the accommodation and the control room on one continuous deck: bunks, the heads, the galley range and sink, the wardroom table and bench, then the helm with its two yokes, the planesman at his seat, the ballast board, the chart table, sonar, radar, fire control, the search periscope and the attack scope in its well, the telegraph on the centre line and the ladder up to the escape hatch. Forward, through an open doorway, the torpedo space: two tube breeches in the bow, a weapon on its loading cradle, a second lashed in the stowage rack, lockers and crates. Service pipe runs, cable trays, deckhead lamps and the red watch lighting are hung off the frames down the length of the boat.","status":"published","url":"https://3dassets.dev/assets/submarine-interior-and-control-room-cuta-12ad93fc-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/36520/v1/model.glb","downloadUrl":"https://3dassets.dev/download/submarine-interior-and-control-room-cuta-12ad93fc-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/36520/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36520/v1/poster.webp","blurhash":"U78}6}-;M|%2e._Nxuof00IU?bR*a#00IUkC","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":6256124,"triangles":167552,"vertices":350295,"meshes":354,"materials":12,"textures":0,"animations":[],"boundingBox":{"min":[-13.350000023841858,0,-1.9138882160186768],"max":[13.000098426090181,6.58,1.9138882160186768]},"sizeMeters":[26.35,6.58,3.828],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T21:13:50.985Z","updatedAt":"2026-09-11T21:13:51.202Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36520/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CutawayPressureHullSubmarineInteriorAndControlRoom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36520/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36520/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36520/v1/model.glb\" alt=\"Cutaway Pressure Hull (Submarine Interior and Control Room)\" 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/36520/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/36520/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}],"demo":{"slug":"submarine-interior-and-control-room","title":"Submarine interior and control room","url":"https://3dassets.dev/demos/submarine-interior-and-control-room"}}}