{"data":{"id":132,"slug":"pickups-and-collectibles","title":"Pickups and Collectibles","summary":"Seventy-one animated worldspace collectibles: coins, gems, hearts, potions, ammo, quest items, chests, crates, barrels, urns, sacks, dispensers and spawner pads, every one shipping at least one clip.","description":"A complete set of the things a player runs into and picks up, at level scale rather than HUD scale. Floating collectibles ship looping `spin` and `bob` clips and declare a free origin so they are placed at the hover height a level wants; containers ship `open` and `close`, destructibles ship `break` and spawner pads ship `pulse`, and those rest on the ground at y=0. Destructibles are modelled intact and taken apart by the clip, so the first frame is always the whole object. Eight shared materials, metres, +Y up, +Z forward. Rigid node animation only: there is no skinned rig, no skeleton, no collision volume and no navigation data anywhere in the pack.","url":"https://3dassets.dev/packs/pickups-and-collectibles","coverUrl":"https://cdn.3dassets.dev/assets/11271/v1/poster.webp","assetCount":73,"aiGenerated":true,"aiGeneratedAssetCount":73,"aiModels":["Claude Opus 5"],"aiModelUnspecifiedCount":0,"featured":true,"licenseLabel":"CC0 1.0 Universal","totalBytes":6105764,"totalTriangles":129074,"starterScene":{"id":"11271","slug":"pickups-and-collectibles-collectible-run-b795c86a-starter-scene","title":"Collectible run (Pickups and Collectibles)","summary":"Composed example for Pickups and Collectibles.","description":"Forty-four floating pickups laid out as a four-lane collectible route at their real hover height of 0.95 m and their real 1.25 m spacing, with a treasure pile, a chest, a crate, a barrel, a spawner pad and a respawn ring standing on the ground between the lanes. Two 1.75 m scale posts, one at each end, give the player height a pickup is judged against, since the character packs this run is meant to be walked by are not built yet. Every pickup keeps the origin it ships with, so the y=0.95 in each placement is exactly the number a level would use.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-collectible-run-b795c86a-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/11271/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-collectible-run-b795c86a-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/11271/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11271/v1/poster.webp","blurhash":"U797Lnoy01i~jYxaogRk00o2~VSdkDIoRjxr","category":{"slug":"environments","title":"Environments & Scenes"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"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":1761044,"triangles":40848,"vertices":87728,"meshes":172,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-7.885039521469771,-0.0000335654801113805,-5.0400395214697715],"max":[7.8849899092522495,2.0699999786913397,5.0400395214697715]},"sizeMeters":[15.77,2.07,10.08],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:52.672Z","updatedAt":"2026-09-06T14:39:52.991Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/11271/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CollectibleRunPickupsAndCollectibles(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/11271/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/11271/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11271/v1/model.glb\" alt=\"Collectible run (Pickups and Collectibles)\" 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/11271/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/11271/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},"assets":[{"id":"11206","slug":"pickups-and-collectibles-spinning-coin-817f8bb3","title":"Spinning gold coin (Pickups and Collectibles)","summary":"Standing gold coin, 0.36 m across, with a milled bead edge, a sunk field and a six-point mint star struck proud on both faces.","description":"The classic run collectible. A lathed twenty-sided blank carries a raised rim, a field sunk 0.007 m below it and twenty milling beads round the edge. A six-point mint star, an original abstract mark rather than any real currency device, stands 0.006 m proud of both faces so the coin still reads when it turns edge on. Bounding size 0.38 by 0.38 by 0.06 m; metres, +Y up, +Z forward. Origin: free, at the centre of the coin, on its spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.189 m below it and 0.189 m above it. Clips: `bob` (2.4 s), `spin` (1.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-spinning-coin-817f8bb3","cdnUrl":"https://cdn.3dassets.dev/assets/11206/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-spinning-coin-817f8bb3","thumbnailUrl":"https://cdn.3dassets.dev/assets/11206/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11206/v1/poster.webp","blurhash":"U28zb]-n009H^jxa9ZRj05Rl~1oI%gW=RiD*","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":46648,"triangles":928,"vertices":2784,"meshes":1,"materials":1,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.18815008348384477,-0.18861056864261627,-0.030990914687699385],"max":[0.18815007565316488,0.18861056864261627,0.0309909146876994]},"sizeMeters":[0.376,0.377,0.062],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:32.827Z","updatedAt":"2026-09-06T14:39:33.676Z","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/11206/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 SpinningGoldCoinPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11206/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/11206/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11206/v1/model.glb\" alt=\"Spinning gold coin (Pickups and Collectibles)\" 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/11206/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/11206/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11204","slug":"pickups-and-collectibles-spinning-coin-silver-90156947","title":"Spinning silver coin (Pickups and Collectibles)","summary":"Standing struck silver coin, 0.36 m across, with a milled bead edge, a sunk field and a six-point mint star struck proud on both faces.","description":"The classic run collectible. A lathed twenty-sided blank carries a raised rim, a field sunk 0.007 m below it and twenty milling beads round the edge. A six-point mint star, an original abstract mark rather than any real currency device, stands 0.006 m proud of both faces so the coin still reads when it turns edge on. Bounding size 0.38 by 0.38 by 0.06 m; metres, +Y up, +Z forward. Origin: free, at the centre of the coin, on its spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.189 m below it and 0.189 m above it. Clips: `bob` (2.4 s), `spin` (1.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-spinning-coin-silver-90156947","cdnUrl":"https://cdn.3dassets.dev/assets/11204/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-spinning-coin-silver-90156947","thumbnailUrl":"https://cdn.3dassets.dev/assets/11204/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11204/v1/poster.webp","blurhash":"U05hiP%P004T~q%M4TR500bY^,Vs?doiMx00","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":46680,"triangles":928,"vertices":2784,"meshes":1,"materials":1,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.18815008348384477,-0.18861056864261627,-0.030990914687699385],"max":[0.18815007565316488,0.18861056864261627,0.0309909146876994]},"sizeMeters":[0.376,0.377,0.062],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:32.644Z","updatedAt":"2026-09-06T14:39:33.652Z","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/11204/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 SpinningSilverCoinPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11204/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/11204/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11204/v1/model.glb\" alt=\"Spinning silver coin (Pickups and Collectibles)\" 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/11204/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/11204/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11200","slug":"pickups-and-collectibles-coin-stack-48bebec1","title":"Coin stack (Pickups and Collectibles)","summary":"A leaning stack of eight struck coins with two more propped against it, 0.3 m across, for a larger currency reward than the single coin.","description":"Eight sixteen-sided blanks of falling diameter are stacked with a small random offset and twist so the column leans, and two further coins lean against the base at opposite sides. The top coin carries the same six-point mint star as the single coin so the two read as one currency. Bounding size 0.45 by 0.31 by 0.33 m; metres, +Y up, +Z forward. Origin: free, at the centre of the stack, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.156 m below it and 0.156 m above it. Clips: `bob` (2.6 s), `spin` (2.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-coin-stack-48bebec1","cdnUrl":"https://cdn.3dassets.dev/assets/11200/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-coin-stack-48bebec1","thumbnailUrl":"https://cdn.3dassets.dev/assets/11200/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11200/v1/poster.webp","blurhash":"U3A,XS%i00H;TM?GD%0L00E1~S%NI9D%_1?a","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":106984,"triangles":2184,"vertices":6552,"meshes":1,"materials":1,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.22541939587666945,-0.1556547549238095,-0.16462557659569335],"max":[0.22541940836832566,0.1556547572331551,0.16462557808989683]},"sizeMeters":[0.451,0.311,0.329],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:32.902Z","updatedAt":"2026-09-06T14:39:33.559Z","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/11200/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 CoinStackPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11200/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/11200/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11200/v1/model.glb\" alt=\"Coin stack (Pickups and Collectibles)\" 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/11200/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/11200/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11207","slug":"pickups-and-collectibles-coin-purse-ec3493eb","title":"Coin purse (Pickups and Collectibles)","summary":"Drawstring leather purse 0.3 m tall, gathered at the neck by a cord with two loose tails, a hexagonal mint boss on the front and three coins spilling from the mouth.","description":"A lathed and smoothed leather bag with seven gathered folds pressed into its shoulder, a drawstring torus round the cinched neck and two swept cord tails. Three loose blanks sit in the open mouth and a hexagonal boss is fixed to the front panel. Bounding size 0.32 by 0.31 by 0.26 m; metres, +Y up, +Z forward. Origin: free, at the centre of the purse, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.157 m below it and 0.157 m above it. Clips: `bob` (2.5 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-coin-purse-ec3493eb","cdnUrl":"https://cdn.3dassets.dev/assets/11207/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-coin-purse-ec3493eb","thumbnailUrl":"https://cdn.3dassets.dev/assets/11207/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11207/v1/poster.webp","blurhash":"UCByvst800RixsWERkoc00Rj~UxanPoIkCWZ","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":51556,"triangles":1000,"vertices":3000,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.15873137390390488,-0.15663015842437744,-0.12993886257114565],"max":[0.15873136842473892,0.15663015961109328,0.1299377654595349]},"sizeMeters":[0.317,0.313,0.26],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:32.987Z","updatedAt":"2026-09-06T14:39:33.691Z","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/11207/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 CoinPursePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11207/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/11207/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11207/v1/model.glb\" alt=\"Coin purse (Pickups and Collectibles)\" 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/11207/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/11207/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11202","slug":"pickups-and-collectibles-gem-spinning-9f097d34","title":"Spinning gem, blue (Pickups and Collectibles)","summary":"Eight-sided brilliant-cut blue gem, 0.31 m across the girdle, held in a gold collet of eight claws. Flat shaded so every facet catches the light separately.","description":"A brilliant cut spun on eight segments: pointed culet, pavilion, a girdle 0.023 m deep, a sloped crown and a flat table. Eight gold claws grip the girdle between the facets. The whole cut is flat shaded, so the eight pavilion facets and eight crown facets each take their own normal. Bounding size 0.31 by 0.26 by 0.31 m; metres, +Y up, +Z forward. Origin: free, at the centre of the stone, on its spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.129 m below it and 0.129 m above it. Clips: `bob` (2.2 s), `spin` (1.8 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-gem-spinning-9f097d34","cdnUrl":"https://cdn.3dassets.dev/assets/11202/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-gem-spinning-9f097d34","thumbnailUrl":"https://cdn.3dassets.dev/assets/11202/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11202/v1/poster.webp","blurhash":"UKBNsEt700Ri_NofD$ae4TWB.9of4TWB%Njt","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":11224,"triangles":176,"vertices":528,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.1550000011920929,-0.12900189653719574,-0.1550000011920929],"max":[0.1550000011920929,0.12900188974226623,0.1550000011920929]},"sizeMeters":[0.31,0.258,0.31],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:32.765Z","updatedAt":"2026-09-06T14:39:33.613Z","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/11202/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 SpinningGemBluePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11202/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/11202/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11202/v1/model.glb\" alt=\"Spinning gem, blue (Pickups and Collectibles)\" 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/11202/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/11202/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11203","slug":"pickups-and-collectibles-gem-spinning-ruby-997e3bad","title":"Spinning gem, red (Pickups and Collectibles)","summary":"Eight-sided brilliant-cut red gem, 0.31 m across the girdle, held in a gold collet of eight claws. Flat shaded so every facet catches the light separately.","description":"A brilliant cut spun on eight segments: pointed culet, pavilion, a girdle 0.023 m deep, a sloped crown and a flat table. Eight gold claws grip the girdle between the facets. The whole cut is flat shaded, so the eight pavilion facets and eight crown facets each take their own normal. Bounding size 0.31 by 0.26 by 0.31 m; metres, +Y up, +Z forward. Origin: free, at the centre of the stone, on its spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.129 m below it and 0.129 m above it. Clips: `bob` (2.2 s), `spin` (1.8 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-gem-spinning-ruby-997e3bad","cdnUrl":"https://cdn.3dassets.dev/assets/11203/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-gem-spinning-ruby-997e3bad","thumbnailUrl":"https://cdn.3dassets.dev/assets/11203/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11203/v1/poster.webp","blurhash":"UNEwj~s:0eNZ}[oL9[WV0yWB^6oM0yWB-Vfk","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":11232,"triangles":176,"vertices":528,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.1550000011920929,-0.12900189653719574,-0.1550000011920929],"max":[0.1550000011920929,0.12900188974226623,0.1550000011920929]},"sizeMeters":[0.31,0.258,0.31],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:32.813Z","updatedAt":"2026-09-06T14:39:33.644Z","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/11203/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 SpinningGemRedPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11203/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/11203/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11203/v1/model.glb\" alt=\"Spinning gem, red (Pickups and Collectibles)\" 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/11203/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/11203/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11205","slug":"pickups-and-collectibles-gem-spinning-verdant-820ae573","title":"Spinning gem, green (Pickups and Collectibles)","summary":"Eight-sided brilliant-cut green gem, 0.31 m across the girdle, held in a gold collet of eight claws. Flat shaded so every facet catches the light separately.","description":"A brilliant cut spun on eight segments: pointed culet, pavilion, a girdle 0.023 m deep, a sloped crown and a flat table. Eight gold claws grip the girdle between the facets. The whole cut is flat shaded, so the eight pavilion facets and eight crown facets each take their own normal. Bounding size 0.31 by 0.26 by 0.31 m; metres, +Y up, +Z forward. Origin: free, at the centre of the stone, on its spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.129 m below it and 0.129 m above it. Clips: `bob` (2.2 s), `spin` (1.8 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-gem-spinning-verdant-820ae573","cdnUrl":"https://cdn.3dassets.dev/assets/11205/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-gem-spinning-verdant-820ae573","thumbnailUrl":"https://cdn.3dassets.dev/assets/11205/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11205/v1/poster.webp","blurhash":"UJBD}.tQ00RQ_LofD*WB4VWB.6of4UWB%fj]","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":11244,"triangles":176,"vertices":528,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.1550000011920929,-0.12900189653719574,-0.1550000011920929],"max":[0.1550000011920929,0.12900188974226623,0.1550000011920929]},"sizeMeters":[0.31,0.258,0.31],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:32.780Z","updatedAt":"2026-09-06T14:39:33.669Z","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/11205/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 SpinningGemGreenPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11205/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/11205/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11205/v1/model.glb\" alt=\"Spinning gem, green (Pickups and Collectibles)\" 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/11205/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/11205/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11201","slug":"pickups-and-collectibles-gem-emerald-cut-c51038a6","title":"Emerald-cut gem (Pickups and Collectibles)","summary":"Step-cut octagonal gem 0.27 m across with a wide table and a gold girdle band. The step cut reads as a different stone from the round brilliant at any distance.","description":"A rectangular step cut with clipped corners: four stepped pavilion tiers narrow to a keel, the girdle carries a gold band 0.038 m deep and two crown steps lead to a broad flat table. Same stone family as the brilliant, a genuinely different cut rather than a recolour. Bounding size 0.27 by 0.15 by 0.27 m; metres, +Y up, +Z forward. Origin: free, at the centre of the table, on the spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.075 m below it and 0.075 m above it. Clips: `bob` (2.2 s), `spin` (1.8 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-gem-emerald-cut-c51038a6","cdnUrl":"https://cdn.3dassets.dev/assets/11201/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-gem-emerald-cut-c51038a6","thumbnailUrl":"https://cdn.3dassets.dev/assets/11201/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11201/v1/poster.webp","blurhash":"ULB|?8t74TWB?wkCMwa{00Rj.8oL4TWBx^ay","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":8088,"triangles":112,"vertices":336,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.13519999384880066,-0.07500777946864733,-0.13519999384880066],"max":[0.13519999384880066,0.07500777946864733,0.13519999384880066]},"sizeMeters":[0.27,0.15,0.27],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:32.696Z","updatedAt":"2026-09-06T14:39:33.576Z","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/11201/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 EmeraldCutGemPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11201/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/11201/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11201/v1/model.glb\" alt=\"Emerald-cut gem (Pickups and Collectibles)\" 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/11201/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/11201/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11208","slug":"pickups-and-collectibles-gem-cluster-45f25cf4","title":"Gem cluster (Pickups and Collectibles)","summary":"Six hexagonal crystals of four sizes growing out of a rough ore knot, 0.42 m across, mixing blue and violet stones for a larger find than a single gem.","description":"Six six-sided prisms with pointed feet and pointed tips splay from a jittered ore matrix, each at its own tilt, yaw and roll so no two silhouettes repeat. Four are the blue crystal material and two the violet arcane one. Bounding size 0.32 by 0.35 by 0.13 m; metres, +Y up, +Z forward. Origin: free, at the centre of the ore knot the crystals grow from, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.175 m below it and 0.175 m above it. Clips: `bob` (2.8 s), `spin` (3.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-gem-cluster-45f25cf4","cdnUrl":"https://cdn.3dassets.dev/assets/11208/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-gem-cluster-45f25cf4","thumbnailUrl":"https://cdn.3dassets.dev/assets/11208/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11208/v1/poster.webp","blurhash":"UMBW.0Xk00n7b]s;VtNZ00i{?wb[raNFbu$,","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":13632,"triangles":208,"vertices":624,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.16169006735803726,-0.1748399401194047,-0.0669155653368032],"max":[0.16169790296240535,0.17483974251916864,0.06691556314124703]},"sizeMeters":[0.323,0.35,0.134],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:35.149Z","updatedAt":"2026-09-06T14:39:36.076Z","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/11208/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 GemClusterPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11208/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/11208/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11208/v1/model.glb\" alt=\"Gem cluster (Pickups and Collectibles)\" 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/11208/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/11208/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11213","slug":"pickups-and-collectibles-gold-bar-98063e9a","title":"Gold bar (Pickups and Collectibles)","summary":"Cast bullion bar 0.3 by 0.15 by 0.09 m with draft-tapered sides, rounded corners, a stamped border, three assay punches and a small crystal assay chip.","description":"A rounded rectangle extruded upward with an 0.82 taper, so the bar has the draft angle a real cast ingot needs to leave its mould. The top face carries a raised border frame, three shallow assay punches and a hexagonal crystal chip set at one corner. Bounding size 0.30 by 0.09 by 0.15 m; metres, +Y up, +Z forward. Origin: free, at the centre of the bar, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.047 m below it and 0.047 m above it. Clips: `bob` (2.6 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-gold-bar-98063e9a","cdnUrl":"https://cdn.3dassets.dev/assets/11213/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-gold-bar-98063e9a","thumbnailUrl":"https://cdn.3dassets.dev/assets/11213/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11213/v1/poster.webp","blurhash":"U79Z=Qsm02W;~n%K9bIp02xt?GIV01Iq^%t4","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":13556,"triangles":224,"vertices":672,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.15000000596046448,-0.0464964764084165,-0.0750114474217405],"max":[0.15000000596046448,0.046499147066217376,0.0750114474217405]},"sizeMeters":[0.3,0.093,0.15],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:35.335Z","updatedAt":"2026-09-06T14:39:36.306Z","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/11213/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 GoldBarPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11213/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/11213/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11213/v1/model.glb\" alt=\"Gold bar (Pickups and Collectibles)\" 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/11213/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/11213/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11215","slug":"pickups-and-collectibles-treasure-pile-9305a75e","title":"Treasure pile with floating prize (Pickups and Collectibles)","summary":"Ground heap of fifty-two loose coins piled 0.2 m deep, with a toppled goblet, a spiked crown band, three faceted stones and pearls, under a large gem that hovers and turns inside a gold ring.","description":"The hoard rests on the floor: coins heaped up a shallow dome so the pile has real depth rather than lying flat, a lathed goblet on its side, a five-spike crown band and three faceted stones pushed into the mound. A separate `prize` node holds a large eight-sided gem and a tilted gold ring 0.44 m above the heap; only that node is animated, so the hoard itself never moves. Bounding size 0.72 by 0.53 by 0.60 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a hoard of loose coins lies on the floor and the pile is placed on the ground like any other prop. Clips: `bob` (2.8 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-treasure-pile-9305a75e","cdnUrl":"https://cdn.3dassets.dev/assets/11215/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-treasure-pile-9305a75e","thumbnailUrl":"https://cdn.3dassets.dev/assets/11215/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11215/v1/poster.webp","blurhash":"U6Bf%$%K00em5abHrVoy00IW~okW=:W;x_iw","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":353292,"triangles":7228,"vertices":21684,"meshes":7,"materials":5,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.36042309288681085,-0.000008145706903175953,-0.30190534603298114],"max":[0.3604230832606501,0.5333361620547592,0.301905347552619]},"sizeMeters":[0.721,0.533,0.604],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:35.832Z","updatedAt":"2026-09-06T14:39:36.582Z","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/11215/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 TreasurePileWithFloatingPrizePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11215/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/11215/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11215/v1/model.glb\" alt=\"Treasure pile with floating prize (Pickups and Collectibles)\" 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/11215/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/11215/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11211","slug":"pickups-and-collectibles-banknote-bundle-64b38840","title":"Banknote bundle (Pickups and Collectibles)","summary":"Bundle of fifteen paper notes 0.26 m long under two red cross bands, with the top note fanned clear and a stamped wax seal on the band.","description":"Fourteen note sheets are stacked with a small random yaw and offset so the block reads as loose paper rather than a solid box, and a fifteenth is fanned off the top. Two bands cross the bundle and a wax seal disc with a six-point star is pressed onto the right band. All lettering is deliberately absent: the notes carry no script of any language. Bounding size 0.32 by 0.13 by 0.21 m; metres, +Y up, +Z forward. Origin: free, at the centre of the bundle, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.065 m below it and 0.065 m above it. Clips: `bob` (2.6 s), `spin` (3.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-banknote-bundle-64b38840","cdnUrl":"https://cdn.3dassets.dev/assets/11211/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-banknote-bundle-64b38840","thumbnailUrl":"https://cdn.3dassets.dev/assets/11211/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11211/v1/poster.webp","blurhash":"UDEorg%200R*%M%MR*IU00Nt~pV@9FD%t7x[","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":17448,"triangles":288,"vertices":864,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.16071662189485786,-0.06547242474517742,-0.10564026741183108],"max":[0.1607166242408538,0.06546332347791203,0.10564026651776143]},"sizeMeters":[0.321,0.131,0.211],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:35.449Z","updatedAt":"2026-09-06T14:39:36.266Z","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/11211/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 BanknoteBundlePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11211/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/11211/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11211/v1/model.glb\" alt=\"Banknote bundle (Pickups and Collectibles)\" 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/11211/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/11211/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11214","slug":"pickups-and-collectibles-credit-chip-cf4ef715","title":"Credit chip (Pickups and Collectibles)","summary":"Thick 0.22 m credit chip with one chamfered corner, a six-pad gold contact grid, a lit edge strip front and back and a hexagonal value glyph.","description":"A square slab 0.028 m thick with a chamfered lower-right corner so its orientation is never ambiguous. Six raised contact pads form a grid on the face, a lit strip runs along the lower edge and another across the back above a stiffening rib, and a hexagonal glyph is set into the upper right. Bounding size 0.22 by 0.22 by 0.04 m; metres, +Y up, +Z forward. Origin: free, at the centre of the chip, on the spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.110 m below it and 0.110 m above it. Clips: `bob` (2.2 s), `spin` (1.8 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-credit-chip-cf4ef715","cdnUrl":"https://cdn.3dassets.dev/assets/11214/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-credit-chip-cf4ef715","thumbnailUrl":"https://cdn.3dassets.dev/assets/11214/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11214/v1/poster.webp","blurhash":"U27USK%0009#~qV@9YXSETIpit-,.T%hDO8^","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":11400,"triangles":148,"vertices":444,"meshes":4,"materials":4,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.10999999940395355,-0.10999999940395355,-0.019499847383747056],"max":[0.10999999940395355,0.10999999940395355,0.019502045464644565]},"sizeMeters":[0.22,0.22,0.039],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:35.419Z","updatedAt":"2026-09-06T14:39:36.308Z","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/11214/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 CreditChipPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11214/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/11214/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11214/v1/model.glb\" alt=\"Credit chip (Pickups and Collectibles)\" 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/11214/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/11214/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11209","slug":"pickups-and-collectibles-soul-orb-897226f3","title":"Soul orb (Pickups and Collectibles)","summary":"Violet soul orb 0.38 m across: a jittered emissive core inside two tilted gold rings, with four wisps curling up off its surface.","description":"A lightly jittered sphere in the arcane material sits inside two gold rings set at different tilts, so the silhouette changes as it turns. Four swept wisps taper from the core out and upward. The glow is an emissive material only, not a light source and not a particle system. Bounding size 0.45 by 0.34 by 0.45 m; metres, +Y up, +Z forward. Origin: free, at the centre of the core sphere, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.172 m below it and 0.172 m above it. Clips: `bob` (3.0 s), `spin` (2.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-soul-orb-897226f3","cdnUrl":"https://cdn.3dassets.dev/assets/11209/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-soul-orb-897226f3","thumbnailUrl":"https://cdn.3dassets.dev/assets/11209/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11209/v1/poster.webp","blurhash":"UEB:5Qxb00M_^,WCRjj=00NF~Et80JaxxtR%","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":40032,"triangles":776,"vertices":2328,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.22442950422649877,-0.1723744384693527,-0.2245391458272934],"max":[0.22442950422649882,0.17236526635299126,0.2245391458272934]},"sizeMeters":[0.449,0.345,0.449],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:35.378Z","updatedAt":"2026-09-06T14:39:36.184Z","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/11209/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 SoulOrbPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11209/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/11209/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11209/v1/model.glb\" alt=\"Soul orb (Pickups and Collectibles)\" 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/11209/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/11209/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11210","slug":"pickups-and-collectibles-currency-shard-bb4b3d76","title":"Value shard (Pickups and Collectibles)","summary":"Five-sided crystal value shard 0.34 m tall in a gold collar, with three smaller chips orbiting it. The abstract currency for a game with no coins.","description":"A five-sided tapered prism with pointed ends and a slight lean, wrapped by a lathed gold collar a third of the way up. Three scaled copies at a fifth to a third size sit around it at different angles, so the whole reads as one shard breaking up rather than four identical spikes. Bounding size 0.14 by 0.34 by 0.13 m; metres, +Y up, +Z forward. Origin: free, at the centre of the main shard, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.171 m below it and 0.171 m above it. Clips: `bob` (2.4 s), `spin` (2.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-currency-shard-bb4b3d76","cdnUrl":"https://cdn.3dassets.dev/assets/11210/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-currency-shard-bb4b3d76","thumbnailUrl":"https://cdn.3dassets.dev/assets/11210/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11210/v1/poster.webp","blurhash":"UDAU5FyD00DO.TkCDhWB8_RP-;tlMvi_tTb]","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":10536,"triangles":160,"vertices":480,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.0682936458213145,-0.17051507532596596,-0.06657395511865616],"max":[0.06830120289507823,0.17051507749937503,0.06657395511865616]},"sizeMeters":[0.137,0.341,0.133],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:35.390Z","updatedAt":"2026-09-06T14:39:36.256Z","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/11210/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 ValueShardPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11210/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/11210/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11210/v1/model.glb\" alt=\"Value shard (Pickups and Collectibles)\" 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/11210/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/11210/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11212","slug":"pickups-and-collectibles-heart-pickup-bc4154ff","title":"Heart pickup (Pickups and Collectibles)","summary":"Puffed 0.36 m heart in glowing red with two pale shine chips on the upper lobe and a small gold ring at the cleft. The standard one-unit health restore.","description":"The heart curve is lofted through eleven depth rings that swell to full width at the centre and pinch to a sixteenth at each face, so the solid is genuinely puffed rather than a flat plate. Two shine beads are seated on exact points of that lofted surface rather than at a guessed depth, so neither floats clear of the lobe they sit on, and a gold ring caps the cleft. Bounding size 0.38 by 0.36 by 0.17 m; metres, +Y up, +Z forward. Origin: free, at the centre of the heart, on its spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.180 m below it and 0.180 m above it. Clips: `bob` (2.2 s), `spin` (2.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-heart-pickup-bc4154ff","cdnUrl":"https://cdn.3dassets.dev/assets/11212/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-heart-pickup-bc4154ff","thumbnailUrl":"https://cdn.3dassets.dev/assets/11212/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11212/v1/poster.webp","blurhash":"ULFN6[$*0dI:^jxGIoNa0enj}tS256Naxuo1","category":{"slug":"icons","title":"3D Icons & UI"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":53696,"triangles":1046,"vertices":3138,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.18825989961624146,-0.1796314898890402,-0.08499187276903775],"max":[0.18825989961624146,0.17961871788844852,0.08499187276903775]},"sizeMeters":[0.377,0.359,0.17],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:35.296Z","updatedAt":"2026-09-06T14:39:36.276Z","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/11212/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 HeartPickupPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11212/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/11212/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11212/v1/model.glb\" alt=\"Heart pickup (Pickups and Collectibles)\" 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/11212/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/11212/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11216","slug":"pickups-and-collectibles-heart-pickup-half-31030d9f","title":"Half heart pickup (Pickups and Collectibles)","summary":"Half a heart, torn down a six-step jagged edge, for a half-unit health restore or a damaged health slot on a HUD board.","description":"Built from the right half of the same heart curve, closed by a six-step tear rather than a straight cut, and puffed through the same depth profile so it matches the whole heart exactly where the two would meet. The loft caps the tear itself, so the break is a closed solid and not an open shell, and this half is flat shaded so the six steps and the loft stations keep their own facets. Both shine beads move to the lobe that survives. Bounding size 0.22 by 0.34 by 0.17 m; metres, +Y up, +Z forward. Origin: free, at the centre of the half heart, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.170 m below it and 0.170 m above it. Clips: `bob` (2.2 s), `spin` (2.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-heart-pickup-half-31030d9f","cdnUrl":"https://cdn.3dassets.dev/assets/11216/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-heart-pickup-half-31030d9f","thumbnailUrl":"https://cdn.3dassets.dev/assets/11216/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11216/v1/poster.webp","blurhash":"UHET#o=|0d0{}[kC5Qi_0xEf}t-V0{ni=zOW","category":{"slug":"icons","title":"3D Icons & UI"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":40880,"triangles":792,"vertices":2376,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.10952177609531696,-0.17000000178813934,-0.0850129712607334],"max":[0.10952177612170758,0.17000000178813934,0.0850129712607334]},"sizeMeters":[0.219,0.34,0.17],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:37.683Z","updatedAt":"2026-09-06T14:39:38.627Z","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/11216/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 HalfHeartPickupPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11216/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/11216/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11216/v1/model.glb\" alt=\"Half heart pickup (Pickups and Collectibles)\" 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/11216/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/11216/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11219","slug":"pickups-and-collectibles-health-cross-a3cfdedf","title":"Health cross pickup (Pickups and Collectibles)","summary":"Bone-white medical cross standing 0.11 m proud of a red disc inside a gold bezel, 0.39 m across. The full-heal pickup, readable from any angle.","description":"A twelve-point cross outline puffed through three depth rings so it bulges, standing through a lathed red disc with a chamfered rim and ringed by a smoothed gold bezel. The cross passes right through the disc, so it reads the same from the front and the back. Bounding size 0.41 by 0.41 by 0.11 m; metres, +Y up, +Z forward. Origin: free, at the centre of the disc, on its spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.206 m below it and 0.206 m above it. Clips: `bob` (2.2 s), `spin` (2.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-health-cross-a3cfdedf","cdnUrl":"https://cdn.3dassets.dev/assets/11219/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-health-cross-a3cfdedf","thumbnailUrl":"https://cdn.3dassets.dev/assets/11219/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11219/v1/poster.webp","blurhash":"UKF4p6-C00InxZxGjHJ600NZ~Ct7I:I:f*$*","category":{"slug":"icons","title":"3D Icons & UI"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":30592,"triangles":568,"vertices":1704,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.20600000023841858,-0.20600000023841858,-0.055006560250044884],"max":[0.20600000023841858,0.20600000023841858,0.055006560250044884]},"sizeMeters":[0.412,0.412,0.11],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:37.900Z","updatedAt":"2026-09-06T14:39:38.861Z","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/11219/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 HealthCrossPickupPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11219/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/11219/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11219/v1/model.glb\" alt=\"Health cross pickup (Pickups and Collectibles)\" 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/11219/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/11219/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11220","slug":"pickups-and-collectibles-health-potion-665dba20","title":"Health potion (Pickups and Collectibles)","summary":"Round-bellied health flask 0.35 m tall: red draught in a bulbous body with a gold waist band, a frosted neck, a blank paper label and a driven cork.","description":"The belly and the shoulder are one smoothed lathe in the red material, so the flask reads as full of draught rather than as tinted glass; the frosted neck above it is a second lathe and the cork a short tapered cylinder driven into it. A gold band circles the waist, a second the neck ring, and a blank label panel is fixed to the front. The label carries no lettering of any language. Bounding size 0.26 by 0.33 by 0.26 m; metres, +Y up, +Z forward. Origin: free, at the centre of the flask, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.166 m below it and 0.166 m above it. Clips: `bob` (2.4 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-health-potion-665dba20","cdnUrl":"https://cdn.3dassets.dev/assets/11220/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-health-potion-665dba20","thumbnailUrl":"https://cdn.3dassets.dev/assets/11220/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11220/v1/poster.webp","blurhash":"UJE1%Dxa00IoKKa|w1f60KRk}[t7,@j@K3ju","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":31836,"triangles":576,"vertices":1728,"meshes":4,"materials":4,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.13199999928474426,-0.16600622577395036,-0.12869667583696173],"max":[0.13199999928474426,0.1659963220506111,0.12869667583696173]},"sizeMeters":[0.264,0.332,0.257],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:37.757Z","updatedAt":"2026-09-06T14:39:37.909Z","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/11220/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 HealthPotionPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11220/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/11220/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11220/v1/model.glb\" alt=\"Health potion (Pickups and Collectibles)\" 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/11220/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/11220/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11218","slug":"pickups-and-collectibles-health-potion-large-529c137a","title":"Large health potion (Pickups and Collectibles)","summary":"Half-litre health flask 0.46 m tall with a wider belly, two carry lugs, a cord-wrapped neck and a wax cap over the cork. The greater restore in the same family.","description":"Same draught and the same gold waist band as the small flask, on a body a third wider and taller. Two lug rings are set into the shoulders for a carry strap, three cord wraps grip the neck under the cork, and a domed wax cap seals the top. Bounding size 0.35 by 0.45 by 0.35 m; metres, +Y up, +Z forward. Origin: free, at the centre of the flask, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.225 m below it and 0.225 m above it. Clips: `bob` (2.4 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-health-potion-large-529c137a","cdnUrl":"https://cdn.3dassets.dev/assets/11218/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-health-potion-large-529c137a","thumbnailUrl":"https://cdn.3dassets.dev/assets/11218/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11218/v1/poster.webp","blurhash":"UHDuJTxZ00IpKJbFw3jI0KR*}[xH=Ln,K1Sd","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":56976,"triangles":1100,"vertices":3300,"meshes":4,"materials":4,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.17599999904632568,-0.22499999403953544,-0.17599999904632568],"max":[0.17599999904632568,0.22499998807907104,0.17599999904632568]},"sizeMeters":[0.352,0.45,0.352],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:38.026Z","updatedAt":"2026-09-06T14:39:38.843Z","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/11218/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 LargeHealthPotionPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11218/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/11218/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11218/v1/model.glb\" alt=\"Large health potion (Pickups and Collectibles)\" 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/11218/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/11218/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11217","slug":"pickups-and-collectibles-mana-potion-68badad2","title":"Mana potion (Pickups and Collectibles)","summary":"Conical mana flask 0.4 m tall: a wide flat-based cone of blue draught under a frosted neck, capped by a violet crystal stopper with three wisps curling off it.","description":"A straight-sided cone with a flat base, which stands where the round health flask would roll, so the two are told apart by silhouette alone and not only by colour. The stopper is a six-sided crystal rather than a cork, ringed in gold, with three tapered wisps rising from the seal. Bounding size 0.25 by 0.40 by 0.24 m; metres, +Y up, +Z forward. Origin: free, at the centre of the flask, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.199 m below it and 0.199 m above it. Clips: `bob` (2.4 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-mana-potion-68badad2","cdnUrl":"https://cdn.3dassets.dev/assets/11217/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-mana-potion-68badad2","thumbnailUrl":"https://cdn.3dassets.dev/assets/11217/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11217/v1/poster.webp","blurhash":"UDCGu%%300E04TWB.mocD%WA-:tRlTbbrDnj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":29364,"triangles":510,"vertices":1530,"meshes":5,"materials":5,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.125,-0.19899856795463577,-0.1218718527787103],"max":[0.125,0.19900464770088364,0.1218718527787103]},"sizeMeters":[0.25,0.398,0.244],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:37.717Z","updatedAt":"2026-09-06T14:39:37.810Z","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/11217/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 ManaPotionPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11217/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/11217/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11217/v1/model.glb\" alt=\"Mana potion (Pickups and Collectibles)\" 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/11217/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/11217/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11222","slug":"pickups-and-collectibles-stamina-orb-4c547290","title":"Stamina orb (Pickups and Collectibles)","summary":"Green stamina orb 0.3 m across, caged by three iron rings at different tilts, with a gold lightning bolt standing proud on the front and the back.","description":"A smooth green sphere inside three smoothed iron rings set at three different tilts, so the cage never presents the same profile twice as it turns. A six-point bolt glyph is extruded 0.035 m proud of both poles of the sphere and a small dome caps the top ring crossing. Bounding size 0.30 by 0.30 by 0.29 m; metres, +Y up, +Z forward. Origin: free, at the centre of the orb, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.150 m below it and 0.150 m above it. Clips: `bob` (2.0 s), `spin` (2.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-stamina-orb-4c547290","cdnUrl":"https://cdn.3dassets.dev/assets/11222/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-stamina-orb-4c547290","thumbnailUrl":"https://cdn.3dassets.dev/assets/11222/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11222/v1/poster.webp","blurhash":"UF9HX$tQ00Mzxua{M{of00Rj_LxuIUayxua{","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":50084,"triangles":972,"vertices":2916,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.15000000596046448,-0.15046663663987647,-0.14772942876522566],"max":[0.15000000596046448,0.15046829743836632,0.14772942876522566]},"sizeMeters":[0.3,0.301,0.295],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:37.997Z","updatedAt":"2026-09-06T14:39:38.047Z","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/11222/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 StaminaOrbPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11222/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/11222/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11222/v1/model.glb\" alt=\"Stamina orb (Pickups and Collectibles)\" 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/11222/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/11222/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11221","slug":"pickups-and-collectibles-shield-bubble-fc3fcce0","title":"Shield bubble pickup (Pickups and Collectibles)","summary":"Iron heater shield with a gold rim, cross bands and a domed boss, held inside three arcs of blue energy that stand in for a bubble no alpha channel could draw.","description":"The shield plate is a nine-point heater outline puffed through three rings and backed by a slightly larger gold rim plate, with a domed boss and two cross bands on the face. Three swept arcs of the blue material orbit it at three tilts: the pack has no alpha blending, so a bubble is drawn as ribs rather than as a transparent shell. Bounding size 0.54 by 0.50 by 0.31 m; metres, +Y up, +Z forward. Origin: free, at the centre of the shield plate, which is also the centre of the bubble arcs, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.249 m below it and 0.249 m above it. Clips: `bob` (2.6 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-shield-bubble-fc3fcce0","cdnUrl":"https://cdn.3dassets.dev/assets/11221/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-shield-bubble-fc3fcce0","thumbnailUrl":"https://cdn.3dassets.dev/assets/11221/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11221/v1/poster.webp","blurhash":"U68;*|.900Rk.T%gDiIA00e-?aIAMcMx.8t6","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":41728,"triangles":794,"vertices":2382,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.27032534396523245,-0.24861673744966725,-0.15567610531088033],"max":[0.27032532179480784,0.24860993741231888,0.155676110726351]},"sizeMeters":[0.541,0.497,0.311],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:38.058Z","updatedAt":"2026-09-06T14:39:38.905Z","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/11221/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 ShieldBubblePickupPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11221/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/11221/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11221/v1/model.glb\" alt=\"Shield bubble pickup (Pickups and Collectibles)\" 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/11221/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/11221/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11223","slug":"pickups-and-collectibles-invincibility-star-59aa350c","title":"Invincibility star (Pickups and Collectibles)","summary":"Five-point gold star 0.42 m across, puffed to a 0.115 m ridge, with a violet cabochon at each face centre and a glowing bead on every point.","description":"The star outline is lofted through a rounded depth profile, so each arm has a raised centre ridge running out to its tip rather than a flat slab face. A violet disc is set into both face centres and a bead sits on each of the five points. It spins faster than the rest of the pack at 1.2 s a turn, which is what a temporary power-up wants. Bounding size 0.43 by 0.41 by 0.12 m; metres, +Y up, +Z forward. Origin: free, at the centre of the star, on its spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.207 m below it and 0.207 m above it. Clips: `bob` (1.8 s), `spin` (1.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-invincibility-star-59aa350c","cdnUrl":"https://cdn.3dassets.dev/assets/11223/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-invincibility-star-59aa350c","thumbnailUrl":"https://cdn.3dassets.dev/assets/11223/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11223/v1/poster.webp","blurhash":"U59?:.-:00D+xt-qaf9s00M}~9%L9GE2oc%0","category":{"slug":"icons","title":"3D Icons & UI"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":29524,"triangles":556,"vertices":1668,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.2158898264169693,-0.20743001646920262,-0.057496152415057136],"max":[0.2158898264169693,0.20743001985303894,0.057496152415057136]},"sizeMeters":[0.432,0.415,0.115],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:38.079Z","updatedAt":"2026-09-06T14:39:38.112Z","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/11223/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 InvincibilityStarPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11223/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/11223/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11223/v1/model.glb\" alt=\"Invincibility star (Pickups and Collectibles)\" 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/11223/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/11223/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11225","slug":"pickups-and-collectibles-speed-boots-2680cecb","title":"Winged speed boots (Pickups and Collectibles)","summary":"A pair of ankle boots 0.39 m tall with shaped soles, two buckle straps and a cuff ring each, and three feathers fanning back off both outer ankles. The movement-speed power-up.","description":"Each boot is a six-point sole plate under two rounded solids, one for the foot and one for the shaft, with two buckle straps carrying side buckles and a lathed cuff ring at the top. Three feathers of falling angle fan back from the outer ankle and reach 0.27 m behind the heel, so the wings are part of the silhouette rather than a detail on the side. The pair is toed slightly outward so the two boots never overlap as the pickup turns. Bounding size 0.36 by 0.38 by 0.49 m; metres, +Y up, +Z forward. Origin: free, at the centre of the pair, level with the ankles, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.188 m below it and 0.188 m above it. Clips: `bob` (2.4 s), `spin` (3.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-speed-boots-2680cecb","cdnUrl":"https://cdn.3dassets.dev/assets/11225/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-speed-boots-2680cecb","thumbnailUrl":"https://cdn.3dassets.dev/assets/11225/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11225/v1/poster.webp","blurhash":"UGE2zc~V02E24-D*s;ai9zR+nNV@s;-o%Mt7","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":66884,"triangles":1320,"vertices":3960,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.1795637309551239,-0.1875016490845322,-0.24597213870585385],"max":[0.1795637309551239,0.18751249372122727,0.24598051574673593]},"sizeMeters":[0.359,0.375,0.492],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:39.632Z","updatedAt":"2026-09-06T14:39:40.535Z","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/11225/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 WingedSpeedBootsPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11225/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/11225/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11225/v1/model.glb\" alt=\"Winged speed boots (Pickups and Collectibles)\" 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/11225/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/11225/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11224","slug":"pickups-and-collectibles-damage-rune-4f5842ab","title":"Damage rune (Pickups and Collectibles)","summary":"Toothed stone rune disc 0.4 m across with twelve iron teeth round the rim and three stacked red chevrons struck into both faces. The attack-up buff token.","description":"A chamfered stone disc ringed by twelve iron teeth set radially into its edge, which is what tells it apart from a coin at a glance. Three chevrons stand 0.016 m proud of each face, stacked 0.062 m apart so they read as a set rather than as one blurred mark. The chevrons are an original abstract mark and not a character of any writing system. Bounding size 0.35 by 0.46 by 0.09 m; metres, +Y up, +Z forward. Origin: free, at the centre of the disc, on its spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.230 m below it and 0.230 m above it. Clips: `bob` (2.4 s), `spin` (2.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-damage-rune-4f5842ab","cdnUrl":"https://cdn.3dassets.dev/assets/11224/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-damage-rune-4f5842ab","thumbnailUrl":"https://cdn.3dassets.dev/assets/11224/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11224/v1/poster.webp","blurhash":"UJBp62xa00Efxut6RjM|0KS1~CweRjRjj]xt","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":22156,"triangles":392,"vertices":1176,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.1749971039161424,-0.23000000417232513,-0.04399774212469881],"max":[0.1749971039161424,0.23000000417232513,0.04399774212469881]},"sizeMeters":[0.35,0.46,0.088],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:39.393Z","updatedAt":"2026-09-06T14:39:39.454Z","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/11224/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 DamageRunePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11224/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/11224/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11224/v1/model.glb\" alt=\"Damage rune (Pickups and Collectibles)\" 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/11224/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/11224/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11226","slug":"pickups-and-collectibles-magnet-orb-3f1b0148","title":"Magnet orb (Pickups and Collectibles)","summary":"Horseshoe magnet 0.36 m tall with its jaws opening downward onto red and blue pole blocks, drawing a violet orb up towards them inside two rings of pull. The loot-attraction power-up.","description":"The yoke is a rectangular bar bent through fourteen straight segments, so it keeps flat facets rather than reading as a bent tube, and it is swept from below the right jaw over the top to below the left, which puts the opening at the bottom where a horseshoe magnet has it. Square pole blocks sit square to each jaw end in the blue and red materials, and a violet orb hangs just below the opening inside two concentric rings that stand in for the field, sized to clear the yoke rather than cut through it. Bounding size 0.38 by 0.49 by 0.12 m; metres, +Y up, +Z forward. Origin: free, at the centre of the yoke, with the held orb hanging below it, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.245 m below it and 0.245 m above it. Clips: `bob` (2.4 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-magnet-orb-3f1b0148","cdnUrl":"https://cdn.3dassets.dev/assets/11226/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-magnet-orb-3f1b0148","thumbnailUrl":"https://cdn.3dassets.dev/assets/11226/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11226/v1/poster.webp","blurhash":"UBAS_c,t00AoIms:%4R*0JKN^m+v%jNa9WxF","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":37508,"triangles":692,"vertices":2076,"meshes":4,"materials":4,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.18927226960659027,-0.24525000715255738,-0.062001406315150324],"max":[0.18927226960659027,0.245260742442516,0.062001406315150324]},"sizeMeters":[0.379,0.491,0.124],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:39.574Z","updatedAt":"2026-09-06T14:39:40.568Z","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/11226/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 MagnetOrbPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11226/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/11226/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11226/v1/model.glb\" alt=\"Magnet orb (Pickups and Collectibles)\" 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/11226/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/11226/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11227","slug":"pickups-and-collectibles-ammo-box-ce6f5049","title":"Ammunition box (Pickups and Collectibles)","summary":"Olive steel ammunition box 0.37 m wide with corner brackets, a folding carry handle, a latch and five loose brass rounds standing in the open top.","description":"A rounded steel case with four corner brackets, a raised lid rim, a spring latch on the front face and a folding handle swept over the top. Five two-piece rounds, brass case and dark bullet, stand in the open lid so the box reads as ammunition rather than as a plain crate. A blank stencil bar is painted on the front; it carries no lettering. Bounding size 0.37 by 0.32 by 0.24 m; metres, +Y up, +Z forward. Origin: free, at the centre of the box, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.160 m below it and 0.160 m above it. Clips: `bob` (2.4 s), `spin` (3.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-ammo-box-ce6f5049","cdnUrl":"https://cdn.3dassets.dev/assets/11227/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-ammo-box-ce6f5049","thumbnailUrl":"https://cdn.3dassets.dev/assets/11227/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11227/v1/poster.webp","blurhash":"U7CG;|-q00E102o|.PW900M|xtt3*5xaVyM|","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":51924,"triangles":1008,"vertices":3024,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.1850000023841858,-0.16001159772944928,-0.12148899764626664],"max":[0.1850000023841858,0.1599998476813098,0.12148900163977785]},"sizeMeters":[0.37,0.32,0.243],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:39.649Z","updatedAt":"2026-09-06T14:39:40.591Z","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/11227/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 AmmunitionBoxPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11227/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/11227/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11227/v1/model.glb\" alt=\"Ammunition box (Pickups and Collectibles)\" 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/11227/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/11227/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11228","slug":"pickups-and-collectibles-magazine-pickup-d49e9a8b","title":"Curved magazine (Pickups and Collectibles)","summary":"Curved box magazine 0.34 m long with feed lips, a chambered round showing at the top, three lit witness slots down the spine, a floor plate and a side catch.","description":"The body is a rounded rectangular section extruded to full length and then bent backward by a quadratic warp, so the curve is real geometry with flat facets rather than a stack of tilted boxes. A two-piece round sits in the feed lips, three witness slots in the lit blue material run down the spine so the load state reads at a glance, and a canted floor plate closes the bottom. Bounding size 0.10 by 0.39 by 0.16 m; metres, +Y up, +Z forward. Origin: free, at the centre of the magazine body, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.196 m below it and 0.196 m above it. Clips: `bob` (2.4 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-magazine-pickup-d49e9a8b","cdnUrl":"https://cdn.3dassets.dev/assets/11228/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-magazine-pickup-d49e9a8b","thumbnailUrl":"https://cdn.3dassets.dev/assets/11228/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11228/v1/poster.webp","blurhash":"U56u9V.S0000xaM{Io%g8wI9%h?^x]tRV@Mx","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":16860,"triangles":276,"vertices":828,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.05099333890395811,-0.1955411144935472,-0.08216820588339258],"max":[0.05099334087091139,0.19554110156065393,0.08216820064910338]},"sizeMeters":[0.102,0.391,0.164],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:40.323Z","updatedAt":"2026-09-06T14:39:41.206Z","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/11228/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 CurvedMagazinePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11228/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/11228/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11228/v1/model.glb\" alt=\"Curved magazine (Pickups and Collectibles)\" 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/11228/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/11228/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11229","slug":"pickups-and-collectibles-shell-cluster-fe714789","title":"Shotgun shell cluster (Pickups and Collectibles)","summary":"Five shotgun shells 0.21 m tall, each a brass head under a red hull with a six-point crimp, bound together by two cord loops with a loose tail.","description":"Each shell is three lathed pieces: a rimmed brass head, a straight hull and a six-point star crimp on the mouth. The five lean at their own small angles inside two cord loops, and one loose cord tail curls away from the upper loop so the bundle does not read as a solid block. Bounding size 0.23 by 0.21 by 0.20 m; metres, +Y up, +Z forward. Origin: free, at the centre of the bundle, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.106 m below it and 0.106 m above it. Clips: `bob` (2.4 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-shell-cluster-fe714789","cdnUrl":"https://cdn.3dassets.dev/assets/11229/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-shell-cluster-fe714789","thumbnailUrl":"https://cdn.3dassets.dev/assets/11229/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11229/v1/poster.webp","blurhash":"URGH6:-U0LWC}us:EeoL0eNG-VxGAANZwgso","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":65336,"triangles":1286,"vertices":3858,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.11767635878672877,-0.10604178790429883,-0.09749321603884531],"max":[0.11767636600384435,0.1060411764122503,0.09749321603884531]},"sizeMeters":[0.235,0.212,0.195],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:40.443Z","updatedAt":"2026-09-06T14:39:41.361Z","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/11229/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 ShotgunShellClusterPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11229/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/11229/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11229/v1/model.glb\" alt=\"Shotgun shell cluster (Pickups and Collectibles)\" 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/11229/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/11229/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11230","slug":"pickups-and-collectibles-arrow-bundle-43239b7e","title":"Arrow bundle (Pickups and Collectibles)","summary":"Seven arrows 0.62 m long bound by two red straps: timber shafts, four-sided iron bodkin heads with collars and three green and bone vanes on every nock end.","description":"The shafts stand in a ring of 0.035 m radius, each with its own small lean and length so the heads do not line up. Every arrow gets a four-sided bodkin point on a collar and three fletching vanes at 120 degrees, alternating green and bone. Two straps bind the bundle at a third and two thirds of its height. Bounding size 0.13 by 0.76 by 0.23 m; metres, +Y up, +Z forward. Origin: free, at the centre of the bundle, level with the middle strap, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.379 m below it and 0.379 m above it. Clips: `bob` (2.6 s), `spin` (3.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-arrow-bundle-43239b7e","cdnUrl":"https://cdn.3dassets.dev/assets/11230/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-arrow-bundle-43239b7e","thumbnailUrl":"https://cdn.3dassets.dev/assets/11230/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11230/v1/poster.webp","blurhash":"U69QHdx@00DR4WR7?t%y0}X7}srtWEofodNG","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":54888,"triangles":1036,"vertices":3108,"meshes":5,"materials":5,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.06676516423874115,-0.37873862757565757,-0.1130647679567337],"max":[0.06676607967749049,0.37873417460618675,0.11306476390361786]},"sizeMeters":[0.134,0.757,0.226],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:40.506Z","updatedAt":"2026-09-06T14:39:41.455Z","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/11230/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 ArrowBundlePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11230/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/11230/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11230/v1/model.glb\" alt=\"Arrow bundle (Pickups and Collectibles)\" 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/11230/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/11230/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11231","slug":"pickups-and-collectibles-fuel-canister-a26cf55b","title":"Fuel canister (Pickups and Collectibles)","summary":"Pressed-steel fuel can 0.44 m tall with the classic X rib on both flanks, a three-bar top handle between two posts, a red screw cap and a canted pouring spout.","description":"A rounded steel body with two diagonal stiffening ribs and a horizontal rib pressed into both flanks, all sized so they stay inside the panel they are pressed into. Three parallel handle bars run between two posts on the top plate, a red screw cap sits beside them and a short spout leans off it. A blank gold contents panel is fixed to the front and carries no lettering. Bounding size 0.22 by 0.46 by 0.15 m; metres, +Y up, +Z forward. Origin: free, at the centre of the can, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.232 m below it and 0.232 m above it. Clips: `bob` (2.6 s), `spin` (3.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-fuel-canister-a26cf55b","cdnUrl":"https://cdn.3dassets.dev/assets/11231/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-fuel-canister-a26cf55b","thumbnailUrl":"https://cdn.3dassets.dev/assets/11231/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11231/v1/poster.webp","blurhash":"U36Hv3tR00R4~XkC4-nOR*j]V@R%EJxF$,EN","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":19100,"triangles":324,"vertices":972,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.10999748478883249,-0.23210042715072648,-0.0729940164047214],"max":[0.10999748478883249,0.2321004337000268,0.0729940164047214]},"sizeMeters":[0.22,0.464,0.146],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:40.460Z","updatedAt":"2026-09-06T14:39:40.494Z","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/11231/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 FuelCanisterPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11231/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/11231/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11231/v1/model.glb\" alt=\"Fuel canister (Pickups and Collectibles)\" 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/11231/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/11231/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11232","slug":"pickups-and-collectibles-battery-cell-c49562a1","title":"Battery cell (Pickups and Collectibles)","summary":"Sealed power cell 0.34 m tall: a ribbed steel sleeve with four lit charge windows, a domed positive terminal and a flat gold base contact.","description":"A fourteen-sided sleeve between two rolled rib rings, with four charge windows in the lit blue material set at ninety degrees so the state reads from any side. The positive terminal is a stepped lathe on top and the negative a flat contact disc under the base. Bounding size 0.17 by 0.34 by 0.17 m; metres, +Y up, +Z forward. Origin: free, at the centre of the cell, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.170 m below it and 0.170 m above it. Clips: `bob` (2.2 s), `spin` (2.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-battery-cell-c49562a1","cdnUrl":"https://cdn.3dassets.dev/assets/11232/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-battery-cell-c49562a1","thumbnailUrl":"https://cdn.3dassets.dev/assets/11232/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11232/v1/poster.webp","blurhash":"U484ue%200IV=@f59wWY00Rk.mt6t-ozn3V@","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":28260,"triangles":516,"vertices":1548,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.08500000089406967,-0.16949999298155308,-0.08500000089406967],"max":[0.08500000089406967,0.16949998807907105,0.08500000089406967]},"sizeMeters":[0.17,0.339,0.17],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:40.964Z","updatedAt":"2026-09-06T14:39:41.025Z","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/11232/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 BatteryCellPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11232/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/11232/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11232/v1/model.glb\" alt=\"Battery cell (Pickups and Collectibles)\" 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/11232/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/11232/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11233","slug":"pickups-and-collectibles-ore-chunk-471f6693","title":"Ore chunk (Pickups and Collectibles)","summary":"Jittered ore boulder 0.38 m across, three lumps fused together, with five blue crystal seams breaking out of it and six gold flecks in the lower faces.","description":"Three jittered spheres of different seeds are fused into one irregular mass, so no two faces repeat and the silhouette never reads as a ball. Five six-sided crystals of falling size push out at their own angles and six small gold pentagons are set into the lower faces. Bounding size 0.39 by 0.33 by 0.38 m; metres, +Y up, +Z forward. Origin: free, at the centre of the main mass, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.167 m below it and 0.167 m above it. Clips: `bob` (2.8 s), `spin` (3.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-ore-chunk-471f6693","cdnUrl":"https://cdn.3dassets.dev/assets/11233/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-ore-chunk-471f6693","thumbnailUrl":"https://cdn.3dassets.dev/assets/11233/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11233/v1/poster.webp","blurhash":"U57ng=%g00Mx_Nf*D$RP00IT_NtR00V@.9yD","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":24448,"triangles":434,"vertices":1302,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.19534284276486893,-0.16687385959140583,-0.18836703663127252],"max":[0.1953428347635124,0.16687387279487775,0.1883670344204596]},"sizeMeters":[0.391,0.334,0.377],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:42.037Z","updatedAt":"2026-09-06T14:39:43.055Z","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/11233/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 OreChunkPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11233/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/11233/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11233/v1/model.glb\" alt=\"Ore chunk (Pickups and Collectibles)\" 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/11233/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/11233/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11236","slug":"pickups-and-collectibles-wood-bundle-33eb886a","title":"Firewood bundle (Pickups and Collectibles)","summary":"Six split logs about 0.5 m long, end grain showing at both cuts, bound by two cord loops with knots, with two leafy sprigs pushed under the straps.","description":"Six eight-sided logs of different lengths and slight yaws are packed into a hexagonal bundle, each capped at both ends with a pale end-grain disc so the cuts read. Two cord loops with knots bind the bundle, and two twigs with four leaves each are pushed under them. Bounding size 1.04 by 0.28 by 0.21 m; metres, +Y up, +Z forward. Origin: free, at the centre of the bundle, on the axis of the logs, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.140 m below it and 0.140 m above it. Clips: `bob` (2.8 s), `spin` (3.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-wood-bundle-33eb886a","cdnUrl":"https://cdn.3dassets.dev/assets/11236/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-wood-bundle-33eb886a","thumbnailUrl":"https://cdn.3dassets.dev/assets/11236/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11236/v1/poster.webp","blurhash":"U8B:g4vz4pt+s7_2t6R%00TJ~Vn4JY00WBxH","category":{"slug":"nature","title":"Nature & Landscape"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":55088,"triangles":1072,"vertices":3216,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.5196027812410612,-0.13974380859552404,-0.10431272761418355],"max":[0.5196027699063998,0.13973450051474726,0.10431272761418355]},"sizeMeters":[1.039,0.279,0.209],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:42.246Z","updatedAt":"2026-09-06T14:39:43.261Z","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/11236/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 FirewoodBundlePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11236/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/11236/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11236/v1/model.glb\" alt=\"Firewood bundle (Pickups and Collectibles)\" 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/11236/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/11236/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11234","slug":"pickups-and-collectibles-food-pickup-29871028","title":"Roast joint pickup (Pickups and Collectibles)","summary":"Roast joint on the bone, 0.57 m long, with five crisped skin ridges over the back, three knuckles at the exposed end and a herb sprig tucked into the shoulder.","description":"The meat is a ten-sided section lofted along its own axis through seven stations that swell and taper, so it is a real tapered joint rather than a stretched sphere, and it is squashed slightly front to back. The bone runs out of the narrow end to three knuckles, five crisped ridges follow the top of the joint at the height the surface actually reaches, and three herb leaves are set into the shoulder. Bounding size 0.55 by 0.23 by 0.16 m; metres, +Y up, +Z forward. Origin: free, at the centre of the joint, on the axis the bone runs along, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.115 m below it and 0.115 m above it. Clips: `bob` (2.6 s), `spin` (3.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-food-pickup-29871028","cdnUrl":"https://cdn.3dassets.dev/assets/11234/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-food-pickup-29871028","thumbnailUrl":"https://cdn.3dassets.dev/assets/11234/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11234/v1/poster.webp","blurhash":"U8B:Z@^#02E7%J_2bID*00I]~UxBI^00e._2","category":{"slug":"food","title":"Food & Drink"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":27988,"triangles":508,"vertices":1524,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.2770000100135802,-0.11469188138366104,-0.0809495843597686],"max":[0.2770000200271606,0.11469531220302251,0.0809495843597686]},"sizeMeters":[0.554,0.229,0.162],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:41.999Z","updatedAt":"2026-09-06T14:39:42.089Z","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/11234/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 RoastJointPickupPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11234/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/11234/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11234/v1/model.glb\" alt=\"Roast joint pickup (Pickups and Collectibles)\" 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/11234/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/11234/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11235","slug":"pickups-and-collectibles-water-flask-ec932d48","title":"Water flask (Pickups and Collectibles)","summary":"Flattened leather waterskin 0.4 m tall with stitched flank seams, a ringed wooden neck, a bone stopper, a carry strap and a blue water glyph on the front.","description":"A fourteen-sided section lofted through seven stations, squashed front to back so the skin reads as a flattened flask rather than a bottle. Sixteen stitch blocks run up both flanks, a wooden neck with a gold ring takes a bone stopper, and a swept strap loops over the shoulders. A hexagonal water glyph is set into the front panel. Bounding size 0.32 by 0.41 by 0.23 m; metres, +Y up, +Z forward. Origin: free, at the centre of the body, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.205 m below it and 0.205 m above it. Clips: `bob` (2.4 s), `spin` (3.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-water-flask-ec932d48","cdnUrl":"https://cdn.3dassets.dev/assets/11235/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-water-flask-ec932d48","thumbnailUrl":"https://cdn.3dassets.dev/assets/11235/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11235/v1/poster.webp","blurhash":"UDCip$%M00D%%gxuMxIU01WB~UofROR*tRoJ","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":39476,"triangles":732,"vertices":2196,"meshes":4,"materials":4,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.15872691006126285,-0.20538049936294542,-0.11350256605122105],"max":[0.15872692438794025,0.20538050361067187,0.11349914115053597]},"sizeMeters":[0.317,0.411,0.227],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:42.218Z","updatedAt":"2026-09-06T14:39:43.185Z","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/11235/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 WaterFlaskPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11235/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/11235/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11235/v1/model.glb\" alt=\"Water flask (Pickups and Collectibles)\" 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/11235/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/11235/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11237","slug":"pickups-and-collectibles-key-floating-b874ab93","title":"Floating key (Pickups and Collectibles)","summary":"Gold ward key 0.42 m long: a three-lobed ring bow with a violet stone set in it, a round shaft with a collar and two wards on the bit.","description":"A smoothed torus bow with three lobes spaced round it and a six-sided stone set flat into the ring, a plain round shaft with a lathed collar at its midpoint, and a bit carrying two wards of different lengths plus a tip stop. The key lies in the XY plane, so it turns edge on twice per spin and reads as a flat key rather than a rod. Bounding size 0.19 by 0.43 by 0.08 m; metres, +Y up, +Z forward. Origin: free, at the middle of the shaft, on the spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.216 m below it and 0.216 m above it. Clips: `bob` (2.4 s), `spin` (2.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-key-floating-b874ab93","cdnUrl":"https://cdn.3dassets.dev/assets/11237/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-key-floating-b874ab93","thumbnailUrl":"https://cdn.3dassets.dev/assets/11237/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11237/v1/poster.webp","blurhash":"U26@$M%J004?~oxZ4oE34=WY?Fsl02R*?as;","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":31788,"triangles":604,"vertices":1812,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.09524035200710393,-0.215624995470047,-0.040876762372992675],"max":[0.09524035200710393,0.2156250030398369,0.04088122568780037]},"sizeMeters":[0.19,0.431,0.082],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:42.596Z","updatedAt":"2026-09-06T14:39:42.650Z","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/11237/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 FloatingKeyPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11237/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/11237/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11237/v1/model.glb\" alt=\"Floating key (Pickups and Collectibles)\" 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/11237/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/11237/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11239","slug":"pickups-and-collectibles-key-floating-ornate-5649aa90","title":"Ornate floating key (Pickups and Collectibles)","summary":"Master key 0.56 m long with a five-lobed bow woven with four filigree rings, a nine-step twisted shaft and a four-ward bit with two side barbs.","description":"Same family as the plain key and a clearly harder lock: the bow gains two lobes and four woven rings, the shaft is nine flats each rotated 18 degrees on the last so it reads as twisted metal, and the bit carries four wards of falling length plus two barbs on the far side. Bounding size 0.29 by 0.57 by 0.11 m; metres, +Y up, +Z forward. Origin: free, at the middle of the shaft, on the spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.285 m below it and 0.285 m above it. Clips: `bob` (2.6 s), `spin` (2.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-key-floating-ornate-5649aa90","cdnUrl":"https://cdn.3dassets.dev/assets/11239/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-key-floating-ornate-5649aa90","thumbnailUrl":"https://cdn.3dassets.dev/assets/11239/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11239/v1/poster.webp","blurhash":"U27KYQ--000N~o%14p9a05ai~Sk74pRl.7xs","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":64676,"triangles":1288,"vertices":3864,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.14502059110196816,-0.28539877471608244,-0.05450234753923823],"max":[0.14502059110196816,0.2853987878830997,0.054503625023966495]},"sizeMeters":[0.29,0.571,0.109],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:42.855Z","updatedAt":"2026-09-06T14:39:42.905Z","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/11239/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 OrnateFloatingKeyPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11239/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/11239/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11239/v1/model.glb\" alt=\"Ornate floating key (Pickups and Collectibles)\" 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/11239/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/11239/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11238","slug":"pickups-and-collectibles-key-card-439873a1","title":"Key card (Pickups and Collectibles)","summary":"Access card 0.34 by 0.22 m and 0.01 m thick, with a lanyard slot cut into the top edge, a ribbed gold chip, a lit strip, a rear magnetic band and a violet insertion arrow.","description":"A rounded card outline with a real lanyard slot cut into the top edge, extruded 0.01 m thick. The chip is a rounded gold pad with three contact ribs, a lit strip crosses the upper right, a dark magnetic band runs across the back and a violet arrow shows which way it goes into the reader. No lettering of any language appears on it. Bounding size 0.34 by 0.22 by 0.02 m; metres, +Y up, +Z forward. Origin: free, at the centre of the card, on the spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.110 m below it and 0.110 m above it. Clips: `bob` (2.2 s), `spin` (2.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-key-card-439873a1","cdnUrl":"https://cdn.3dassets.dev/assets/11238/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-key-card-439873a1","thumbnailUrl":"https://cdn.3dassets.dev/assets/11238/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11238/v1/poster.webp","blurhash":"UHI#u+%f00%N%g~pt6D%00j]?INFs;oyR%IU","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":14752,"triangles":204,"vertices":612,"meshes":5,"materials":5,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.17000000178813934,-0.10999908560173743,-0.009247108999444543],"max":[0.17000000178813934,0.10999908560173743,0.009247108477903903]},"sizeMeters":[0.34,0.22,0.018],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:42.874Z","updatedAt":"2026-09-06T14:39:43.889Z","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/11238/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 KeyCardPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11238/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/11238/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11238/v1/model.glb\" alt=\"Key card (Pickups and Collectibles)\" 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/11238/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/11238/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11240","slug":"pickups-and-collectibles-scroll-pickup-3ee4f74f","title":"Sealed scroll (Pickups and Collectibles)","summary":"Rolled parchment 0.6 m wide on a turned rod with knobbed finials, two gold cap rings, a red tie with a loose tail and a part-unrolled leaf hanging down the front under a violet seal.","description":"The roll is a fourteen-sided cylinder with three sunken rings at each end standing in for the spiral of the wound sheet, threaded on a wooden rod with turned finials. A red tie crosses the roll with one cord tail curling away, and a curved leaf hangs down the front carrying a six-point seal. The leaf is genuinely curved about the roll axis rather than a flat plate, and carries no writing. Bounding size 1.20 by 0.34 by 0.18 m; metres, +Y up, +Z forward. Origin: free, at the centre of the roll, on the rod axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.172 m below it and 0.172 m above it. Clips: `bob` (2.6 s), `spin` (3.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-scroll-pickup-3ee4f74f","cdnUrl":"https://cdn.3dassets.dev/assets/11240/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-scroll-pickup-3ee4f74f","thumbnailUrl":"https://cdn.3dassets.dev/assets/11240/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11240/v1/poster.webp","blurhash":"UCB:W@E200=|xa?aoM9F00?G?bEKM{4ot6~q","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":75224,"triangles":1462,"vertices":4386,"meshes":5,"materials":5,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.6000000357627869,-0.17169289223679915,-0.09232511493658747],"max":[0.6000000119209289,0.17170686935318982,0.09231825488062732]},"sizeMeters":[1.2,0.343,0.185],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:43.161Z","updatedAt":"2026-09-06T14:39:44.042Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/11240/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 SealedScrollPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11240/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/11240/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11240/v1/model.glb\" alt=\"Sealed scroll (Pickups and Collectibles)\" 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/11240/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/11240/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11241","slug":"pickups-and-collectibles-map-fragment-43e27e4d","title":"Torn map fragment (Pickups and Collectibles)","summary":"Curled scrap of chart 0.39 by 0.29 m, torn along its top and bottom edges and narrowing to both ends, with a dashed red route ending in a cross, a compass rose and two scorch patches.","description":"Nineteen stations lofted into a curved ribbon of regular quads, so the paper curls without the fan of long thin triangles an ear-clipped extrusion would leave across the face. The long edges saw-tooth station by station and the sheet narrows over the last two stations at each end, so no edge is a straight cut. Five dashed route segments follow the curve of the sheet, a cross marks their end, a compass rose sits in a ring at the top left and two scorch patches are burnt onto the face. No place names or writing appear. Bounding size 0.38 by 0.29 by 0.03 m; metres, +Y up, +Z forward. Origin: free, at the centre of the sheet, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.146 m below it and 0.146 m above it. Clips: `bob` (2.6 s), `spin` (3.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-map-fragment-43e27e4d","cdnUrl":"https://cdn.3dassets.dev/assets/11241/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-map-fragment-43e27e4d","thumbnailUrl":"https://cdn.3dassets.dev/assets/11241/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11241/v1/poster.webp","blurhash":"UBHeg^Rk00xv%L~pRk0K00xt^,M{tRM|oIIU","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":27764,"triangles":488,"vertices":1464,"meshes":4,"materials":4,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.1899999976158142,-0.14551378371837276,-0.015197366046717009],"max":[0.1899999976158142,0.14551377084376949,0.015210203198037425]},"sizeMeters":[0.38,0.291,0.03],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:43.630Z","updatedAt":"2026-09-06T14:39:43.675Z","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/11241/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 TornMapFragmentPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11241/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/11241/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11241/v1/model.glb\" alt=\"Torn map fragment (Pickups and Collectibles)\" 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/11241/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/11241/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11242","slug":"pickups-and-collectibles-rune-stone-5af0c64b","title":"Rune stone (Pickups and Collectibles)","summary":"Irregular stone slab 0.42 m tall with a four-stroke violet rune carved proud of both faces, three chipped nodules on its edges and two patches of moss.","description":"An eight-point irregular outline extruded 0.075 m, so no two edges are the same length and it never reads as a rectangle. A four-stroke rune stands 0.016 m proud of each face, mirrored so it is correct from either side, with three chipped nodules on the rim and two moss patches on the front. The rune is an original abstract mark and not a character of any real alphabet. Bounding size 0.28 by 0.47 by 0.10 m; metres, +Y up, +Z forward. Origin: free, at the centre of the slab, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.237 m below it and 0.237 m above it. Clips: `bob` (3.0 s), `spin` (3.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-rune-stone-5af0c64b","cdnUrl":"https://cdn.3dassets.dev/assets/11242/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-rune-stone-5af0c64b","thumbnailUrl":"https://cdn.3dassets.dev/assets/11242/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11242/v1/poster.webp","blurhash":"UDEfHDxu00IT$,t7NENG00Ri~qxbj[Rjafs;","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":18260,"triangles":304,"vertices":912,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.1401994193196556,-0.23709735750155525,-0.05040391471145317],"max":[0.14019940828437868,0.23709734798474236,0.050410689111574626]},"sizeMeters":[0.28,0.474,0.101],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:44.087Z","updatedAt":"2026-09-06T14:39:44.204Z","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/11242/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 RuneStonePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11242/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/11242/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11242/v1/model.glb\" alt=\"Rune stone (Pickups and Collectibles)\" 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/11242/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/11242/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11243","slug":"pickups-and-collectibles-rune-stone-broken-b3ff0ba9","title":"Broken rune stone (Pickups and Collectibles)","summary":"The rune stone snapped across the middle: the two halves hang apart at opposing tilts with the rune broken between them and three chips shed around the break.","description":"The same slab outline split at y=-0.02, with each half sheared sideways and given an opposing tilt so the fracture line reads clearly. The rune rides on the upper half only, so it is visibly incomplete, and three shed chips float around the gap. Useful as the failed or half-collected state of the intact stone. Bounding size 0.36 by 0.54 by 0.10 m; metres, +Y up, +Z forward. Origin: free, at the gap between the two halves, where the intact stone centre used to be, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.269 m below it and 0.269 m above it. Clips: `bob` (3.2 s), `spin` (4.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-rune-stone-broken-b3ff0ba9","cdnUrl":"https://cdn.3dassets.dev/assets/11243/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-rune-stone-broken-b3ff0ba9","thumbnailUrl":"https://cdn.3dassets.dev/assets/11243/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11243/v1/poster.webp","blurhash":"UFDStGxu00IU%4NFIn%300NF~q%3R%xut8IU","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":15388,"triangles":260,"vertices":780,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.18017932076179782,-0.2685620967253355,-0.049509080919585446],"max":[0.18017930670947202,0.2685621198312136,0.04950907829698108]},"sizeMeters":[0.36,0.537,0.099],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:44.714Z","updatedAt":"2026-09-06T14:39:45.415Z","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/11243/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 BrokenRuneStonePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11243/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/11243/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11243/v1/model.glb\" alt=\"Broken rune stone (Pickups and Collectibles)\" 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/11243/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/11243/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11244","slug":"pickups-and-collectibles-medallion-5f90921b","title":"Medallion on a chain (Pickups and Collectibles)","summary":"Gold medallion 0.21 m across with eight radial ribs and a red cabochon domed on both faces, hanging from a bail under an arc of nine alternating chain links.","description":"A chamfered disc with eight ribs set radially into its rim, a domed red cabochon on each face and a bail ring at the top. The chain is nine torus links laid along an arc with every other link turned ninety degrees, which is what makes a chain read as a chain rather than a row of rings. Bounding size 0.37 by 0.41 by 0.10 m; metres, +Y up, +Z forward. Origin: free, at the middle of the pendant, between the disc and the chain arc, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.205 m below it and 0.205 m above it. Clips: `bob` (2.6 s), `spin` (2.8 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-medallion-5f90921b","cdnUrl":"https://cdn.3dassets.dev/assets/11244/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-medallion-5f90921b","thumbnailUrl":"https://cdn.3dassets.dev/assets/11244/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11244/v1/poster.webp","blurhash":"U38p.5xG009]_KtPDkMy0N%K~99H+$-nAB0g","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":71372,"triangles":1428,"vertices":4284,"meshes":2,"materials":2,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.18705500533083674,-0.20549271990152596,-0.05000000074505806],"max":[0.1870550053308367,0.2054927201142669,0.05000000074505806]},"sizeMeters":[0.374,0.411,0.1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:44.723Z","updatedAt":"2026-09-06T14:39:45.616Z","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/11244/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 MedallionOnAChainPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11244/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/11244/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11244/v1/model.glb\" alt=\"Medallion on a chain (Pickups and Collectibles)\" 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/11244/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/11244/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11245","slug":"pickups-and-collectibles-crystal-skull-8dca4e95","title":"Crystal skull (Pickups and Collectibles)","summary":"Carved crystal skull 0.27 m tall with a heavy brow, cheekbones, dark sockets holding violet lights, a triangular nasal void and two rows of nine bone teeth.","description":"A crystal cranium stretched slightly front to back under a brow bar, with cheekbones angled off both temples. The sockets are dark inset ovals with a small glowing bead in each, the nasal void is a triangular prism, and the jaw is a lathed ring carrying an upper and a lower row of nine teeth curved round the arch. Bounding size 0.23 by 0.30 by 0.26 m; metres, +Y up, +Z forward. Origin: free, at the centre of the cranium, on the spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.153 m below it and 0.153 m above it. Clips: `bob` (3.0 s), `spin` (3.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-crystal-skull-8dca4e95","cdnUrl":"https://cdn.3dassets.dev/assets/11245/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-crystal-skull-8dca4e95","thumbnailUrl":"https://cdn.3dassets.dev/assets/11245/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11245/v1/poster.webp","blurhash":"UBDKGW_N00D*%#oKV@tR00IT?^rq4TMyogWB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":47704,"triangles":904,"vertices":2712,"meshes":4,"materials":4,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.11500849854459724,-0.15270000536441802,-0.1318969799362271],"max":[0.11500849854459724,0.152700008559227,0.1318969772182553]},"sizeMeters":[0.23,0.305,0.264],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:44.763Z","updatedAt":"2026-09-06T14:39:45.711Z","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/11245/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 CrystalSkullPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11245/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/11245/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11245/v1/model.glb\" alt=\"Crystal skull (Pickups and Collectibles)\" 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/11245/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/11245/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11246","slug":"pickups-and-collectibles-relic-idol-b79a633d","title":"Relic idol (Pickups and Collectibles)","summary":"Carved gold idol 0.55 m tall on a two-step plinth: a tapered body with folded arms, a hexagonal stone set in the chest and a masked head under a three-spike crown.","description":"The torso is a rounded rectangular section lofted through four stations that pinch at the waist and flare at the shoulders, standing on a two-step plinth. Both arms fold across the chest, a hexagonal stone is set above them, and the head carries a five-point pale mask with two inset eyes and a crown of three spikes. The figure is an original design and depicts no real deity, person or heritage artefact. Bounding size 0.27 by 0.53 by 0.18 m; metres, +Y up, +Z forward. Origin: free, at the middle of the torso, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.265 m below it and 0.265 m above it. Clips: `bob` (3.0 s), `spin` (3.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-relic-idol-b79a633d","cdnUrl":"https://cdn.3dassets.dev/assets/11246/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-relic-idol-b79a633d","thumbnailUrl":"https://cdn.3dassets.dev/assets/11246/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11246/v1/poster.webp","blurhash":"U49@68.7004T?w%M4n4.E1M{sr-:DOD%%h_M","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":17356,"triangles":288,"vertices":864,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.13400829380059964,-0.2649999797344208,-0.09200472923566287],"max":[0.13400829380059964,0.2649999916553497,0.09200225830661084]},"sizeMeters":[0.268,0.53,0.184],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:44.822Z","updatedAt":"2026-09-06T14:39:45.801Z","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/11246/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 RelicIdolPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11246/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/11246/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11246/v1/model.glb\" alt=\"Relic idol (Pickups and Collectibles)\" 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/11246/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/11246/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11247","slug":"pickups-and-collectibles-sigil-tablet-6e65247e","title":"Sigil tablet (Pickups and Collectibles)","summary":"Bevelled stone tablet 0.24 by 0.32 m in a gold frame with four corner studs, a nine-block sigil grid glowing violet and a hanging ring at the top.","description":"The plate is lofted through four rings so both faces carry a real bevel rather than a sharp edge. A gold frame runs inside the border with a stud at each corner, and nine violet blocks of three different sizes and four different rotations fill the centre as a sigil grid. A bail and ring at the top say it is meant to be hung. The blocks are abstract and spell nothing. Bounding size 0.24 by 0.39 by 0.07 m; metres, +Y up, +Z forward. Origin: free, at the centre of the tablet, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.194 m below it and 0.194 m above it. Clips: `bob` (2.8 s), `spin` (3.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-sigil-tablet-6e65247e","cdnUrl":"https://cdn.3dassets.dev/assets/11247/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-sigil-tablet-6e65247e","thumbnailUrl":"https://cdn.3dassets.dev/assets/11247/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11247/v1/poster.webp","blurhash":"UFD9YZjF00W,R%xaoNIo00X5_4sXs=j[R~WB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":29584,"triangles":544,"vertices":1632,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.11999389361603222,-0.19349999642372132,-0.0335007624039263],"max":[0.11999389361603222,0.19349999809265137,0.033505546418722304]},"sizeMeters":[0.24,0.387,0.067],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:45.164Z","updatedAt":"2026-09-06T14:39:45.240Z","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/11247/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 SigilTabletPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11247/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/11247/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11247/v1/model.glb\" alt=\"Sigil tablet (Pickups and Collectibles)\" 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/11247/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/11247/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11248","slug":"pickups-and-collectibles-quest-token-604feacc","title":"Quest token (Pickups and Collectibles)","summary":"Hexagonal quest token 0.3 m across, bevelled on both faces, with a bar-and-hexagon attention mark struck proud front and back and six studs round the rim.","description":"A six-sided plate lofted through four rings so both faces are bevelled, with a vertical bar above a small hexagon standing 0.016 m proud of each face. Six cube studs sit at the rim vertices. The mark is an original abstract device: it is not a letter, a numeral or any real emblem. Bounding size 0.32 by 0.29 by 0.09 m; metres, +Y up, +Z forward. Origin: free, at the centre of the token, on the spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.147 m below it and 0.147 m above it. Clips: `bob` (2.4 s), `spin` (2.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-quest-token-604feacc","cdnUrl":"https://cdn.3dassets.dev/assets/11248/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-quest-token-604feacc","thumbnailUrl":"https://cdn.3dassets.dev/assets/11248/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11248/v1/poster.webp","blurhash":"U89GX7wg02E_xtt6M}M|0gXO}sw4oeRkays,","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":12192,"triangles":184,"vertices":552,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.16099999845027924,-0.14743879371005977,-0.04349662126530391],"max":[0.16099999845027924,0.14743879371005977,0.04349662126530391]},"sizeMeters":[0.322,0.295,0.087],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:45.449Z","updatedAt":"2026-09-06T14:39:45.498Z","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/11248/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 QuestTokenPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11248/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/11248/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11248/v1/model.glb\" alt=\"Quest token (Pickups and Collectibles)\" 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/11248/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/11248/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11250","slug":"pickups-and-collectibles-quest-token-arcane-6ed960d1","title":"Arcane quest token (Pickups and Collectibles)","summary":"Hexagonal quest token 0.3 m across, bevelled on both faces, with a bar-and-hexagon attention mark struck proud front and back and six studs round the rim.","description":"A six-sided plate lofted through four rings so both faces are bevelled, with a vertical bar above a small hexagon standing 0.016 m proud of each face. Six cube studs sit at the rim vertices. The mark is an original abstract device: it is not a letter, a numeral or any real emblem. Bounding size 0.32 by 0.29 by 0.09 m; metres, +Y up, +Z forward. Origin: free, at the centre of the token, on the spin axis, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.147 m below it and 0.147 m above it. Clips: `bob` (2.4 s), `spin` (2.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-quest-token-arcane-6ed960d1","cdnUrl":"https://cdn.3dassets.dev/assets/11250/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-quest-token-arcane-6ed960d1","thumbnailUrl":"https://cdn.3dassets.dev/assets/11250/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11250/v1/poster.webp","blurhash":"U68W]dxu009Y.5%0ICD,0ct2?1a8oGbFa%M~","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":12212,"triangles":184,"vertices":552,"meshes":3,"materials":3,"textures":0,"animations":["bob","spin"],"boundingBox":{"min":[-0.16099999845027924,-0.14743879371005977,-0.04349662126530391],"max":[0.16099999845027924,0.14743879371005977,0.04349662126530391]},"sizeMeters":[0.322,0.295,0.087],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:45.867Z","updatedAt":"2026-09-06T14:39:45.932Z","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/11250/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 ArcaneQuestTokenPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11250/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/11250/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11250/v1/model.glb\" alt=\"Arcane quest token (Pickups and Collectibles)\" 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/11250/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/11250/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11249","slug":"pickups-and-collectibles-treasure-chest-146482ce","title":"Treasure chest (Pickups and Collectibles)","summary":"Banded timber chest 0.9 m wide with a barrel lid, three iron straps, corner feet, a gold lock plate with a keyhole and a hasp that rides on the lid.","description":"The body is a rounded timber box under three vertical iron straps and two horizontal bands, standing on four corner feet, with a gold lock plate and a hexagonal keyhole on the front. The lid is a real half-round shell extruded across the full width with three iron ribs over it, and its hasp and lifting ring belong to the same `lid` node, so opening the chest carries the hasp with it. `open` swings the lid back 100 degrees and holds; `close` starts from that held angle and brings it down again, so the one model plays both directions. Bounding size 0.88 by 0.69 by 0.58 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a chest sits on the floor and is placed like any other prop. Clips: `open` (1.6 s), `close` (1.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-treasure-chest-146482ce","cdnUrl":"https://cdn.3dassets.dev/assets/11249/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-treasure-chest-146482ce","thumbnailUrl":"https://cdn.3dassets.dev/assets/11249/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11249/v1/poster.webp","blurhash":"U7D9Iw~V009G9at7%1IV00M{?GRlR-jF%1t7","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":31000,"triangles":536,"vertices":1608,"meshes":6,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.4399999976158142,-0.0000335654801113805,-0.29050852353410483],"max":[0.4399999976158142,0.6919999647140502,0.2904799647074753]},"sizeMeters":[0.88,0.692,0.581],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:45.661Z","updatedAt":"2026-09-06T14:39:46.688Z","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/11249/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 TreasureChestPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11249/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/11249/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11249/v1/model.glb\" alt=\"Treasure chest (Pickups and Collectibles)\" 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/11249/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/11249/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11251","slug":"pickups-and-collectibles-treasure-chest-open-429349e7","title":"Treasure chest, open (Pickups and Collectibles)","summary":"The same chest with its lid already thrown back 100 degrees and sixteen coins and two crystals spilled in the body. The looted state, with a `close` clip back to shut.","description":"Identical body and lid geometry to the closed chest, with the lid authored at its open angle so a level can place an already-looted chest with nothing running. Sixteen loose coins and two crystals lie in the well. The `close` clip swings the lid the 100 degrees back to shut, which is exactly the reverse of the closed chest opening. Bounding size 0.88 by 0.98 by 0.91 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because the chest still sits on the floor with its lid thrown back. Clips: `close` (1.4 s), `open` (1.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-treasure-chest-open-429349e7","cdnUrl":"https://cdn.3dassets.dev/assets/11251/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-treasure-chest-open-429349e7","thumbnailUrl":"https://cdn.3dassets.dev/assets/11251/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11251/v1/poster.webp","blurhash":"U6C$lr~o00D%0Lt2-:EN00IW^%bEsEs:%1s:","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":127060,"triangles":2504,"vertices":7512,"meshes":8,"materials":5,"textures":0,"animations":["close","open"],"boundingBox":{"min":[-0.4399999976158142,-0.0000335654801113805,-0.4558559659819277],"max":[0.4399999976158142,0.9817656814326188,0.4558359452129744]},"sizeMeters":[0.88,0.982,0.912],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:46.756Z","updatedAt":"2026-09-06T14:39:46.795Z","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/11251/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 TreasureChestOpenPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11251/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/11251/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11251/v1/model.glb\" alt=\"Treasure chest, open (Pickups and Collectibles)\" 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/11251/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/11251/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11252","slug":"pickups-and-collectibles-lockbox-2e3e5b81","title":"Iron lockbox (Pickups and Collectibles)","summary":"Small riveted iron strongbox 0.42 m wide with a flat lid, eight gold rivets, a lock face with a hexagonal keyhole and an arched carry handle on the lid.","description":"A flat-lidded metal box, deliberately smaller and squarer than the timber chest so the two never read as the same container. Eight rivets, a raised lock face with a keyhole and a lid rim finish the body; the arched handle and the lid trim belong to the `lid` node and swing with it. `open` lifts the lid 95 degrees and holds, `close` brings it back down from there. Bounding size 0.44 by 0.31 by 0.30 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a strongbox stands on a shelf or a floor. Clips: `open` (1.2 s), `close` (1.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-lockbox-2e3e5b81","cdnUrl":"https://cdn.3dassets.dev/assets/11252/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-lockbox-2e3e5b81","thumbnailUrl":"https://cdn.3dassets.dev/assets/11252/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11252/v1/poster.webp","blurhash":"U57nUfxv00InogohaxRh00M{_4xuM_jXkCS7","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":32584,"triangles":596,"vertices":1788,"meshes":4,"materials":2,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.2199999988079071,-0.000007326474211089007,-0.14799157477817468],"max":[0.2199999988079071,0.31199452145277357,0.14799157740077903]},"sizeMeters":[0.44,0.312,0.296],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:46.955Z","updatedAt":"2026-09-06T14:39:47.965Z","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/11252/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 IronLockboxPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11252/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/11252/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11252/v1/model.glb\" alt=\"Iron lockbox (Pickups and Collectibles)\" 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/11252/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/11252/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11253","slug":"pickups-and-collectibles-lockbox-open-727b0139","title":"Iron lockbox, open (Pickups and Collectibles)","summary":"The lockbox with its lid standing open at 95 degrees and five crystals lying inside. The opened state, with a `close` clip that shuts it again.","description":"The same body and lid, with the lid authored at its open angle and five crystals of two colours and different sizes lying in the well. Place it where a box has already been opened, or run `close` to shut it in front of the player. Bounding size 0.44 by 0.52 by 0.37 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because the box still stands on its base with the lid thrown back. Clips: `close` (1.2 s), `open` (1.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-lockbox-open-727b0139","cdnUrl":"https://cdn.3dassets.dev/assets/11253/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-lockbox-open-727b0139","thumbnailUrl":"https://cdn.3dassets.dev/assets/11253/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11253/v1/poster.webp","blurhash":"U68XLX?u00D*%Mx]RjMx00M{_4s:9DM_%Mxu","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":39920,"triangles":716,"vertices":2148,"meshes":6,"materials":4,"textures":0,"animations":["close","open"],"boundingBox":{"min":[-0.2199999988079071,-0.000007326474211089007,-0.187147964053749],"max":[0.2199999988079071,0.5176288809951971,0.1871343820931094]},"sizeMeters":[0.44,0.518,0.374],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:47.133Z","updatedAt":"2026-09-06T14:39:48.118Z","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/11253/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 IronLockboxOpenPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11253/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/11253/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11253/v1/model.glb\" alt=\"Iron lockbox, open (Pickups and Collectibles)\" 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/11253/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/11253/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11254","slug":"pickups-and-collectibles-supply-crate-39c27166","title":"Supply crate (Pickups and Collectibles)","summary":"Timber supply crate 0.8 m cubed built as six separable pieces: floor and corner posts, four plank walls and a plank lid, each an independent node with its own pivot.","description":"Every wall is four boards with a 12 mm gap between them, two rails and two iron corner brackets, and each wall has its pivot on the bottom edge it would fall from. The `break` clip holds the crate intact through a 0.3 s shudder, then throws the lid up and the four walls outward with a tumble, so the destroyed state needs no second model. Bounding size 0.80 by 0.83 by 0.80 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a crate stands on its own floor panel. Clips: `break` (1.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-supply-crate-39c27166","cdnUrl":"https://cdn.3dassets.dev/assets/11254/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-supply-crate-39c27166","thumbnailUrl":"https://cdn.3dassets.dev/assets/11254/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11254/v1/poster.webp","blurhash":"U5GH;p_100E1_4X8IAt402IWITt6X9aNNFRP","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":36236,"triangles":540,"vertices":1620,"meshes":11,"materials":2,"textures":0,"animations":["break"],"boundingBox":{"min":[-0.401991138243641,0,-0.40199113751720944],"max":[0.401991138243641,0.8279899318501287,0.40199113751720944]},"sizeMeters":[0.804,0.828,0.804],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:47.110Z","updatedAt":"2026-09-06T14:39:48.141Z","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/11254/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 SupplyCratePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11254/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/11254/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11254/v1/model.glb\" alt=\"Supply crate (Pickups and Collectibles)\" 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/11254/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/11254/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11255","slug":"pickups-and-collectibles-supply-crate-staved-d11822d7","title":"Supply crate, front sprung (Pickups and Collectibles)","summary":"The supply crate already forced: the front panel is sprung 26 degrees out on its bottom edge with one board missing, showing seven coins and a crystal in the well.","description":"Same frame, floor and four walls as the intact crate, with the front panel rotated out about its base and one of its four boards removed so the contents show. The `break` clip finishes the job: the lid and the four walls throw clear and hold. Bounding size 0.80 by 0.83 by 0.79 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because the crate is still standing on its floor panel. Clips: `break` (1.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-supply-crate-staved-d11822d7","cdnUrl":"https://cdn.3dassets.dev/assets/11255/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-supply-crate-staved-d11822d7","thumbnailUrl":"https://cdn.3dassets.dev/assets/11255/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11255/v1/poster.webp","blurhash":"U3GRYP~o0001%%IAD$-.00E2M_%1^*o#i]Mx","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":78724,"triangles":1392,"vertices":4176,"meshes":13,"materials":4,"textures":0,"animations":["break"],"boundingBox":{"min":[-0.401991138243641,-1.4901161193847656e-8,-0.3968871918773801],"max":[0.401991138243641,0.8279899318501287,0.39690540036614597]},"sizeMeters":[0.804,0.828,0.794],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:47.497Z","updatedAt":"2026-09-06T14:39:48.374Z","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/11255/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 SupplyCrateFrontSprungPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11255/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/11255/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11255/v1/model.glb\" alt=\"Supply crate, front sprung (Pickups and Collectibles)\" 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/11255/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/11255/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11256","slug":"pickups-and-collectibles-barrel-13010d3b","title":"Staved barrel (Pickups and Collectibles)","summary":"Coopered barrel 0.92 m tall built from twelve real staves in four separable quarters, three iron hoops and a head, all of which come apart on the `break` clip.","description":"Each stave is a curved solid with an inner and an outer face 0.03 m apart, swept along a bulged profile, and the twelve are grouped into four quarters so a destruction throws sensible pieces rather than twelve splinters. Three hoops share one node and the head and its hoop another. The `break` clip shudders the barrel for 0.3 s, then lifts the hoops, throws the head and splays the four quarters outward. Bounding size 0.70 by 0.92 by 0.70 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a barrel stands on its own base. Clips: `break` (1.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-barrel-13010d3b","cdnUrl":"https://cdn.3dassets.dev/assets/11256/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-barrel-13010d3b","thumbnailUrl":"https://cdn.3dassets.dev/assets/11256/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11256/v1/poster.webp","blurhash":"U8CiaC%L00IVxuWBV@t601M{~U%LIVfkt7ay","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":118104,"triangles":2284,"vertices":6852,"meshes":7,"materials":2,"textures":0,"animations":["break"],"boundingBox":{"min":[-0.3519824380812531,2.384185793236071e-9,-0.3519824380812531],"max":[0.3519824380812531,0.9194031724492623,0.3519824380812531]},"sizeMeters":[0.704,0.919,0.704],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:47.329Z","updatedAt":"2026-09-06T14:39:47.386Z","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/11256/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 StavedBarrelPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11256/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/11256/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11256/v1/model.glb\" alt=\"Staved barrel (Pickups and Collectibles)\" 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/11256/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/11256/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11257","slug":"pickups-and-collectibles-barrel-staved-161fa1e5","title":"Barrel, staves sprung (Pickups and Collectibles)","summary":"The barrel already forced: one stave sprung out of the wall, the top hoop slipped down and canted, and the head swung back off the mouth. The half-broken state.","description":"Same twelve staves, hoops and head as the intact barrel, with one stave rotated out of its quarter, the top hoop dropped 0.16 m and tilted, and the head swung 58 degrees back off the mouth so the barrel is plainly open. The `break` clip finishes the collapse from there. Bounding size 0.80 by 1.35 by 0.70 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a barrel stands on its own base. Clips: `break` (1.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-barrel-staved-161fa1e5","cdnUrl":"https://cdn.3dassets.dev/assets/11257/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-barrel-staved-161fa1e5","thumbnailUrl":"https://cdn.3dassets.dev/assets/11257/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11257/v1/poster.webp","blurhash":"U8AmF.?G004:NGWCs:sm02Ip~A%1oes:ayNH","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":118404,"triangles":2284,"vertices":6852,"meshes":7,"materials":2,"textures":0,"animations":["break"],"boundingBox":{"min":[-0.39976261918213696,6.1662364103654e-10,-0.35199999809265137],"max":[0.3997861820080304,1.3498642893640802,0.35199999809265137]},"sizeMeters":[0.8,1.35,0.704],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:47.401Z","updatedAt":"2026-09-06T14:39:47.441Z","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/11257/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 BarrelStavesSprungPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11257/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/11257/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11257/v1/model.glb\" alt=\"Barrel, staves sprung (Pickups and Collectibles)\" 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/11257/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/11257/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11258","slug":"pickups-and-collectibles-barrel-explosive-651b6a90","title":"Explosive barrel (Pickups and Collectibles)","summary":"The same coopered barrel with two bands of alternating red and iron hazard blocks round the belly, a swept fuse rising from the head and a burning bead at its tip.","description":"Structurally the barrel, marked as dangerous: sixteen hazard blocks in two bands round the belly, each welded to the quarter it sits on, and a fuse swept up from the head with a glowing bead at its tip. The hazard blocks are original abstract marks and reproduce no real warning symbol or lettering. It ships the same `break` clip. Bounding size 0.74 by 1.24 by 0.74 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a barrel stands on its own base. Clips: `break` (1.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-barrel-explosive-651b6a90","cdnUrl":"https://cdn.3dassets.dev/assets/11258/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-barrel-explosive-651b6a90","thumbnailUrl":"https://cdn.3dassets.dev/assets/11258/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11258/v1/poster.webp","blurhash":"UABV%}xa00IpE4R+xrt601NG~UxtwJxZbvNH","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":139876,"triangles":2604,"vertices":7812,"meshes":17,"materials":4,"textures":0,"animations":["break"],"boundingBox":{"min":[-0.37002391360244247,2.384185793236071e-9,-0.37002391360244247],"max":[0.37002391360244247,1.241999988555908,0.37002391360244247]},"sizeMeters":[0.74,1.242,0.74],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:48.303Z","updatedAt":"2026-09-06T14:39:49.256Z","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/11258/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 ExplosiveBarrelPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11258/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/11258/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11258/v1/model.glb\" alt=\"Explosive barrel (Pickups and Collectibles)\" 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/11258/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/11258/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11259","slug":"pickups-and-collectibles-urn-5994593e","title":"Ceramic urn (Pickups and Collectibles)","summary":"Ceramic storage urn 0.6 m tall with a bellied body, a flared lip, two side handles, two gold bands and a domed lid with a knob. It comes apart in quarters.","description":"The wall is four quarter shells with a real inner and outer surface 0.022 m apart, so the mouth shows a wall thickness rather than a paper-thin skin, standing on a turned foot. Both handles are welded to the quarter they grow from, so a quarter that flies takes its handle with it. The `break` clip lifts the lid and the bands and throws the four quarters outward. Bounding size 0.60 by 0.64 by 0.45 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because an urn stands on its own foot. Clips: `break` (1.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-urn-5994593e","cdnUrl":"https://cdn.3dassets.dev/assets/11259/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-urn-5994593e","thumbnailUrl":"https://cdn.3dassets.dev/assets/11259/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11259/v1/poster.webp","blurhash":"UHCGMjxt00M{offkWBax00Rj~qt7aej[ofay","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":93240,"triangles":1752,"vertices":5256,"meshes":8,"materials":2,"textures":0,"animations":["break"],"boundingBox":{"min":[-0.30191283786394674,0,-0.2240000069141388],"max":[0.30191283786394674,0.6370000231266022,0.2240000069141388]},"sizeMeters":[0.604,0.637,0.448],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:48.331Z","updatedAt":"2026-09-06T14:39:49.313Z","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/11259/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 CeramicUrnPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11259/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/11259/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11259/v1/model.glb\" alt=\"Ceramic urn (Pickups and Collectibles)\" 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/11259/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/11259/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11260","slug":"pickups-and-collectibles-urn-cracked-223733a4","title":"Ceramic urn, broken open (Pickups and Collectibles)","summary":"The urn with one of its four wall quarters gone, another leaning out, the lid fallen on its side beside it and three shards on the floor. The already-smashed state.","description":"Built from the same four quarter shells as the intact urn with one quarter removed and one tilted four degrees out, so the inner wall shows and the vessel is plainly open. The lid lies on its side on the floor and three scaled shards are scattered round the base. The `break` clip throws what is left of it. Bounding size 0.65 by 0.56 by 0.56 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because the broken urn still rests on its own foot. Clips: `break` (1.6 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-urn-cracked-223733a4","cdnUrl":"https://cdn.3dassets.dev/assets/11260/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-urn-cracked-223733a4","thumbnailUrl":"https://cdn.3dassets.dev/assets/11260/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11260/v1/poster.webp","blurhash":"UEDl=*D%00?bogayIVt700xu~pM{xtV[xtWB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":102756,"triangles":1968,"vertices":5904,"meshes":7,"materials":2,"textures":0,"animations":["break"],"boundingBox":{"min":[-0.32518110614927,0.00000458064666890301,-0.28026693215754234],"max":[0.3251812311512912,0.5567709060072314,0.28026220214032554]},"sizeMeters":[0.65,0.557,0.561],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:48.866Z","updatedAt":"2026-09-06T14:39:49.897Z","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/11260/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 CeramicUrnBrokenOpenPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11260/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/11260/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11260/v1/model.glb\" alt=\"Ceramic urn, broken open (Pickups and Collectibles)\" 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/11260/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/11260/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11261","slug":"pickups-and-collectibles-sack-9177d235","title":"Cloth sack (Pickups and Collectibles)","summary":"Cinched cloth sack 0.66 m tall with six gathered folds, a cord ring with a loose tail and four neck petals that fold outward on `open` and gather shut again on `close`.","description":"A smoothed lathe body with six folds pressed into its flanks and a cord ring at the throat. The neck is four separate petals, each a tapered lofted flap with its pivot on the cord line and each hinged about the axis it actually leans on, so `open` splays all four outward by 92 degrees, from 26 degrees gathered over the mouth to 66 degrees laid back, and `close` folds them in again. Bounding size 0.54 by 0.62 by 0.52 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a full sack stands on its own base. Clips: `open` (1.3 s), `close` (1.3 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-sack-9177d235","cdnUrl":"https://cdn.3dassets.dev/assets/11261/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-sack-9177d235","thumbnailUrl":"https://cdn.3dassets.dev/assets/11261/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11261/v1/poster.webp","blurhash":"UFEVyn%M00D%azkBV@WB00M{~pxux]j]jYWA","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":41156,"triangles":718,"vertices":2154,"meshes":6,"materials":2,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.2697708546308464,0.0000022925432176523763,-0.2583683284719961],"max":[0.26977086671314776,0.6197303003072738,0.2583683284719961]},"sizeMeters":[0.54,0.62,0.517],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:49.091Z","updatedAt":"2026-09-06T14:39:50.012Z","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/11261/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 ClothSackPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11261/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/11261/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11261/v1/model.glb\" alt=\"Cloth sack (Pickups and Collectibles)\" 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/11261/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/11261/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11262","slug":"pickups-and-collectibles-sack-open-ecdbeebb","title":"Cloth sack, open (Pickups and Collectibles)","summary":"The sack with its four neck petals splayed right back and twelve gold beads spilling from the mouth. The emptied state, with a `close` clip that gathers the neck again.","description":"Same body, folds and cord as the closed sack with the four neck petals authored 66 degrees open and loose beads sitting in the mouth. The `close` clip folds all four petals back over 1.3 s and `open` splays them again, so one model covers both the looted state and the act of closing it. Bounding size 0.54 by 0.56 by 0.52 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because the sack sits on its own base. Clips: `close` (1.3 s), `open` (1.3 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-sack-open-ecdbeebb","cdnUrl":"https://cdn.3dassets.dev/assets/11262/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-sack-open-ecdbeebb","thumbnailUrl":"https://cdn.3dassets.dev/assets/11262/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11262/v1/poster.webp","blurhash":"UFEVyn%M00D%afj[R%ay00M{~pxt%Mj]aeWA","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":62612,"triangles":1150,"vertices":3450,"meshes":7,"materials":3,"textures":0,"animations":["close","open"],"boundingBox":{"min":[-0.2697708546308464,0.0000022925432176523763,-0.2583683284719961],"max":[0.26977086671314776,0.5582131958801939,0.2583683284719961]},"sizeMeters":[0.54,0.558,0.517],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:49.397Z","updatedAt":"2026-09-06T14:39:49.492Z","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/11262/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 ClothSackOpenPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11262/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/11262/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11262/v1/model.glb\" alt=\"Cloth sack, open (Pickups and Collectibles)\" 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/11262/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/11262/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11263","slug":"pickups-and-collectibles-supply-drop-45534dae","title":"Supply drop under canopy (Pickups and Collectibles)","summary":"Airdropped crate 0.62 m wide hanging under a 1.56 m canopy on four rigging lines, with red banding, eight gore seams, a vent ring and a lid that opens on landing.","description":"The canopy is a real spherical cap with eight seams swept along its actual curvature in alternating colours and a vent ring at the apex; four rigging lines run from the skirt to the crate corners. The `bob` clip sways the crate and its lid together on parallel channels so the two never separate in the air, and `open` throws the lid back 85 degrees about its rear hinge, with `close` bringing it down from there. Bounding size 1.60 by 1.73 by 1.60 m; metres, +Y up, +Z forward. Origin: free, at the centre of the crate, so the drop is positioned by the load rather than by the canopy, because a collectible like this is hung in mid-air at whatever hover height the level needs and a base origin would put it on the floor. The geometry surrounds the origin, reaching 0.865 m below it and 0.865 m above it. Clips: `bob` (3.6 s), `open` (1.3 s), `close` (1.2 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-supply-drop-45534dae","cdnUrl":"https://cdn.3dassets.dev/assets/11263/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-supply-drop-45534dae","thumbnailUrl":"https://cdn.3dassets.dev/assets/11263/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11263/v1/poster.webp","blurhash":"UBCsN+%L00IU_4kCIAoc00Rj~Ws;00V@.8Wr","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":66128,"triangles":1284,"vertices":3852,"meshes":6,"materials":4,"textures":0,"animations":["bob","open","close"],"boundingBox":{"min":[-0.7998196886359735,-0.8647405503403813,-0.7998196886359735],"max":[0.7998196886359735,0.8647405423137873,0.7998196886359735]},"sizeMeters":[1.6,1.729,1.6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:49.832Z","updatedAt":"2026-09-06T14:39:50.812Z","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/11263/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 SupplyDropUnderCanopyPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11263/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/11263/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11263/v1/model.glb\" alt=\"Supply drop under canopy (Pickups and Collectibles)\" 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/11263/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/11263/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11265","slug":"pickups-and-collectibles-supply-drop-landed-74895512","title":"Supply drop, landed (Pickups and Collectibles)","summary":"The same drop on the ground: crate resting flat with its lid ajar 35 degrees, the canopy collapsed into eleven folds heaped beside it and four rigging lines slack across the floor. Clips both ways from there.","description":"The crate, banding and lid are the same geometry as the airborne drop, settled onto the ground with the lid part open. The canopy is remodelled as eleven jittered folds heaped to one side and the four lines are re-swept as slack curves running into the pile. The `close` clip drops the lid the last 35 degrees, and `open` swings it a further 50 degrees back from where it rests. Bounding size 1.65 by 0.91 by 0.89 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a landed drop rests on the floor like any other crate. Clips: `close` (1.2 s), `open` (1.3 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-supply-drop-landed-74895512","cdnUrl":"https://cdn.3dassets.dev/assets/11265/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-supply-drop-landed-74895512","thumbnailUrl":"https://cdn.3dassets.dev/assets/11265/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11265/v1/poster.webp","blurhash":"U9C~;q=?00%$4n^+?b9F009v^+n3_N0K9F^+","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":60696,"triangles":1148,"vertices":3444,"meshes":6,"materials":4,"textures":0,"animations":["close","open"],"boundingBox":{"min":[-0.8230601668331462,-0.000010943549289987864,-0.44422875303582576],"max":[0.8230601131942433,0.9048069587993888,0.4442287390567615]},"sizeMeters":[1.646,0.905,0.888],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:50.081Z","updatedAt":"2026-09-06T14:39:50.161Z","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/11265/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 SupplyDropLandedPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11265/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/11265/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11265/v1/model.glb\" alt=\"Supply drop, landed (Pickups and Collectibles)\" 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/11265/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/11265/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11264","slug":"pickups-and-collectibles-vending-hatch-362abff2","title":"Supply dispenser hatch (Pickups and Collectibles)","summary":"Floor-standing supply dispenser 1.2 m tall with a lit display, a six-key pad, a canted chute lip and a top-hinged hatch that lifts on the `open` clip.","description":"A rounded metal cabinet on two feet with a lit display panel in a bezel, a six-key pad below it, a hexagonal maker mark on the fascia and a canted chute lip at knee height. The hatch is hinged along its top edge, which is why `open` turns it through a negative X angle and swings the flap out and up rather than back into the cabinet; `close` returns it from that held angle. Bounding size 0.66 by 1.21 by 0.52 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a floor-standing dispenser rests on its own feet. Clips: `open` (1.3 s), `close` (1.3 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-vending-hatch-362abff2","cdnUrl":"https://cdn.3dassets.dev/assets/11264/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-vending-hatch-362abff2","thumbnailUrl":"https://cdn.3dassets.dev/assets/11264/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11264/v1/poster.webp","blurhash":"U78XRl%M008__NWB8_oLROIUkW-;%2jFSNkW","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":19188,"triangles":312,"vertices":936,"meshes":5,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.3300201658292626,-7.450580152834618e-10,-0.2602827663532284],"max":[0.3300201658292626,1.2100000858306885,0.26028277887393]},"sizeMeters":[0.66,1.21,0.521],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:50.028Z","updatedAt":"2026-09-06T14:39:51.033Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/11264/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 SupplyDispenserHatchPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11264/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/11264/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11264/v1/model.glb\" alt=\"Supply dispenser hatch (Pickups and Collectibles)\" 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/11264/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/11264/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11266","slug":"pickups-and-collectibles-vending-hatch-open-366c0148","title":"Supply dispenser, hatch open (Pickups and Collectibles)","summary":"The dispenser with its hatch lifted 78 degrees and a banded supply pack sitting on the chute lip, ready to be taken. The dispensed state.","description":"Same cabinet, display, keypad and chute as the closed dispenser, with the flap authored raised and a small banded crate resting on the chute lip. The `close` clip drops the flap back over the opening. Bounding size 0.66 by 1.21 by 0.70 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because the cabinet stands on its own feet. Clips: `close` (1.3 s), `open` (1.3 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-vending-hatch-open-366c0148","cdnUrl":"https://cdn.3dassets.dev/assets/11266/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-vending-hatch-open-366c0148","thumbnailUrl":"https://cdn.3dassets.dev/assets/11266/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11266/v1/poster.webp","blurhash":"U87x8rt700IU_4a#9EoJjFM{X7%gxaaeSMo}","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":24492,"triangles":384,"vertices":1152,"meshes":7,"materials":5,"textures":0,"animations":["close","open"],"boundingBox":{"min":[-0.3300201658292626,-7.450580152834618e-10,-0.34893866340619645],"max":[0.3300201658292626,1.2100000858306885,0.34891593515518776]},"sizeMeters":[0.66,1.21,0.698],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:50.861Z","updatedAt":"2026-09-06T14:39:51.821Z","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/11266/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 SupplyDispenserHatchOpenPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11266/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/11266/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11266/v1/model.glb\" alt=\"Supply dispenser, hatch open (Pickups and Collectibles)\" 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/11266/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/11266/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11267","slug":"pickups-and-collectibles-spawner-pad-f8823365","title":"Spawner pad (Pickups and Collectibles)","summary":"Hexagonal spawner pad 1.24 m across with a stepped deck, six violet glyph spokes, two gold rings and an octahedral crystal core floating 0.64 m above it.","description":"A two-step hexagonal deck with six radial glyph spokes set flush into it, ringed by two gold hoops. An eight-sided crystal core with its own tilted ring floats above the centre. The `pulse` clip scales the rings in the deck plane only, and scales and lifts the core on the same 1.8 s cycle, so the pad reads as breathing rather than as a jitter. Bounding size 1.07 by 0.81 by 1.24 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a spawn pad is laid into the floor and rests at ground level. Clips: `pulse` (1.8 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-spawner-pad-f8823365","cdnUrl":"https://cdn.3dassets.dev/assets/11267/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-spawner-pad-f8823365","thumbnailUrl":"https://cdn.3dassets.dev/assets/11267/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11267/v1/poster.webp","blurhash":"U9A0?zt800M_ITkCs:Rj00WU~pof-rWBb]tR","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":47064,"triangles":876,"vertices":2628,"meshes":5,"materials":4,"textures":0,"animations":["pulse"],"boundingBox":{"min":[-0.5369725679897952,-0.000026019072429529777,-0.6200000047683716],"max":[0.5369725679897952,0.8100000017881394,0.6200000047683716]},"sizeMeters":[1.074,0.81,1.24],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:51.023Z","updatedAt":"2026-09-06T14:39:52.008Z","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/11267/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 SpawnerPadPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11267/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/11267/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11267/v1/model.glb\" alt=\"Spawner pad (Pickups and Collectibles)\" 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/11267/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/11267/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11268","slug":"pickups-and-collectibles-spawner-pad-large-843dade9","title":"Spawner pad, large (Pickups and Collectibles)","summary":"Two-metre spawner pad with three concentric gold rings, six violet glyph spokes and six crystal-tipped pylons round the rim. The boss or vehicle spawn.","description":"The same hexagonal deck and floating core as the small pad, scaled to a 2 m span and given a third ring plus six 0.5 m pylons with crystal tips at the rim. The `pulse` clip breathes the ring set outward in the deck plane only, so the rings never sink into the deck, and swells and lifts the core on the same cycle. Bounding size 1.85 by 1.15 by 2.00 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a spawn pad is laid into the floor and rests at ground level. Clips: `pulse` (1.8 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-spawner-pad-large-843dade9","cdnUrl":"https://cdn.3dassets.dev/assets/11268/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-spawner-pad-large-843dade9","thumbnailUrl":"https://cdn.3dassets.dev/assets/11268/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11268/v1/poster.webp","blurhash":"U8A0wPt700nhD*WCxba}00Rj~qkC-:odNFf*","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":76932,"triangles":1500,"vertices":4500,"meshes":5,"materials":4,"textures":0,"animations":["pulse"],"boundingBox":{"min":[-0.9259999990463257,0.000038592801465286986,-1],"max":[0.9259999990463257,1.149999971985817,1]},"sizeMeters":[1.852,1.15,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:51.606Z","updatedAt":"2026-09-06T14:39:52.415Z","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/11268/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 SpawnerPadLargePickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11268/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/11268/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11268/v1/model.glb\" alt=\"Spawner pad, large (Pickups and Collectibles)\" 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/11268/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/11268/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11269","slug":"pickups-and-collectibles-respawn-ring-70b3a80a","title":"Respawn ring (Pickups and Collectibles)","summary":"Standing respawn ring 1.5 m tall: a 1.1 m gold hoop with a violet inner band and eight rune blocks, held on two canted arms over a hexagonal plinth, with a crystal core at its centre.","description":"The hoop stands upright facing +Z on two canted arms rising from a turned plinth, so the player runs through it rather than over it. The gold hoop, its violet inner band and the eight rune blocks are one `ring` node and the crystal core another. The `pulse` clip grows the hoop in its own plane by seven per cent and swells and lifts the core; the ring centre sits 0.31 m clear of the arms, so the growth never drives the hoop into them. Bounding size 1.21 by 1.46 by 0.72 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a respawn marker is installed on the floor and stands on its plinth. Clips: `pulse` (2.0 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-respawn-ring-70b3a80a","cdnUrl":"https://cdn.3dassets.dev/assets/11269/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-respawn-ring-70b3a80a","thumbnailUrl":"https://cdn.3dassets.dev/assets/11269/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11269/v1/poster.webp","blurhash":"U7AA5l-Y00EI~C$,9tI-00W,_4NG0dI--pwi","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"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":51056,"triangles":972,"vertices":2916,"meshes":4,"materials":4,"textures":0,"animations":["pulse"],"boundingBox":{"min":[-0.6050000190734863,-0.000010767025088564974,-0.36000001430511475],"max":[0.6050000190734863,1.4605687015555464,0.36000001430511475]},"sizeMeters":[1.21,1.461,0.72],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:51.613Z","updatedAt":"2026-09-06T14:39:52.439Z","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/11269/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 RespawnRingPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11269/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/11269/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11269/v1/model.glb\" alt=\"Respawn ring (Pickups and Collectibles)\" 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/11269/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/11269/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11270","slug":"pickups-and-collectibles-player-height-marker-c1eeb73b","title":"Player height marker (Pickups and Collectibles)","summary":"A banded scale post with a gold plate at exactly 1.75 m, adult standing height, and a hovering chevron above it. Drop it beside a pickup to judge collectible scale.","description":"The post is banded every 0.25 m in alternating red and bone so a height can be read straight off it, and the gold plate at its top sits at exactly 1.75 m, the adult standing height this library uses. A chevron and a four-point star hover above the plate as one `marker` node. This is a review and scale aid rather than a collectible, and is the only asset in the pack that is not something a player picks up. Bounding size 0.57 by 2.07 by 0.48 m; metres, +Y up, +Z forward. Origin: ground contact at y=0, centred on the footprint, because a scale post is driven into the ground and stands on its own foot. Clips: `bob` (2.4 s). Rigid node animation only: named nodes with translation, rotation and scale clips, no skinned rig and no skeleton. No collision volumes and no navigation data. Opaque materials throughout; the pack uses no alpha blending and no transmission.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-player-height-marker-c1eeb73b","cdnUrl":"https://cdn.3dassets.dev/assets/11270/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-player-height-marker-c1eeb73b","thumbnailUrl":"https://cdn.3dassets.dev/assets/11270/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11270/v1/poster.webp","blurhash":"U27A[0-p000K=qnz9|S*9wWV=_s:01WX~osS","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"slug":"animated","title":"Animated"},{"slug":"kit","title":"Kit / Set"},{"slug":"exterior","title":"Exterior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":25276,"triangles":420,"vertices":1260,"meshes":6,"materials":5,"textures":0,"animations":["bob"],"boundingBox":{"min":[-0.2850395214697714,0,-0.2400395214697714],"max":[0.28498990925224976,2.0699999786913397,0.2400395214697714]},"sizeMeters":[0.57,2.07,0.48],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:51.638Z","updatedAt":"2026-09-06T14:39:52.583Z","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/11270/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 PlayerHeightMarkerPickupsAndCollectibles(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/11270/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/11270/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11270/v1/model.glb\" alt=\"Player height marker (Pickups and Collectibles)\" 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/11270/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/11270/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"11271","slug":"pickups-and-collectibles-collectible-run-b795c86a-starter-scene","title":"Collectible run (Pickups and Collectibles)","summary":"Composed example for Pickups and Collectibles.","description":"Forty-four floating pickups laid out as a four-lane collectible route at their real hover height of 0.95 m and their real 1.25 m spacing, with a treasure pile, a chest, a crate, a barrel, a spawner pad and a respawn ring standing on the ground between the lanes. Two 1.75 m scale posts, one at each end, give the player height a pickup is judged against, since the character packs this run is meant to be walked by are not built yet. Every pickup keeps the origin it ships with, so the y=0.95 in each placement is exactly the number a level would use.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-collectible-run-b795c86a-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/11271/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-collectible-run-b795c86a-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/11271/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11271/v1/poster.webp","blurhash":"U797Lnoy01i~jYxaogRk00o2~VSdkDIoRjxr","category":{"slug":"environments","title":"Environments & Scenes"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"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":1761044,"triangles":40848,"vertices":87728,"meshes":172,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-7.885039521469771,-0.0000335654801113805,-5.0400395214697715],"max":[7.8849899092522495,2.0699999786913397,5.0400395214697715]},"sizeMeters":[15.77,2.07,10.08],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:52.672Z","updatedAt":"2026-09-06T14:39:52.991Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/11271/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CollectibleRunPickupsAndCollectibles(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/11271/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/11271/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11271/v1/model.glb\" alt=\"Collectible run (Pickups and Collectibles)\" 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/11271/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/11271/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"11272","slug":"pickups-and-collectibles-container-states-7160767c","title":"Container states (Pickups and Collectibles)","summary":"Composed example for Pickups and Collectibles.","description":"Every container in the pack shown twice: the closed or intact model on the back of its cell and its opened, sprung or broken counterpart directly in front of it, so the pair can be compared without running a clip. Seven pairs, plus the explosive barrel, the airborne supply drop hanging at 1.15 m over its landed state, both spawner pads and the respawn ring beside a 1.75 m scale post. Nothing in this scene is animated: it is a layout of the states a level can place directly.","status":"published","url":"https://3dassets.dev/assets/pickups-and-collectibles-container-states-7160767c","cdnUrl":"https://cdn.3dassets.dev/assets/11272/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-container-states-7160767c","thumbnailUrl":"https://cdn.3dassets.dev/assets/11272/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/11272/v1/poster.webp","blurhash":"U39Z=l?w0LVr%LadI[t800Dh%MkY9Gbw$KRh","category":{"slug":"environments","title":"Environments & Scenes"},"tags":[{"slug":"fantasy","title":"Fantasy"},{"slug":"stylized","title":"Stylized"},{"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":885796,"triangles":22922,"vertices":50409,"meshes":136,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-5.323060166833146,-0.0000335654801113805,-6.205855965981928],"max":[4.89978618200803,2.0699999786913397,6.549819688635973]},"sizeMeters":[10.223,2.07,12.756],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-06T14:39:53.485Z","updatedAt":"2026-09-06T14:39:54.224Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/11272/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ContainerStatesPickupsAndCollectibles(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/11272/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/11272/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/11272/v1/model.glb\" alt=\"Container states (Pickups and Collectibles)\" 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/11272/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/11272/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}]}}