{"data":{"id":"106","slug":"community-sports-hall-and-changing-rooms","title":"Community Sports Hall and Changing Rooms","summary":"Walk a four court community sports hall: marked sprung floor, roof hung basketball, wall bars and gym kit, then out through the changing rooms, showers and the reception turnstile.","url":"https://3dassets.dev/demos/community-sports-hall-and-changing-rooms","coverUrl":"https://cdn.3dassets.dev/media/community-sports-hall-and-changing-rooms-demo.png","featured":true,"pack":{"slug":"community-sports-hall-and-changing-rooms","title":"Community Sports Hall and Changing Rooms","url":"https://3dassets.dev/packs/community-sports-hall-and-changing-rooms","summary":"Realistic kit for a municipal multi use sports hall: a marked sprung floor, retractable basketball units, court posts and nets, wall bars and padding, mats and vaulting kit, changing rooms, showers, lockers, reception and the equipment store.","assetCount":49,"totalBytes":4565696,"starterScene":{"slug":"community-sports-hall-and-changing-rooms-385cad09-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/35129/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-385cad09-starter-scene","fileSize":2219864}},"placementCount":142,"assetCount":48,"spawn":{"position":[2.25,0,-4.25],"yaw":-90},"publishedAt":"2026-09-11T11:34:11.759Z","updatedAt":"2026-09-11T11:34:11.759Z","description":"## What is placed\n\nA single storey leisure centre in two halves. The hall is a marked sprung floor under window strip walls and five roof truss bays, with a retractable basketball unit hung at each end, badminton, volleyball and five a side posts on the court, an indoor cricket net and a climbing rope set in the corners, wall bars and foam padding down the end wall, and the gym kit out on the side: vaulting box, springboard, balance beam, mat stacks and benches. Through the doorway wall sit the changing rooms, with locker banks, benches and coat rails, shower cubicles, changing cubicles, basins, mirrors and a drying area, then reception with its desk, turnstile, trophy cabinet, vending machine, fixture board and the equipment store cage.\n\n## What moves\n\nThe roof hung basketball units fold down and back up, the locker doors and the changing cubicle doors open and close, and so do the vending machine, the trophy cabinet, the foyer bins and the equipment store cage. The turnstile spins, the scoreboard tilts on its frame, and the cleaning trolley, ball cage and stacking chair trolley roll on their castors. Clips play as you walk up to a piece.\n\n## What does not move and why\n\nNets, climbing ropes, water and towels are static geometry: none of them is reachable with the rigid node transforms this library uses, so they are modelled in a settled pose rather than faked. There are no players or staff anywhere, because nothing here is skinned. The notice board fixture lists are abstract rather than readable, and no real sports brand or leisure operator is named.","scene":{"version":1,"spawn":{"position":[2.25,0,-4.25],"yaw":-90},"ground":{"style":"none"},"environment":{"preset":"hall","wallHeight":7,"lampHeight":5.8,"shadows":true},"placements":[{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","position":[-9,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","position":[-9,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","position":[-9,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","position":[-9,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","position":[-7,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","position":[-7,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","position":[-7,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","position":[-7,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","position":[-5,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","position":[-5,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","position":[-5,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","position":[-5,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","position":[-3,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","position":[-3,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","position":[-3,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","position":[-3,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","position":[-1,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","position":[-1,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","position":[-1,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","position":[-1,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","position":[1,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","position":[1,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","position":[1,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","position":[1,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","position":[3,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","position":[3,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","position":[3,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","position":[3,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[5,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[5,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[5,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[5,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[7,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[7,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[7,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[7,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[9,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[9,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[9,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[9,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[11,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[11,0,-5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[11,0,-3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","position":[11,0,-1],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[-9,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[-7,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[-5,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[-3,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[-1,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[1,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[3,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[5,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[7,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[9,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[11,0,-8.09],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[-10.09,0,-7],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[-10.09,0,-5],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[-10.09,0,-3],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[-10.09,0,-1],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[12.09,0,-7],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[12.09,0,-5],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[12.09,0,-3],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[12.09,0,-1],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[4.09,0,-7],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-136e10a2","position":[4.09,0,-5],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","position":[4.09,0,-3],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-hall-wall-mod-136e10a2","position":[4.09,0,-1],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-roof-truss-ba-3a126633","position":[-7,3.36,-4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-roof-truss-ba-3a126633","position":[-5,3.36,-4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-roof-truss-ba-3a126633","position":[-3,3.36,-4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-roof-truss-ba-3a126633","position":[-1,3.36,-4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-roof-truss-ba-3a126633","position":[1,3.36,-4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-wall-padding--dc31ba68","position":[-9,0,-7.93],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-wall-padding--22dd60a4","position":[-7,0,-7.93],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-wall-padding--dc31ba68","position":[-5,0,-7.93],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-wall-padding--dc31ba68","position":[-9.93,0,-5],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-wall-padding--22dd60a4","position":[-9.93,0,-3],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-retractable-b-16264602","position":[-7.6,2.63,-4],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-retractable-b-16264602","position":[1.8,2.63,-4],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-badminton-pos-af4257cf","position":[-1.5,0,-5.5],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-volleyball-po-bc30ef3d","position":[-3,0,-2],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-five-a-side-g-32bd7f98","position":[2.9,0,-5.5],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-cricket-net-f-b867eda8","position":[-7.8,0,-5.4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-climbing-rope-3ccc68ed","position":[-4.6,0.4,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-wall-bar-unit-b6535673","position":[-3.4,0,-7.82],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-wall-bar-unit-b6535673","position":[-2.2,0,-7.82],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-wall-bar-unit-b6535673","position":[-1,0,-7.82],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-hall-scoreboa-1aac26ec","position":[0.6,2.7,-7.92],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-gym-mat-stack-d3bfc381","position":[-9.2,0,-2.6],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-gym-mat-singl-70cf5ea8","position":[-8.6,0,-1],"rotation":4.58},{"asset":"community-sports-hall-and-changing-rooms-gym-mat-singl-70cf5ea8","position":[-8.5,0,-0.2],"rotation":-2.86},{"asset":"community-sports-hall-and-changing-rooms-gym-mat-singl-70cf5ea8","position":[1.6,0,-0.6],"rotation":2.29},{"asset":"community-sports-hall-and-changing-rooms-vaulting-box-98435109","position":[-6.4,0,-1.6],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-springboard-d0a8af24","position":[-6.4,0,-0.55],"rotation":180},{"asset":"community-sports-hall-and-changing-rooms-balance-beam-75e97b3d","position":[-5.2,0,-3.4],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-gym-bench-76cb03bd","position":[-8.2,0,-0.3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-gym-bench-76cb03bd","position":[0.4,0,-0.35],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-gym-bench-76cb03bd","position":[-9.7,0,-4.6],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-cone-and-bib--6711c19b","position":[-2.3,0,-0.8],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-ball-cage-on--f7cab35e","position":[3.2,0,-0.9],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-wet-floor-sig-227a38c3","position":[-0.6,0,-1.6],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-gym-bench-76cb03bd","position":[3.2,0,-2.6],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-gym-mat-stack-d3bfc381","position":[3.1,0,-7],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-gym-mat-singl-70cf5ea8","position":[2.2,0,-6.4],"rotation":3.44},{"asset":"community-sports-hall-and-changing-rooms-kit-bag-and-t-d216f863","position":[3,0,-0.1],"rotation":22.92},{"asset":"community-sports-hall-and-changing-rooms-shower-cubicl-0dd6d129","position":[5,0,-7.4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-shower-cubicl-0dd6d129","position":[6.2,0,-7.4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-shower-cubicl-0dd6d129","position":[7.4,0,-7.4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-cubicle-door--b15cd857","position":[8.6,0,-7.4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-cubicle-door--b15cd857","position":[9.8,0,-7.4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-locker-bank-c1f2829d","position":[5.3,0,-5.6],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-locker-bank-o-257fd3f5","position":[6.6,0,-5.6],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-locker-bank-c1f2829d","position":[7.9,0,-5.6],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-locker-bank-c1f2829d","position":[5.3,0,-4.7],"rotation":180},{"asset":"community-sports-hall-and-changing-rooms-locker-bank-c1f2829d","position":[6.6,0,-4.7],"rotation":180},{"asset":"community-sports-hall-and-changing-rooms-changing-benc-af5dc448","position":[6,0,-3.4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-benc-af5dc448","position":[8,0,-3.4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-benc-8ba8e8ea","position":[10,0,-3.4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-benc-8ba8e8ea","position":[8.8,0,-6.2],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-benc-8ba8e8ea","position":[10.8,0,-6.2],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-basin-and-dry-3c323cb6","position":[10.7,0,-6.9],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-b2debb51","position":[8.9,1.05,-7.9],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-changing-room-b2debb51","position":[11.9,1.05,-5.2],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-first-aid-poi-96ad5f66","position":[11.7,0,-7.4],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-cleaning-trol-ae0faab6","position":[11.4,0,-4.2],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-wet-floor-sig-227a38c3","position":[10.5,0,-4.6],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-kit-bag-and-t-d216f863","position":[6.6,0,-2.9],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-kit-bag-and-t-d216f863","position":[9.1,0,-3],"rotation":34.38},{"asset":"community-sports-hall-and-changing-rooms-kit-bag-and-t-d216f863","position":[5.6,0.46,-3.45],"rotation":-17.19},{"asset":"community-sports-hall-and-changing-rooms-equipment-sto-0524f6e5","position":[5.6,0,-2.2],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-vending-machi-3def4990","position":[7.6,0,-2.3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-trophy-cabine-51c36706","position":[9,0,-2.4],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-foyer-bin-b2789118","position":[10.1,0,-2.3],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-fixture-notic-179946d7","position":[4.2,1,-1.6],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-reception-des-ee569bd0","position":[6.8,0,-0.9],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-pump-and-whis-2e97e815","position":[6.2,1.06,-0.62],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-entrance-turn-d36515c9","position":[9.3,0,-0.9],"rotation":0},{"asset":"community-sports-hall-and-changing-rooms-spare-net-rol-585f10ed","position":[4.8,0,-0.6],"rotation":90},{"asset":"community-sports-hall-and-changing-rooms-stacking-chai-d9782bc3","position":[11.4,0,-1.4],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-folding-table-b0d6b4a5","position":[11.3,0,-2.9],"rotation":-90},{"asset":"community-sports-hall-and-changing-rooms-cone-and-bib--6711c19b","position":[11.2,0,-0.4],"rotation":22.92},{"asset":"community-sports-hall-and-changing-rooms-foyer-bin-b2789118","position":[5,0,-1.3],"rotation":0}],"points":[{"position":[-1,0,-4],"title":"The marked sprung floor","text":"Sprung timber panels carry the court markings, laid so the badminton, volleyball and five a side lines cross the same hall. The post pairs drop into the floor sockets along the centre.","asset":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf"},{"position":[-6.4,0,-4],"title":"Roof hung basketball","text":"A retractable backboard and ring folds down from the roof steelwork at each end of the court. Walk up to one and it swings into play, then folds back against the trusses.","asset":"community-sports-hall-and-changing-rooms-retractable-b-16264602"},{"position":[-2.2,0,-6.7],"title":"Wall bars and padding","text":"Timber wall bars run along the end wall, with foam padding modules at body height either side of them so a stray run into the wall meets a soft face.","asset":"community-sports-hall-and-changing-rooms-wall-bar-unit-b6535673"},{"position":[-6.2,0,-1.5],"title":"The gym kit","text":"Vaulting box, springboard, balance beam and mats are out on the side of the hall, with a stack of spare mats against the wall and benches to sit a class down on.","asset":"community-sports-hall-and-changing-rooms-vaulting-box-98435109"},{"position":[6.6,0,-4.9],"title":"Changing rooms","text":"Locker banks back onto each other down the middle, benches with coat rails line the wall, and the shower cubicles and cubicle doors run along the far end past the basins.","asset":"community-sports-hall-and-changing-rooms-locker-bank-c1f2829d"},{"position":[8.7,0,-1.2],"title":"Reception and store","text":"The desk, turnstile and trophy cabinet make the front of house, with the fixture board by the hall door and the equipment store cage holding the balls, cones and spare nets.","asset":"community-sports-hall-and-changing-rooms-entrance-turn-d36515c9"}],"poster":{"position":[2.3,1.6,-4.2],"lookAt":[-3.7,1.2,-4.2]}},"bounds":{"min":[-12.250000095367431,-0.00033167928023414284,-11.347999954223633],"max":[14.180127260315992,6.649736208044606,2.3643033577419756]},"assets":[{"id":"35082","slug":"community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","title":"Sprung Sports Hall Floor Panel, Painted Key (Community Sports Hall and Changing Rooms)","summary":"The same panel with a solid blue key painted over it and a white boundary line on two edges, for the area under each basketball ring.","description":"The same panel with a solid blue key painted over it and a white boundary line on two edges, for the area under each basketball ring. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","cdnUrl":"https://cdn.3dassets.dev/assets/35082/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-sports-hall-f-9b515a83","thumbnailUrl":"https://cdn.3dassets.dev/assets/35082/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35082/v1/poster.webp","blurhash":"U9AdfuxvD4j?tSa}acoL00RicbRkQ,o1XAWB","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":13432,"triangles":228,"vertices":525,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.000031709655217555116,-1],"max":[1,0.038446324715574354,1]},"sizeMeters":[2,0.038,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:25.372Z","updatedAt":"2026-09-11T11:29:25.472Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35082/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SprungSportsHallFloorPanelPaintedKeyCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35082/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35082/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35082/v1/model.glb\" alt=\"Sprung Sports Hall Floor Panel, Painted Key (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35082/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/35082/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35084","slug":"community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","title":"Sprung Sports Hall Floor Panel, Unmarked (Community Sports Hall and Changing Rooms)","summary":"The same sprung maple floor panel with no court lines on it, for the run-off round a marked court, a hall laid out for a different sport or the strip under the wall bars.","description":"The same sprung maple floor panel with no court lines on it, for the run-off round a marked court, a hall laid out for a different sport or the strip under the wall bars. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","cdnUrl":"https://cdn.3dassets.dev/assets/35084/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-sports-hall-f-b0fb7dea","thumbnailUrl":"https://cdn.3dassets.dev/assets/35084/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35084/v1/poster.webp","blurhash":"UAECd#%L00jb%LbHRkj[00M{~pWBD%n%t6ae","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":10252,"triangles":192,"vertices":441,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.000031709655217555116,-1],"max":[1,0.03547512129715211,1]},"sizeMeters":[2,0.035,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:27.916Z","updatedAt":"2026-09-11T11:29:28.017Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35084/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SprungSportsHallFloorPanelUnmarkedCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35084/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35084/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35084/v1/model.glb\" alt=\"Sprung Sports Hall Floor Panel, Unmarked (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35084/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/35084/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35080","slug":"community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","title":"Sprung Sports Hall Floor Panel (Community Sports Hall and Changing Rooms)","summary":"A 2 m sprung maple sports hall floor panel, 34 mm deep, with the board joints picked out and two court lines painted edge to edge: a red line across it and a yellow line up it. Panels tile on a 2 m grid, so a hall of any size is laid by repeating them.","description":"A 2 m sprung maple sports hall floor panel, 34 mm deep, with the board joints picked out and two court lines painted edge to edge: a red line across it and a yellow line up it. Panels tile on a 2 m grid, so a hall of any size is laid by repeating them. Ports floor-left, floor-right, floor-front and floor-back sit at the panel edge midpoints at half thickness, so the markings run on unbroken from panel to panel. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","cdnUrl":"https://cdn.3dassets.dev/assets/35080/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-sports-hall-f-525fb8bf","thumbnailUrl":"https://cdn.3dassets.dev/assets/35080/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35080/v1/poster.webp","blurhash":"UAECas%200n+%2a{R*bH00Io~oR+D*oLsDjF","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":11936,"triangles":216,"vertices":497,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.000031709655217555116,-1],"max":[1,0.037186963485169186,1]},"sizeMeters":[2,0.037,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:25.106Z","updatedAt":"2026-09-11T11:29:25.306Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35080/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SprungSportsHallFloorPanelCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35080/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35080/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35080/v1/model.glb\" alt=\"Sprung Sports Hall Floor Panel (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35080/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/35080/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35111","slug":"community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","title":"Changing Room Floor Panel (Community Sports Hall and Changing Rooms)","summary":"A 2 m changing room floor panel: a slip resistant grey base laid with sixteen white ceramic tiles and a blue skirting line along one edge. It carries the same floor ports as the hall panel, so a wet area tiles straight off a sprung floor.","description":"A 2 m changing room floor panel: a slip resistant grey base laid with sixteen white ceramic tiles and a blue skirting line along one edge. It carries the same floor ports as the hall panel, so a wet area tiles straight off a sprung floor. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","cdnUrl":"https://cdn.3dassets.dev/assets/35111/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-changing-room-9b1d0cd4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35111/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35111/v1/poster.webp","blurhash":"UBDJS7%L00R*x]oeRjWV00M{~qjYD$R*t7oL","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":15652,"triangles":300,"vertices":693,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.000031709655217555116,-1],"max":[1,0.03647074103469098,1]},"sizeMeters":[2,0.036,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:43.630Z","updatedAt":"2026-09-11T11:29:43.728Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35111/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChangingRoomFloorPanelCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35111/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35111/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35111/v1/model.glb\" alt=\"Changing Room Floor Panel (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35111/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/35111/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35081","slug":"community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","title":"Sports Hall Wall Module with Window Strip (Community Sports Hall and Changing Rooms)","summary":"A 2 m by 4.6 m painted blockwork sports hall wall module with a glazed high level window strip at 2.5 m, an aluminium cill and a blue dado band along the playing side. Modules butt on the 2 m module, so a hall wall of any length is a run of them.","description":"A 2 m by 4.6 m painted blockwork sports hall wall module with a glazed high level window strip at 2.5 m, an aluminium cill and a blue dado band along the playing side. Modules butt on the 2 m module, so a hall wall of any length is a run of them. Ports wall-left and wall-right sit at the module ends at mid height. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","cdnUrl":"https://cdn.3dassets.dev/assets/35081/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-hall-wall-mod-275ea046","thumbnailUrl":"https://cdn.3dassets.dev/assets/35081/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35081/v1/poster.webp","blurhash":"UEDJehoN00aw~Axt57IV4:oL-:R*o#j]V?ac","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":41340,"triangles":904,"vertices":2063,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-1,0,-0.09012726031599198],"max":[1,4.599999904632568,0.12998229556245988]},"sizeMeters":[2,4.6,0.22],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:25.301Z","updatedAt":"2026-09-11T11:29:25.435Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35081/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SportsHallWallModuleWithWindowStripCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35081/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35081/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35081/v1/model.glb\" alt=\"Sports Hall Wall Module with Window Strip (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35081/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/35081/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35086","slug":"community-sports-hall-and-changing-rooms-hall-wall-mod-136e10a2","title":"Sports Hall Wall Module with Doorway (Community Sports Hall and Changing Rooms)","summary":"The same wall module with a 1.2 m by 2.2 m doorway lined in dark steel instead of the window strip, for the way through to the changing rooms and the store.","description":"The same wall module with a 1.2 m by 2.2 m doorway lined in dark steel instead of the window strip, for the way through to the changing rooms and the store. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-hall-wall-mod-136e10a2","cdnUrl":"https://cdn.3dassets.dev/assets/35086/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-hall-wall-mod-136e10a2","thumbnailUrl":"https://cdn.3dassets.dev/assets/35086/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35086/v1/poster.webp","blurhash":"UHC?.bx]00IA~Vxt4:E1E2ayxta#IpWXxtsl","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":24588,"triangles":512,"vertices":1166,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1,0,-0.09012726031599198],"max":[1,4.599999904632568,0.11201123551507892]},"sizeMeters":[2,4.6,0.202],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:28.105Z","updatedAt":"2026-09-11T11:29:28.200Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35086/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SportsHallWallModuleWithDoorwayCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35086/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35086/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35086/v1/model.glb\" alt=\"Sports Hall Wall Module with Doorway (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35086/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/35086/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35085","slug":"community-sports-hall-and-changing-rooms-roof-truss-ba-3a126633","title":"Sports Hall Roof Truss Bay (Community Sports Hall and Changing Rooms)","summary":"One bay of a sports hall roof: an 8.4 m tubular lattice truss spanning the hall, four purlins carrying the next bay and two suspended light bars under the bottom chord. Bays repeat along the hall on the 2 m module.","description":"One bay of a sports hall roof: an 8.4 m tubular lattice truss spanning the hall, four purlins carrying the next bay and two suspended light bars under the bottom chord. Bays repeat along the hall on the 2 m module. Ports truss-left and truss-right sit at the bay ends on the bottom chord line. The bay is modelled resting on y=0 and is lifted to the wall head by the scene. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-roof-truss-ba-3a126633","cdnUrl":"https://cdn.3dassets.dev/assets/35085/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-roof-truss-ba-3a126633","thumbnailUrl":"https://cdn.3dassets.dev/assets/35085/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35085/v1/poster.webp","blurhash":"U268Hg?H00R;-;DiM{-;004o_4%09F_4%f8_","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":56808,"triangles":1272,"vertices":2899,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1.00004120589314,-0.00011764979002748879,-4.21999979019165],"max":[1.00004120589314,1.2398548924922683,4.21999979019165]},"sizeMeters":[2,1.24,8.44],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:28.060Z","updatedAt":"2026-09-11T11:29:28.163Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35085/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SportsHallRoofTrussBayCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35085/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35085/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35085/v1/model.glb\" alt=\"Sports Hall Roof Truss Bay (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35085/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/35085/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35088","slug":"community-sports-hall-and-changing-rooms-wall-padding--dc31ba68","title":"Hall Wall Padding Module (Community Sports Hall and Changing Rooms)","summary":"A 2 m by 1.5 m crash padding module in blue vinyl on a steel top and bottom rail, with a yellow warning band across it. Modules butt on the 2 m module through pad-left and pad-right to pad a whole wall behind a court.","description":"A 2 m by 1.5 m crash padding module in blue vinyl on a steel top and bottom rail, with a yellow warning band across it. Modules butt on the 2 m module through pad-left and pad-right to pad a whole wall behind a court. Ports pad-left and pad-right sit at the module ends at mid height. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-wall-padding--dc31ba68","cdnUrl":"https://cdn.3dassets.dev/assets/35088/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-wall-padding--dc31ba68","thumbnailUrl":"https://cdn.3dassets.dev/assets/35088/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35088/v1/poster.webp","blurhash":"UA8=d3Ix8wWFtR%%N3MbD4xrpfWVt3W9tQS2","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":19204,"triangles":428,"vertices":863,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.000022400843270209414,-0.015025177528173828],"max":[1,1.6020624393531704,0.07839384776096615]},"sizeMeters":[2,1.602,0.093],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:29.696Z","updatedAt":"2026-09-11T11:29:29.808Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35088/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function HallWallPaddingModuleCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35088/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35088/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35088/v1/model.glb\" alt=\"Hall Wall Padding Module (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35088/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/35088/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35089","slug":"community-sports-hall-and-changing-rooms-wall-padding--22dd60a4","title":"Hall Wall Padding Module, Red (Community Sports Hall and Changing Rooms)","summary":"The same padding module in red vinyl, for marking the end walls of a court or alternating colour along a run.","description":"The same padding module in red vinyl, for marking the end walls of a court or alternating colour along a run. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-wall-padding--22dd60a4","cdnUrl":"https://cdn.3dassets.dev/assets/35089/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-wall-padding--22dd60a4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35089/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35089/v1/poster.webp","blurhash":"UDG?uA#80LjFo#^QrX5k0fb^}FniX9NboznO","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":19236,"triangles":428,"vertices":863,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.000022400843270209414,-0.015025177528173828],"max":[1,1.6020624393531704,0.07839384776096615]},"sizeMeters":[2,1.602,0.093],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:30.743Z","updatedAt":"2026-09-11T11:29:30.840Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35089/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function HallWallPaddingModuleRedCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35089/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35089/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35089/v1/model.glb\" alt=\"Hall Wall Padding Module, Red (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35089/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/35089/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35091","slug":"community-sports-hall-and-changing-rooms-retractable-b-16264602","title":"Retractable Basketball Backboard and Ring (Community Sports Hall and Changing Rooms)","summary":"A roof suspended retractable basketball unit: a folding tubular arm on a roof hinge plate carrying a 1.8 m white board with a blue edge band and red target square, a sprung ring and a net. Arm, board, ring and net are one node, so the whole assembly folds up.","description":"A roof suspended retractable basketball unit: a folding tubular arm on a roof hinge plate carrying a 1.8 m white board with a blue edge band and red target square, a sprung ring and a net. Arm, board, ring and net are one node, so the whole assembly folds up. Modelled with the bottom of the net on y=0 and the roof hinge 1.9 m above it, so the scene lifts it until the ring sits 3.05 m over the floor. The net is geometry and does not move independently. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: hoop-arm. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-retractable-b-16264602","cdnUrl":"https://cdn.3dassets.dev/assets/35091/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-retractable-b-16264602","thumbnailUrl":"https://cdn.3dassets.dev/assets/35091/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35091/v1/poster.webp","blurhash":"UEBM_Q~q9FD%f,E1WB-;0000%M?b-V%2RjD%","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":55336,"triangles":1160,"vertices":2641,"meshes":6,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.8999999761581421,-0.000019084968158611382,-2.6500000953674316],"max":[0.8999999761581421,2.0197362080446064,0.5059253864621287]},"sizeMeters":[1.8,2.02,3.156],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:31.064Z","updatedAt":"2026-09-11T11:29:31.170Z","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/35091/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 RetractableBasketballBackboardAndRingCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35091/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/35091/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35091/v1/model.glb\" alt=\"Retractable Basketball Backboard and Ring (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35091/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/35091/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35092","slug":"community-sports-hall-and-changing-rooms-badminton-pos-af4257cf","title":"Badminton Post Pair and Net (Community Sports Hall and Changing Rooms)","summary":"A badminton post pair on weighted floor sockets with the net strung between them: 6.1 m across, the net top at 1.55 m, taped along the top edge and banded in blue along the bottom, with a red tensioner wheel on each post. The netting is geometry and does not move.","description":"A badminton post pair on weighted floor sockets with the net strung between them: 6.1 m across, the net top at 1.55 m, taped along the top edge and banded in blue along the bottom, with a red tensioner wheel on each post. The netting is geometry and does not move. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-badminton-pos-af4257cf","cdnUrl":"https://cdn.3dassets.dev/assets/35092/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-badminton-pos-af4257cf","thumbnailUrl":"https://cdn.3dassets.dev/assets/35092/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35092/v1/poster.webp","blurhash":"U8AAdlx]9Et7~q_3IUIU00-p?vD%004m_3-=","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":49964,"triangles":1084,"vertices":2440,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-3.309999942779541,0.00024874743083158624,-0.25981383260075624],"max":[3.309999942779541,1.580951256193131,0.25981383260075624]},"sizeMeters":[6.62,1.581,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:32.623Z","updatedAt":"2026-09-11T11:29:32.733Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35092/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BadmintonPostPairAndNetCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35092/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35092/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35092/v1/model.glb\" alt=\"Badminton Post Pair and Net (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35092/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/35092/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35093","slug":"community-sports-hall-and-changing-rooms-volleyball-po-bc30ef3d","title":"Volleyball Post Pair and Net (Community Sports Hall and Changing Rooms)","summary":"A volleyball post pair and net for a full width hall: 9.5 m across on weighted sockets, the net a metre deep with its top at 2.5 m, taped top and bottom. The netting is geometry and does not move.","description":"A volleyball post pair and net for a full width hall: 9.5 m across on weighted sockets, the net a metre deep with its top at 2.5 m, taped top and bottom. The netting is geometry and does not move. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-volleyball-po-bc30ef3d","cdnUrl":"https://cdn.3dassets.dev/assets/35093/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-volleyball-po-bc30ef3d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35093/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35093/v1/poster.webp","blurhash":"UBAK8bkCD%of~q?cIVRj00-=-=IU00Di?ct8","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":54644,"triangles":1192,"vertices":2692,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-5.010000228881836,-0.00033167928023414284,-0.25992615708179334],"max":[5.010000228881836,2.5515315923051363,0.25992615708179334]},"sizeMeters":[10.02,2.552,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:32.774Z","updatedAt":"2026-09-11T11:29:32.883Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35093/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function VolleyballPostPairAndNetCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35093/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35093/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35093/v1/model.glb\" alt=\"Volleyball Post Pair and Net (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35093/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/35093/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35094","slug":"community-sports-hall-and-changing-rooms-five-a-side-g-32bd7f98","title":"Five a Side Goal (Community Sports Hall and Changing Rooms)","summary":"A 3.66 m by 1.22 m five a side goal in white tube with a swept back frame, ground bars and netting on the back, roof and both sides. The netting is geometry: it hangs where it is modelled and does not move.","description":"A 3.66 m by 1.22 m five a side goal in white tube with a swept back frame, ground bars and netting on the back, roof and both sides. The netting is geometry: it hangs where it is modelled and does not move. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-five-a-side-g-32bd7f98","cdnUrl":"https://cdn.3dassets.dev/assets/35094/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-five-a-side-g-32bd7f98","thumbnailUrl":"https://cdn.3dassets.dev/assets/35094/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35094/v1/poster.webp","blurhash":"UCDcXXE2IBsr_N_4D%IU00.8tRIT008__3kC","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":56040,"triangles":1252,"vertices":2856,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1.8899999856948853,0.000056924065624741615,-0.9757897974987417],"max":[1.8899999856948853,1.2597877366933474,0.05998718177198647]},"sizeMeters":[3.78,1.26,1.036],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:33.670Z","updatedAt":"2026-09-11T11:29:33.778Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35094/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FiveASideGoalCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35094/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35094/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35094/v1/model.glb\" alt=\"Five a Side Goal (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35094/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/35094/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35095","slug":"community-sports-hall-and-changing-rooms-cricket-net-f-b867eda8","title":"Indoor Cricket Net Frame (Community Sports Hall and Changing Rooms)","summary":"A 3.2 m by 4 m indoor cricket net frame in steel tube on floor sockets, netted on the back, both sides and the roof, with a blue padded rear curtain and a red target painted on it. The netting and the curtain are geometry and do not move.","description":"A 3.2 m by 4 m indoor cricket net frame in steel tube on floor sockets, netted on the back, both sides and the roof, with a blue padded rear curtain and a red target painted on it. The netting and the curtain are geometry and do not move. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-cricket-net-f-b867eda8","cdnUrl":"https://cdn.3dassets.dev/assets/35095/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-cricket-net-f-b867eda8","thumbnailUrl":"https://cdn.3dassets.dev/assets/35095/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35095/v1/poster.webp","blurhash":"UAD,Aq?b00?v~qD%IUx]0001x^jDDitRbcxu","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":109572,"triangles":2560,"vertices":5608,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-1.7500122850289854,0.00003982565600246443,-3.947999954223633],"max":[1.7500122850289854,2.9318682216730014,2.1500000953674316]},"sizeMeters":[3.5,2.932,6.098],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:32.906Z","updatedAt":"2026-09-11T11:29:33.021Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35095/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function IndoorCricketNetFrameCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35095/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35095/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35095/v1/model.glb\" alt=\"Indoor Cricket Net Frame (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35095/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/35095/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35096","slug":"community-sports-hall-and-changing-rooms-climbing-rope-3ccc68ed","title":"Climbing Rope Set on Roof Beam (Community Sports Hall and Changing Rooms)","summary":"A set of four manila climbing ropes on a steel roof beam: bracketed eyes, knots at 900 mm and a red tail whipping on each rope. Modelled 4.2 m tall with the rope tails on y=0, so the scene lifts the beam to the roof. The ropes do not move.","description":"A set of four manila climbing ropes on a steel roof beam: bracketed eyes, knots at 900 mm and a red tail whipping on each rope. Modelled 4.2 m tall with the rope tails on y=0, so the scene lifts the beam to the roof. The ropes do not move. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-climbing-rope-3ccc68ed","cdnUrl":"https://cdn.3dassets.dev/assets/35096/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-climbing-rope-3ccc68ed","thumbnailUrl":"https://cdn.3dassets.dev/assets/35096/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35096/v1/poster.webp","blurhash":"U5AAH%xu00D%t-xun2D%02fl~ojEs;xaWAIn","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":63928,"triangles":1504,"vertices":3208,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1.5011999607086182,-0.00002362202354659615,-0.10995452454300618],"max":[1.5011999607086182,4.1988070286360415,0.10995452454300618]},"sizeMeters":[3.002,4.199,0.22],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:34.454Z","updatedAt":"2026-09-11T11:29:34.573Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35096/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ClimbingRopeSetOnRoofBeamCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35096/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35096/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35096/v1/model.glb\" alt=\"Climbing Rope Set on Roof Beam (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35096/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/35096/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35087","slug":"community-sports-hall-and-changing-rooms-wall-bar-unit-b6535673","title":"Timber Wall Bar Unit (Community Sports Hall and Changing Rooms)","summary":"A 1 m by 2.6 m timber wall bar unit: two shaped stiles on steel wall brackets, sixteen beech rungs at 145 mm centres, a steel head beam and a red height marker. It bolts flat to a hall wall and is modelled with its stiles resting on y=0.","description":"A 1 m by 2.6 m timber wall bar unit: two shaped stiles on steel wall brackets, sixteen beech rungs at 145 mm centres, a steel head beam and a red height marker. It bolts flat to a hall wall and is modelled with its stiles resting on y=0. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-wall-bar-unit-b6535673","cdnUrl":"https://cdn.3dassets.dev/assets/35087/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-wall-bar-unit-b6535673","thumbnailUrl":"https://cdn.3dassets.dev/assets/35087/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35087/v1/poster.webp","blurhash":"U7C6cA^k0001-;xtD%IU0MIo~U-:SiozslRP","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":43312,"triangles":972,"vertices":2115,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.5149525314149729,0,-0.18005859697826584],"max":[0.5149525314149729,2.6020328434970987,0.07999786182756664]},"sizeMeters":[1.03,2.602,0.26],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:28.215Z","updatedAt":"2026-09-11T11:29:28.417Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35087/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TimberWallBarUnitCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35087/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35087/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35087/v1/model.glb\" alt=\"Timber Wall Bar Unit (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35087/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/35087/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35090","slug":"community-sports-hall-and-changing-rooms-hall-scoreboa-1aac26ec","title":"Hall Scoreboard on Wall Frame (Community Sports Hall and Changing Rooms)","summary":"A 1.8 m by 1 m hall scoreboard on its steel wall frame: a dark display face with red home and yellow away digit blocks, a white period clock between them and a hinged result flap on a tipping mount. Modelled with the flap on y=0, so the scene lifts it up the wall.","description":"A 1.8 m by 1 m hall scoreboard on its steel wall frame: a dark display face with red home and yellow away digit blocks, a white period clock between them and a hinged result flap on a tipping mount. Modelled with the flap on y=0, so the scene lifts it up the wall. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: score-flap. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-hall-scoreboa-1aac26ec","cdnUrl":"https://cdn.3dassets.dev/assets/35090/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-hall-scoreboa-1aac26ec","thumbnailUrl":"https://cdn.3dassets.dev/assets/35090/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35090/v1/poster.webp","blurhash":"U6Am-x^,00OQ%O?c.7M{00pH_NMgx[NHD*s8","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":23128,"triangles":428,"vertices":977,"meshes":8,"materials":7,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.8999999761581421,-0.00000946166092105627,-0.16001983489261973],"max":[0.8999999761581421,1.2400579740071542,0.0880099192809001]},"sizeMeters":[1.8,1.24,0.248],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:30.001Z","updatedAt":"2026-09-11T11:29:30.108Z","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/35090/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 HallScoreboardOnWallFrameCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35090/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/35090/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35090/v1/model.glb\" alt=\"Hall Scoreboard on Wall Frame (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35090/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/35090/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35097","slug":"community-sports-hall-and-changing-rooms-gym-mat-stack-d3bfc381","title":"Gym Mat Stack (Community Sports Hall and Changing Rooms)","summary":"Four 2 m by 1 m gym mats stacked and squared off by hand, blue, red, blue and green with taped edges and webbing carry handles. The stack is a single static model; the mats do not move.","description":"Four 2 m by 1 m gym mats stacked and squared off by hand, blue, red, blue and green with taped edges and webbing carry handles. The stack is a single static model; the mats do not move. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-gym-mat-stack-d3bfc381","cdnUrl":"https://cdn.3dassets.dev/assets/35097/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-gym-mat-stack-d3bfc381","thumbnailUrl":"https://cdn.3dassets.dev/assets/35097/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35097/v1/poster.webp","blurhash":"U8AKmqx]00ng.QyCRkRQ00X3.lRU8yDjt2XN","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":37868,"triangles":1168,"vertices":2252,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-1.030259132385254,0.00002526935295352195,-0.5203758036536948],"max":[1.030259132385254,0.25403353237284154,0.5340970576316083]},"sizeMeters":[2.061,0.254,1.054],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:34.474Z","updatedAt":"2026-09-11T11:29:34.590Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35097/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GymMatStackCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35097/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35097/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35097/v1/model.glb\" alt=\"Gym Mat Stack (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35097/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/35097/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35098","slug":"community-sports-hall-and-changing-rooms-gym-mat-singl-70cf5ea8","title":"Gym Mat (Community Sports Hall and Changing Rooms)","summary":"One 2 m by 1 m blue gym mat laid flat, 60 mm thick, taped along both long edges with a webbing carry handle at one corner.","description":"One 2 m by 1 m blue gym mat laid flat, 60 mm thick, taped along both long edges with a webbing carry handle at one corner. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-gym-mat-singl-70cf5ea8","cdnUrl":"https://cdn.3dassets.dev/assets/35098/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-gym-mat-singl-70cf5ea8","thumbnailUrl":"https://cdn.3dassets.dev/assets/35098/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35098/v1/poster.webp","blurhash":"U98X;7bw4Tae%NtmR%RO00sm.TRj9EMbxatT","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":13620,"triangles":292,"vertices":566,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1.0010000467300415,-0.000015381303442973948,-0.5010651804091354],"max":[1.0010000467300415,0.06794299255201255,0.514999234924115]},"sizeMeters":[2.002,0.068,1.016],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:35.770Z","updatedAt":"2026-09-11T11:29:35.874Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35098/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GymMatCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35098/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35098/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35098/v1/model.glb\" alt=\"Gym Mat (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35098/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/35098/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35099","slug":"community-sports-hall-and-changing-rooms-vaulting-box-98435109","title":"Vaulting Box (Community Sports Hall and Changing Rooms)","summary":"A four section timber vaulting box 1.02 m tall, each section stepped in from the one below with a dark steel lip, topped with a padded red leather cap and a white landing marker.","description":"A four section timber vaulting box 1.02 m tall, each section stepped in from the one below with a dark steel lip, topped with a padded red leather cap and a white landing marker. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-vaulting-box-98435109","cdnUrl":"https://cdn.3dassets.dev/assets/35099/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-vaulting-box-98435109","thumbnailUrl":"https://cdn.3dassets.dev/assets/35099/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35099/v1/poster.webp","blurhash":"U8H_f0~X00D%xy%LD$E200IUnMS0%yxur=IU","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":32844,"triangles":732,"vertices":1554,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.5249999761581421,-0.0000031908194306762283,-0.3140070833190518],"max":[0.5249999761581421,1.1220060394165132,0.3140070833190518]},"sizeMeters":[1.05,1.122,0.628],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:36.342Z","updatedAt":"2026-09-11T11:29:36.435Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35099/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function VaultingBoxCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35099/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35099/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35099/v1/model.glb\" alt=\"Vaulting Box (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35099/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/35099/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35100","slug":"community-sports-hall-and-changing-rooms-springboard-d0a8af24","title":"Vaulting Springboard (Community Sports Hall and Changing Rooms)","summary":"A 1.2 m by 0.6 m vaulting springboard: a laminated base board, a sprung top board raked toward the take off end on two coil springs, a blue non slip face and a dark hinge rail at the back.","description":"A 1.2 m by 0.6 m vaulting springboard: a laminated base board, a sprung top board raked toward the take off end on two coil springs, a blue non slip face and a dark hinge rail at the back. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-springboard-d0a8af24","cdnUrl":"https://cdn.3dassets.dev/assets/35100/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-springboard-d0a8af24","thumbnailUrl":"https://cdn.3dassets.dev/assets/35100/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35100/v1/poster.webp","blurhash":"U7BDj0o~00xZI[.7t7Mx00RP.AR+-44TM|ks","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":18072,"triangles":348,"vertices":772,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,0.0000153976394895311,-0.30002832380022393],"max":[0.6000000238418579,0.13573032211336447,0.3251128491469799]},"sizeMeters":[1.2,0.136,0.625],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:37.337Z","updatedAt":"2026-09-11T11:29:37.438Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35100/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function VaultingSpringboardCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35100/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35100/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35100/v1/model.glb\" alt=\"Vaulting Springboard (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35100/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/35100/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35101","slug":"community-sports-hall-and-changing-rooms-balance-beam-75e97b3d","title":"Balance Beam (Community Sports Hall and Changing Rooms)","summary":"A 4 m timber balance beam on two splayed steel legs with red height adjusters, the beam suede faced in blue and set at 1.15 m. The height adjusters are modelled in one position and do not move.","description":"A 4 m timber balance beam on two splayed steel legs with red height adjusters, the beam suede faced in blue and set at 1.15 m. The height adjusters are modelled in one position and do not move. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-balance-beam-75e97b3d","cdnUrl":"https://cdn.3dassets.dev/assets/35101/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-balance-beam-75e97b3d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35101/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35101/v1/poster.webp","blurhash":"U79Qv{s:9Y%M_4?bITIT00%g-pE000IV_3%L","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":26996,"triangles":548,"vertices":1217,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-2,-0.0000048836850458228165,-0.35987732056590294],"max":[2,1.3181089630412033,0.35987732056590294]},"sizeMeters":[4,1.318,0.72],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:37.358Z","updatedAt":"2026-09-11T11:29:37.475Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35101/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BalanceBeamCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35101/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35101/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35101/v1/model.glb\" alt=\"Balance Beam (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35101/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/35101/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35102","slug":"community-sports-hall-and-changing-rooms-gym-bench-76cb03bd","title":"Hall Gym Bench (Community Sports Hall and Changing Rooms)","summary":"A 2 m timber form bench on a dark steel tube frame at 360 mm, with two beech slats, a blue centre stripe and a red hooking block at one end for catching over a wall bar rung.","description":"A 2 m timber form bench on a dark steel tube frame at 360 mm, with two beech slats, a blue centre stripe and a red hooking block at one end for catching over a wall bar rung. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-gym-bench-76cb03bd","cdnUrl":"https://cdn.3dassets.dev/assets/35102/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-gym-bench-76cb03bd","thumbnailUrl":"https://cdn.3dassets.dev/assets/35102/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35102/v1/poster.webp","blurhash":"U9Aw6gtQIUxv~p_2NGM|00?G%ME1000K?axu","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":22580,"triangles":420,"vertices":1034,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.000056162946307974915,-0.20996612560528222],"max":[1,0.38253295965949535,0.20996612560528222]},"sizeMeters":[2,0.382,0.42],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:38.562Z","updatedAt":"2026-09-11T11:29:38.664Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35102/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function HallGymBenchCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35102/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35102/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35102/v1/model.glb\" alt=\"Hall Gym Bench (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35102/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/35102/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35124","slug":"community-sports-hall-and-changing-rooms-cone-and-bib--6711c19b","title":"Cone and Training Bib Set (Community Sports Hall and Changing Rooms)","summary":"A coaching set laid out for a session: three marker cones set down, a nested stack of six more, and a folded pile of green and blue training bibs. Static geometry.","description":"A coaching set laid out for a session: three marker cones set down, a nested stack of six more, and a folded pile of green and blue training bibs. Static geometry. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-cone-and-bib--6711c19b","cdnUrl":"https://cdn.3dassets.dev/assets/35124/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-cone-and-bib--6711c19b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35124/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35124/v1/poster.webp","blurhash":"UCBfkM};02RFvzx]b^Mx0058?Zx?B:IArXyW","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":105184,"triangles":2640,"vertices":5346,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.6178736090660095,-0.000019695269987629604,-0.27788811033560873],"max":[0.6867315769195557,0.3950197059988237,0.30694543870030255]},"sizeMeters":[1.305,0.395,0.585],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:49.967Z","updatedAt":"2026-09-11T11:29:50.071Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35124/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ConeAndTrainingBibSetCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35124/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35124/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35124/v1/model.glb\" alt=\"Cone and Training Bib Set (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35124/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/35124/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35123","slug":"community-sports-hall-and-changing-rooms-ball-cage-on--f7cab35e","title":"Ball Cage on Castors (Community Sports Hall and Changing Rooms)","summary":"A 1 m ball cage on four swivel castors, meshed on all four sides with a red top rail and twelve match balls in it. All four castors are named nodes and roll; the balls are geometry and stay where they are modelled.","description":"A 1 m ball cage on four swivel castors, meshed on all four sides with a red top rail and twelve match balls in it. All four castors are named nodes and roll; the balls are geometry and stay where they are modelled. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: castor-1, castor-2, castor-3, castor-4. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-ball-cage-on--f7cab35e","cdnUrl":"https://cdn.3dassets.dev/assets/35123/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-ball-cage-on--f7cab35e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35123/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35123/v1/poster.webp","blurhash":"U4A^B:^*004;}^=|Ed5P00v,%yG7^$xC9H9v","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":244672,"triangles":6992,"vertices":16118,"meshes":11,"materials":7,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.5,5.66244127975235e-10,-0.3500167851802118],"max":[0.5,1.1290525197982788,0.3500167851802118]},"sizeMeters":[1,1.129,0.7],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:50.462Z","updatedAt":"2026-09-11T11:29:50.560Z","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/35123/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 BallCageOnCastorsCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35123/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/35123/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35123/v1/model.glb\" alt=\"Ball Cage on Castors (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35123/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/35123/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35114","slug":"community-sports-hall-and-changing-rooms-wet-floor-sig-227a38c3","title":"Wet Floor Sign (Community Sports Hall and Changing Rooms)","summary":"A folding yellow wet floor sign, 0.62 m tall, with a dark pictogram panel and caption bar on both faces. It is modelled open and does not fold.","description":"A folding yellow wet floor sign, 0.62 m tall, with a dark pictogram panel and caption bar on both faces. It is modelled open and does not fold. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-wet-floor-sig-227a38c3","cdnUrl":"https://cdn.3dassets.dev/assets/35114/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-wet-floor-sig-227a38c3","thumbnailUrl":"https://cdn.3dassets.dev/assets/35114/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35114/v1/poster.webp","blurhash":"U8FO}HoG00kG%MRkRhxt02N0_0%I~nWB0Ot7","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":14684,"triangles":312,"vertices":674,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.17000441021757282,0,-0.1892719612907555],"max":[0.17000441021757282,0.6300796866416931,0.1892719612907555]},"sizeMeters":[0.34,0.63,0.379],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:43.966Z","updatedAt":"2026-09-11T11:29:44.159Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35114/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WetFloorSignCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35114/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35114/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35114/v1/model.glb\" alt=\"Wet Floor Sign (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35114/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/35114/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35115","slug":"community-sports-hall-and-changing-rooms-kit-bag-and-t-d216f863","title":"Kit Bag and Towels (Community Sports Hall and Changing Rooms)","summary":"A player kit bag with two rolled towels beside it: a red holdall with a dark webbing strap, end grab handles and a white name panel, and a white and a blue rolled towel. Soft goods are modelled in one pose and do not move.","description":"A player kit bag with two rolled towels beside it: a red holdall with a dark webbing strap, end grab handles and a white name panel, and a white and a blue rolled towel. Soft goods are modelled in one pose and do not move. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-kit-bag-and-t-d216f863","cdnUrl":"https://cdn.3dassets.dev/assets/35115/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-kit-bag-and-t-d216f863","thumbnailUrl":"https://cdn.3dassets.dev/assets/35115/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35115/v1/poster.webp","blurhash":"U9Bfnk#R0JPBR4?vWsDh00Ef}trr%N00S0.S","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":29852,"triangles":704,"vertices":1374,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.3125,-0.000009759366521394641,-0.15248764000366222],"max":[0.7300000190734863,0.39798241418598446,0.2436948856226021]},"sizeMeters":[1.043,0.398,0.396],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:45.408Z","updatedAt":"2026-09-11T11:29:45.509Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35115/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function KitBagAndTowelsCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35115/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35115/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35115/v1/model.glb\" alt=\"Kit Bag and Towels (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35115/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/35115/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35107","slug":"community-sports-hall-and-changing-rooms-shower-cubicl-0dd6d129","title":"Shower Cubicle Module (Community Sports Hall and Changing Rooms)","summary":"A 1.2 m shower cubicle module: a white tray falling to a centre grate, a blue and white tiled back wall, a full height divider on its left hand edge, a chrome riser and fixed head, and a push button control panel. Bays butt through bay-left and bay-right.","description":"A 1.2 m shower cubicle module: a white tray falling to a centre grate, a blue and white tiled back wall, a full height divider on its left hand edge, a chrome riser and fixed head, and a push button control panel. Bays butt through bay-left and bay-right. Ports bay-left and bay-right sit at the bay edges at mid height. Running water is not modelled. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-shower-cubicl-0dd6d129","cdnUrl":"https://cdn.3dassets.dev/assets/35107/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-shower-cubicl-0dd6d129","thumbnailUrl":"https://cdn.3dassets.dev/assets/35107/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35107/v1/poster.webp","blurhash":"U6GI$L~V000N%MWBjFofDNNfS*x9_3ofD%WV","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":39336,"triangles":804,"vertices":1820,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000366352168148,0,-0.6049655423686578],"max":[0.6000366352168148,2.200000047683716,0.5749655113742426]},"sizeMeters":[1.2,2.2,1.18],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:41.782Z","updatedAt":"2026-09-11T11:29:41.882Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35107/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShowerCubicleModuleCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35107/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35107/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35107/v1/model.glb\" alt=\"Shower Cubicle Module (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35107/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/35107/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35110","slug":"community-sports-hall-and-changing-rooms-cubicle-door--b15cd857","title":"Changing Cubicle Door Module (Community Sports Hall and Changing Rooms)","summary":"A 1.2 m changing cubicle door module: a white frame with a chrome head rail and a blue laminate leaf hung clear of the floor on its left stile, with a chrome knob and a red vacant indicator. The leaf is one named node and swings on the frame.","description":"A 1.2 m changing cubicle door module: a white frame with a chrome head rail and a blue laminate leaf hung clear of the floor on its left stile, with a chrome knob and a red vacant indicator. The leaf is one named node and swings on the frame. It carries the same bay-left and bay-right ports as the shower cubicle, so a door drops into a run of bays. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: cubicle-door. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-cubicle-door--b15cd857","cdnUrl":"https://cdn.3dassets.dev/assets/35110/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-cubicle-door--b15cd857","thumbnailUrl":"https://cdn.3dassets.dev/assets/35110/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35110/v1/poster.webp","blurhash":"U7Am}G4p00~S_4xu4nMwQ*%JJ?Ic?at6D%IV","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":19612,"triangles":412,"vertices":872,"meshes":6,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6011999845504761,0,-0.02994476214688367],"max":[0.6000366352168148,2.200000047683716,0.0659989561070379]},"sizeMeters":[1.201,2.2,0.096],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:42.068Z","updatedAt":"2026-09-11T11:29:42.208Z","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/35110/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 ChangingCubicleDoorModuleCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35110/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/35110/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35110/v1/model.glb\" alt=\"Changing Cubicle Door Module (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35110/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/35110/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35105","slug":"community-sports-hall-and-changing-rooms-locker-bank-c1f2829d","title":"Six Door Changing Room Locker Bank (Community Sports Hall and Changing Rooms)","summary":"A 1.2 m six door locker bank 1.85 m tall, two columns of three in alternating blue and green leaves, with a sloped top, a recessed plinth, punched vents, number plates and cam latches. Every leaf is a named node on its own hinge line.","description":"A 1.2 m six door locker bank 1.85 m tall, two columns of three in alternating blue and green leaves, with a sloped top, a recessed plinth, punched vents, number plates and cam latches. Every leaf is a named node on its own hinge line. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: locker-door-1, locker-door-2, locker-door-3, locker-door-4, locker-door-5, locker-door-6. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-locker-bank-c1f2829d","cdnUrl":"https://cdn.3dassets.dev/assets/35105/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-locker-bank-c1f2829d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35105/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35105/v1/poster.webp","blurhash":"U7BqC,9|00},?IxuJ5IU00-o.l57%fofM{ay","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":47392,"triangles":1940,"vertices":4306,"meshes":26,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.7099649583969212,0,-0.32501281486510886],"max":[0.7099649583969212,1.9179999828338623,0.32501281486510886]},"sizeMeters":[1.42,1.918,0.65],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:40.162Z","updatedAt":"2026-09-11T11:29:40.324Z","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/35105/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 SixDoorChangingRoomLockerBankCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35105/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/35105/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35105/v1/model.glb\" alt=\"Six Door Changing Room Locker Bank (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35105/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/35105/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35106","slug":"community-sports-hall-and-changing-rooms-locker-bank-o-257fd3f5","title":"Six Door Locker Bank, One Door Open (Community Sports Hall and Changing Rooms)","summary":"The same locker bank with one middle leaf standing open on its hinge, for dressing a changing room without animating it. The other five leaves still swing.","description":"The same locker bank with one middle leaf standing open on its hinge, for dressing a changing room without animating it. The other five leaves still swing. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: locker-door-1, locker-door-2, locker-door-3, locker-door-4, locker-door-5, locker-door-6. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-locker-bank-o-257fd3f5","cdnUrl":"https://cdn.3dassets.dev/assets/35106/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-locker-bank-o-257fd3f5","thumbnailUrl":"https://cdn.3dassets.dev/assets/35106/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35106/v1/poster.webp","blurhash":"U8Bq9x5800~9$,xvNYIU00-:.l9a%foMM{WB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":57844,"triangles":1940,"vertices":4284,"meshes":26,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.7099649583969212,0,-0.35900236892700194],"max":[0.7099649583969212,1.9179999828338623,0.32501281486510886]},"sizeMeters":[1.42,1.918,0.684],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:40.244Z","updatedAt":"2026-09-11T11:29:40.369Z","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/35106/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 SixDoorLockerBankOneDoorOpenCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35106/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/35106/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35106/v1/model.glb\" alt=\"Six Door Locker Bank, One Door Open (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35106/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/35106/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35103","slug":"community-sports-hall-and-changing-rooms-changing-benc-af5dc448","title":"Changing Bench Run with Coat Rail (Community Sports Hall and Changing Rooms)","summary":"A 2 m changing bench run: a three slat beech seat at 450 mm on dark steel frames, an upright back with a blue hook rail carrying five chrome double hooks, a chrome hanging rail and a timber top shelf at 1.6 m. Runs butt end to end on the 2 m module.","description":"A 2 m changing bench run: a three slat beech seat at 450 mm on dark steel frames, an upright back with a blue hook rail carrying five chrome double hooks, a chrome hanging rail and a timber top shelf at 1.6 m. Runs butt end to end on the 2 m module. Ports bench-left and bench-right sit at the run ends at seat height. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-changing-benc-af5dc448","cdnUrl":"https://cdn.3dassets.dev/assets/35103/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-changing-benc-af5dc448","thumbnailUrl":"https://cdn.3dassets.dev/assets/35103/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35103/v1/poster.webp","blurhash":"U7B3.[sm00oz~qxvDjD%4TXS%MRP#j?bT19F","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":58192,"triangles":1296,"vertices":2900,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.9800000190734863,0,-0.2500192216046185],"max":[0.9800000190734863,1.8712052987584278,0.18994979486681157]},"sizeMeters":[1.96,1.871,0.44],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:39.085Z","updatedAt":"2026-09-11T11:29:39.196Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35103/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChangingBenchRunWithCoatRailCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35103/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35103/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35103/v1/model.glb\" alt=\"Changing Bench Run with Coat Rail (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35103/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/35103/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35104","slug":"community-sports-hall-and-changing-rooms-changing-benc-8ba8e8ea","title":"Drying Area Bench Run (Community Sports Hall and Changing Rooms)","summary":"The same 2 m bench run without the back, rail or shelf, which is what stands in the drying area and down the middle of a changing room. It carries the same bench-left and bench-right ports, so it drops into a run of the full benches.","description":"The same 2 m bench run without the back, rail or shelf, which is what stands in the drying area and down the middle of a changing room. It carries the same bench-left and bench-right ports, so it drops into a run of the full benches. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-changing-benc-8ba8e8ea","cdnUrl":"https://cdn.3dassets.dev/assets/35104/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-changing-benc-8ba8e8ea","thumbnailUrl":"https://cdn.3dassets.dev/assets/35104/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35104/v1/poster.webp","blurhash":"UDBDD_o2D*xb~V?HM|M{00?H-oIU01IV?Hxa","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":22024,"triangles":452,"vertices":1029,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.9700000286102295,0.000006103355458086934,-0.19002045056212136],"max":[0.9700000286102295,0.4659653203636085,0.19002045056212136]},"sizeMeters":[1.94,0.466,0.38],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:40.138Z","updatedAt":"2026-09-11T11:29:40.237Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35104/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DryingAreaBenchRunCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35104/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35104/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35104/v1/model.glb\" alt=\"Drying Area Bench Run (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35104/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/35104/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35108","slug":"community-sports-hall-and-changing-rooms-basin-and-dry-3c323cb6","title":"Basin Run and Hand Dryer Unit (Community Sports Hall and Changing Rooms)","summary":"A 1.8 m changing room basin run: a white top on a dark steel frame with two inset bowls and pillar taps, a blue tiled splashback, a mirror strip over it and a hand dryer at one end. The dryer has no moving part: nothing on it turns.","description":"A 1.8 m changing room basin run: a white top on a dark steel frame with two inset bowls and pillar taps, a blue tiled splashback, a mirror strip over it and a hand dryer at one end. The dryer has no moving part: nothing on it turns. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-basin-and-dry-3c323cb6","cdnUrl":"https://cdn.3dassets.dev/assets/35108/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-basin-and-dry-3c323cb6","thumbnailUrl":"https://cdn.3dassets.dev/assets/35108/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35108/v1/poster.webp","blurhash":"UHAwxYs.00kWyZofR3Ri00Wr-;V=VqSiXAsl","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":47464,"triangles":1040,"vertices":2269,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.8999999761581421,-0.000010198351628631919,-0.27999572479280493],"max":[0.8999999761581421,1.960047315344454,0.25997191608437803]},"sizeMeters":[1.8,1.96,0.54],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:42.166Z","updatedAt":"2026-09-11T11:29:42.285Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35108/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BasinRunAndHandDryerUnitCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35108/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35108/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35108/v1/model.glb\" alt=\"Basin Run and Hand Dryer Unit (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35108/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/35108/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35109","slug":"community-sports-hall-and-changing-rooms-changing-room-b2debb51","title":"Changing Room Mirror Panel (Community Sports Hall and Changing Rooms)","summary":"A 0.9 m by 1.2 m framed changing room mirror with a chrome shelf along its bottom rail and a blue marker band at the top. Modelled with the frame on y=0 so the scene lifts it to about a metre up the wall.","description":"A 0.9 m by 1.2 m framed changing room mirror with a chrome shelf along its bottom rail and a blue marker band at the top. Modelled with the frame on y=0 so the scene lifts it to about a metre up the wall. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-changing-room-b2debb51","cdnUrl":"https://cdn.3dassets.dev/assets/35109/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-changing-room-b2debb51","thumbnailUrl":"https://cdn.3dassets.dev/assets/35109/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35109/v1/poster.webp","blurhash":"U39H9CRj00az_Nx]8_D%8_t7-;M{_3xu9FD%","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":11440,"triangles":204,"vertices":454,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.4499771289983769,0,-0.01498718608118621],"max":[0.4499771289983769,1.2000000476837158,0.10498718313820687]},"sizeMeters":[0.9,1.2,0.12],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:42.063Z","updatedAt":"2026-09-11T11:29:42.191Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35109/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChangingRoomMirrorPanelCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35109/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35109/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35109/v1/model.glb\" alt=\"Changing Room Mirror Panel (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35109/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/35109/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35112","slug":"community-sports-hall-and-changing-rooms-first-aid-poi-96ad5f66","title":"First Aid Point (Community Sports Hall and Changing Rooms)","summary":"A free standing first aid point: a green steel cabinet with a white cross and a cam lock on a tubular post and a weighted base plate, with two eyewash bottles on a bracket under it. Static geometry: the cabinet door is modelled shut.","description":"A free standing first aid point: a green steel cabinet with a white cross and a cam lock on a tubular post and a weighted base plate, with two eyewash bottles on a bracket under it. Static geometry: the cabinet door is modelled shut. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-first-aid-poi-96ad5f66","cdnUrl":"https://cdn.3dassets.dev/assets/35112/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-first-aid-poi-96ad5f66","thumbnailUrl":"https://cdn.3dassets.dev/assets/35112/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35112/v1/poster.webp","blurhash":"U86k@aoz00My*HkCHtVtyCofMxRQIBazx]od","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":25676,"triangles":536,"vertices":1180,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.2199999988079071,-0.000007935151083517805,-0.18001098568800308],"max":[0.2199999988079071,1.5,0.18001098568800308]},"sizeMeters":[0.44,1.5,0.36],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:43.847Z","updatedAt":"2026-09-11T11:29:43.945Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35112/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FirstAidPointCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35112/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35112/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35112/v1/model.glb\" alt=\"First Aid Point (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35112/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/35112/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35113","slug":"community-sports-hall-and-changing-rooms-cleaning-trol-ae0faab6","title":"Cleaning Trolley (Community Sports Hall and Changing Rooms)","summary":"A caretaker cleaning trolley: a steel frame on four swivel castors with a yellow mop bucket and wringer, a bag hoop carrying a white refuse sack, a bottle shelf and a mop stood in the frame. All four castors are named nodes and roll; the sack and the mop head are geometry.","description":"A caretaker cleaning trolley: a steel frame on four swivel castors with a yellow mop bucket and wringer, a bag hoop carrying a white refuse sack, a bottle shelf and a mop stood in the frame. All four castors are named nodes and roll; the sack and the mop head are geometry. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: castor-1, castor-2, castor-3, castor-4. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-cleaning-trol-ae0faab6","cdnUrl":"https://cdn.3dassets.dev/assets/35113/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-cleaning-trol-ae0faab6","thumbnailUrl":"https://cdn.3dassets.dev/assets/35113/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35113/v1/poster.webp","blurhash":"UCBz8@--004_9axb-:In00bd_2nL~UbE9Hsq","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":92108,"triangles":2392,"vertices":5184,"meshes":10,"materials":6,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.4500010626949762,5.66244127975235e-10,-0.2600277686927554],"max":[0.4800101198974766,1.698197603225708,0.2803494844381128]},"sizeMeters":[0.93,1.698,0.54],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:43.901Z","updatedAt":"2026-09-11T11:29:44.001Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35113/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 CleaningTrolleyCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35113/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/35113/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35113/v1/model.glb\" alt=\"Cleaning Trolley (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35113/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/35113/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35122","slug":"community-sports-hall-and-changing-rooms-equipment-sto-0524f6e5","title":"Equipment Store Cage (Community Sports Hall and Changing Rooms)","summary":"A 2 m by 1 m walk in equipment store cage: a welded steel frame meshed on the back, sides and roof, two shelves loaded with match balls, a fixed mesh bay at one end and a mesh door with a red handle hinged on its outer stile. The door is a named node; the mesh is geometry.","description":"A 2 m by 1 m walk in equipment store cage: a welded steel frame meshed on the back, sides and roof, two shelves loaded with match balls, a fixed mesh bay at one end and a mesh door with a red handle hinged on its outer stile. The door is a named node; the mesh is geometry. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: cage-door. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-equipment-sto-0524f6e5","cdnUrl":"https://cdn.3dassets.dev/assets/35122/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-equipment-sto-0524f6e5","thumbnailUrl":"https://cdn.3dassets.dev/assets/35122/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35122/v1/poster.webp","blurhash":"U5AmxZ%M00kC~qRjD%t800D%%M-:xaaeIUxu","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":172696,"triangles":4612,"vertices":10666,"meshes":9,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-1.2599999904632568,0,-0.9419830978602498],"max":[1.0303582078853852,2.124248743057251,0.5350329562197178]},"sizeMeters":[2.29,2.124,1.477],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:49.674Z","updatedAt":"2026-09-11T11:29:49.778Z","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/35122/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 EquipmentStoreCageCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35122/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/35122/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35122/v1/model.glb\" alt=\"Equipment Store Cage (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35122/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/35122/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35117","slug":"community-sports-hall-and-changing-rooms-vending-machi-3def4990","title":"Foyer Vending Machine (Community Sports Hall and Changing Rooms)","summary":"A foyer drinks vending machine 1.88 m tall: a dark cabinet on levelling feet with four stocked shelves behind a glazed door, a red selection pilaster with a keypad and a small display, and a delivery flap. The glazed door is one named node and swings on its left stile.","description":"A foyer drinks vending machine 1.88 m tall: a dark cabinet on levelling feet with four stocked shelves behind a glazed door, a red selection pilaster with a keypad and a small display, and a delivery flap. The glazed door is one named node and swings on its left stile. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: vending-door. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-vending-machi-3def4990","cdnUrl":"https://cdn.3dassets.dev/assets/35117/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-vending-machi-3def4990","thumbnailUrl":"https://cdn.3dassets.dev/assets/35117/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35117/v1/poster.webp","blurhash":"U497Y9tR00Di_4of9ERlOYRjrX%M?bofD%WB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":72840,"triangles":1744,"vertices":3940,"meshes":10,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.45994508101012527,0,-0.41998772692039554],"max":[0.45994508101012527,1.940000057220459,0.42000075743063536]},"sizeMeters":[0.92,1.94,0.84],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:45.777Z","updatedAt":"2026-09-11T11:29:45.891Z","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/35117/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 FoyerVendingMachineCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35117/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/35117/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35117/v1/model.glb\" alt=\"Foyer Vending Machine (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35117/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/35117/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35120","slug":"community-sports-hall-and-changing-rooms-trophy-cabine-51c36706","title":"Club Trophy Cabinet (Community Sports Hall and Changing Rooms)","summary":"A 1.2 m by 1.9 m club trophy cabinet in timber with a dark plinth, three shelves of cups, shields and a mounted ball, and two glazed leaves hinged on their outer stiles. Both leaves are named nodes and swing.","description":"A 1.2 m by 1.9 m club trophy cabinet in timber with a dark plinth, three shelves of cups, shields and a mounted ball, and two glazed leaves hinged on their outer stiles. Both leaves are named nodes and swing. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: cabinet-door-1, cabinet-door-2. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-trophy-cabine-51c36706","cdnUrl":"https://cdn.3dassets.dev/assets/35120/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-trophy-cabine-51c36706","thumbnailUrl":"https://cdn.3dassets.dev/assets/35120/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35120/v1/poster.webp","blurhash":"UFF$FORq00V?~Wxt9GIo02t1%LWE%Lj[M{WB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":109056,"triangles":2820,"vertices":6072,"meshes":12,"materials":7,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6200323408941315,0.000013125142487933894,-0.21995299839993823],"max":[0.6200323408941315,1.899999976158142,0.25799998670816426]},"sizeMeters":[1.24,1.9,0.478],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:47.484Z","updatedAt":"2026-09-11T11:29:47.586Z","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/35120/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 ClubTrophyCabinetCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35120/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/35120/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35120/v1/model.glb\" alt=\"Club Trophy Cabinet (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35120/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/35120/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35121","slug":"community-sports-hall-and-changing-rooms-foyer-bin-b2789118","title":"Foyer Waste Bin (Community Sports Hall and Changing Rooms)","summary":"A 0.9 m foyer waste bin: a dark steel drum with a blue band and a domed steel lid hinged along its back edge. The lid is a named node and lifts.","description":"A 0.9 m foyer waste bin: a dark steel drum with a blue band and a domed steel lid hinged along its back edge. The lid is a named node and lifts. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: bin-lid. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-foyer-bin-b2789118","cdnUrl":"https://cdn.3dassets.dev/assets/35121/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-foyer-bin-b2789118","thumbnailUrl":"https://cdn.3dassets.dev/assets/35121/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35121/v1/poster.webp","blurhash":"U26*j*_40000_1aw9GWY00IU_N.74;j]?Gj?","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":16280,"triangles":328,"vertices":668,"meshes":3,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.24500000715255732,0,-0.24500000476837147],"max":[0.24500000715255732,0.8669834261046844,0.24500000953674317]},"sizeMeters":[0.49,0.867,0.49],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:48.532Z","updatedAt":"2026-09-11T11:29:48.626Z","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/35121/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 FoyerWasteBinCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35121/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/35121/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35121/v1/model.glb\" alt=\"Foyer Waste Bin (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35121/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/35121/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35119","slug":"community-sports-hall-and-changing-rooms-fixture-notic-179946d7","title":"Fixture Notice Board (Community Sports Hall and Changing Rooms)","summary":"A 1.7 m by 1.15 m fixture notice board: a dark frame round a cork face with a blue header band and four pinned sheets in red, yellow, green and blue. The sheets carry no readable text. Modelled with the frame on y=0.","description":"A 1.7 m by 1.15 m fixture notice board: a dark frame round a cork face with a blue header band and four pinned sheets in red, yellow, green and blue. The sheets carry no readable text. Modelled with the frame on y=0. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-fixture-notic-179946d7","cdnUrl":"https://cdn.3dassets.dev/assets/35119/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-fixture-notic-179946d7","thumbnailUrl":"https://cdn.3dassets.dev/assets/35119/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35119/v1/poster.webp","blurhash":"UGFPB8xt00R+kX?as,9Z00Rl~ps,t7M|NG%L","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":21356,"triangles":364,"vertices":777,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.8500000238418579,-0.0000023169375195086772,-0.029987488252241214],"max":[0.8500000238418579,1.1500022930956617,0.040998718151581945]},"sizeMeters":[1.7,1.15,0.071],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:48.166Z","updatedAt":"2026-09-11T11:29:48.355Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35119/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FixtureNoticeBoardCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35119/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35119/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35119/v1/model.glb\" alt=\"Fixture Notice Board (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35119/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/35119/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35116","slug":"community-sports-hall-and-changing-rooms-reception-des-ee569bd0","title":"Sports Centre Reception Desk (Community Sports Hall and Changing Rooms)","summary":"A 2.6 m sports centre reception desk: a white carcass with a timber worktop, a raised blue transaction front with a yellow band and a timber shelf, a staff screen on a pole, a card reader and a pass bowl. Static geometry: nothing on the desk moves.","description":"A 2.6 m sports centre reception desk: a white carcass with a timber worktop, a raised blue transaction front with a yellow band and a timber shelf, a staff screen on a pole, a card reader and a pass bowl. Static geometry: nothing on the desk moves. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-reception-des-ee569bd0","cdnUrl":"https://cdn.3dassets.dev/assets/35116/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-reception-des-ee569bd0","thumbnailUrl":"https://cdn.3dassets.dev/assets/35116/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35116/v1/poster.webp","blurhash":"UCC%jfK8Q,o}vw~qT2Mx00=V%MS6KS4n=:n#","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":39348,"triangles":806,"vertices":1747,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-1.350000023841858,-0.000022218449455491118,-0.45994507999367706],"max":[1.350000023841858,1.2000222661331712,0.439945069264841]},"sizeMeters":[2.7,1.2,0.9],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:45.734Z","updatedAt":"2026-09-11T11:29:45.830Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35116/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SportsCentreReceptionDeskCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35116/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35116/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35116/v1/model.glb\" alt=\"Sports Centre Reception Desk (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35116/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/35116/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35125","slug":"community-sports-hall-and-changing-rooms-pump-and-whis-2e97e815","title":"Pump and Whistle Tray (Community Sports Hall and Changing Rooms)","summary":"A coach kit tray: a shallow steel tray with a blue liner holding a ball pump and a spare needle, two whistles on lanyard rings and a roll of pitch tape. Static geometry.","description":"A coach kit tray: a shallow steel tray with a blue liner holding a ball pump and a spare needle, two whistles on lanyard rings and a roll of pitch tape. Static geometry. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-pump-and-whis-2e97e815","cdnUrl":"https://cdn.3dassets.dev/assets/35125/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-pump-and-whis-2e97e815","thumbnailUrl":"https://cdn.3dassets.dev/assets/35125/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35125/v1/poster.webp","blurhash":"U69Z}|-;00S~-p%MOXIo00IU~CV@0e9F#S-o","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":47276,"triangles":1104,"vertices":2201,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.24199999868869781,0.000014953561568074869,-0.16199310193908192],"max":[0.2809999883174896,0.09257039030000354,0.16199310193908192]},"sizeMeters":[0.523,0.093,0.324],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:51.162Z","updatedAt":"2026-09-11T11:29:51.267Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35125/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PumpAndWhistleTrayCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35125/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35125/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35125/v1/model.glb\" alt=\"Pump and Whistle Tray (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35125/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/35125/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35118","slug":"community-sports-hall-and-changing-rooms-entrance-turn-d36515c9","title":"Entrance Turnstile (Community Sports Hall and Changing Rooms)","summary":"A pedestal entrance turnstile: a brushed steel column with a sloped head and a green go light, three arms on one node turning about the column, and the fixed guide post and rail it works against. The arms are the only moving part and spin a full turn.","description":"A pedestal entrance turnstile: a brushed steel column with a sloped head and a green go light, three arms on one node turning about the column, and the fixed guide post and rail it works against. The arms are the only moving part and spin a full turn. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: turnstile-arms. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-entrance-turn-d36515c9","cdnUrl":"https://cdn.3dassets.dev/assets/35118/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-entrance-turn-d36515c9","thumbnailUrl":"https://cdn.3dassets.dev/assets/35118/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35118/v1/poster.webp","blurhash":"U15hfFMd00ozo$?bRh0000S|~q%300D%-=_4","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":30044,"triangles":632,"vertices":1333,"meshes":5,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.6200000047683716,-0.000023645354673584862,-0.6345881286253734],"max":[1.0499999523162842,1.1532890599379135,0.4513655963530345]},"sizeMeters":[1.67,1.153,1.086],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:46.818Z","updatedAt":"2026-09-11T11:29:46.936Z","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/35118/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 EntranceTurnstileCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35118/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/35118/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35118/v1/model.glb\" alt=\"Entrance Turnstile (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35118/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/35118/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35126","slug":"community-sports-hall-and-changing-rooms-spare-net-rol-585f10ed","title":"Spare Net Roll (Community Sports Hall and Changing Rooms)","summary":"A spare court net rolled on its steel bar in a low stand, with a blue tape band round the roll. Static geometry: the net is stored as it is modelled.","description":"A spare court net rolled on its steel bar in a low stand, with a blue tape band round the roll. Static geometry: the net is stored as it is modelled. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-spare-net-rol-585f10ed","cdnUrl":"https://cdn.3dassets.dev/assets/35126/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-spare-net-rol-585f10ed","thumbnailUrl":"https://cdn.3dassets.dev/assets/35126/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35126/v1/poster.webp","blurhash":"UBCGZ1%N00ofx]-;ofIU00RP~qRjDi4nRj-;","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":11720,"triangles":204,"vertices":432,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.8975003957748413,-0.00003509466940314343,-0.2799764951180505],"max":[0.8975003957748413,0.4728699435385036,0.2799764951180505]},"sizeMeters":[1.795,0.473,0.56],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:52.547Z","updatedAt":"2026-09-11T11:29:52.667Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35126/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SpareNetRollCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35126/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35126/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35126/v1/model.glb\" alt=\"Spare Net Roll (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35126/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/35126/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35127","slug":"community-sports-hall-and-changing-rooms-stacking-chai-d9782bc3","title":"Stacking Chair Trolley (Community Sports Hall and Changing Rooms)","summary":"A stacking chair trolley with eight polypropylene hall chairs on it in alternating blue and red, a push handle and four swivel castors. The castors are named nodes and roll; the chairs are modelled as a stack and do not come off.","description":"A stacking chair trolley with eight polypropylene hall chairs on it in alternating blue and red, a push handle and four swivel castors. The castors are named nodes and roll; the chairs are modelled as a stack and do not come off. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Named pivoted nodes: castor-1, castor-2, castor-3, castor-4. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-stacking-chai-d9782bc3","cdnUrl":"https://cdn.3dassets.dev/assets/35127/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-stacking-chai-d9782bc3","thumbnailUrl":"https://cdn.3dassets.dev/assets/35127/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35127/v1/poster.webp","blurhash":"U6AJsW-;009ab{M_R4xc00IU}^-;xBxbkYX5","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":160928,"triangles":6608,"vertices":13267,"meshes":8,"materials":4,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.3700000047683716,5.66244127975235e-10,-0.39747428217062664],"max":[0.3700000047683716,1.0740000009536743,0.3133662003825628]},"sizeMeters":[0.74,1.074,0.711],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:51.778Z","updatedAt":"2026-09-11T11:29:51.886Z","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/35127/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 StackingChairTrolleyCommunitySportsHallAndChangingRooms(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35127/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/35127/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35127/v1/model.glb\" alt=\"Stacking Chair Trolley (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35127/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/35127/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35128","slug":"community-sports-hall-and-changing-rooms-folding-table-b0d6b4a5","title":"Folding Table Stack (Community Sports Hall and Changing Rooms)","summary":"Four folding hall tables stood on edge in a steel storage rack with their legs folded flat against the tops. Static geometry: the tables do not unfold.","description":"Four folding hall tables stood on edge in a steel storage rack with their legs folded flat against the tops. Static geometry: the tables do not unfold. Metre units, +Y up, the court or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/community-sports-hall-and-changing-rooms-folding-table-b0d6b4a5","cdnUrl":"https://cdn.3dassets.dev/assets/35128/v1/model.glb","downloadUrl":"https://3dassets.dev/download/community-sports-hall-and-changing-rooms-folding-table-b0d6b4a5","thumbnailUrl":"https://cdn.3dassets.dev/assets/35128/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35128/v1/poster.webp","blurhash":"UBF=z3-:00NI^+?HM{D%00Rj~VWCIVIpt7xZ","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":28456,"triangles":608,"vertices":1372,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.6600000262260437,0.000009018395400850476,-0.37001252729186146],"max":[0.6600000262260437,1.0240125885255964,0.37001252729186146]},"sizeMeters":[1.32,1.024,0.74],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:29:53.230Z","updatedAt":"2026-09-11T11:29:53.339Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35128/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FoldingTableStackCommunitySportsHallAndChangingRooms(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35128/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35128/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35128/v1/model.glb\" alt=\"Folding Table Stack (Community Sports Hall and Changing Rooms)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35128/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/35128/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}]}}