{"data":{"id":"19972","slug":"pickups-and-collectibles-supply-drop-landed-68ff6a21","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-68ff6a21","cdnUrl":"https://cdn.3dassets.dev/assets/19972/v1/model.glb","downloadUrl":"https://3dassets.dev/download/pickups-and-collectibles-supply-drop-landed-68ff6a21","thumbnailUrl":"https://cdn.3dassets.dev/assets/19972/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/19972/v1/poster.webp","blurhash":"U9C~-j=s00%$4n^+?b9F009v^+iv_N0K9F_2","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":60668,"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 Fable 5.1","downloads":0,"publishedAt":"2026-09-07T17:05:57.964Z","updatedAt":"2026-09-07T17:05:58.067Z","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/19972/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/19972/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/19972/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/19972/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/19972/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/19972/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}}}