{"data":{"id":"65","slug":"fps-survival-forest-outpost","title":"FPS survival forest outpost","summary":"Walk a fortified scavenger outpost at dusk: through the palisade gate past the traps, round the crafting yard with its benches, forge, generator and lit campfire, along the container line to the pickup, and under the lookout tower and radio mast.","url":"https://3dassets.dev/demos/fps-survival-forest-outpost","coverUrl":"https://cdn.3dassets.dev/media/fps-survival-forest-outpost-demo.png","featured":true,"pack":{"slug":"fps-survival-forest-outpost","title":"FPS Survival Forest Outpost","url":"https://3dassets.dev/packs/fps-survival-forest-outpost","summary":"Free 3D game assets for a first person survival shooter: a modular forest station kit, crafting and power, a palisade perimeter with traps, five invented weapons on a rarity ladder, vehicles and twelve rigged characters.","assetCount":109,"totalBytes":39128676,"starterScene":{"slug":"fps-survival-forest-outpost-fortified-fo-e26da282-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/32712/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-fortified-fo-e26da282-starter-scene","fileSize":8216824}},"placementCount":257,"assetCount":48,"spawn":{"position":[-2,0,28.5],"yaw":180},"publishedAt":"2026-09-08T13:18:56.906Z","updatedAt":"2026-09-08T13:18:56.907Z","description":"A 47 by 54 metre fortified outpost in conifer forest at dusk, built from 48 of the pack's 109 models on plain ground under the outdoor preset.\n\nYou start on the forest road roughly 12 m out from the wire, with the gate set in the palisade run ahead of you and the lookout tower, the radio mast and the station roofline standing above it. A brazier drum, crates, a loot cache, fallen logs and boulders dress the verges on the way in. Timber palisade bays close the south and west runs, chain link closes the north and east, and the two gate leaves swing open in front of you. A covered spike pit and sprung bear traps are set in the approach, with an infected runner and a timber wolf coming out of the trees behind you.\n\nInside, the yard is the place. Down the west side the scrap forge, the scavenger workbench, the gunsmith bench, the hand ammunition press and the meat drying rack stand in the open, with two carbines and two marksman rifles laid on the ground beside them and a scavenger working the bench. The camp generator and the water purifier still sit against the station wall. The open campfire burns in the middle of the yard, brazier drums at the gate and the wall, and floodlight masts on both flanks. Loot caches in white, blue and amber rings and stacks of slatted supply crates are scattered where a player would find them, with a landed supply drop just inside the gate.\n\nThe station block is six floor slabs, corner columns, corrugated and concrete wall bays and flat roof slabs on a 4 m grid, closing the north west of the compound. The lookout tower, the guyed wind turbine and the 11 m lattice radio mast hold the back corner, and two shipping containers, the survival pickup and the quad bike line the east wire. Conifers, undergrowth, fallen logs and mossy boulders crowd the fence on every side.\n\nWhat moves: the palisade and chain link gates, the steel door and the roller shutter, the container doors, the workbench drawer, the gunsmith bench, the forge press and the ammunition press, the generator flywheel, the wind turbine, the radio mast sway, every loot cache and supply crate lid, the weapon magazines, bolts and bipods, the pickup doors and wheels, and the five figures, who idle, turn their heads, swing their arms and raise their weapons.\n\nWhat does not move, and why. The figures are rigid jointed puppets on parented nodes: there is no skeleton, no skinning and no vertex weighting anywhere in this catalogue, so fingers, faces, cloth and hair are solid and only whole limbs turn about their pivots. The wind turbine yaw head and the antenna elevation, the press linkages beyond their single driven node, and the bow string are static for the same reason. The station block is closed scenery: there is no vertical movement in a demo, so the lookout tower platform, the station roof and any upper level are there to be looked at, never reached.","scene":{"version":1,"spawn":{"position":[-2,0,28.5],"yaw":180},"bounds":{"min":[-23.5,0,-23.5],"max":[23.5,16,30.8]},"ground":{"style":"plain"},"environment":{"preset":"outdoor","sky":"#25344b","horizon":"#7d6a58","floor":"#3f4a35","light":"dusk","shadows":true},"placements":[{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-14,0,16],"rotation":0},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-10,0,16],"rotation":0},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-6,0,16],"rotation":0},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[2,0,16],"rotation":0},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[6,0,16],"rotation":0},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[10,0,16],"rotation":0},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[14,0,16],"rotation":0},{"asset":"fps-survival-forest-outpost-palisade-gate-05355173","position":[-2,0,16],"rotation":0},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-16,0,-14],"rotation":90},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-16,0,-10],"rotation":90},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-16,0,-6],"rotation":90},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-16,0,-2],"rotation":90},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-16,0,2],"rotation":90},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-16,0,6],"rotation":90},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-16,0,10],"rotation":90},{"asset":"fps-survival-forest-outpost-palisade-bay-884ec4c5","position":[-16,0,14],"rotation":90},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[16,0,-14],"rotation":90},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[16,0,-10],"rotation":90},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[16,0,-6],"rotation":90},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[16,0,-2],"rotation":90},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[16,0,2],"rotation":90},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[16,0,6],"rotation":90},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[16,0,10],"rotation":90},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[16,0,14],"rotation":90},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[-14,0,-16],"rotation":0},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[-10,0,-16],"rotation":0},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[-6,0,-16],"rotation":0},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[-2,0,-16],"rotation":0},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[2,0,-16],"rotation":0},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[6,0,-16],"rotation":0},{"asset":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","position":[14,0,-16],"rotation":0},{"asset":"fps-survival-forest-outpost-chain-link-gate-084d4112","position":[10,0,-16],"rotation":0},{"asset":"fps-survival-forest-outpost-sandbag-wall-5cbc0e55","position":[-7.5,0,13.2],"rotation":0},{"asset":"fps-survival-forest-outpost-sandbag-wall-5cbc0e55","position":[3.5,0,13.2],"rotation":0},{"asset":"fps-survival-forest-outpost-sandbag-wall-5cbc0e55","position":[8.2,0,-10.5],"rotation":90},{"asset":"fps-survival-forest-outpost-sandbag-wall-5cbc0e55","position":[13.6,0,-8.5],"rotation":90},{"asset":"fps-survival-forest-outpost-sandbag-wall-5cbc0e55","position":[-15,0,6.5],"rotation":90},{"asset":"fps-survival-forest-outpost-floor-slab-f61a944d","position":[-12,0,-12],"rotation":0},{"asset":"fps-survival-forest-outpost-roof-slab-flat-d77204d7","position":[-12,3.98,-12],"rotation":0},{"asset":"fps-survival-forest-outpost-floor-slab-f61a944d","position":[-12,0,-8],"rotation":0},{"asset":"fps-survival-forest-outpost-roof-slab-flat-d77204d7","position":[-12,3.98,-8],"rotation":0},{"asset":"fps-survival-forest-outpost-floor-slab-f61a944d","position":[-8,0,-12],"rotation":0},{"asset":"fps-survival-forest-outpost-roof-slab-flat-d77204d7","position":[-8,3.98,-12],"rotation":0},{"asset":"fps-survival-forest-outpost-floor-slab-f61a944d","position":[-8,0,-8],"rotation":0},{"asset":"fps-survival-forest-outpost-roof-slab-flat-d77204d7","position":[-8,3.98,-8],"rotation":0},{"asset":"fps-survival-forest-outpost-floor-slab-f61a944d","position":[-4,0,-12],"rotation":0},{"asset":"fps-survival-forest-outpost-roof-slab-flat-d77204d7","position":[-4,3.98,-12],"rotation":0},{"asset":"fps-survival-forest-outpost-floor-slab-f61a944d","position":[-4,0,-8],"rotation":0},{"asset":"fps-survival-forest-outpost-roof-slab-flat-d77204d7","position":[-4,3.98,-8],"rotation":0},{"asset":"fps-survival-forest-outpost-wall-bay-corrugated-10ebe840","position":[-12,0.45,-14],"rotation":0},{"asset":"fps-survival-forest-outpost-wall-bay-concrete-8adc6c13","position":[-8,0.45,-14],"rotation":0},{"asset":"fps-survival-forest-outpost-wall-bay-corrugated-10ebe840","position":[-4,0.45,-14],"rotation":0},{"asset":"fps-survival-forest-outpost-wall-bay-concrete-8adc6c13","position":[-12,0.45,-6],"rotation":0},{"asset":"fps-survival-forest-outpost-wall-bay-door-68988fab","position":[-8,0.45,-6],"rotation":0},{"asset":"fps-survival-forest-outpost-wall-bay-shutter-b4058c18","position":[-4,0.45,-6],"rotation":0},{"asset":"fps-survival-forest-outpost-wall-bay-corrugated-10ebe840","position":[-14,0.45,-12],"rotation":90},{"asset":"fps-survival-forest-outpost-wall-bay-corrugated-10ebe840","position":[-14,0.45,-8],"rotation":90},{"asset":"fps-survival-forest-outpost-wall-bay-concrete-8adc6c13","position":[-2,0.45,-12],"rotation":90},{"asset":"fps-survival-forest-outpost-wall-bay-concrete-8adc6c13","position":[-2,0.45,-8],"rotation":90},{"asset":"fps-survival-forest-outpost-corner-column-31b0d308","position":[-14,0.45,-14],"rotation":0},{"asset":"fps-survival-forest-outpost-corner-column-31b0d308","position":[-14,0.45,-6],"rotation":0},{"asset":"fps-survival-forest-outpost-corner-column-31b0d308","position":[-2,0.45,-14],"rotation":0},{"asset":"fps-survival-forest-outpost-corner-column-31b0d308","position":[-2,0.45,-6],"rotation":0},{"asset":"fps-survival-forest-outpost-lookout-tower-6ec2904b","position":[11.2,0,-12.6],"rotation":200},{"asset":"fps-survival-forest-outpost-radio-mast-cba3b9db","position":[0.5,0,-13.4],"rotation":0},{"asset":"fps-survival-forest-outpost-wind-turbine-dee233d0","position":[5.6,0,-10.8],"rotation":25},{"asset":"fps-survival-forest-outpost-floodlight-mast-98fcda0b","position":[-13.9,0,-3.6],"rotation":150},{"asset":"fps-survival-forest-outpost-floodlight-mast-98fcda0b","position":[13.6,0,9.6],"rotation":205},{"asset":"fps-survival-forest-outpost-forge-furnace-0f59b719","position":[-12.2,0,-0.4],"rotation":8},{"asset":"fps-survival-forest-outpost-generator-unit-6a95d3ba","position":[-8.8,0,-3.6],"rotation":178},{"asset":"fps-survival-forest-outpost-water-purifier-b566db3e","position":[-5.2,0,-3.8],"rotation":172},{"asset":"fps-survival-forest-outpost-workbench-28adb1a3","position":[-12.4,0,3.6],"rotation":6},{"asset":"fps-survival-forest-outpost-gunsmith-bench-71201a3d","position":[-12.4,0,6.8],"rotation":-4},{"asset":"fps-survival-forest-outpost-ammunition-press-dcc61975","position":[-12.6,0,9.4],"rotation":10},{"asset":"fps-survival-forest-outpost-drying-rack-8e0dc362","position":[-12,0,12.4],"rotation":4},{"asset":"fps-survival-forest-outpost-drying-rack-8e0dc362","position":[3.6,0,3],"rotation":100},{"asset":"fps-survival-forest-outpost-campfire-9a18b153","position":[1.6,0,7.2],"rotation":15},{"asset":"fps-survival-forest-outpost-oil-drum-open-e354f8b6","position":[-4.6,0,14.2],"rotation":0},{"asset":"fps-survival-forest-outpost-oil-drum-open-e354f8b6","position":[0.2,0,-7.6],"rotation":0},{"asset":"fps-survival-forest-outpost-oil-drum-open-e354f8b6","position":[13.8,0,-3.4],"rotation":0},{"asset":"fps-survival-forest-outpost-shipping-container-9486906f","position":[14.2,0,-9.2],"rotation":90},{"asset":"fps-survival-forest-outpost-shipping-container-9486906f","position":[14.2,0,-2.2],"rotation":90},{"asset":"fps-survival-forest-outpost-pickup-battered-0972afc5","position":[13,0,2.6],"rotation":12},{"asset":"fps-survival-forest-outpost-quad-bike-58c0c941","position":[-8.6,0,11.4],"rotation":205},{"asset":"fps-survival-forest-outpost-supply-drop-726a9bac","position":[7.4,0,12.4],"rotation":12},{"asset":"fps-survival-forest-outpost-weapon-scout-carbine-55d669ba","position":[-9.6,0,4.4],"rotation":24},{"asset":"fps-survival-forest-outpost-weapon-scout-carbine-55d669ba","position":[-6.4,0,8.9],"rotation":-108},{"asset":"fps-survival-forest-outpost-weapon-marksman-rifle-e20c7bc2","position":[-9.4,0,6.6],"rotation":-38},{"asset":"fps-survival-forest-outpost-weapon-marksman-rifle-e20c7bc2","position":[5.6,0,10.4],"rotation":66},{"asset":"fps-survival-forest-outpost-loot-cache-legendary-975367a5","position":[-8.6,0,5.9],"rotation":18},{"asset":"fps-survival-forest-outpost-loot-cache-rare-fb7d48a6","position":[-8.2,0,7.4],"rotation":-24},{"asset":"fps-survival-forest-outpost-loot-cache-common-df93b08e","position":[-9.2,0,8.8],"rotation":40},{"asset":"fps-survival-forest-outpost-loot-cache-common-df93b08e","position":[4.4,0,11.6],"rotation":-14},{"asset":"fps-survival-forest-outpost-loot-cache-rare-fb7d48a6","position":[6.2,0,-0.6],"rotation":32},{"asset":"fps-survival-forest-outpost-loot-cache-common-df93b08e","position":[10.4,0,-6.4],"rotation":8},{"asset":"fps-survival-forest-outpost-loot-cache-legendary-975367a5","position":[12.2,0,6.6],"rotation":-20},{"asset":"fps-survival-forest-outpost-loot-cache-common-df93b08e","position":[-3.4,0,-4.6],"rotation":54},{"asset":"fps-survival-forest-outpost-loot-cache-rare-fb7d48a6","position":[2.8,0,16.9],"rotation":-6},{"asset":"fps-survival-forest-outpost-loot-cache-common-df93b08e","position":[-13.2,0,-6.2],"rotation":12},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[12,0,-5.6],"rotation":8},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[12,0.66,-5.6],"rotation":22},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[12.1,0,-4.7],"rotation":-12},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[11.6,0,-12],"rotation":30},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[11.6,0.66,-12],"rotation":-4},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[-10.4,0,2],"rotation":14},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[-10.5,0.66,2],"rotation":-18},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[-10.3,0,1.1],"rotation":40},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[-10.6,0,7.9],"rotation":-6},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[-10.4,0,10.6],"rotation":20},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[5,0,-4.2],"rotation":-22},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[5,0.66,-4.2],"rotation":12},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[5.9,0,-4.4],"rotation":36},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[8.6,0,12.6],"rotation":18},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[9.4,0,11.6],"rotation":-30},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[8.8,0.66,12.6],"rotation":6},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[-2.6,0,11.4],"rotation":26},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[-1.7,0,11.6],"rotation":-16},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[15,0,5.6],"rotation":84},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[15,0,13],"rotation":74},{"asset":"fps-survival-forest-outpost-spike-pit-20ee2b42","position":[1.8,0,19.4],"rotation":10},{"asset":"fps-survival-forest-outpost-spike-pit-20ee2b42","position":[-10.4,0,19],"rotation":-14},{"asset":"fps-survival-forest-outpost-spike-pit-20ee2b42","position":[18.8,0,-6],"rotation":84},{"asset":"fps-survival-forest-outpost-bear-trap-62509816","position":[-5.4,0,18.6],"rotation":34},{"asset":"fps-survival-forest-outpost-bear-trap-62509816","position":[4.6,0,21.4],"rotation":-52},{"asset":"fps-survival-forest-outpost-bear-trap-62509816","position":[-14.4,0,18.2],"rotation":12},{"asset":"fps-survival-forest-outpost-bear-trap-62509816","position":[18.6,0,3.4],"rotation":96},{"asset":"fps-survival-forest-outpost-bear-trap-62509816","position":[-19,0,-2.4],"rotation":-70},{"asset":"fps-survival-forest-outpost-figure-survivor-scavenger-2d14537c","position":[-10.4,0,3.8],"rotation":96},{"asset":"fps-survival-forest-outpost-figure-masked-raider-958f10e5","position":[11,0,6.4],"rotation":206},{"asset":"fps-survival-forest-outpost-figure-scout-archer-39d4ea47","position":[8.6,0,-7.6],"rotation":158},{"asset":"fps-survival-forest-outpost-creature-infected-runner-d6e26047","position":[-0.6,0,20.2],"rotation":176},{"asset":"fps-survival-forest-outpost-creature-wolf-4be4d311","position":[-7.2,0,20.6],"rotation":62},{"asset":"fps-survival-forest-outpost-creature-infected-runner-d6e26047","position":[19.4,0,9.6],"rotation":250},{"asset":"fps-survival-forest-outpost-creature-wolf-4be4d311","position":[-19.6,0,-9.4],"rotation":104},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[20.72,0,5.5],"rotation":72.89},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[16.8,0,20.98],"rotation":144.45},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[21.75,0,18.51],"rotation":-124.57},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-4.6,0,-21.75],"rotation":15.54},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-22.42,0,4.89],"rotation":-165.77},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-21.06,0,17.27],"rotation":-113.87},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[11.28,0,-22.44],"rotation":-8.55},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[21.92,0,10.28],"rotation":117.04},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[19.63,0,-10.9],"rotation":-78.61},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-20.62,0,9.51],"rotation":165.15},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-12.01,0,19.67],"rotation":3.76},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[21.58,0,-15.52],"rotation":-169.37},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[19.03,0,-19.91],"rotation":-110.84},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[5.87,0,21.77],"rotation":103.63},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-20.02,0,-21.43],"rotation":123.65},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-22,0,-16.46],"rotation":-108.3},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-14.05,0,-19.76],"rotation":-98.68},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-6.62,0,20.86],"rotation":-71.8},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-21.44,0,-6.37],"rotation":-58.21},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[2.42,0,-21.42],"rotation":-64.74},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-20.16,0,0.18],"rotation":-81.85},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[21.89,0,-5.63],"rotation":-82.32},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[19.65,0,-0.09],"rotation":44.52},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-16.97,0,21.65],"rotation":-149.3},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[10.58,0,20.66],"rotation":150.25},{"asset":"fps-survival-forest-outpost-conifer-mid-28a9f4cb","position":[19.13,0,13.58],"rotation":177.2},{"asset":"fps-survival-forest-outpost-conifer-mid-28a9f4cb","position":[-20.67,0,-11.44],"rotation":-168.29},{"asset":"fps-survival-forest-outpost-conifer-mid-28a9f4cb","position":[-9.77,0,-21.09],"rotation":130.4},{"asset":"fps-survival-forest-outpost-conifer-mid-28a9f4cb","position":[6.72,0,-22.3],"rotation":-87.58},{"asset":"fps-survival-forest-outpost-conifer-mid-28a9f4cb","position":[-21.51,0,21.85],"rotation":-148.2},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-0.07,0,-18.69],"rotation":-54.37},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[18.48,0,-5.56],"rotation":11.1},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[15.65,0,-19.23],"rotation":119.01},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[21.63,0,22.56],"rotation":-7.39},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-16.04,0,18.15],"rotation":104.28},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[13.46,0,18.08],"rotation":169.07},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-7.88,0,-18.73],"rotation":25.16},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[13.55,0,-18.69],"rotation":88.25},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[7.69,0,-19.55],"rotation":-5.83},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[3.62,0,19.17],"rotation":-8.65},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-18.15,0,4.92],"rotation":43.26},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-18.27,0,-13.98],"rotation":-21.63},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-18.29,0,-8.26],"rotation":-171.02},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[5,0,-18.23],"rotation":16.71},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-19.01,0,13.84],"rotation":41.66},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-2.12,0,-18.97],"rotation":47.55},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-18.27,0,-18.1],"rotation":79.12},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[9.72,0,-18.89],"rotation":143.11},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[18.67,0,16.6],"rotation":152.46},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[22.27,0,-22.38],"rotation":112.92},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-21.25,0,13.19],"rotation":-103.26},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[18.13,0,10.72],"rotation":-105.27},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[22.13,0,14.86],"rotation":-179.76},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[15.54,0,-22.46],"rotation":109.36},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-18.5,0,-4.6],"rotation":-92.94},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[18.19,0,-3.58],"rotation":127.09},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-16.56,0,-22.6],"rotation":74.82},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[8.3,0,18.06],"rotation":34.47},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-8.99,0,18.48],"rotation":166.43},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-18.18,0,-6.43],"rotation":-158.7},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[18.59,0,-14.09],"rotation":48.95},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[18.78,0,8.05],"rotation":85.54},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[22.58,0,-1.53],"rotation":-87.82},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-22.25,0,-2.46],"rotation":132.09},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[6.16,0,18.02],"rotation":-90.4},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-10.85,0,-18.61],"rotation":22.94},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-18.18,0,-10.35],"rotation":16.61},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-4.77,0,-18.28],"rotation":166.43},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[22.11,0,-18.97],"rotation":84.06},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-19.52,0,-3.1],"rotation":-150.33},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-1.23,0,-21.03],"rotation":74.15},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[22.14,0,1.95],"rotation":-161.65},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[15.46,0,17.92],"rotation":-14.67},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-17.93,0,16.08],"rotation":168.74},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-14.6,0,15],"rotation":133.4},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[14.6,0,-14.4],"rotation":105.58},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-14.2,0,-2],"rotation":163.01},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-13.4,0,15.4],"rotation":-163.25},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[14.9,0,-13],"rotation":-102.76},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[6.6,0,15.2],"rotation":106.85},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-6.2,0,-12],"rotation":68.25},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[2.4,0,-5],"rotation":4.83},{"asset":"fps-survival-forest-outpost-boulder-cluster-3fd6db72","position":[14.4,0,15.2],"rotation":-171.63},{"asset":"fps-survival-forest-outpost-boulder-cluster-3fd6db72","position":[-1.2,0,-10.6],"rotation":146.79},{"asset":"fps-survival-forest-outpost-fallen-log-56e7e78a","position":[6.2,0,15.4],"rotation":18.27},{"asset":"fps-survival-forest-outpost-fallen-log-56e7e78a","position":[-14.8,0,10.2],"rotation":-125.2},{"asset":"fps-survival-forest-outpost-oil-drum-open-e354f8b6","position":[-7,0,24.6],"rotation":0},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[4.2,0,26.4],"rotation":20},{"asset":"fps-survival-forest-outpost-loot-cache-common-df93b08e","position":[-5.4,0,27.9],"rotation":26},{"asset":"fps-survival-forest-outpost-bear-trap-62509816","position":[4,0,23.2],"rotation":18},{"asset":"fps-survival-forest-outpost-fallen-log-56e7e78a","position":[6.2,0,25.2],"rotation":74},{"asset":"fps-survival-forest-outpost-fallen-log-56e7e78a","position":[-8.4,0,21.4],"rotation":100},{"asset":"fps-survival-forest-outpost-boulder-cluster-3fd6db72","position":[-8.6,0,27.2],"rotation":20},{"asset":"fps-survival-forest-outpost-boulder-cluster-3fd6db72","position":[8,0,20],"rotation":-40},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-5,0,22.4],"rotation":40},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[4.4,0,22],"rotation":-20},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-5.6,0,25.6],"rotation":130},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[4.6,0,29],"rotation":70},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-7.4,0,29.4],"rotation":-60},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[5.4,0,21],"rotation":30},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[-6.6,0,20.4],"rotation":-50},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[6,0,28],"rotation":110},{"asset":"fps-survival-forest-outpost-supply-crate-b0ec2a51","position":[4.2,0.66,26.4],"rotation":-14},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[20.02,0,27.68],"rotation":-120.38},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[15.07,0,27.26],"rotation":42.02},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-12.69,0,29.28],"rotation":147.09},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-19.97,0,29.98],"rotation":-38.91},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[9.93,0,28.28],"rotation":-68.96},{"asset":"fps-survival-forest-outpost-conifer-tall-a3b77255","position":[-11.02,0,24.45],"rotation":-51.18},{"asset":"fps-survival-forest-outpost-conifer-mid-28a9f4cb","position":[-16.41,0,26.35],"rotation":121.76},{"asset":"fps-survival-forest-outpost-conifer-mid-28a9f4cb","position":[-21.71,0,25.68],"rotation":125.9},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[12.38,0,24.8],"rotation":-79.6},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[22.25,0,24.99],"rotation":-5.69},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[19.58,0,23.3],"rotation":-101.02},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[13.25,0,22.98],"rotation":71.59},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[17.68,0,24.45],"rotation":164.07},{"asset":"fps-survival-forest-outpost-conifer-young-9e2432f7","position":[10.11,0,24.69],"rotation":-136.42},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[6.56,0,29.96],"rotation":-114.58},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-18.94,0,25.29],"rotation":16.44},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-13.71,0,22.44],"rotation":91.2},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[22.34,0,30.05],"rotation":6},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[13.13,0,29.82],"rotation":146.54},{"asset":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","position":[-16.78,0,29.43],"rotation":68.19}],"points":[{"position":[-2,0,17.6],"title":"The palisade gate","text":"Timber palisade bays close the front of the compound and chain link closes the back. The two gate leaves swing open as you walk up, past a covered spike pit and a sprung bear trap set in the approach.","asset":"fps-survival-forest-outpost-palisade-gate-05355173"},{"position":[-9.4,0,6],"title":"The kit up point","text":"The scavenger workbench, the gunsmith bench and the ammunition press stand in the open with the weapons laid out on the ground beside them. Magazines, bolts and the workbench drawer all work as you come close.","asset":"fps-survival-forest-outpost-gunsmith-bench-71201a3d"},{"position":[-9,0,-2.4],"title":"Power and water","text":"The scrap forge, the camp generator with its spinning flywheel and the water purifier still line the wall of the station. The generator status lamps and the forge mouth are emissive, so they carry the dusk.","asset":"fps-survival-forest-outpost-generator-unit-6a95d3ba"},{"position":[-6,0,-4.6],"title":"The station block","text":"Six floor slabs, corner columns, corrugated and concrete wall bays and flat roof slabs make one roofed building on the 4 m grid. The steel door and the roller shutter open. Inside is scenery: there is no way up or in.","asset":"fps-survival-forest-outpost-wall-bay-shutter-b4058c18"},{"position":[9.4,0,-9.6],"title":"The lookout corner","text":"The timber lookout tower, the guyed wind turbine and the 11 m lattice radio mast hold the back of the compound. The turbine spins and the mast sways. The tower platform is scenery, since there is no climbing here.","asset":"fps-survival-forest-outpost-lookout-tower-6ec2904b"},{"position":[11.8,0,4.4],"title":"The vehicle line","text":"Two shipping containers, the battered survival pickup and the quad bike are parked along the east wire, with crates stacked between them. The pickup doors open and its wheels roll.","asset":"fps-survival-forest-outpost-pickup-battered-0972afc5"},{"position":[4.2,0,8.4],"title":"Fire and loot","text":"The open campfire burns in the middle of the yard, with a meat drying rack beside it and brazier drums at the gate and the wall. Loot caches sit where a player would find them, each ringed by its rarity colour.","asset":"fps-survival-forest-outpost-campfire-9a18b153"}],"poster":{"position":[-7.2,1.7,9.7],"lookAt":[-12.4,0.7,6.8]}},"bounds":{"min":[-23.5,0,-23.5],"max":[23.5,16,30.8]},"assets":[{"id":"32638","slug":"fps-survival-forest-outpost-palisade-bay-884ec4c5","title":"Timber Palisade Bay 4 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a modular 4 m palisade bay of seventeen sharpened pine stakes on two rails with raking braces, with a port at each end.","description":"A 4 m palisade bay: seventeen sharpened pine stakes of uneven height driven into a bank of spoil, tied by two rails on the inside face and held by a raking brace at each end. The pivot is on the grid origin, so bays run end to end round a compound. Dimensions 4.18 × 3.02 × 1.43 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-palisade-bay-884ec4c5","cdnUrl":"https://cdn.3dassets.dev/assets/32638/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-palisade-bay-884ec4c5","thumbnailUrl":"https://cdn.3dassets.dev/assets/32638/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32638/v1/poster.webp","blurhash":"U27]w@}A0iKNIo^6,;AD0iI:^OW=aOOAW.i~","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":329668,"triangles":4208,"vertices":3876,"meshes":4,"materials":4,"textures":2,"animations":[],"boundingBox":{"min":[-2.170729637145996,-0.00003326457754065232,-1.0420415621164691],"max":[2.0118472576141357,3.0152690058709615,0.38639676748522067]},"sizeMeters":[4.183,3.015,1.428],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:14.660Z","updatedAt":"2026-09-08T12:54:14.760Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32638/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TimberPalisadeBay4MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32638/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32638/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32638/v1/model.glb\" alt=\"Timber Palisade Bay 4 m (FPS Survival Forest Outpost)\" 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/32638/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/32638/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32639","slug":"fps-survival-forest-outpost-palisade-gate-05355173","title":"Palisade Gate, Two Leaves (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 4 m palisade gate on two braced posts, with two boarded leaves on strap hinges and a lit red warning lamp. Animated open and close.","description":"The gate in the palisade run: two braced pine posts 3.5 m tall carrying a head beam and a rusted cap, with a lit red warning lamp over the middle. Each leaf is seven boards on two ledges and a diagonal brace, hung on two strap hinges and swinging clear of its own post. Dimensions 4.10 × 3.75 × 1.34 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-palisade-gate-05355173","cdnUrl":"https://cdn.3dassets.dev/assets/32639/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-palisade-gate-05355173","thumbnailUrl":"https://cdn.3dassets.dev/assets/32639/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32639/v1/poster.webp","blurhash":"U28W8D=y01EM~U=w9a9v1HxU]%IqIWxt-oE2","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":113424,"triangles":3560,"vertices":3666,"meshes":7,"materials":4,"textures":1,"animations":["open","close"],"boundingBox":{"min":[-2.049999952316284,0.00006855606294253747,-0.6714196035476842],"max":[2.049999952316284,3.745558738708496,0.6714473512497557]},"sizeMeters":[4.1,3.745,1.343],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:14.844Z","updatedAt":"2026-09-08T12:54:15.037Z","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/32639/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 PalisadeGateTwoLeavesFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32639/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/32639/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32639/v1/model.glb\" alt=\"Palisade Gate, Two Leaves (FPS Survival Forest Outpost)\" 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/32639/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/32639/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32642","slug":"fps-survival-forest-outpost-chain-link-bay-42a0b2bc","title":"Chain Link Fence Bay 4 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a modular 4 m chain link fence bay 2.4 m high with barbed wire arms, with a port at each end.","description":"A 4 m chain link fence bay: two tubular posts and top and bottom rails carrying a diamond mesh drawn as two crossing wire sets on separate planes, topped by raked arms with three strands of barbed wire. The pivot is on the grid origin and a port sits at each end. Dimensions 3.99 × 2.75 × 0.33 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-chain-link-bay-42a0b2bc","cdnUrl":"https://cdn.3dassets.dev/assets/32642/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-chain-link-bay-42a0b2bc","thumbnailUrl":"https://cdn.3dassets.dev/assets/32642/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32642/v1/poster.webp","blurhash":"U6ATl^WV00jZ~X?bD%4-00%M_NIUM{Rj%Ms;","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":12284,"triangles":400,"vertices":490,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1.9950000047683716,0.00008515877694148521,-0.055071306689606414],"max":[1.9950000047683716,2.753278927374182,0.2785753508051498]},"sizeMeters":[3.99,2.753,0.334],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:15.282Z","updatedAt":"2026-09-08T12:54:15.392Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32642/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChainLinkFenceBay4MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32642/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32642/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32642/v1/model.glb\" alt=\"Chain Link Fence Bay 4 m (FPS Survival Forest Outpost)\" 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/32642/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/32642/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32643","slug":"fps-survival-forest-outpost-chain-link-gate-084d4112","title":"Chain Link Gate, Two Leaves (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 4 m chain link gate on two posts with two mesh leaves, a latch box and a lit red lamp. Animated open and close.","description":"A 4 m double leaf chain link gate: two heavy tubular posts carrying two framed mesh leaves, each on its own stile with a drop bolt and a pull handle, with a latch box and a lit red lamp on the west post. Dimensions 4.00 × 2.50 × 0.39 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-chain-link-gate-084d4112","cdnUrl":"https://cdn.3dassets.dev/assets/32643/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-chain-link-gate-084d4112","thumbnailUrl":"https://cdn.3dassets.dev/assets/32643/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32643/v1/poster.webp","blurhash":"U58NwtIU00%gWF%gt6Di00%M~qITt6IURj-:","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":22808,"triangles":996,"vertices":1018,"meshes":6,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-2.002500057220459,-0.000011785344623316263,-0.19245049446365542],"max":[2.002500057220459,2.5000117853446233,0.19250075078767598]},"sizeMeters":[4.005,2.5,0.385],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:15.294Z","updatedAt":"2026-09-08T12:54:15.416Z","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/32643/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 ChainLinkGateTwoLeavesFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32643/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/32643/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32643/v1/model.glb\" alt=\"Chain Link Gate, Two Leaves (FPS Survival Forest Outpost)\" 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/32643/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/32643/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32640","slug":"fps-survival-forest-outpost-sandbag-wall-5cbc0e55","title":"Sandbag Wall, Five Courses (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a stacked sandbag wall of five courses tapering to a firing step, with two picket posts and an ammunition can.","description":"A sandbag emplacement: five courses of filled bags laid in a staggered bond, tapering from eight bags to six so the top course reads as a firing step, with a steel picket at each end and an ammunition can dropped behind it. Dimensions 4.07 × 1.30 × 0.91 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-sandbag-wall-5cbc0e55","cdnUrl":"https://cdn.3dassets.dev/assets/32640/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-sandbag-wall-5cbc0e55","thumbnailUrl":"https://cdn.3dassets.dev/assets/32640/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32640/v1/poster.webp","blurhash":"U48XE~I;00xUyC-:RQD*00xt_LRSDk9H%K%L","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":138728,"triangles":6496,"vertices":6001,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-2.0349128246307373,-0.0000987459510400912,-0.454900712157735],"max":[2.0349128246307373,1.3000986982673242,0.4549951590124962]},"sizeMeters":[4.07,1.3,0.91],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:14.052Z","updatedAt":"2026-09-08T12:54:14.237Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32640/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SandbagWallFiveCoursesFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32640/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32640/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32640/v1/model.glb\" alt=\"Sandbag Wall, Five Courses (FPS Survival Forest Outpost)\" 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/32640/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/32640/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32612","slug":"fps-survival-forest-outpost-floor-slab-f61a944d","title":"Station Floor Slab 4 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a modular 4 m square concrete floor slab 0.22 m thick with a chequer deck plate, with ports on all four edges.","description":"A 4 m square concrete floor slab 0.22 m thick, with a deck plate laid proud of its top face and two rusted downstand beams under it. The pivot is on the grid origin and a port sits at the centre of each edge, so decks tile without a gap. Dimensions 4.02 × 0.45 × 4.02 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-floor-slab-f61a944d","cdnUrl":"https://cdn.3dassets.dev/assets/32612/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-floor-slab-f61a944d","thumbnailUrl":"https://cdn.3dassets.dev/assets/32612/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32612/v1/poster.webp","blurhash":"U28g+}?v00IU.8M{awx[00DjS7j[DN-;M|D%","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":567796,"triangles":5368,"vertices":8924,"meshes":4,"materials":4,"textures":2,"animations":[],"boundingBox":{"min":[-2.007999897003174,0.000015938616626243185,-2.007999897003174],"max":[2.007999897003174,0.4473654563028346,2.007999897003174]},"sizeMeters":[4.016,0.447,4.016],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:03.876Z","updatedAt":"2026-09-08T12:54:03.978Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32612/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StationFloorSlab4MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32612/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32612/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32612/v1/model.glb\" alt=\"Station Floor Slab 4 m (FPS Survival Forest Outpost)\" 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/32612/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/32612/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32615","slug":"fps-survival-forest-outpost-roof-slab-flat-d77204d7","title":"Flat Roof Slab 4 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a modular 4 m square flat roof slab with a drip edge and felt covering, with ports on all four edges.","description":"A 4 m square flat roof slab 0.24 m thick with a rusted drip edge standing proud of it and a felt covering inset from that, laid in two runs with a lapped seam. The pivot is on the grid origin and a port sits at the centre of each edge. Dimensions 4.24 × 0.84 × 4.24 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-roof-slab-flat-d77204d7","cdnUrl":"https://cdn.3dassets.dev/assets/32615/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-roof-slab-flat-d77204d7","thumbnailUrl":"https://cdn.3dassets.dev/assets/32615/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32615/v1/poster.webp","blurhash":"U38Wy^~U00RhvgRjS#t8009HkXR.C6%M%2In","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":248256,"triangles":2200,"vertices":2243,"meshes":4,"materials":4,"textures":1,"animations":[],"boundingBox":{"min":[-2.119999885559082,0.00005628277771088652,-2.119999885559082],"max":[2.119999885559082,0.8379999995231628,2.119999885559082]},"sizeMeters":[4.24,0.838,4.24],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_materials_transmission","KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:05.910Z","updatedAt":"2026-09-08T12:54:06.046Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32615/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FlatRoofSlab4MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32615/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32615/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32615/v1/model.glb\" alt=\"Flat Roof Slab 4 m (FPS Survival Forest Outpost)\" 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/32615/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/32615/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32605","slug":"fps-survival-forest-outpost-wall-bay-corrugated-10ebe840","title":"Corrugated Wall Bay 4 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a modular corrugated steel wall bay, 4 m wide and 3.5 m high, with a connector port at each end.","description":"A corrugated steel wall bay for the station kit: a 4 m by 3.5 m frame 0.28 m thick clad both sides in fluted sheet that stands 22 mm proud of the studs, on a cast plinth with a rusted head rail. The pivot is on the grid origin, so bays run end to end and stack at a 3.72 m storey pitch over the floor deck. Dimensions 4.00 × 3.53 × 0.52 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-wall-bay-corrugated-10ebe840","cdnUrl":"https://cdn.3dassets.dev/assets/32605/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-wall-bay-corrugated-10ebe840","thumbnailUrl":"https://cdn.3dassets.dev/assets/32605/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32605/v1/poster.webp","blurhash":"U27UCz~p00ITHrjE%zN1^jVs4:XS?b~p$~01","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":562268,"triangles":7850,"vertices":8124,"meshes":6,"materials":6,"textures":2,"animations":[],"boundingBox":{"min":[-2,-0.0000054821557119999476,-0.25996521267466144],"max":[2,3.5256752386590504,0.25996521267466144]},"sizeMeters":[4,3.526,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:02.596Z","updatedAt":"2026-09-08T12:54:02.694Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32605/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CorrugatedWallBay4MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32605/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32605/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32605/v1/model.glb\" alt=\"Corrugated Wall Bay 4 m (FPS Survival Forest Outpost)\" 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/32605/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/32605/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32609","slug":"fps-survival-forest-outpost-wall-bay-concrete-8adc6c13","title":"Concrete Wall Bay 4 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a modular cast concrete wall bay, 4 m wide and 3.5 m high, with a connector port at each end.","description":"The cast concrete finish of the plain wall bay: the same 4 m by 3.5 m panel and grid pivot with the cladding stripped off, leaving damp shuttered concrete with a proud plinth and pilasters. Dimensions 4.00 × 3.59 × 0.52 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-wall-bay-concrete-8adc6c13","cdnUrl":"https://cdn.3dassets.dev/assets/32609/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-wall-bay-concrete-8adc6c13","thumbnailUrl":"https://cdn.3dassets.dev/assets/32609/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32609/v1/poster.webp","blurhash":"U5C%8H~q00M{%M_3of4n00IU_3ofa#%MayD%","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":344416,"triangles":6474,"vertices":5868,"meshes":4,"materials":4,"textures":1,"animations":[],"boundingBox":{"min":[-2,-0.00007418521021707036,-0.26001770073549607],"max":[2,3.5880000591278076,0.26001770073549607]},"sizeMeters":[4,3.588,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:03.173Z","updatedAt":"2026-09-08T12:54:03.366Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32609/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ConcreteWallBay4MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32609/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32609/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32609/v1/model.glb\" alt=\"Concrete Wall Bay 4 m (FPS Survival Forest Outpost)\" 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/32609/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/32609/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32608","slug":"fps-survival-forest-outpost-wall-bay-door-68988fab","title":"Steel Door Wall Bay 4 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a modular wall bay with a hinged steel door on three hinges, 4 m wide with a port at each end. Animated open and close.","description":"A concrete wall bay with a 1.14 m by 2.4 m doorway and a hinged steel leaf. The leaf hangs on three barrel hinges on the left stile, carries two stiffening ribs and a vertical pull bar, and swings outward on a pivot set on the wall face. A steel threshold plate stands proud of the plinth. Dimensions 4.02 × 3.55 × 0.52 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-wall-bay-door-68988fab","cdnUrl":"https://cdn.3dassets.dev/assets/32608/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-wall-bay-door-68988fab","thumbnailUrl":"https://cdn.3dassets.dev/assets/32608/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32608/v1/poster.webp","blurhash":"U4CZU_xu00xa#k~XNf0000xb-;IVg5%M-pIV","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":370136,"triangles":7950,"vertices":7687,"meshes":7,"materials":5,"textures":1,"animations":["open","close"],"boundingBox":{"min":[-2.009999990463257,0,-0.25996521267466144],"max":[2.009999990463257,3.5506752744218373,0.25996521267466144]},"sizeMeters":[4.02,3.551,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:03.032Z","updatedAt":"2026-09-08T12:54:03.162Z","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/32608/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 SteelDoorWallBay4MFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32608/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/32608/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32608/v1/model.glb\" alt=\"Steel Door Wall Bay 4 m (FPS Survival Forest Outpost)\" 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/32608/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/32608/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32610","slug":"fps-survival-forest-outpost-wall-bay-shutter-b4058c18","title":"Roller Shutter Wall Bay 4 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a modular wall bay with a 3 m tilting roller shutter on guide rails, 4 m wide with a port at each end. Animated open and close.","description":"A concrete wall bay with a 3 m by 2.7 m vehicle opening closed by a shutter of thirteen slats. The curtain hangs from a barrel at the head and tilts up and out over it, running in two guide rails that stand proud of the jamb reveals, with a rusted bottom rail and a lifting bar across it. Dimensions 4.02 × 3.54 × 0.59 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data. The barrel above the opening is fixed: the curtain is one rigid leaf, not a coiling slat chain, because a rigid node transform cannot roll a curtain onto a drum.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-wall-bay-shutter-b4058c18","cdnUrl":"https://cdn.3dassets.dev/assets/32610/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-wall-bay-shutter-b4058c18","thumbnailUrl":"https://cdn.3dassets.dev/assets/32610/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32610/v1/poster.webp","blurhash":"U5Ame$V@00bF~q?bDiD%rCxa9tIUM{-on$4:","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":586036,"triangles":7912,"vertices":8859,"meshes":6,"materials":5,"textures":2,"animations":["open","close"],"boundingBox":{"min":[-2.009999990463257,0.00003082250826236255,-0.25996521267466144],"max":[2.009999990463257,3.5356752291223073,0.32994226421307615]},"sizeMeters":[4.02,3.536,0.59],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:03.457Z","updatedAt":"2026-09-08T12:54:03.845Z","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/32610/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 RollerShutterWallBay4MFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32610/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/32610/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32610/v1/model.glb\" alt=\"Roller Shutter Wall Bay 4 m (FPS Survival Forest Outpost)\" 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/32610/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/32610/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32606","slug":"fps-survival-forest-outpost-corner-column-31b0d308","title":"Station Corner Column 3.5 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 0.46 m square concrete corner column 3.5 m tall, filling the square where two modular wall bays meet.","description":"The corner post of the station kit: a 0.46 m square concrete column 3.5 m tall on a spread base, with a rusted cap band and four external tie rods at its arrises. It is wider than the 0.28 m wall bays, so two runs stopping at each other's inner face meet inside it with nothing sharing a plane. Dimensions 0.66 × 3.50 × 0.66 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-corner-column-31b0d308","cdnUrl":"https://cdn.3dassets.dev/assets/32606/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-corner-column-31b0d308","thumbnailUrl":"https://cdn.3dassets.dev/assets/32606/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32606/v1/poster.webp","blurhash":"U17nRQ_30000Z~Rikr%M?GWBE2ozs-ofX9WB","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"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":245376,"triangles":2264,"vertices":2384,"meshes":4,"materials":4,"textures":1,"animations":[],"boundingBox":{"min":[-0.329901129131944,0,-0.329901129131944],"max":[0.329901129131944,3.5,0.329901129131944]},"sizeMeters":[0.66,3.5,0.66],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:02.632Z","updatedAt":"2026-09-08T12:54:02.734Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32606/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StationCornerColumn35MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32606/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32606/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32606/v1/model.glb\" alt=\"Station Corner Column 3.5 m (FPS Survival Forest Outpost)\" 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/32606/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/32606/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32617","slug":"fps-survival-forest-outpost-lookout-tower-6ec2904b","title":"Timber Lookout Tower 8.7 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a battered timber lookout tower 8.7 m tall with a railed platform, a fixed ladder and a lit roof over it.","description":"A four legged timber lookout tower with a 2.7 m railed platform 5.6 m up, reached by an eighteen rung steel ladder on the back face. The legs rake outward to a splayed base, braced on both flanks; the platform is decked in chequer plate over a timber frame and screened waist high in steel sheet, with the rail left open over the ladder head. A shingled pyramid roof on four posts carries a lit work lamp on its underside. Dimensions 3.32 × 8.65 × 3.79 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data. The ladder, the rail and the roof are one static assembly; only the pack's doors, machinery and figures animate.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-lookout-tower-6ec2904b","cdnUrl":"https://cdn.3dassets.dev/assets/32617/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-lookout-tower-6ec2904b","thumbnailUrl":"https://cdn.3dassets.dev/assets/32617/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32617/v1/poster.webp","blurhash":"U17,*_^j000M~7xb0jE1_Lxt0M9a4nR+?bxV","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"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":862240,"triangles":16002,"vertices":18681,"meshes":8,"materials":8,"textures":3,"animations":[],"boundingBox":{"min":[-1.6617008447647095,-0.00008453560273586486,-1.8932662378560763],"max":[1.6617008447647095,8.649999618530273,1.893450379371643]},"sizeMeters":[3.323,8.65,3.787],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:06.636Z","updatedAt":"2026-09-08T12:54:06.753Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32617/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TimberLookoutTower87MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32617/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32617/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32617/v1/model.glb\" alt=\"Timber Lookout Tower 8.7 m (FPS Survival Forest Outpost)\" 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/32617/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/32617/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32630","slug":"fps-survival-forest-outpost-radio-mast-cba3b9db","title":"Lattice Radio Mast 11 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a tapered lattice radio mast with a swaying whip aerial, a lit red beacon and a transceiver cabinet at its foot. Animated sway.","description":"A tapered four leg lattice mast on a cast pad, braced in twelve panels, carrying a whip aerial with two cross elements that sways on its own base pivot, a lit red beacon under it, a cable run down one leg and a transceiver cabinet at the foot with a lit blue screen. Dimensions 1.58 × 11.05 × 1.50 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips sway turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-radio-mast-cba3b9db","cdnUrl":"https://cdn.3dassets.dev/assets/32630/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-radio-mast-cba3b9db","thumbnailUrl":"https://cdn.3dassets.dev/assets/32630/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32630/v1/poster.webp","blurhash":"U25}s-%M004n00Rj~qx]4nay?vofIoWV%2s:","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":461388,"triangles":12852,"vertices":11984,"meshes":7,"materials":6,"textures":1,"animations":["sway"],"boundingBox":{"min":[-0.7900000214576721,0,-0.75],"max":[0.7899902471899896,11.050000095367432,0.75]},"sizeMeters":[1.58,11.05,1.5],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:11.814Z","updatedAt":"2026-09-08T12:54:11.984Z","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/32630/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 LatticeRadioMast11MFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32630/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/32630/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32630/v1/model.glb\" alt=\"Lattice Radio Mast 11 m (FPS Survival Forest Outpost)\" 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/32630/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/32630/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32628","slug":"fps-survival-forest-outpost-wind-turbine-dee233d0","title":"Guyed Wind Turbine, 5.2 m Mast (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a small guyed wind turbine on a tapered mast, with three blades that turn and a tail vane. Animated turbine-spin.","description":"A small wind turbine on a 5.2 m tapered mast guyed by three stays off a cast pad, with a nacelle, a cut plate tail vane and a three bladed rotor on a nose cone that turns about its own hub axis. Dimensions 3.75 × 7.03 × 4.24 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips turbine-spin turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data. The nacelle does not yaw: the tail vane is modelled but static, because yaw and rotor would need two nested channels on one node.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-wind-turbine-dee233d0","cdnUrl":"https://cdn.3dassets.dev/assets/32628/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-wind-turbine-dee233d0","thumbnailUrl":"https://cdn.3dassets.dev/assets/32628/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32628/v1/poster.webp","blurhash":"U34.G2x[00IB00Rj^,s:ITV@%Mxu_4t79FM{","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":458112,"triangles":3480,"vertices":3920,"meshes":5,"materials":4,"textures":2,"animations":["turbine-spin"],"boundingBox":{"min":[-1.8760923235516347,-0.000038361447601886756,-2.1218583583831787],"max":[1.8761561814362826,7.026078551636013,2.1218583583831787]},"sizeMeters":[3.752,7.026,4.244],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:10.310Z","updatedAt":"2026-09-08T12:54:10.551Z","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/32628/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 GuyedWindTurbine52MMastFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32628/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/32628/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32628/v1/model.glb\" alt=\"Guyed Wind Turbine, 5.2 m Mast (FPS Survival Forest Outpost)\" 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/32628/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/32628/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32696","slug":"fps-survival-forest-outpost-floodlight-mast-98fcda0b","title":"Four Head Floodlight Mast (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 5.6 m floodlight mast with four lit heads on a cross bar, a guyed base and a switch box with a green lamp.","description":"A 5.6 m floodlight mast on a cast pad: a tapered tube braced by three struts, carrying a cross bar with four raked heads whose lenses are lit white, with a switch box at the foot showing a green lamp and a cable run up the mast. The lit lenses are the light source; there are no punctual lights in this pipeline, so add a real light in your engine if you need the ground lit. Dimensions 2.20 × 5.78 × 1.14 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-floodlight-mast-98fcda0b","cdnUrl":"https://cdn.3dassets.dev/assets/32696/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-floodlight-mast-98fcda0b","thumbnailUrl":"https://cdn.3dassets.dev/assets/32696/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32696/v1/poster.webp","blurhash":"U45hV;%M004n%MxuRiD%~Wxu9FD*ahofoxRj","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":317500,"triangles":6070,"vertices":5503,"meshes":6,"materials":6,"textures":1,"animations":[],"boundingBox":{"min":[-1.1000213822752996,0.00003539794966680998,-0.5674999952316284],"max":[1.1000213822752996,5.777735233306885,0.5674977212444879]},"sizeMeters":[2.2,5.778,1.135],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:32.620Z","updatedAt":"2026-09-08T12:54:32.723Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32696/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FourHeadFloodlightMastFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32696/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32696/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32696/v1/model.glb\" alt=\"Four Head Floodlight Mast (FPS Survival Forest Outpost)\" 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/32696/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/32696/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32624","slug":"fps-survival-forest-outpost-forge-furnace-0f59b719","title":"Scrap Forge and Anvil (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a scrap built forge with a glowing firebox, a flue, worked bellows, an anvil on a block and a quench tub. Animated press-pull.","description":"A forge built out of scrap: a cast concrete base carrying a rusted steel firebox whose mouth glows behind a proud steel arch, a 1.6 m flue with a cap, a leather bellows on the flank worked by a pine lever on a real pivot, an anvil on a stump block and a quench tub of water beside it. Dimensions 2.31 × 3.48 × 1.25 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips press-pull turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data. The bellows bag itself is static: only the lever above it turns, because a rigid node transform cannot compress a bag.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-forge-furnace-0f59b719","cdnUrl":"https://cdn.3dassets.dev/assets/32624/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-forge-furnace-0f59b719","thumbnailUrl":"https://cdn.3dassets.dev/assets/32624/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32624/v1/poster.webp","blurhash":"U38Dz;-;004n00R%~po#5XR%=qxbt8jE$ft8","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":365168,"triangles":6188,"vertices":5464,"meshes":9,"materials":8,"textures":2,"animations":["press-pull"],"boundingBox":{"min":[-1.156691494820818,0,-0.6250540475662414],"max":[1.156593840567325,3.4800000190734863,0.6249485774283537]},"sizeMeters":[2.313,3.48,1.25],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_materials_transmission","KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:09.446Z","updatedAt":"2026-09-08T12:54:09.553Z","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/32624/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 ScrapForgeAndAnvilFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32624/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/32624/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32624/v1/model.glb\" alt=\"Scrap Forge and Anvil (FPS Survival Forest Outpost)\" 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/32624/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/32624/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32625","slug":"fps-survival-forest-outpost-generator-unit-6a95d3ba","title":"Camp Generator and Flywheel (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a scrap petrol generator on a skid with a spinning flywheel, a fuel tank, an exhaust and lit green and red status lamps. Animated spin.","description":"The camp's power: a single cylinder generator bolted to a steel skid, with a finned barrel, a fuel tank over it, an upright exhaust and a spoked flywheel on the +X end of the crank that turns about its own axle. The control panel carries a lit blue output meter and green and red status lamps. Dimensions 1.50 × 2.43 × 0.81 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips spin turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data. The belt, the pulley and the cylinder are static: only the flywheel turns, because a rigid node transform cannot run a belt round two pulleys.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-generator-unit-6a95d3ba","cdnUrl":"https://cdn.3dassets.dev/assets/32625/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-generator-unit-6a95d3ba","thumbnailUrl":"https://cdn.3dassets.dev/assets/32625/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32625/v1/poster.webp","blurhash":"U35O7}xZ00Iq%0s:IpNG0MS5}@r;FfR+,.s,","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":272632,"triangles":4436,"vertices":3970,"meshes":9,"materials":8,"textures":1,"animations":["spin"],"boundingBox":{"min":[-0.7500566673165301,0,-0.40266239132309106],"max":[0.7500566673165301,2.4340999126434326,0.40266239132309106]},"sizeMeters":[1.5,2.434,0.805],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:09.641Z","updatedAt":"2026-09-08T12:54:09.784Z","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/32625/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 CampGeneratorAndFlywheelFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32625/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/32625/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32625/v1/model.glb\" alt=\"Camp Generator and Flywheel (FPS Survival Forest Outpost)\" 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/32625/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/32625/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32626","slug":"fps-survival-forest-outpost-water-purifier-b566db3e","title":"Water Purifier Still (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a scrap water purifier with a settling tank, a filter column, pipework and a lit blue readout with a green ready lamp.","description":"A scrap built water purifier on a cast pad: a 1.7 m settling tank banded with two hoops and fitted with a sight glass, a filter column beside it, a hose from the intake and a cross pipe to the outlet. The control box carries a lit blue readout and a green ready lamp, with a collecting can under the tap. Dimensions 1.28 × 1.78 × 1.14 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-water-purifier-b566db3e","cdnUrl":"https://cdn.3dassets.dev/assets/32626/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-water-purifier-b566db3e","thumbnailUrl":"https://cdn.3dassets.dev/assets/32626/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32626/v1/poster.webp","blurhash":"U17K-uSw00Me04xv=roZxwIV8_--0ftR^j9E","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":439032,"triangles":3338,"vertices":3062,"meshes":8,"materials":8,"textures":2,"animations":[],"boundingBox":{"min":[-0.6413736930273619,-0.000023807079476710624,-0.57000489705393],"max":[0.6413736930273619,1.7799999713897705,0.5699574241278976]},"sizeMeters":[1.283,1.78,1.14],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_materials_transmission","KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:10.100Z","updatedAt":"2026-09-08T12:54:10.190Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32626/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WaterPurifierStillFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32626/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32626/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32626/v1/model.glb\" alt=\"Water Purifier Still (FPS Survival Forest Outpost)\" 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/32626/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/32626/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32622","slug":"fps-survival-forest-outpost-workbench-28adb1a3","title":"Scavenger Workbench 2 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 2 m scavenger workbench with two sliding drawers, a pegboard of tools, a bench vice and a lit work lamp. Animated open and close.","description":"The camp's main crafting bench: a 2 m planked pine top on a welded steel frame, with two drawers on runners under it, a pegboard back hung with hand tools, a vice bolted to the near corner, a scrap tray on the lower rail and a lit work lamp on a gooseneck over the work. Dimensions 2.04 × 1.91 × 0.90 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-workbench-28adb1a3","cdnUrl":"https://cdn.3dassets.dev/assets/32622/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-workbench-28adb1a3","thumbnailUrl":"https://cdn.3dassets.dev/assets/32622/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32622/v1/poster.webp","blurhash":"U15rDD-:00w~MbxbOa9X009E-.?cImx^rxIS","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":541156,"triangles":14600,"vertices":13957,"meshes":9,"materials":5,"textures":2,"animations":["open","close"],"boundingBox":{"min":[-1.0199999809265137,0.000034031102490561516,-0.4474362026891299],"max":[1.0199999809265137,1.9126154211606212,0.44749465785975534]},"sizeMeters":[2.04,1.913,0.895],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:08.909Z","updatedAt":"2026-09-08T12:54:09.019Z","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/32622/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 ScavengerWorkbench2MFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32622/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/32622/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32622/v1/model.glb\" alt=\"Scavenger Workbench 2 m (FPS Survival Forest Outpost)\" 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/32622/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/32622/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32623","slug":"fps-survival-forest-outpost-gunsmith-bench-71201a3d","title":"Gunsmith Bench 1.7 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 1.7 m gunsmith bench with a rubber mat, a barrel rack, a parts bin, a lit blue inspection screen and one drawer. Animated open and close.","description":"A weapons bench: a 1.7 m steel top with a rubber work mat laid on it, one deep drawer on runners, a back rack holding four spare barrels, a bin of small parts and springs, and a lit blue inspection screen angled over the work. Dimensions 1.70 × 1.67 × 0.81 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-gunsmith-bench-71201a3d","cdnUrl":"https://cdn.3dassets.dev/assets/32623/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-gunsmith-bench-71201a3d","thumbnailUrl":"https://cdn.3dassets.dev/assets/32623/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32623/v1/poster.webp","blurhash":"U15#nkVD00yZ.8-o9F9u4TE2%g-n00t-xvHq","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":326792,"triangles":7156,"vertices":6227,"meshes":8,"materials":6,"textures":1,"animations":["open","close"],"boundingBox":{"min":[-0.8500000238418579,0,-0.40747954719859797],"max":[0.8500000238418579,1.6650223541777103,0.40750077179168626]},"sizeMeters":[1.7,1.665,0.815],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:09.002Z","updatedAt":"2026-09-08T12:54:09.109Z","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/32623/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 GunsmithBench17MFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32623/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/32623/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32623/v1/model.glb\" alt=\"Gunsmith Bench 1.7 m (FPS Survival Forest Outpost)\" 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/32623/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/32623/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32634","slug":"fps-survival-forest-outpost-ammunition-press-dcc61975","title":"Hand Ammunition Press (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a bench mounted hand press for reloading, with a worked lever, trays of cases and a powder measure. Animated press-pull.","description":"A single stage hand press bolted to a pine block: a cast steel O frame with a ram and die head, a lever with a ball handle that rocks on its own pivot, two trays of brass cases and a glass powder measure beside it. Dimensions 0.87 × 1.71 × 0.91 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips press-pull turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data. The ram is static: only the lever moves, because the toggle linkage that drives a real press cannot be reached with one rigid node transform.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-ammunition-press-dcc61975","cdnUrl":"https://cdn.3dassets.dev/assets/32634/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-ammunition-press-dcc61975","thumbnailUrl":"https://cdn.3dassets.dev/assets/32634/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32634/v1/poster.webp","blurhash":"U36k0Ct700IBT}ogmjRh4.of%LahvfV@Osx]","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":293476,"triangles":2408,"vertices":2934,"meshes":7,"materials":6,"textures":2,"animations":["press-pull"],"boundingBox":{"min":[-0.4350000023841858,3.2263035398827355e-7,-0.453201643425679],"max":[0.4349957242738587,1.7099855310770027,0.45318028099834917]},"sizeMeters":[0.87,1.71,0.906],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_materials_transmission","KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":1,"publishedAt":"2026-09-08T12:54:13.105Z","updatedAt":"2026-09-08T15:01:25.356Z","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/32634/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 HandAmmunitionPressFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32634/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/32634/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32634/v1/model.glb\" alt=\"Hand Ammunition Press (FPS Survival Forest Outpost)\" 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/32634/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/32634/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32635","slug":"fps-survival-forest-outpost-drying-rack-8e0dc362","title":"Meat Drying Rack 2.7 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a timber drying rack 2.7 m across its splayed legs, hung with strips of meat and cloth over three rails.","description":"A drying rack 2.7 m across its splayed feet: two pine A frames tied by a cross rail, carrying three horizontal rails hung with nine strips of drying meat and cloth, with a bundled hide on the ground beneath. Dimensions 2.70 × 1.98 × 0.93 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-drying-rack-8e0dc362","cdnUrl":"https://cdn.3dassets.dev/assets/32635/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-drying-rack-8e0dc362","thumbnailUrl":"https://cdn.3dassets.dev/assets/32635/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32635/v1/poster.webp","blurhash":"U17K6h+I00?s*|~APU020gkR^QAGEOaK}n$+","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":82336,"triangles":1872,"vertices":1596,"meshes":3,"materials":3,"textures":1,"animations":[],"boundingBox":{"min":[-1.3494161367416382,-0.00002040483620724398,-0.46309349216161755],"max":[1.3494161367416382,1.9818287553218168,0.46309349216161755]},"sizeMeters":[2.699,1.982,0.926],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:13.322Z","updatedAt":"2026-09-08T12:54:13.434Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32635/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function MeatDryingRack27MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32635/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32635/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32635/v1/model.glb\" alt=\"Meat Drying Rack 2.7 m (FPS Survival Forest Outpost)\" 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/32635/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/32635/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32698","slug":"fps-survival-forest-outpost-campfire-9a18b153","title":"Open Campfire with Embers (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: an open campfire ringed with eleven stones, six burning logs and a bed of glowing amber embers.","description":"An open campfire 1.9 m across the stone ring: eleven set stones round six logs leaning into a bed of glowing amber embers, with three spare logs dropped outside the ring. Emissive geometry is the light source here. Dimensions 2.61 × 0.96 × 2.03 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data. The flame is static geometry: it glows but does not flicker, because this pipeline ships node transforms only.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-campfire-9a18b153","cdnUrl":"https://cdn.3dassets.dev/assets/32698/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-campfire-9a18b153","thumbnailUrl":"https://cdn.3dassets.dev/assets/32698/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32698/v1/poster.webp","blurhash":"UA7^*+M{01-:odj[WCfR00xu~VE2M}a#t6WU","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":214720,"triangles":604,"vertices":1010,"meshes":3,"materials":3,"textures":1,"animations":[],"boundingBox":{"min":[-1.3029314279556274,-0.00004953534892637723,-1.0151249170303345],"max":[1.3029314279556274,0.964718759059906,1.015171293511354]},"sizeMeters":[2.606,0.965,2.03],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:33.312Z","updatedAt":"2026-09-08T12:54:33.411Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32698/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function OpenCampfireWithEmbersFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32698/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32698/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32698/v1/model.glb\" alt=\"Open Campfire with Embers (FPS Survival Forest Outpost)\" 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/32698/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/32698/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32693","slug":"fps-survival-forest-outpost-oil-drum-open-e354f8b6","title":"Burning Oil Drum Brazier (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a cut down oil drum burning as a brazier, with glowing embers and five logs standing in it.","description":"The brazier version of the oil drum: the same corroded shell with its head cut out, a bed of ash inside and five logs standing in a glowing amber fire. It is the pack's cheapest night light and reads at thirty metres. Dimensions 0.73 × 0.91 × 0.68 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-oil-drum-open-e354f8b6","cdnUrl":"https://cdn.3dassets.dev/assets/32693/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-oil-drum-open-e354f8b6","thumbnailUrl":"https://cdn.3dassets.dev/assets/32693/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32693/v1/poster.webp","blurhash":"U5BMGM~B000f~qjGD%xt2LJ-;c$f%NbvM{V@","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":90516,"triangles":2496,"vertices":1823,"meshes":5,"materials":5,"textures":1,"animations":[],"boundingBox":{"min":[-0.3651120708338141,0,-0.33901676992095703],"max":[0.3651073303122645,0.9110525846481323,0.33901676992095703]},"sizeMeters":[0.73,0.911,0.678],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:31.636Z","updatedAt":"2026-09-08T12:54:31.785Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32693/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BurningOilDrumBrazierFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32693/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32693/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32693/v1/model.glb\" alt=\"Burning Oil Drum Brazier (FPS Survival Forest Outpost)\" 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/32693/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/32693/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32618","slug":"fps-survival-forest-outpost-shipping-container-9486906f","title":"Shipping Container 6 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a corroded 6 m shipping container with two hinged end doors on locking bars. Animated open and close.","description":"A corroded 6.05 m by 2.44 m by 2.59 m shipping container: a corrugated shell over a boxed frame, with eight corner castings, top and bottom side rails and two hinged end leaves on the +X face. Each leaf carries two locking bars and a cam handle and swings clear of the flank on its own stile. Dimensions 6.21 × 2.60 × 2.66 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-shipping-container-9486906f","cdnUrl":"https://cdn.3dassets.dev/assets/32618/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-shipping-container-9486906f","thumbnailUrl":"https://cdn.3dassets.dev/assets/32618/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32618/v1/poster.webp","blurhash":"U15YA}oh00%1~W_3InD*00xZ%gRj00a%%NMw","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":430276,"triangles":11696,"vertices":10822,"meshes":9,"materials":5,"textures":1,"animations":["open","close"],"boundingBox":{"min":[-3.1075000762939453,0.00007097673877454191,-1.3314384652016475],"max":[3.1075316988004076,2.6011291270209913,1.3314384652016475]},"sizeMeters":[6.215,2.601,2.663],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:06.682Z","updatedAt":"2026-09-08T12:54:06.918Z","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/32618/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 ShippingContainer6MFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32618/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/32618/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32618/v1/model.glb\" alt=\"Shipping Container 6 m (FPS Survival Forest Outpost)\" 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/32618/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/32618/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32682","slug":"fps-survival-forest-outpost-pickup-battered-0972afc5","title":"Battered Survival Pickup (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a rusted four wheel pickup with a planked load bed, a roof floodlight bar, two opening cab doors and four rolling wheels. Animated open, close and wheel-roll.","description":"A rusted survival pickup 5.1 m long: a ladder chassis under a dented cab with a raked windscreen, a bonnet, a barred grille and two lit headlamps, a planked load bed with sides carrying a spare wheel and a fuel drum, a roof rack with two lit floodlights and a whip aerial. Both cab doors hinge on their front edge and all four wheels turn. Dimensions 2.51 × 2.97 × 5.12 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close, wheel-roll turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data. The steering, the suspension, the bonnet and the tailgate are static: only the two cab doors and the four wheels move.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-pickup-battered-0972afc5","cdnUrl":"https://cdn.3dassets.dev/assets/32682/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-pickup-battered-0972afc5","thumbnailUrl":"https://cdn.3dassets.dev/assets/32682/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32682/v1/poster.webp","blurhash":"U57^lJ-:D%IpE29bV@$%00Rjx]xu={~BkrEN","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":517880,"triangles":21992,"vertices":19725,"meshes":24,"materials":8,"textures":2,"animations":["open","close","wheel-roll"],"boundingBox":{"min":[-1.255095089584608,-0.000021550781816370712,-2.559999942779541],"max":[1.255095089584608,2.9683161400144624,2.559999942779541]},"sizeMeters":[2.51,2.968,5.12],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_materials_transmission","KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":2,"publishedAt":"2026-09-08T12:54:28.789Z","updatedAt":"2026-09-08T16:13:55.027Z","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/32682/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 BatteredSurvivalPickupFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32682/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/32682/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32682/v1/model.glb\" alt=\"Battered Survival Pickup (FPS Survival Forest Outpost)\" 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/32682/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/32682/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32681","slug":"fps-survival-forest-outpost-quad-bike-58c0c941","title":"Scavenger Quad Bike (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a battered utility quad with a rear cargo rack, mudguards, a lit headlight and four rolling wheels. Animated wheel-roll.","description":"A battered utility quad 1.9 m long: a tube frame with a rusted engine cowl, a rubber seat, a barred rear cargo rack with a strapped bundle on it, front and rear mudguards, raked handlebars with rubber grips, a lit headlight and a small instrument pod. All four knobbly wheels turn on their own axles. Dimensions 1.10 × 1.25 × 1.93 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips wheel-roll turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data. The steering, the suspension and the brake levers are static: only the wheels turn.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-quad-bike-58c0c941","cdnUrl":"https://cdn.3dassets.dev/assets/32681/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-quad-bike-58c0c941","thumbnailUrl":"https://cdn.3dassets.dev/assets/32681/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32681/v1/poster.webp","blurhash":"U26RASwM00Tc_2D%9G?t009b^j~A4:xu-pMx","category":{"slug":"vehicles","title":"Vehicles"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":260372,"triangles":10688,"vertices":9247,"meshes":15,"materials":7,"textures":1,"animations":["wheel-roll"],"boundingBox":{"min":[-0.5487106279756225,-0.00001947628447845906,-0.9669514894485474],"max":[0.5487106284703411,1.2460365991699622,0.966951489079527]},"sizeMeters":[1.097,1.246,1.934],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":2,"publishedAt":"2026-09-08T12:54:28.529Z","updatedAt":"2026-09-08T16:13:56.556Z","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/32681/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 ScavengerQuadBikeFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32681/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/32681/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32681/v1/model.glb\" alt=\"Scavenger Quad Bike (FPS Survival Forest Outpost)\" 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/32681/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/32681/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32676","slug":"fps-survival-forest-outpost-supply-drop-726a9bac","title":"Landed Supply Drop (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a landed supply drop crate with a lashed frame, a lit amber beacon and its canopy spilled and rigged beside it.","description":"A supply drop that has landed: a canvas wrapped crate 0.94 m across lashed into a timber frame, with a lit amber beacon on the top face, eight rigging lines running out of it and the canopy collapsed into ten pale panels spread across two metres of ground. Dimensions 3.13 × 1.10 × 2.87 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-supply-drop-726a9bac","cdnUrl":"https://cdn.3dassets.dev/assets/32676/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-supply-drop-726a9bac","thumbnailUrl":"https://cdn.3dassets.dev/assets/32676/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32676/v1/poster.webp","blurhash":"UCBWe{WA00%Nt6axWCj]00t7~qITRot8axRi","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":30796,"triangles":1388,"vertices":1168,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1.5632492303848267,-0.000027233172471496925,-1.4328491687774658],"max":[1.563226310864546,1.1000087266074992,1.4328491687774658]},"sizeMeters":[3.126,1.1,2.866],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:25.965Z","updatedAt":"2026-09-08T12:54:26.114Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32676/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LandedSupplyDropFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32676/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32676/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32676/v1/model.glb\" alt=\"Landed Supply Drop (FPS Survival Forest Outpost)\" 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/32676/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/32676/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32651","slug":"fps-survival-forest-outpost-weapon-scout-carbine-55d669ba","title":"Scout Carbine, Folding Stock (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: an original short gas carbine with a folding stock, a detachable magazine, a moving bolt and a lit red dot sight. Animated open and close.","description":"A short gas operated carbine of original design: a machined upper and lower with a folding tube stock, a handguard with four vent slots, a stubby suppressor, a reflex sight with a lit red dot, a detachable box magazine that drops out of its well and a charging handle and bolt that run back along the bore. Dimensions 0.13 × 0.37 × 0.84 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips magazine-open, magazine-close, bolt-open, bolt-close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data. The trigger, the safety and the folding hinge are modelled but static; only the magazine and the bolt move.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-weapon-scout-carbine-55d669ba","cdnUrl":"https://cdn.3dassets.dev/assets/32651/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-weapon-scout-carbine-55d669ba","thumbnailUrl":"https://cdn.3dassets.dev/assets/32651/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32651/v1/poster.webp","blurhash":"U13S03M{D$_3_4D%IU-;4TIUWBM|4m-;xvD%","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":129932,"triangles":6432,"vertices":5230,"meshes":7,"materials":4,"textures":0,"animations":["magazine-open","magazine-close","bolt-open","bolt-close"],"boundingBox":{"min":[-0.06498122858434119,4.0995853933800674e-9,-0.42124998569488525],"max":[0.06499999622255564,0.3728493939285134,0.42124998569488525]},"sizeMeters":[0.13,0.373,0.842],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":1,"publishedAt":"2026-09-08T12:54:17.705Z","updatedAt":"2026-09-08T15:01:21.896Z","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/32651/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 ScoutCarbineFoldingStockFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32651/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/32651/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32651/v1/model.glb\" alt=\"Scout Carbine, Folding Stock (FPS Survival Forest Outpost)\" 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/32651/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/32651/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32655","slug":"fps-survival-forest-outpost-weapon-marksman-rifle-e20c7bc2","title":"Marksman Rifle and Bipod (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: an original long bolt action marksman rifle with a scope, a folded bipod, a detachable magazine and a working bolt. Animated open and close.","description":"A long range bolt action of original design: a heavy fluted barrel with a muzzle brake in an aluminium chassis, a thumbhole stock with an adjustable cheek piece, a scope on high rings with a lit blue reticle glow in the ocular, a folded bipod under the fore end, a detachable box magazine and a bolt with a round knob that runs back on its own pivot. Dimensions 0.15 × 0.34 × 1.38 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips magazine-open, magazine-close, bolt-open, bolt-close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data. The bipod is modelled folded and does not deploy, and the cheek piece does not slide; only the magazine and the bolt move.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-weapon-marksman-rifle-e20c7bc2","cdnUrl":"https://cdn.3dassets.dev/assets/32655/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-weapon-marksman-rifle-e20c7bc2","thumbnailUrl":"https://cdn.3dassets.dev/assets/32655/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32655/v1/poster.webp","blurhash":"U03bjxxu00?b_N4n9EtR008_?cNG8_~q~qjF","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":129468,"triangles":6068,"vertices":5330,"meshes":8,"materials":5,"textures":0,"animations":["magazine-open","magazine-close","bolt-open","bolt-close"],"boundingBox":{"min":[-0.07726325919413257,0.000008953796568275663,-0.6894999742507935],"max":[0.07728340755403042,0.344440302233192,0.6894999742507935]},"sizeMeters":[0.155,0.344,1.379],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_materials_transmission","KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":1,"publishedAt":"2026-09-08T12:54:19.384Z","updatedAt":"2026-09-08T15:01:19.739Z","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/32655/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 MarksmanRifleAndBipodFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32655/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/32655/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32655/v1/model.glb\" alt=\"Marksman Rifle and Bipod (FPS Survival Forest Outpost)\" 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/32655/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/32655/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32661","slug":"fps-survival-forest-outpost-loot-cache-legendary-975367a5","title":"Legendary Loot Cache, Amber Ring (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a scavenged hard case on a lit amber rarity ring, rung 5 of five, with a hinged lid. Animated open and close.","description":"Rung 5 of the pack's five step loot ladder: a scavenged hard case with a hinged lid on two barrel hinges and a proud latch, standing inside a lit amber ring with three markers round it. The ring is the pack's own ladder, invented for it: white, green, blue, red then amber. No published game's rarity colours, names or iconography are used. Dimensions 0.94 × 0.39 × 0.93 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-loot-cache-legendary-975367a5","cdnUrl":"https://cdn.3dassets.dev/assets/32661/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-loot-cache-legendary-975367a5","thumbnailUrl":"https://cdn.3dassets.dev/assets/32661/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32661/v1/poster.webp","blurhash":"ULBfwlxaE2j?4;WB%1j[4:RkWBaf~Ut6R.ay","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":67572,"triangles":3196,"vertices":2695,"meshes":7,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.46799999475479126,0.000017089473592551974,-0.4648006784052605],"max":[0.46799999475479126,0.38501204901282865,0.4648006784052605]},"sizeMeters":[0.936,0.385,0.93],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:22.350Z","updatedAt":"2026-09-08T12:54:22.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/32661/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 LegendaryLootCacheAmberRingFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32661/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/32661/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32661/v1/model.glb\" alt=\"Legendary Loot Cache, Amber Ring (FPS Survival Forest Outpost)\" 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/32661/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/32661/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32660","slug":"fps-survival-forest-outpost-loot-cache-rare-fb7d48a6","title":"Rare Loot Cache, Blue Ring (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a scavenged hard case on a lit blue rarity ring, rung 3 of five, with a hinged lid. Animated open and close.","description":"Rung 3 of the pack's five step loot ladder: a scavenged hard case with a hinged lid on two barrel hinges and a proud latch, standing inside a lit blue ring with three markers round it. The ring is the pack's own ladder, invented for it: white, green, blue, red then amber. No published game's rarity colours, names or iconography are used. Dimensions 0.94 × 0.39 × 0.93 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-loot-cache-rare-fb7d48a6","cdnUrl":"https://cdn.3dassets.dev/assets/32660/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-loot-cache-rare-fb7d48a6","thumbnailUrl":"https://cdn.3dassets.dev/assets/32660/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32660/v1/poster.webp","blurhash":"UJ8;#{t8ITa~DhWBtSj?9EV@jEjF?wt7e-ay","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":67520,"triangles":3196,"vertices":2695,"meshes":7,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.46799999475479126,0.000017089473592551974,-0.4648006784052605],"max":[0.46799999475479126,0.38501204901282865,0.4648006784052605]},"sizeMeters":[0.936,0.385,0.93],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:22.242Z","updatedAt":"2026-09-08T12:54:22.363Z","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/32660/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 RareLootCacheBlueRingFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32660/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/32660/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32660/v1/model.glb\" alt=\"Rare Loot Cache, Blue Ring (FPS Survival Forest Outpost)\" 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/32660/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/32660/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32658","slug":"fps-survival-forest-outpost-loot-cache-common-df93b08e","title":"Common Loot Cache, White Ring (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a scavenged hard case on a lit white rarity ring, rung 1 of five, with a hinged lid. Animated open and close.","description":"Rung 1 of the pack's five step loot ladder: a scavenged hard case with a hinged lid on two barrel hinges and a proud latch, standing inside a lit white ring with three markers round it. The ring is the pack's own ladder, invented for it: white, green, blue, red then amber. No published game's rarity colours, names or iconography are used. Dimensions 0.94 × 0.39 × 0.93 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-loot-cache-common-df93b08e","cdnUrl":"https://cdn.3dassets.dev/assets/32658/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-loot-cache-common-df93b08e","thumbnailUrl":"https://cdn.3dassets.dev/assets/32658/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32658/v1/poster.webp","blurhash":"UKBWY*xuD%j]4nWB%Mj?4.RjV@ae~qt7Rjay","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":67540,"triangles":3196,"vertices":2695,"meshes":7,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.46799999475479126,0.000017089473592551974,-0.4648006784052605],"max":[0.46799999475479126,0.38501204901282865,0.4648006784052605]},"sizeMeters":[0.936,0.385,0.93],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:20.866Z","updatedAt":"2026-09-08T12:54:20.986Z","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/32658/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 CommonLootCacheWhiteRingFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32658/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/32658/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32658/v1/model.glb\" alt=\"Common Loot Cache, White Ring (FPS Survival Forest Outpost)\" 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/32658/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/32658/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32675","slug":"fps-survival-forest-outpost-supply-crate-b0ec2a51","title":"Slatted Supply Crate (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a slatted pine supply crate 0.78 m across with corner posts and a hinged lid on strap hinges. Animated open and close.","description":"A slatted pine supply crate 0.78 m by 0.6 m: four boards a side with gaps between them, corner posts standing proud of the slats, a planked floor and a hinged lid on two strap hinges with a rusted batten and a catch. Dimensions 0.82 × 0.66 × 0.66 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-supply-crate-b0ec2a51","cdnUrl":"https://cdn.3dassets.dev/assets/32675/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-supply-crate-b0ec2a51","thumbnailUrl":"https://cdn.3dassets.dev/assets/32675/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32675/v1/poster.webp","blurhash":"U48{t4}r0#J7I@ahr@V]1INbnlW:Efxr-nOB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":103832,"triangles":2256,"vertices":2250,"meshes":5,"materials":3,"textures":1,"animations":["open","close"],"boundingBox":{"min":[-0.4099999964237213,0.000014947656891473038,-0.3275094507195499],"max":[0.4099999964237213,0.6550179286471649,0.3275122754410056]},"sizeMeters":[0.82,0.655,0.655],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:26.572Z","updatedAt":"2026-09-08T12:54:26.666Z","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/32675/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 SlattedSupplyCrateFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32675/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/32675/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32675/v1/model.glb\" alt=\"Slatted Supply Crate (FPS Survival Forest Outpost)\" 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/32675/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/32675/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32645","slug":"fps-survival-forest-outpost-spike-pit-20ee2b42","title":"Covered Spike Pit 2.7 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a dug spike pit with thirteen sharpened stakes and a stick and brush cover hinged on one lip. Animated open and close.","description":"A trap pit 1.05 m deep and 2.3 m across, revetted with fourteen pine posts, with thirteen sharpened stakes leaning in the bottom and a cover of eleven sticks on two ledges under a mat of brush that lifts on the -Z lip. The origin is the pit floor, not the rim: sink the model until the spoil lip is level with the terrain. Dimensions 3.10 × 1.34 × 3.10 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-spike-pit-20ee2b42","cdnUrl":"https://cdn.3dassets.dev/assets/32645/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-spike-pit-20ee2b42","thumbnailUrl":"https://cdn.3dassets.dev/assets/32645/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32645/v1/poster.webp","blurhash":"U15;]g_0000LY4XR#9#+00Nd~owgD6rvPnE#","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":118048,"triangles":2888,"vertices":2802,"meshes":5,"materials":3,"textures":1,"animations":["open","close"],"boundingBox":{"min":[-1.5499999523162842,0.000050364467780228406,-1.5499999523162842],"max":[1.5499999523162842,1.3400396682648599,1.5499999523162842]},"sizeMeters":[3.1,1.34,3.1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:17.094Z","updatedAt":"2026-09-08T12:54:17.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/32645/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 CoveredSpikePit27MFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32645/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/32645/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32645/v1/model.glb\" alt=\"Covered Spike Pit 2.7 m (FPS Survival Forest Outpost)\" 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/32645/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/32645/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32646","slug":"fps-survival-forest-outpost-bear-trap-62509816","title":"Sprung Bear Trap and Anchor (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 0.7 m sprung bear trap with two toothed jaws, twin springs, a pan plate and an anchor chain. Animated open and close.","description":"A 0.7 m leg hold trap: a rusted ring frame with a pan plate at its centre, a leaf spring and eye on each side, and an anchor chain running to a stake. The two toothed jaws lie flat when the trap is set. The `open` clip throws both jaws up over the centre line, which is the trap snapping shut, and `close` lays them flat again as it is reset. Dimensions 1.97 × 0.51 × 0.73 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips open, close turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-bear-trap-62509816","cdnUrl":"https://cdn.3dassets.dev/assets/32646/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-bear-trap-62509816","thumbnailUrl":"https://cdn.3dassets.dev/assets/32646/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32646/v1/poster.webp","blurhash":"U46*Ew_24:IVxu-pt8E2009Z?a%1IV4.M_~B","category":{"slug":"weapons-tools","title":"Weapons & Tools"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":58792,"triangles":2648,"vertices":2407,"meshes":5,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.9842658638954163,-0.0000017015787266427829,-0.36710077202305186],"max":[0.9842658638954163,0.5109464323002778,0.36710077202305186]},"sizeMeters":[1.969,0.511,0.734],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":1,"publishedAt":"2026-09-08T12:54:17.447Z","updatedAt":"2026-09-08T15:01:22.963Z","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/32646/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 SprungBearTrapAndAnchorFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32646/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/32646/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32646/v1/model.glb\" alt=\"Sprung Bear Trap and Anchor (FPS Survival Forest Outpost)\" 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/32646/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/32646/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32699","slug":"fps-survival-forest-outpost-figure-survivor-scavenger-2d14537c","title":"Survivor Scavenger, Jointed (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 1.78 m survivor scavenger in a layered canvas coat with webbing, a pack and a carbine, built as a rigid jointed puppet. Animated idle, head-turn, arm-swing and weapon-raise.","description":"A survivor scavenger 1.78 m tall in a layered canvas coat with a storm flap, two flapped chest pockets, a skirt with a thickened hem and a webbing belt of three pouches, a soft cap, a framed shoulder pack with straps, and a carbine carried across his front in the right hand. The face is modelled: brow, nose, cheekbones, jaw, ears, eyes and mouth. Motion is rigid node transforms on parented joint nodes: the pelvis carries the head and both shoulders, each shoulder carries its forearm, and the right forearm carries the weapon. There is no skeleton, no skin weighting and no deformation anywhere. The fingers inside the mitt, the face, the hair and the clothing are solid, and the legs are static so the feet stay planted. Dimensions 0.63 × 1.74 × 1.16 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips idle, head-turn, arm-swing, weapon-raise turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-figure-survivor-scavenger-2d14537c","cdnUrl":"https://cdn.3dassets.dev/assets/32699/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-figure-survivor-scavenger-2d14537c","thumbnailUrl":"https://cdn.3dassets.dev/assets/32699/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32699/v1/poster.webp","blurhash":"U25}gRIV00?Z~oaL4pbt0Moy?GRk9HNt%K-V","category":{"slug":"characters","title":"Characters & Creatures"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":294864,"triangles":15776,"vertices":12587,"meshes":16,"materials":4,"textures":0,"animations":["idle","head-turn","arm-swing","weapon-raise"],"boundingBox":{"min":[-0.31536909178552414,8.780534359043024e-7,-0.5775901240376113],"max":[0.31537687857564534,1.74032976840727,0.5775874218371593]},"sizeMeters":[0.631,1.74,1.155],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":2,"publishedAt":"2026-09-08T12:54:34.009Z","updatedAt":"2026-09-08T16:15:20.469Z","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/32699/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 SurvivorScavengerJointedFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32699/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/32699/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32699/v1/model.glb\" alt=\"Survivor Scavenger, Jointed (FPS Survival Forest Outpost)\" 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/32699/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/32699/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32700","slug":"fps-survival-forest-outpost-figure-masked-raider-958f10e5","title":"Masked Raider, Jointed (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 1.8 m masked raider in a respirator and hood with steel pauldrons and a machete, built as a rigid jointed puppet. Animated idle, head-turn, arm-swing and weapon-raise.","description":"A masked raider 1.8 m tall leaning forward in leathers under a canvas hood, wearing a rubber respirator with twin cartridge filters, glass eye lenses and a head strap, a wrapped torso with a bandolier and a webbing belt of four pouches, a steel pauldron with a rolled edge on each shoulder, and a machete raised in the right hand with a riveted scale handle, a guard and a lanyard. The face is covered, so no eyes or mouth are modelled under the mask. Motion is rigid node transforms on parented joint nodes: the pelvis carries the head and both shoulders, each shoulder carries its forearm, and the right forearm carries the machete. There is no skeleton, no skin weighting and no deformation anywhere. The fingers inside the mitt, the face, the hair and the clothing are solid, and the legs are static so the feet stay planted. Dimensions 0.97 × 1.81 × 0.68 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips idle, head-turn, arm-swing, weapon-raise turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-figure-masked-raider-958f10e5","cdnUrl":"https://cdn.3dassets.dev/assets/32700/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-figure-masked-raider-958f10e5","thumbnailUrl":"https://cdn.3dassets.dev/assets/32700/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32700/v1/poster.webp","blurhash":"U25#X}M|00%f~pWB8{t601t7^*IU4ntQ-;IU","category":{"slug":"characters","title":"Characters & Creatures"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":259036,"triangles":13976,"vertices":11029,"meshes":18,"materials":5,"textures":0,"animations":["idle","head-turn","arm-swing","weapon-raise"],"boundingBox":{"min":[-0.48306435876126286,8.892842192145811e-7,-0.3409849482468065],"max":[0.48309348935358354,1.8071857643813336,0.3409916966130617]},"sizeMeters":[0.966,1.807,0.682],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_materials_transmission","KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":2,"publishedAt":"2026-09-08T12:54:33.157Z","updatedAt":"2026-09-08T16:15:28.739Z","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/32700/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 MaskedRaiderJointedFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32700/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/32700/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32700/v1/model.glb\" alt=\"Masked Raider, Jointed (FPS Survival Forest Outpost)\" 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/32700/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/32700/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32702","slug":"fps-survival-forest-outpost-figure-scout-archer-39d4ea47","title":"Forest Scout with Bow, Jointed (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 1.81 m forest scout in a green hood and jerkin with a quiver of arrows and a recurve bow, built as a rigid jointed puppet. Animated idle, head-turn, arm-swing and weapon-raise.","description":"A forest scout 1.81 m tall to the crown of the hood and lightly built, in a green hood with a peak and a shoulder cape over a canvas jerkin with chest pockets, a bandolier and a webbing belt of three pouches, and a leather quiver of four fletched arrows on a strap. She holds a recurve bow out in the left hand, with a wrapped riser, an arrow rest, string nocks and a linen string. The face is modelled: brow, nose, cheekbones, jaw, ears, eyes and mouth. Motion is rigid node transforms on parented joint nodes: the pelvis carries the head and both shoulders, each shoulder carries its forearm; the bow hangs on the left forearm rather than the right, because that is the hand a right handed archer holds it in. There is no skeleton, no skin weighting and no deformation anywhere. The fingers inside the mitt, the face, the hair and the clothing are solid, and the legs are static so the feet stay planted. Dimensions 0.59 × 1.84 × 1.16 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips idle, head-turn, arm-swing, weapon-raise turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-figure-scout-archer-39d4ea47","cdnUrl":"https://cdn.3dassets.dev/assets/32702/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-figure-scout-archer-39d4ea47","thumbnailUrl":"https://cdn.3dassets.dev/assets/32702/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32702/v1/poster.webp","blurhash":"U355RSMe00.k?siyDkX+9Zt7%fM{MyX8tRr?","category":{"slug":"characters","title":"Characters & Creatures"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":315748,"triangles":14500,"vertices":11429,"meshes":19,"materials":5,"textures":1,"animations":["idle","head-turn","arm-swing","weapon-raise"],"boundingBox":{"min":[-0.29535886396283084,8.59317159575268e-7,-0.5798831589399669],"max":[0.2953587323333906,1.843532437801957,0.5798988757692372]},"sizeMeters":[0.591,1.844,1.16],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":2,"publishedAt":"2026-09-08T12:54:34.448Z","updatedAt":"2026-09-08T16:15:17.899Z","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/32702/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 ForestScoutWithBowJointedFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32702/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/32702/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32702/v1/model.glb\" alt=\"Forest Scout with Bow, Jointed (FPS Survival Forest Outpost)\" 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/32702/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/32702/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32707","slug":"fps-survival-forest-outpost-creature-infected-runner-d6e26047","title":"Infected Runner, Jointed (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 1.59 m infected runner hunched forward in torn rags with glowing lesions and pale claws, built as a rigid jointed puppet. Animated idle, head-turn and arm-swing.","description":"An infected runner 1.59 m as posed and 1.7 m if it stood up, hunched 24 degrees forward on bent knees, with sickly grey green flesh, torn rags hanging off the shoulders and hips, five glowing amber lesions across the back and shoulders, matted hair over a shaped skull with pale glowing eyes, and four claws on each hand. Both arms are thrown up and out. Motion is rigid node transforms on parented joint nodes: the pelvis carries the head and both shoulders, each shoulder carries its forearm; the claws ride the forearms, so an arm swing carries them. There is no skeleton, no skin weighting and no deformation anywhere. The fingers inside the mitt, the face, the hair and the clothing are solid, and the legs are static so the feet stay planted. Dimensions 0.82 × 1.61 × 0.83 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips idle, head-turn, arm-swing turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-creature-infected-runner-d6e26047","cdnUrl":"https://cdn.3dassets.dev/assets/32707/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-creature-infected-runner-d6e26047","thumbnailUrl":"https://cdn.3dassets.dev/assets/32707/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32707/v1/poster.webp","blurhash":"U471flf,00$~~ot7D+Rj00WB^*Rk01IU-:%M","category":{"slug":"characters","title":"Characters & Creatures"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"horror","title":"Horror"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":231692,"triangles":12564,"vertices":9938,"meshes":17,"materials":5,"textures":0,"animations":["idle","head-turn","arm-swing"],"boundingBox":{"min":[-0.4112307937964218,8.390028617827339e-7,-0.41543909679206825],"max":[0.41123079287438824,1.606444949682245,0.41543838038560055]},"sizeMeters":[0.822,1.606,0.831],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":2,"publishedAt":"2026-09-08T12:54:37.016Z","updatedAt":"2026-09-08T16:15:03.355Z","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/32707/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 InfectedRunnerJointedFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32707/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/32707/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32707/v1/model.glb\" alt=\"Infected Runner, Jointed (FPS Survival Forest Outpost)\" 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/32707/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/32707/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32709","slug":"fps-survival-forest-outpost-creature-wolf-4be4d311","title":"Timber Wolf, Jointed (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a timber wolf 1.77 m nose to tail with jointed legs, pricked ears, a shaped muzzle and a brush tail, built as a rigid jointed puppet. Animated idle and head-turn.","description":"A timber wolf 1.77 m nose to tail, 1.5 m nose to rump and 0.82 m at the shoulder: a lofted barrel with a chest, haunches and shoulder masses on four static legs, each with a shoulder, a stifle, a hock and a three toed foot. The head has a shaped skull with a brow ridge and cheeks, a tapered muzzle and jaw, a wet nose, two pricked ears and two glowing amber eyes, and a ruff of fur runs down the neck and back. The head is its own node at the base of the neck and the brush tail its own node at the rump, both parented to the body, so a head turn and an idle sway compose without any skinning. Nothing else deforms: the fur, the jaw and the paws are solid. Dimensions 0.49 × 1.09 × 1.81 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Rigid node-transform clips idle, head-turn turn named nodes on their own pivots. No skinning, no skeleton, no skin weighting, no collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-creature-wolf-4be4d311","cdnUrl":"https://cdn.3dassets.dev/assets/32709/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-creature-wolf-4be4d311","thumbnailUrl":"https://cdn.3dassets.dev/assets/32709/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32709/v1/poster.webp","blurhash":"U17ArI^j00F^_2RkE1-U00D*^jo}01Ef^j,]","category":{"slug":"animals","title":"Animals"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"slug":"exterior","title":"Exterior"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":169004,"triangles":8536,"vertices":6878,"meshes":8,"materials":3,"textures":0,"animations":["idle","head-turn"],"boundingBox":{"min":[-0.24597035780006518,0.000005383095073474564,-0.9050867055072227],"max":[0.24597035780006518,1.088409106333855,0.9050867153988442]},"sizeMeters":[0.492,1.088,1.81],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":2,"publishedAt":"2026-09-08T12:54:36.987Z","updatedAt":"2026-09-08T16:15:52.057Z","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/32709/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 TimberWolfJointedFPSSurvivalForestOutpost(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/32709/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/32709/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32709/v1/model.glb\" alt=\"Timber Wolf, Jointed (FPS Survival Forest Outpost)\" 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/32709/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/32709/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"32683","slug":"fps-survival-forest-outpost-conifer-tall-a3b77255","title":"Tall Conifer 14 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 14 m conifer with 9 needle tiers on a tapered trunk with a flared root and dead lower branches.","description":"A 14 m conifer: a tapered trunk with a flared root collar carrying 9 stacked needle tiers narrowing to the leader, with five bare dead branches low on the stem. Crowd several at different rotations to build a stand. Dimensions 4.65 × 14.14 × 4.54 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-conifer-tall-a3b77255","cdnUrl":"https://cdn.3dassets.dev/assets/32683/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-conifer-tall-a3b77255","thumbnailUrl":"https://cdn.3dassets.dev/assets/32683/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32683/v1/poster.webp","blurhash":"U44yAZx@00H]IVWCxts.D5V[*HtjyVofR6Rk","category":{"slug":"nature","title":"Nature & Landscape"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":19040,"triangles":606,"vertices":837,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-2.3233390914897956,0,-2.267510563347066],"max":[2.3233390914897956,14.140439987182617,2.267510563347066]},"sizeMeters":[4.647,14.14,4.535],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:27.786Z","updatedAt":"2026-09-08T12:54:27.886Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32683/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TallConifer14MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32683/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32683/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32683/v1/model.glb\" alt=\"Tall Conifer 14 m (FPS Survival Forest Outpost)\" 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/32683/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/32683/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32684","slug":"fps-survival-forest-outpost-conifer-mid-28a9f4cb","title":"Mid Conifer 8.4 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 8.4 m conifer with 7 needle tiers on a tapered trunk with a flared root and dead lower branches.","description":"A 8.4 m conifer: a tapered trunk with a flared root collar carrying 7 stacked needle tiers narrowing to the leader, with five bare dead branches low on the stem. Crowd several at different rotations to build a stand. Dimensions 3.59 × 8.48 × 3.65 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-conifer-mid-28a9f4cb","cdnUrl":"https://cdn.3dassets.dev/assets/32684/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-conifer-mid-28a9f4cb","thumbnailUrl":"https://cdn.3dassets.dev/assets/32684/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32684/v1/poster.webp","blurhash":"U54o+Otk00H[Vue:oebF8xVt.ktkyBkBRQe;","category":{"slug":"nature","title":"Nature & Landscape"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":16632,"triangles":530,"vertices":715,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1.7932384452082892,0,-1.825060217185595],"max":[1.7932384452082892,8.484267234802246,1.825060217185595]},"sizeMeters":[3.586,8.484,3.65],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:27.857Z","updatedAt":"2026-09-08T12:54:27.948Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32684/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function MidConifer84MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32684/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32684/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32684/v1/model.glb\" alt=\"Mid Conifer 8.4 m (FPS Survival Forest Outpost)\" 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/32684/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/32684/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32685","slug":"fps-survival-forest-outpost-conifer-young-9e2432f7","title":"Young Conifer 3.6 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 3.6 m conifer with 5 needle tiers on a tapered trunk with a flared root and dead lower branches.","description":"A 3.6 m conifer: a tapered trunk with a flared root collar carrying 5 stacked needle tiers narrowing to the leader, with five bare dead branches low on the stem. Crowd several at different rotations to build a stand. Dimensions 1.96 × 3.64 × 1.97 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-conifer-young-9e2432f7","cdnUrl":"https://cdn.3dassets.dev/assets/32685/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-conifer-young-9e2432f7","thumbnailUrl":"https://cdn.3dassets.dev/assets/32685/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32685/v1/poster.webp","blurhash":"U55Fgrxu00IBR6WBozof8xRj*GtQ%|ozMyR%","category":{"slug":"nature","title":"Nature & Landscape"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":14240,"triangles":454,"vertices":593,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.9786104551967342,0,-0.9866052304242795],"max":[0.9786104551967342,3.636115074157715,0.9866052304242795]},"sizeMeters":[1.957,3.636,1.973],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:28.331Z","updatedAt":"2026-09-08T12:54:28.437Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32685/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function YoungConifer36MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32685/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32685/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32685/v1/model.glb\" alt=\"Young Conifer 3.6 m (FPS Survival Forest Outpost)\" 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/32685/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/32685/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32689","slug":"fps-survival-forest-outpost-undergrowth-clump-d68b2daa","title":"Forest Undergrowth Clump 2 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 2 m clump of scrub and grass in forty leaning blades with five bare stems through it.","description":"A 2 m clump of forest floor scrub: forty leaning blades of grass and low shrub at random heights and rotations, with five bare stems standing through them. Scatter several at different rotations to break up open ground. Dimensions 1.94 × 0.76 × 1.79 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-undergrowth-clump-d68b2daa","cdnUrl":"https://cdn.3dassets.dev/assets/32689/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-undergrowth-clump-d68b2daa","thumbnailUrl":"https://cdn.3dassets.dev/assets/32689/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32689/v1/poster.webp","blurhash":"U24{S5t54UIBRRbuWBVt00oN.jtjyBrao|pH","category":{"slug":"nature","title":"Nature & Landscape"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":19168,"triangles":820,"vertices":760,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.9700484871864319,0.00003284692789751187,-0.8943820681627478],"max":[0.9700484871864319,0.7622286033627824,0.8943731188774109]},"sizeMeters":[1.94,0.762,1.789],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:29.791Z","updatedAt":"2026-09-08T12:54:29.892Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32689/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ForestUndergrowthClump2MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32689/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32689/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32689/v1/model.glb\" alt=\"Forest Undergrowth Clump 2 m (FPS Survival Forest Outpost)\" 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/32689/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/32689/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32688","slug":"fps-survival-forest-outpost-boulder-cluster-3fd6db72","title":"Mossy Boulder Cluster 3.6 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a cluster of four granite boulders with mossy caps, the largest 1.5 m across.","description":"Four granite boulders in a loose cluster 3.6 m across, each a displaced rock form flattened where it beds into the ground, with a cap of moss on the weather side. It blocks a line and gives a shooter a rest. Dimensions 3.22 × 1.30 × 2.64 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-boulder-cluster-3fd6db72","cdnUrl":"https://cdn.3dassets.dev/assets/32688/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-boulder-cluster-3fd6db72","thumbnailUrl":"https://cdn.3dassets.dev/assets/32688/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32688/v1/poster.webp","blurhash":"U58Nth?b00xuM{oft6IU009Z~qRjxujuog-;","category":{"slug":"nature","title":"Nature & Landscape"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":209924,"triangles":544,"vertices":785,"meshes":2,"materials":2,"textures":1,"animations":[],"boundingBox":{"min":[-1.6103622913360596,0.00007632043060656901,-1.3177966406926953],"max":[1.6103622913360596,1.298804733493954,1.317751275515154]},"sizeMeters":[3.221,1.299,2.636],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":2,"publishedAt":"2026-09-08T12:54:30.547Z","updatedAt":"2026-09-08T16:12:21.611Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32688/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function MossyBoulderCluster36MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32688/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32688/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32688/v1/model.glb\" alt=\"Mossy Boulder Cluster 3.6 m (FPS Survival Forest Outpost)\" 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/32688/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/32688/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"32687","slug":"fps-survival-forest-outpost-fallen-log-56e7e78a","title":"Fallen Mossy Log 5.4 m (FPS Survival Forest Outpost)","summary":"Free 3D game asset for a forest survival outpost: a 5.4 m fallen conifer log with a sawn end, broken branch stubs, moss along the top and shed bark beside it.","description":"A 5.4 m fallen conifer lying on the forest floor: a tapered trunk with one sawn end, six broken branch stubs, seven patches of moss along the upper surface and four slabs of shed bark on the ground beside it. It reads as cover and as a firewood source. Dimensions 5.42 × 0.98 × 1.34 m (X × Y × Z). Metre units, +Y up, +Z front; origin on the ground at the footprint centre unless stated. Damp conifer forest realism: wet concrete and corroded corrugated steel, weathered pine, dark bark and soil, deep needle green, olive canvas, gunmetal and machined steel, with five emissive colours (amber fire, white floodlight, green status, blue screen, red warning) that also form the loot rarity ladder. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/fps-survival-forest-outpost-fallen-log-56e7e78a","cdnUrl":"https://cdn.3dassets.dev/assets/32687/v1/model.glb","downloadUrl":"https://3dassets.dev/download/fps-survival-forest-outpost-fallen-log-56e7e78a","thumbnailUrl":"https://cdn.3dassets.dev/assets/32687/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/32687/v1/poster.webp","blurhash":"U26@p2xs0ft8$j~BozE200nT~BNGIp02RP?Z","category":{"slug":"nature","title":"Nature & Landscape"},"tags":[{"slug":"post-apocalyptic","title":"Post-apocalyptic"},{"slug":"realistic","title":"Realistic"},{"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":59144,"triangles":664,"vertices":672,"meshes":3,"materials":3,"textures":1,"animations":[],"boundingBox":{"min":[-2.7084760665893555,-0.0000027100340354579977,-0.6725107967702565],"max":[2.7084760665893555,0.9793370048300254,0.6725107967702565]},"sizeMeters":[5.417,0.979,1.345],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization","EXT_texture_webp"]},"aiGenerated":true,"aiModel":"claude-opus-5","downloads":0,"publishedAt":"2026-09-08T12:54:29.557Z","updatedAt":"2026-09-08T12:54:29.669Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/32687/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FallenMossyLog54MFPSSurvivalForestOutpost(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/32687/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/32687/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/32687/v1/model.glb\" alt=\"Fallen Mossy Log 5.4 m (FPS Survival Forest Outpost)\" 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/32687/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/32687/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}]}}