{"data":{"id":"109","slug":"public-swimming-baths-and-poolside","title":"Public Swimming Baths and Poolside","summary":"Walk a municipal pool hall: a six lane tank with ropes and flags, starting blocks, lifeguard chairs and rescue kit, a viewing gallery, and a changing village of cubicles, lockers and showers.","url":"https://3dassets.dev/demos/public-swimming-baths-and-poolside","coverUrl":"https://cdn.3dassets.dev/media/public-swimming-baths-and-poolside-demo.png","featured":true,"pack":{"slug":"public-swimming-baths-and-poolside","title":"Public Swimming Baths and Poolside","url":"https://3dassets.dev/packs/public-swimming-baths-and-poolside","summary":"Realistic kit for a municipal indoor swimming baths: a tiled lane pool tank with a still water surface, lane ropes, starting blocks, a diving board, the poolside and its lifeguard kit, a tiled changing village, and reception with a viewing gallery.","assetCount":54,"totalBytes":4484844,"starterScene":{"slug":"public-swimming-baths-and-poolside-munic-50d7612d-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/35286/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-munic-50d7612d-starter-scene","fileSize":2153556}},"placementCount":215,"assetCount":52,"spawn":{"position":[5.75,0,0],"yaw":270},"publishedAt":"2026-09-11T12:36:33.120Z","updatedAt":"2026-09-11T12:36:33.121Z","description":"## What is placed\n\nA single municipal baths hall, laid out from the pack's own tiles and wall modules. The tank sits in the middle of the room: tiled walls and lane target floor tiles below, still water panels at the surface, a scum channel round the whole coping. Lane ropes are strung down the water and the backstroke flag lines cross it. Starting blocks and the diving board stand over the deep end, the shallow end steps climb out at the other, and ladders drop in on both long sides.\n\nThe poolside carries what a real one does: lifeguard high and low chairs, a rescue tube and reaching pole rack, a first aid station, a fire point, a hose reel, a cover reel, a lane rope on its storage reel, a float and kickboard trolley, a pace clock, benches, planters, wet floor signs and towels left where someone dropped them. Tiered viewing gallery seating sits behind a rail at one end, with a row of red seats in the middle.\n\nThrough the doorway in the long wall is the entrance and changing village: turnstile, reception desk, trophy cabinet, session times board, vending machine, shower posts, footbath channels, cubicle modules, a family cubicle, locker banks, changing benches with coat rails, a basin and mirror run, hairdryer points, a drying bench and a cleaning trolley.\n\n## What moves\n\nCubicle doors and locker doors swing open and closed as you come near them. The float trolley rolls, the pace clock's hand sweeps, and the diving board tips at its fulcrum.\n\n## What does not move, and why\n\nThe water is a still plane. There is no water simulation in this library, so ripples, splashes and wakes are left for the consumer to add rather than faked with geometry that would only look wrong.\n\nThe diving board tips at its fulcrum with its flex left out: a board bending along its own length is not a rigid node transform, and this library animates rigid node transforms only. The lane ropes when strung, the backstroke flags, and the towels are static for the same reason. A rope or a hanging flag deforms, and a single node cannot express that.\n\nThere are no swimmers and no staff. Nothing in this library is skinned, so a person is a figure this pack cannot honestly place.","scene":{"version":1,"spawn":{"position":[5.75,0,0],"yaw":270},"ground":{"style":"none"},"environment":{"preset":"hall","wallHeight":7,"lampHeight":5.8,"shadows":true},"placements":[{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-a32450cc","position":[-4,-2,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[-4,-0.14,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-a32450cc","position":[-4,-2,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[-4,-0.14,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-a32450cc","position":[-4,-2,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[-4,-0.14,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","position":[-2,-2,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[-2,-0.14,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","position":[-2,-2,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[-2,-0.14,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","position":[-2,-2,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[-2,-0.14,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","position":[0,-2,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[0,-0.14,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","position":[0,-2,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[0,-0.14,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","position":[0,-2,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[0,-0.14,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","position":[2,-2,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[2,-0.14,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","position":[2,-2,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[2,-0.14,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","position":[2,-2,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[2,-0.14,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-a32450cc","position":[4,-2,-2],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[4,-0.14,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-a32450cc","position":[4,-2,0],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[4,-0.14,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-floor-til-a32450cc","position":[4,-2,2],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","position":[4,-0.14,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-6,0,-4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-6,0,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-6,0,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-6,0,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-6,0,4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-4,0,-4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile--842d9f27","position":[-4,0,4],"rotation":180},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile--842d9f27","position":[-2,0,-4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-2,0,4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[0,0,-4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile--842d9f27","position":[0,0,4],"rotation":180},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile--842d9f27","position":[2,0,-4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[2,0,4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[4,0,-4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile--842d9f27","position":[4,0,4],"rotation":180},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[6,0,-4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[6,0,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[6,0,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[6,0,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[6,0,4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-6,0,-6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-4,0,-6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-2,0,-6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[0,0,-6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[2,0,-6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[4,0,-6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[6,0,-6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[8,0,-4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[8,0,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[8,0,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[8,0,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[8,0,4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[10,0,-4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[10,0,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[10,0,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[10,0,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[10,0,4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[12,0,-4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[12,0,-2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[12,0,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[12,0,2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","position":[12,0,4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[-4,-2,-3.1],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[-4,-2,3.1],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[-2,-2,-3.1],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[-2,-2,3.1],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[0,-2,-3.1],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[0,-2,3.1],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[2,-2,-3.1],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[2,-2,3.1],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[4,-2,-3.1],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[4,-2,3.1],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[-5.1,-2,-2],"rotation":90},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[5.1,-2,-2],"rotation":270},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[-5.1,-2,0],"rotation":90},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[5.1,-2,0],"rotation":270},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[-5.1,-2,2],"rotation":90},{"asset":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","position":[5.1,-2,2],"rotation":270},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[-4,0.08,-3.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[-4,0.08,3.3],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[-2,0.08,-3.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[-2,0.08,3.3],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[0,0.08,-3.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[0,0.08,3.3],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[2,0.08,-3.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[2,0.08,3.3],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[4,0.08,-3.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[4,0.08,3.3],"rotation":180},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[-5.3,0.08,-2],"rotation":90},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[5.3,0.08,-2],"rotation":270},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[-5.3,0.08,0],"rotation":90},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[5.3,0.08,0],"rotation":270},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[-5.3,0.08,2],"rotation":90},{"asset":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","position":[5.3,0.08,2],"rotation":270},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[-6,0.08,-6.91],"rotation":0},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[-4,0.08,-6.91],"rotation":0},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[-2,0.08,-6.91],"rotation":0},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[0,0.08,-6.91],"rotation":0},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[2,0.08,-6.91],"rotation":0},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[4,0.08,-6.91],"rotation":0},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[6,0.08,-6.91],"rotation":0},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[-6.91,0.08,-4],"rotation":90},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[-6.91,0.08,-2],"rotation":90},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[-6.91,0.08,0],"rotation":90},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[-6.91,0.08,2],"rotation":90},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[-6.91,0.08,4],"rotation":90},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[6.91,0.08,-4],"rotation":270},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[6.91,0.08,-2],"rotation":270},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-d-c5e2325c","position":[6.91,0.08,0],"rotation":270},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[6.91,0.08,2],"rotation":270},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[6.91,0.08,4],"rotation":270},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[8,0.08,-4.91],"rotation":0},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[10,0.08,-4.91],"rotation":0},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[12,0.08,-4.91],"rotation":0},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[12.91,0.08,-2],"rotation":270},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[12.91,0.08,0],"rotation":270},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[12.91,0.08,2],"rotation":270},{"asset":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","position":[12.91,0.08,4],"rotation":270},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","position":[-3,0.08,-4.5],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","position":[-1,0.08,-4.5],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","position":[1,0.08,-4.5],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","position":[3,0.08,-4.5],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-03b988a7","position":[-3,0.53,-5.4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-03b988a7","position":[-1,0.53,-5.4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-03b988a7","position":[1,0.53,-5.4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-03b988a7","position":[3,0.53,-5.4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","position":[-3,0.98,-6.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","position":[-1,0.98,-6.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","position":[1,0.98,-6.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","position":[3,0.98,-6.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-rai-2668c79c","position":[-3,0.08,-4.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-rai-2668c79c","position":[-1,0.08,-4.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-rai-2668c79c","position":[1,0.08,-4.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-viewing-gallery-rai-2668c79c","position":[3,0.08,-4.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-lane-rope-strung-d20676f9","position":[0,-0.2,-1],"rotation":0},{"asset":"public-swimming-baths-and-poolside-lane-rope-strung-d20676f9","position":[0,-0.2,1],"rotation":0},{"asset":"public-swimming-baths-and-poolside-backstroke-flag-lin-ba2b77d6","position":[-3,0.08,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-backstroke-flag-lin-ba2b77d6","position":[3,0.08,0],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-ladder-42e7fe09","position":[-2,-2,-2.8],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-ladder-42e7fe09","position":[2,-2,2.8],"rotation":180},{"asset":"public-swimming-baths-and-poolside-shallow-end-steps-b47cb87d","position":[4.2,-2,0],"rotation":270},{"asset":"public-swimming-baths-and-poolside-swimming-starting-b-8a40c804","position":[-6,0.08,-2],"rotation":90},{"asset":"public-swimming-baths-and-poolside-swimming-starting-b-8a40c804","position":[-5.9,0.08,0],"rotation":90},{"asset":"public-swimming-baths-and-poolside-poolside-diving-boa-7d186213","position":[-5.2,0.08,2],"rotation":90},{"asset":"public-swimming-baths-and-poolside-poolside-pace-clock-d475f331","position":[-5.86,0.08,-4.64],"rotation":90},{"asset":"public-swimming-baths-and-poolside-rescue-tube-and-pol-ae3b7c1a","position":[-6.5,0.08,0.41],"rotation":90},{"asset":"public-swimming-baths-and-poolside-poolside-first-aid--77ab8f2f","position":[-6.5,0.08,-1.2],"rotation":90},{"asset":"public-swimming-baths-and-poolside-poolside-hose-reel-a4cb24e6","position":[-6.4,0.08,-5.6],"rotation":90},{"asset":"public-swimming-baths-and-poolside-poolside-planter-577b46bb","position":[-5.9,0.08,4.4],"rotation":0},{"asset":"public-swimming-baths-and-poolside-lifeguard-high-chai-56aab62b","position":[-6,0.08,-3.8],"rotation":0},{"asset":"public-swimming-baths-and-poolside-lane-marker-board-4f2f1a7e","position":[6.15,0.08,-3.74],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-shower-pos-5d90b871","position":[5.82,0.08,-4.17],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-planter-577b46bb","position":[6.5,0.08,-3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-foyer-bin-7c56238f","position":[6.5,0.08,-4.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-pool-cover-reel-6fa320e8","position":[-4,0.08,5.6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-handrail-7d35b2f7","position":[5.9,0.08,-1.4],"rotation":270},{"asset":"public-swimming-baths-and-poolside-poolside-handrail-7d35b2f7","position":[5.9,0.08,1.4],"rotation":270},{"asset":"public-swimming-baths-and-poolside-poolside-bench-dd3c4911","position":[-4,0.08,4.3],"rotation":180},{"asset":"public-swimming-baths-and-poolside-poolside-bench-dd3c4911","position":[-1.5,0.08,4.3],"rotation":180},{"asset":"public-swimming-baths-and-poolside-poolside-bench-dd3c4911","position":[2,0.08,5.6],"rotation":180},{"asset":"public-swimming-baths-and-poolside-lifeguard-low-chair-f976fc78","position":[0.5,0.08,4.1],"rotation":180},{"asset":"public-swimming-baths-and-poolside-float-and-kickboard-9a985099","position":[-2.28,0.08,3.7],"rotation":0},{"asset":"public-swimming-baths-and-poolside-wet-floor-sign-775645f0","position":[-4.75,0.08,3.83],"rotation":0},{"asset":"public-swimming-baths-and-poolside-towels-and-kit-bag-3aca404e","position":[-3.99,0.08,3.57],"rotation":22.92},{"asset":"public-swimming-baths-and-poolside-baths-reception-des-9358a32f","position":[4.6,0.08,4],"rotation":180},{"asset":"public-swimming-baths-and-poolside-entrance-turnstile-d81fae1c","position":[2.2,0.08,4.3],"rotation":180},{"asset":"public-swimming-baths-and-poolside-poolside-vending-ma-b10205eb","position":[5,0.08,5.6],"rotation":180},{"asset":"public-swimming-baths-and-poolside-swimming-trophy-cab-1c59bfc0","position":[6.4,0.08,2.6],"rotation":270},{"asset":"public-swimming-baths-and-poolside-session-times-notic-6ebfdd89","position":[6.4,0.08,0.6],"rotation":270},{"asset":"public-swimming-baths-and-poolside-poolside-fire-point-cb332e09","position":[6.5,0.08,-1.6],"rotation":270},{"asset":"public-swimming-baths-and-poolside-foyer-bin-7c56238f","position":[6.3,0.08,4.5],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-cubicle-mo-b6122d28","position":[7.6,0.08,-4.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-cubicle-mo-b6122d28","position":[8.8,0.08,-4.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-cubicle-mo-b6122d28","position":[10,0.08,-4.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-family-changing-cub-e3c4b43d","position":[11.4,0.08,-4.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-cubicle-mo-b6122d28","position":[12.22,0.08,0.6],"rotation":270},{"asset":"public-swimming-baths-and-poolside-changing-cubicle-mo-b6122d28","position":[12.22,0.08,1.8],"rotation":270},{"asset":"public-swimming-baths-and-poolside-changing-cubicle-mo-b6122d28","position":[12.22,0.08,3],"rotation":270},{"asset":"public-swimming-baths-and-poolside-footbath-channel-36c43e54","position":[8,0.08,1],"rotation":90},{"asset":"public-swimming-baths-and-poolside-footbath-channel-36c43e54","position":[8,0.08,-1],"rotation":90},{"asset":"public-swimming-baths-and-poolside-changing-locker-ban-65af1b68","position":[7.8,0.08,-2.6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-locker-ban-3c6a2645","position":[9,0.08,-2.6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-locker-ban-65af1b68","position":[10.2,0.08,-2.6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-locker-ban-65af1b68","position":[11.4,0.08,-2.6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-changing-bench-with-be640ddc","position":[9.8,0.08,-0.6],"rotation":180},{"asset":"public-swimming-baths-and-poolside-changing-bench-with-be640ddc","position":[10.6,0.08,1.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-shower-pos-5d90b871","position":[7.7,0.08,3.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-shower-pos-5d90b871","position":[7.7,0.08,4.3],"rotation":0},{"asset":"public-swimming-baths-and-poolside-basin-and-mirror-ru-52dfe6bb","position":[12.3,0.08,-1.4],"rotation":270},{"asset":"public-swimming-baths-and-poolside-drying-area-bench-b9ef99fc","position":[10.8,0.08,3.6],"rotation":180},{"asset":"public-swimming-baths-and-poolside-hairdryer-point-906afc19","position":[10.4,0.08,4.5],"rotation":180},{"asset":"public-swimming-baths-and-poolside-hairdryer-point-906afc19","position":[12.5,0.08,-4.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-towels-and-kit-bag-3aca404e","position":[10.6,0.08,-1.4],"rotation":34.38},{"asset":"public-swimming-baths-and-poolside-towels-and-kit-bag-3aca404e","position":[8.6,0.08,-3.2],"rotation":342.81},{"asset":"public-swimming-baths-and-poolside-cleaning-trolley-1292ff9b","position":[12.2,0.08,4.4],"rotation":270},{"asset":"public-swimming-baths-and-poolside-wet-floor-sign-775645f0","position":[9,0.08,1.2],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-planter-577b46bb","position":[11.2,0.08,4.5],"rotation":0},{"asset":"public-swimming-baths-and-poolside-lane-rope-on-reel-0d6b9d23","position":[-6.3,0.08,3.4],"rotation":90},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-6,0,6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-4,0,6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[-2,0,6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[0,0,6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[2,0,6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[4,0,6],"rotation":0},{"asset":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","position":[6,0,6],"rotation":0}],"points":[{"position":[0,0.1,3.8],"title":"The lane pool","text":"Six panels of still water in a tiled tank, divided by strung lane ropes and crossed by the backstroke flag lines. The scum channel runs the whole perimeter at deck level.","asset":"public-swimming-baths-and-poolside-lane-rope-strung-d20676f9"},{"position":[-5.6,0.1,-1],"title":"Deep end and shallow end","text":"Starting blocks stand over the deep end behind you, and the tank ramps up to the shallow end steps at the far end. Two ladders drop into the tank on the long sides.","asset":"public-swimming-baths-and-poolside-swimming-starting-b-8a40c804"},{"position":[-5.9,0.1,-2.6],"title":"Lifeguard cover","text":"The high chair watches the deep end with a low chair on the far side. Rescue tubes and a reaching pole sit on the wall rack beside the first aid station and the fire point.","asset":"public-swimming-baths-and-poolside-lifeguard-high-chai-56aab62b"},{"position":[-2.8,0.1,3.6],"title":"Session kit","text":"The float trolley rolls its kickboards out for a lesson, and the pace clock at the deep end sweeps a second hand for the swimmers counting intervals.","asset":"public-swimming-baths-and-poolside-float-and-kickboard-9a985099"},{"position":[9.5,0.1,0],"title":"The changing village","text":"Through the doorway: cubicle modules with swinging doors, locker banks with one door hanging open, a footbath channel, basins, hairdryer points and the drying area bench.","asset":"public-swimming-baths-and-poolside-changing-cubicle-mo-b6122d28"},{"position":[0,0.1,-4],"title":"The viewing gallery","text":"Tiered seating behind a rail looks down the length of the pool, with a band of red seats in the middle row for the club galas.","asset":"public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78"}],"poster":{"position":[5.8,1.6,0],"lookAt":[-0.2,1.2,0]}},"bounds":{"min":[-9.000115943841983,-2.000042765651394,-9.000090637586556],"max":[15.000115943841983,5.679999904632568,9]},"assets":[{"id":"35233","slug":"public-swimming-baths-and-poolside-pool-tank-floor-til-a32450cc","title":"Pool Tank Floor Tile with Lane Target (Public Swimming Baths and Poolside)","summary":"The same 2 m tank floor tile carrying the cross bar that ends a lane line, the mark a swimmer reads as the wall coming up. Same ports as the plain and lined tiles.","description":"The same 2 m tank floor tile carrying the cross bar that ends a lane line, the mark a swimmer reads as the wall coming up. Same ports as the plain and lined tiles. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-pool-tank-floor-til-a32450cc","cdnUrl":"https://cdn.3dassets.dev/assets/35233/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-pool-tank-floor-til-a32450cc","thumbnailUrl":"https://cdn.3dassets.dev/assets/35233/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35233/v1/poster.webp","blurhash":"U8C%Kt-;00Ri%Nj[Rjj[00IU_NWXDij[t7R%","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":21816,"triangles":420,"vertices":973,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.000030213994933490917,-1],"max":[1,0.06701372043603482,1]},"sizeMeters":[2,0.067,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:27:56.231Z","updatedAt":"2026-09-11T12:27:56.479Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35233/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolTankFloorTileWithLaneTargetPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35233/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35233/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35233/v1/model.glb\" alt=\"Pool Tank Floor Tile with Lane Target (Public Swimming Baths and Poolside)\" 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/35233/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/35233/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35237","slug":"public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","title":"Still Pool Water Surface Panel (Public Swimming Baths and Poolside)","summary":"A 2 m square still water surface panel: a flat translucent blue slab, 30 mm thick, that tiles across a pool tank at whatever level the scene sets. This library has no water simulation: the surface is static geometry, and ripples, splashes and swimmers are for the consumer to add.","description":"A 2 m square still water surface panel: a flat translucent blue slab, 30 mm thick, that tiles across a pool tank at whatever level the scene sets. This library has no water simulation: the surface is static geometry, and ripples, splashes and swimmers are for the consumer to add. Ports sit at the four edge midpoints at half the panel thickness, so panels tile into one another over a tank of any size. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","cdnUrl":"https://cdn.3dassets.dev/assets/35237/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-pool-water-surface--d9ce634f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35237/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35237/v1/poster.webp","blurhash":"U86JLGpJD4f7o~jsV[kB00VrysaeQ,a~oyaL","category":{"slug":"effects-primitives","title":"Effects & Primitives"},"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":3876,"triangles":64,"vertices":142,"meshes":1,"materials":1,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.000015106997466745459,-1],"max":[1,0.030015106326914492,1]},"sizeMeters":[2,0.03,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:27:58.096Z","updatedAt":"2026-09-11T12:27:58.234Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35237/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StillPoolWaterSurfacePanelPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35237/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35237/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35237/v1/model.glb\" alt=\"Still Pool Water Surface Panel (Public Swimming Baths and Poolside)\" 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/35237/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/35237/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35236","slug":"public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","title":"Pool Tank Floor Tile with Lane Line (Public Swimming Baths and Poolside)","summary":"The same 2 m tank floor tile with a dark lane line painted down the middle of it, which is what runs the length of every swimming lane. Same ports, so a lane line tiles into a plain floor.","description":"The same 2 m tank floor tile with a dark lane line painted down the middle of it, which is what runs the length of every swimming lane. Same ports, so a lane line tiles into a plain floor. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","cdnUrl":"https://cdn.3dassets.dev/assets/35236/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-pool-tank-floor-til-3923f565","thumbnailUrl":"https://cdn.3dassets.dev/assets/35236/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35236/v1/poster.webp","blurhash":"U8C?$L-;00Ri%Mj[Rjj[00IU~qazD$j[t6Rj","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":21188,"triangles":408,"vertices":945,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.000030213994933490917,-1],"max":[1,0.06696489080923133,1]},"sizeMeters":[2,0.067,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:27:56.462Z","updatedAt":"2026-09-11T12:27:56.609Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35236/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolTankFloorTileWithLaneLinePublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35236/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35236/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35236/v1/model.glb\" alt=\"Pool Tank Floor Tile with Lane Line (Public Swimming Baths and Poolside)\" 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/35236/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/35236/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35238","slug":"public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","title":"Poolside Deck Tile (Public Swimming Baths and Poolside)","summary":"A 2 m poolside deck tile: a slip resistant grey base laid with sixteen pale non slip ceramic tiles and a scatter of white ones. It carries deck ports on all four edges, so a surround, a wet corridor and a changing room floor all tile off the same grid.","description":"A 2 m poolside deck tile: a slip resistant grey base laid with sixteen pale non slip ceramic tiles and a scatter of white ones. It carries deck ports on all four edges, so a surround, a wet corridor and a changing room floor all tile off the same grid. Ports sit at the four edge midpoints at half the tile thickness. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","cdnUrl":"https://cdn.3dassets.dev/assets/35238/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-deck-tile-311f13d9","thumbnailUrl":"https://cdn.3dassets.dev/assets/35238/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35238/v1/poster.webp","blurhash":"UBDcgu-:00M|xvoJWAWY00IV~qj@IASOofn#","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":16396,"triangles":300,"vertices":693,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.00004028532657798789,-1],"max":[1,0.08894148096669603,1]},"sizeMeters":[2,0.089,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:27:58.117Z","updatedAt":"2026-09-11T12:27:58.248Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35238/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolsideDeckTilePublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35238/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35238/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35238/v1/model.glb\" alt=\"Poolside Deck Tile (Public Swimming Baths and Poolside)\" 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/35238/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/35238/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35239","slug":"public-swimming-baths-and-poolside-poolside-deck-tile--842d9f27","title":"Poolside Deck Tile with Depth Marker (Public Swimming Baths and Poolside)","summary":"The same 2 m deck tile with a blue depth marker panel inlaid at the pool edge and a yellow warning band behind it. The figures are abstract raised bars rather than readable numerals, so the tile suits any depth a scene gives it.","description":"The same 2 m deck tile with a blue depth marker panel inlaid at the pool edge and a yellow warning band behind it. The figures are abstract raised bars rather than readable numerals, so the tile suits any depth a scene gives it. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-deck-tile--842d9f27","cdnUrl":"https://cdn.3dassets.dev/assets/35239/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-deck-tile--842d9f27","thumbnailUrl":"https://cdn.3dassets.dev/assets/35239/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35239/v1/poster.webp","blurhash":"U9DJbX-:00Vsx]ocWAa$00IV~qR.H?R.ofWT","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":19980,"triangles":360,"vertices":833,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.00004028532657798789,-1],"max":[1,0.09103727649947246,1]},"sizeMeters":[2,0.091,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:27:58.132Z","updatedAt":"2026-09-11T12:27:58.265Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35239/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolsideDeckTileWithDepthMarkerPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35239/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35239/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35239/v1/model.glb\" alt=\"Poolside Deck Tile with Depth Marker (Public Swimming Baths and Poolside)\" 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/35239/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/35239/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35273","slug":"public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","title":"Changing Village Floor Tile (Public Swimming Baths and Poolside)","summary":"A 2 m changing village floor tile: a slip resistant base laid with twenty five small wet area tiles, a scatter of blue ones and a blue skirting line along one edge. It carries the poolside deck ports, so the changing floor tiles straight off the surround.","description":"A 2 m changing village floor tile: a slip resistant base laid with twenty five small wet area tiles, a scatter of blue ones and a blue skirting line along one edge. It carries the poolside deck ports, so the changing floor tiles straight off the surround. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","cdnUrl":"https://cdn.3dassets.dev/assets/35273/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-changing-floor-tile-f82ea010","thumbnailUrl":"https://cdn.3dassets.dev/assets/35273/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35273/v1/poster.webp","blurhash":"UAD9^,-p00NGx]oJV@bI00IV_4j@D$WYozjE","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":20300,"triangles":408,"vertices":945,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.00004028532657798789,-1],"max":[1,0.08901673928323829,1]},"sizeMeters":[2,0.089,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:19.084Z","updatedAt":"2026-09-11T12:28:19.209Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35273/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChangingVillageFloorTilePublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35273/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35273/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35273/v1/model.glb\" alt=\"Changing Village Floor Tile (Public Swimming Baths and Poolside)\" 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/35273/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/35273/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35235","slug":"public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","title":"Pool Tank Wall Section (Public Swimming Baths and Poolside)","summary":"A 2 m tank wall section for a 2 m deep pool tank: a concrete section faced in pale ceramic tiles with blue courses at the water line and the foot, a coved skirting at the tank floor, an inlet grille and two lane rope anchor sockets.","description":"A 2 m tank wall section for a 2 m deep pool tank: a concrete section faced in pale ceramic tiles with blue courses at the water line and the foot, a coved skirting at the tank floor, an inlet grille and two lane rope anchor sockets. Ports tank-left and tank-right sit at the section ends at half the tank depth; the wet face is +Z. Drop it to the tank floor level in the scene. Water is not modelled here. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","cdnUrl":"https://cdn.3dassets.dev/assets/35235/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-pool-tank-wall-sect-566f766a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35235/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35235/v1/poster.webp","blurhash":"UCGIv3-;00IU-;?bWB4n00Rj~qofjZt7bHRP","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":31232,"triangles":634,"vertices":1440,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-1,0,-0.0999786370433668],"max":[1,2.124193238955369,0.11002844199913409]},"sizeMeters":[2,2.124,0.21],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:27:56.227Z","updatedAt":"2026-09-11T12:27:56.340Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35235/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolTankWallSectionPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35235/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35235/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35235/v1/model.glb\" alt=\"Pool Tank Wall Section (Public Swimming Baths and Poolside)\" 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/35235/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/35235/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35240","slug":"public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","title":"Pool Edge Scum Channel Piece (Public Swimming Baths and Poolside)","summary":"A 2 m pool edge scum channel piece: a tiled kerb with a blue nosing band, an open overflow channel under a steel grating on the pool side, and a rounded white lip for a swimmer to hold. It lays along the rim of a tank and pieces butt end to end.","description":"A 2 m pool edge scum channel piece: a tiled kerb with a blue nosing band, an open overflow channel under a steel grating on the pool side, and a rounded white lip for a swimmer to hold. It lays along the rim of a tank and pieces butt end to end. Ports coping-left and coping-right sit at the run ends at half the kerb height, and the pool side is +Z. Sit it on the deck tiles at the tank edge. No water is modelled in the channel. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","cdnUrl":"https://cdn.3dassets.dev/assets/35240/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-pool-edge-channel-p-eee34786","thumbnailUrl":"https://cdn.3dassets.dev/assets/35240/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35240/v1/poster.webp","blurhash":"U8D0P]t700t7tR~qofD$00j[_4WAMx00WC.8","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":25760,"triangles":512,"vertices":1171,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-1.0011999607086182,0.00005524902267059484,-0.3000322995698241],"max":[1,0.14394474477844635,0.3100322900330809]},"sizeMeters":[2.001,0.144,0.61],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:27:58.398Z","updatedAt":"2026-09-11T12:27:58.619Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35240/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolEdgeScumChannelPiecePublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35240/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35240/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35240/v1/model.glb\" alt=\"Pool Edge Scum Channel Piece (Public Swimming Baths and Poolside)\" 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/35240/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/35240/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35241","slug":"public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","title":"Baths Wall Module (Public Swimming Baths and Poolside)","summary":"A 2 m painted blockwork wall module 3.6 m tall for a swimming baths hall: a tiled dado on the wet face with a blue band over it, a glazed clerestory strip high up and a dark capping rail. Modules butt end to end on the 2 m grid.","description":"A 2 m painted blockwork wall module 3.6 m tall for a swimming baths hall: a tiled dado on the wet face with a blue band over it, a glazed clerestory strip high up and a dark capping rail. Modules butt end to end on the 2 m grid. Ports wall-left and wall-right sit at the module ends at mid height, and the wet face is +Z. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","cdnUrl":"https://cdn.3dassets.dev/assets/35241/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-baths-wall-module-2aba7a75","thumbnailUrl":"https://cdn.3dassets.dev/assets/35241/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35241/v1/poster.webp","blurhash":"U7D,G+_N0000-s%NRgDh8wV?%%kYgQtRnLIA","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":17284,"triangles":304,"vertices":702,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-1.0001159438419833,-0.000045318198432516,-0.09009063758655678],"max":[1.0001159438419833,3.5999999046325684,0.10999679473113158]},"sizeMeters":[2,3.6,0.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:00.916Z","updatedAt":"2026-09-11T12:28:01.045Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35241/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BathsWallModulePublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35241/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35241/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35241/v1/model.glb\" alt=\"Baths Wall Module (Public Swimming Baths and Poolside)\" 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/35241/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/35241/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35242","slug":"public-swimming-baths-and-poolside-baths-wall-module-d-c5e2325c","title":"Baths Wall Module with Doorway (Public Swimming Baths and Poolside)","summary":"The same 2 m wall module with a 1.2 m by 2.2 m doorway through it, framed in white jambs and a head, which is how a swimmer passes from the changing village onto the poolside. It carries the same wall ports, so it drops into a run of solid modules. The opening has no door leaf.","description":"The same 2 m wall module with a 1.2 m by 2.2 m doorway through it, framed in white jambs and a head, which is how a swimmer passes from the changing village onto the poolside. It carries the same wall ports, so it drops into a run of solid modules. The opening has no door leaf. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-baths-wall-module-d-c5e2325c","cdnUrl":"https://cdn.3dassets.dev/assets/35242/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-baths-wall-module-d-c5e2325c","thumbnailUrl":"https://cdn.3dassets.dev/assets/35242/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35242/v1/poster.webp","blurhash":"U8Dvs9_30000-?%MM^D$8wV?%%g4kttRekIU","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":24356,"triangles":456,"vertices":1052,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-1.0001159438419833,-0.000045318198432516,-0.09009063758655678],"max":[1.0001159438419833,3.5999999046325684,0.10999679473113158]},"sizeMeters":[2,3.6,0.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:00.012Z","updatedAt":"2026-09-11T12:28:00.191Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35242/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BathsWallModuleWithDoorwayPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35242/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35242/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35242/v1/model.glb\" alt=\"Baths Wall Module with Doorway (Public Swimming Baths and Poolside)\" 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/35242/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/35242/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35279","slug":"public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","title":"Viewing Gallery Seating Tier (Public Swimming Baths and Poolside)","summary":"A 2 m viewing gallery seating tier: a tiled step 450 mm high and 900 mm deep with a yellow nosing and a run of four blue moulded seats on dark steel standards at the front of the tread. Tiers butt along their ends and a row steps back and up by one tier.","description":"A 2 m viewing gallery seating tier: a tiled step 450 mm high and 900 mm deep with a yellow nosing and a run of four blue moulded seats on dark steel standards at the front of the tread. Tiers butt along their ends and a row steps back and up by one tier. Ports tier-left and tier-right sit at the tier ends at half the riser. The next row back sits 900 mm behind and 450 mm higher. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","cdnUrl":"https://cdn.3dassets.dev/assets/35279/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-viewing-gallery-sea-dcdf7e78","thumbnailUrl":"https://cdn.3dassets.dev/assets/35279/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35279/v1/poster.webp","blurhash":"UJEf++%g8wRj0Mx^%0RP00E2XAxC~9s,XUM{","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":45040,"triangles":1010,"vertices":2105,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.00001754218248423145,-0.4499954222235786],"max":[1,1.1946733826569294,0.4499954222235786]},"sizeMeters":[2,1.195,0.9],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:22.667Z","updatedAt":"2026-09-11T12:28:22.769Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35279/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ViewingGallerySeatingTierPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35279/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35279/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35279/v1/model.glb\" alt=\"Viewing Gallery Seating Tier (Public Swimming Baths and Poolside)\" 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/35279/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/35279/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35280","slug":"public-swimming-baths-and-poolside-viewing-gallery-sea-03b988a7","title":"Viewing Gallery Seating Tier, Red (Public Swimming Baths and Poolside)","summary":"The same gallery tier with red seats, for banding a terrace in alternating rows. Same tier ports as the blue one.","description":"The same gallery tier with red seats, for banding a terrace in alternating rows. Same tier ports as the blue one. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-viewing-gallery-sea-03b988a7","cdnUrl":"https://cdn.3dassets.dev/assets/35280/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-viewing-gallery-sea-03b988a7","thumbnailUrl":"https://cdn.3dassets.dev/assets/35280/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35280/v1/poster.webp","blurhash":"UHHnT,?G0LRjL#=|pII:00Md#mTJdBX8#;M{","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":45096,"triangles":1010,"vertices":2105,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.00001754218248423145,-0.4499954222235786],"max":[1,1.1946733826569294,0.4499954222235786]},"sizeMeters":[2,1.195,0.9],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:22.894Z","updatedAt":"2026-09-11T12:28:23.016Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35280/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ViewingGallerySeatingTierRedPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35280/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35280/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35280/v1/model.glb\" alt=\"Viewing Gallery Seating Tier, Red (Public Swimming Baths and Poolside)\" 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/35280/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/35280/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35281","slug":"public-swimming-baths-and-poolside-viewing-gallery-rai-2668c79c","title":"Viewing Gallery Rail (Public Swimming Baths and Poolside)","summary":"A 2 m viewing gallery rail 1.1 m high: chrome posts on flat feet, a top rail and a mid rail, and a toughened glass infill panel with a blue band and a yellow kick band on it. Static geometry.","description":"A 2 m viewing gallery rail 1.1 m high: chrome posts on flat feet, a top rail and a mid rail, and a toughened glass infill panel with a blue band and a yellow kick band on it. Static geometry. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-viewing-gallery-rai-2668c79c","cdnUrl":"https://cdn.3dassets.dev/assets/35281/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-viewing-gallery-rai-2668c79c","thumbnailUrl":"https://cdn.3dassets.dev/assets/35281/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35281/v1/poster.webp","blurhash":"UDCZhSt700j[_4-;D$Dj00t8?cIT4Toc?cR-","category":{"slug":"buildings","title":"Buildings & Architecture"},"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":18488,"triangles":368,"vertices":821,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.00004308164496258371,-0.10998870815149388],"max":[1,1.420041171460002,0.10998870815149388]},"sizeMeters":[2,1.42,0.22],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:24.001Z","updatedAt":"2026-09-11T12:28:24.128Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35281/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ViewingGalleryRailPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35281/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35281/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35281/v1/model.glb\" alt=\"Viewing Gallery Rail (Public Swimming Baths and Poolside)\" 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/35281/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/35281/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35243","slug":"public-swimming-baths-and-poolside-lane-rope-strung-d20676f9","title":"Strung Lane Rope, 10 m (Public Swimming Baths and Poolside)","summary":"A 10 m lane rope strung across a pool, ready to sit at the water line: a stainless cable threaded with 60 mm floating discs in blocks of blue, white and red, with a tensioner and an anchor eye at each end. It is a flexible run, modelled in one pose and never animated.","description":"A 10 m lane rope strung across a pool, ready to sit at the water line: a stainless cable threaded with 60 mm floating discs in blocks of blue, white and red, with a tensioner and an anchor eye at each end. It is a flexible run, modelled in one pose and never animated. Set it at the water surface level in the scene: the cable runs through the middle of the discs. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-lane-rope-strung-d20676f9","cdnUrl":"https://cdn.3dassets.dev/assets/35243/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-lane-rope-strung-d20676f9","thumbnailUrl":"https://cdn.3dassets.dev/assets/35243/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35243/v1/poster.webp","blurhash":"U47dkBPADhrtk=^+X9In00w1_4OqZh00xD^,","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":135464,"triangles":4928,"vertices":10160,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-5.19039249420166,-0.00009399368050668627,-0.06022620310981153],"max":[5.19039249420166,0.12409399165394877,0.06022620310981153]},"sizeMeters":[10.381,0.124,0.12],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:01.352Z","updatedAt":"2026-09-11T12:28:01.511Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35243/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StrungLaneRope10MPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35243/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35243/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35243/v1/model.glb\" alt=\"Strung Lane Rope, 10 m (Public Swimming Baths and Poolside)\" 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/35243/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/35243/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35246","slug":"public-swimming-baths-and-poolside-backstroke-flag-lin-ba2b77d6","title":"Backstroke Flag Line (Public Swimming Baths and Poolside)","summary":"A backstroke flag line: two chrome poles 2.15 m tall on cast socket plates 7.6 m apart, a white cord between them and twenty two red, yellow, blue and green pennants hanging from it. The cord and pennants are a flexible run, modelled in one still pose and never animated.","description":"A backstroke flag line: two chrome poles 2.15 m tall on cast socket plates 7.6 m apart, a white cord between them and twenty two red, yellow, blue and green pennants hanging from it. The cord and pennants are a flexible run, modelled in one still pose and never animated. Stand the two plates on the deck either side of the tank, five metres back from the wall. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-backstroke-flag-lin-ba2b77d6","cdnUrl":"https://cdn.3dassets.dev/assets/35246/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-backstroke-flag-lin-ba2b77d6","thumbnailUrl":"https://cdn.3dassets.dev/assets/35246/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35246/v1/poster.webp","blurhash":"U58|-H%gjr%0~V01Die-004:%N%h00^*_3R:","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":94604,"triangles":2504,"vertices":5247,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.170106510823962,-0.00003917634834604833,-3.9700000286102295],"max":[0.170106510823962,2.189760244952809,3.9700000286102295]},"sizeMeters":[0.34,2.19,7.94],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:02.525Z","updatedAt":"2026-09-11T12:28:02.653Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35246/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BackstrokeFlagLinePublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35246/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35246/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35246/v1/model.glb\" alt=\"Backstroke Flag Line (Public Swimming Baths and Poolside)\" 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/35246/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/35246/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35247","slug":"public-swimming-baths-and-poolside-pool-ladder-42e7fe09","title":"Pool Ladder (Public Swimming Baths and Poolside)","summary":"A stainless pool ladder 2.34 m tall: two tubular stiles on foot pads that stand on the tank floor, four yellow treaded steps, and the stiles bent over at the top into grab rails that reach across the pool edge. Static geometry.","description":"A stainless pool ladder 2.34 m tall: two tubular stiles on foot pads that stand on the tank floor, four yellow treaded steps, and the stiles bent over at the top into grab rails that reach across the pool edge. Static geometry. Set it on the tank floor with its back against the tank wall; the grab rails then stand about 340 mm proud of the deck. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-pool-ladder-42e7fe09","cdnUrl":"https://cdn.3dassets.dev/assets/35247/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-pool-ladder-42e7fe09","thumbnailUrl":"https://cdn.3dassets.dev/assets/35247/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35247/v1/poster.webp","blurhash":"U471isbD00oOkYogaIRi04WF~Tt1xZoLRkWB","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":29436,"triangles":608,"vertices":1486,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.2999745282312772,0,-0.19802901227583464],"max":[0.2999745282312772,2.362520217895508,0.26428000707735594]},"sizeMeters":[0.6,2.363,0.462],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:03.885Z","updatedAt":"2026-09-11T12:28:03.983Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35247/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolLadderPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35247/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35247/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35247/v1/model.glb\" alt=\"Pool Ladder (Public Swimming Baths and Poolside)\" 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/35247/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/35247/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35248","slug":"public-swimming-baths-and-poolside-shallow-end-steps-b47cb87d","title":"Shallow End Steps (Public Swimming Baths and Poolside)","summary":"A tiled shallow end stair into a 2 m pool tank: four 500 mm steps 2.4 m wide, each tread tiled with a blue nosing, and a chrome grab rail rising out of the water on both sides. It stands on the tank floor and its top step finishes level with the deck.","description":"A tiled shallow end stair into a 2 m pool tank: four 500 mm steps 2.4 m wide, each tread tiled with a blue nosing, and a chrome grab rail rising out of the water on both sides. It stands on the tank floor and its top step finishes level with the deck. Drop it to the tank floor level with the top step against the tank wall; the steps descend toward +Z, into the water. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-shallow-end-steps-b47cb87d","cdnUrl":"https://cdn.3dassets.dev/assets/35248/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-shallow-end-steps-b47cb87d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35248/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35248/v1/poster.webp","blurhash":"U7G9Ec-;00D%00Rjt8My00M{_Noft6?b.8WA","category":{"slug":"buildings","title":"Buildings & Architecture"},"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":54952,"triangles":1152,"vertices":2724,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-1.2000000476837158,-0.00004276565139393895,-0.8000488614062459],"max":[1.2000000476837158,2.5438955195552135,0.8000488614062459]},"sizeMeters":[2.4,2.544,1.6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:03.335Z","updatedAt":"2026-09-11T12:28:03.490Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35248/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShallowEndStepsPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35248/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35248/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35248/v1/model.glb\" alt=\"Shallow End Steps (Public Swimming Baths and Poolside)\" 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/35248/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/35248/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35245","slug":"public-swimming-baths-and-poolside-swimming-starting-b-8a40c804","title":"Swimming Starting Block (Public Swimming Baths and Poolside)","summary":"A swimming starting block 680 mm tall on a cast socket plate: a white pedestal, a blue non slip top tilted toward the water with a yellow lane patch, an adjustable rear wedge foot plate and a chrome grab bar at the front edge. Nothing on it moves.","description":"A swimming starting block 680 mm tall on a cast socket plate: a white pedestal, a blue non slip top tilted toward the water with a yellow lane patch, an adjustable rear wedge foot plate and a chrome grab bar at the front edge. Nothing on it moves. Stand it on the deck at the end of a lane with the tilted top facing the water. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-swimming-starting-b-8a40c804","cdnUrl":"https://cdn.3dassets.dev/assets/35245/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-swimming-starting-b-8a40c804","thumbnailUrl":"https://cdn.3dassets.dev/assets/35245/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35245/v1/poster.webp","blurhash":"UAE3e$%N00E05uWY-5t600a$~poc~As;9aRi","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":24140,"triangles":464,"vertices":1046,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.30998341871103935,0,-0.3149567108413629],"max":[0.30998341871103935,0.7643903756378503,0.325065382620575]},"sizeMeters":[0.62,0.764,0.64],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:01.887Z","updatedAt":"2026-09-11T12:28:02.021Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35245/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SwimmingStartingBlockPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35245/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35245/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35245/v1/model.glb\" alt=\"Swimming Starting Block (Public Swimming Baths and Poolside)\" 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/35245/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/35245/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35249","slug":"public-swimming-baths-and-poolside-poolside-diving-boa-7d186213","title":"Poolside Diving Board and Stand (Public Swimming Baths and Poolside)","summary":"A low poolside diving board: a 3 m white plank with a blue non slip strip and a yellow tip band, on a chrome fulcrum roller over a braced stand and a cast socket plate. A real board flexes along its length, which one rigid node cannot do, so the plank tips at its fulcrum instead.","description":"A low poolside diving board: a 3 m white plank with a blue non slip strip and a yellow tip band, on a chrome fulcrum roller over a braced stand and a cast socket plate. A real board flexes along its length, which one rigid node cannot do, so the plank tips at its fulcrum instead. Stand it on the deck with the plank projecting over the water, and over a tank deeper than the 2 m sections in this pack if a scene needs a real diving pit. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Named pivoted nodes: board-plank. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-diving-boa-7d186213","cdnUrl":"https://cdn.3dassets.dev/assets/35249/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-diving-boa-7d186213","thumbnailUrl":"https://cdn.3dassets.dev/assets/35249/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35249/v1/poster.webp","blurhash":"UF9toyI.R3%2?wIUROxb4TMxkDkXDNnh%ho}","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":23024,"triangles":424,"vertices":996,"meshes":5,"materials":5,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.45000169453420236,0,-1.5100068241911702],"max":[0.45000169453420236,1.1529673951084873,1.601186204620919]},"sizeMeters":[0.9,1.153,3.111],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:04.012Z","updatedAt":"2026-09-11T12:28:04.148Z","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/35249/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 PoolsideDivingBoardAndStandPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35249/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/35249/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35249/v1/model.glb\" alt=\"Poolside Diving Board and Stand (Public Swimming Baths and Poolside)\" 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/35249/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/35249/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35258","slug":"public-swimming-baths-and-poolside-poolside-pace-clock-d475f331","title":"Poolside Pace Clock (Public Swimming Baths and Poolside)","summary":"A poolside pace clock on a chrome post and a weighted plate: a 700 mm dial with a white face, twelve marks in the four pace colours and a single long red sweep hand. The hand is a named node and spins; there is no minute hand, as on a real pace clock.","description":"A poolside pace clock on a chrome post and a weighted plate: a 700 mm dial with a white face, twelve marks in the four pace colours and a single long red sweep hand. The hand is a named node and spins; there is no minute hand, as on a real pace clock. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Named pivoted nodes: clock-hand. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-pace-clock-d475f331","cdnUrl":"https://cdn.3dassets.dev/assets/35258/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-pace-clock-d475f331","thumbnailUrl":"https://cdn.3dassets.dev/assets/35258/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35258/v1/poster.webp","blurhash":"U78z.I-;0000~pxt4.IVD*Rk%Mxu00M{~q-;","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":37092,"triangles":760,"vertices":1544,"meshes":9,"materials":7,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.3699745248114,0,-0.20799999284744264],"max":[0.3699745248114,1.590000033378601,0.2000419671499766]},"sizeMeters":[0.74,1.59,0.408],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:10.355Z","updatedAt":"2026-09-11T12:28:10.455Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35258/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 PoolsidePaceClockPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35258/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/35258/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35258/v1/model.glb\" alt=\"Poolside Pace Clock (Public Swimming Baths and Poolside)\" 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/35258/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/35258/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35253","slug":"public-swimming-baths-and-poolside-rescue-tube-and-pol-ae3b7c1a","title":"Rescue Tube and Reaching Pole Rack (Public Swimming Baths and Poolside)","summary":"A poolside rescue kit rack: a dark steel frame on a weighted base holding a red and a yellow rescue tube on brackets, a reaching pole with a red hook across the top rail, a coiled throw line and a yellow spine board strapped to the back. Static geometry.","description":"A poolside rescue kit rack: a dark steel frame on a weighted base holding a red and a yellow rescue tube on brackets, a reaching pole with a red hook across the top rail, a coiled throw line and a yellow spine board strapped to the back. Static geometry. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-rescue-tube-and-pol-ae3b7c1a","cdnUrl":"https://cdn.3dassets.dev/assets/35253/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-rescue-tube-and-pol-ae3b7c1a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35253/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35253/v1/poster.webp","blurhash":"U8AJs9T000rq=^S4Iuw]0Ns.~SR+0$-V?EE2","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":48144,"triangles":1084,"vertices":2365,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1.0499999523162842,0,-0.23600034767707084],"max":[1.1699999570846558,2.0099835746124657,0.19993285677032607]},"sizeMeters":[2.22,2.01,0.436],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:07.019Z","updatedAt":"2026-09-11T12:28:07.123Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35253/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function RescueTubeAndReachingPoleRackPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35253/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35253/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35253/v1/model.glb\" alt=\"Rescue Tube and Reaching Pole Rack (Public Swimming Baths and Poolside)\" 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/35253/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/35253/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35254","slug":"public-swimming-baths-and-poolside-poolside-first-aid--77ab8f2f","title":"Poolside First Aid Station (Public Swimming Baths and Poolside)","summary":"A free standing poolside first aid station: a green cabinet with a white cross and a cam lock on twin chrome posts, a yellow glazed defibrillator cabinet under it, a weighted base plate and a red emergency call button. Both cabinet doors are modelled shut and do not open.","description":"A free standing poolside first aid station: a green cabinet with a white cross and a cam lock on twin chrome posts, a yellow glazed defibrillator cabinet under it, a weighted base plate and a red emergency call button. Both cabinet doors are modelled shut and do not open. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-first-aid--77ab8f2f","cdnUrl":"https://cdn.3dassets.dev/assets/35254/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-first-aid--77ab8f2f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35254/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35254/v1/poster.webp","blurhash":"UA8hRGx[009Gy;oyM0R6ETW=-Nr=VZWCgNs.","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":29224,"triangles":560,"vertices":1253,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.26000424602424843,0.00001037584618700238,-0.2000106814783166],"max":[0.26000424602424843,1.5399999618530273,0.2000106814783166]},"sizeMeters":[0.52,1.54,0.4],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:07.491Z","updatedAt":"2026-09-11T12:28:07.623Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35254/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolsideFirstAidStationPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35254/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35254/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35254/v1/model.glb\" alt=\"Poolside First Aid Station (Public Swimming Baths and Poolside)\" 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/35254/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/35254/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35260","slug":"public-swimming-baths-and-poolside-poolside-hose-reel-a4cb24e6","title":"Poolside Hose Reel (Public Swimming Baths and Poolside)","summary":"A poolside wash down hose reel on its bracket: a blue cheeked drum wound with green hose, a cranked yellow handle, and the last loop of hose and a chrome lance run out onto the deck. The drum is a named node and spins; the run out hose stays still.","description":"A poolside wash down hose reel on its bracket: a blue cheeked drum wound with green hose, a cranked yellow handle, and the last loop of hose and a chrome lance run out onto the deck. The drum is a named node and spins; the run out hose stays still. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Named pivoted nodes: hose-drum. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-hose-reel-a4cb24e6","cdnUrl":"https://cdn.3dassets.dev/assets/35260/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-hose-reel-a4cb24e6","thumbnailUrl":"https://cdn.3dassets.dev/assets/35260/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35260/v1/poster.webp","blurhash":"U87LZNpb00pIH@MerZs,D4s:yZR6cWyWt+S5","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":40464,"triangles":852,"vertices":1810,"meshes":7,"materials":5,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.75,-0.00001301476682158409,-0.4787999939918518],"max":[0.3779979847800418,0.8700000047683716,0.22091363286378674]},"sizeMeters":[1.128,0.87,0.7],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:11.968Z","updatedAt":"2026-09-11T12:28:12.106Z","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/35260/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 PoolsideHoseReelPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35260/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/35260/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35260/v1/model.glb\" alt=\"Poolside Hose Reel (Public Swimming Baths and Poolside)\" 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/35260/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/35260/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35261","slug":"public-swimming-baths-and-poolside-poolside-planter-577b46bb","title":"Poolside Planter (Public Swimming Baths and Poolside)","summary":"A 560 mm square white poolside planter with a blue capping rim, filled with a dense evergreen shrub and a few longer blades standing out of it. The foliage is modelled geometry, not a card, and does not move.","description":"A 560 mm square white poolside planter with a blue capping rim, filled with a dense evergreen shrub and a few longer blades standing out of it. The foliage is modelled geometry, not a card, and does not move. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-planter-577b46bb","cdnUrl":"https://cdn.3dassets.dev/assets/35261/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-planter-577b46bb","thumbnailUrl":"https://cdn.3dassets.dev/assets/35261/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35261/v1/poster.webp","blurhash":"UEC7c,%g00Dj0dWn=#nlDNV@tlkC~Dt7EKRj","category":{"slug":"nature","title":"Nature & Landscape"},"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":65064,"triangles":1328,"vertices":3369,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.31636603901301275,0,-0.30000001192092896],"max":[0.337020002102002,1.1964634656906128,0.30277348535885346]},"sizeMeters":[0.653,1.196,0.603],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:11.227Z","updatedAt":"2026-09-11T12:28:11.342Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35261/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolsidePlanterPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35261/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35261/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35261/v1/model.glb\" alt=\"Poolside Planter (Public Swimming Baths and Poolside)\" 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/35261/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/35261/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35251","slug":"public-swimming-baths-and-poolside-lifeguard-high-chai-56aab62b","title":"Lifeguard High Chair (Public Swimming Baths and Poolside)","summary":"A poolside lifeguard high chair: a splayed chrome frame on four foot pads with a yellow climbing ladder up the back, a red moulded seat and back at 1.55 m, side rails and a yellow sunshade board over it. Static geometry.","description":"A poolside lifeguard high chair: a splayed chrome frame on four foot pads with a yellow climbing ladder up the back, a red moulded seat and back at 1.55 m, side rails and a yellow sunshade board over it. Static geometry. Stand it on the deck facing the water. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-lifeguard-high-chai-56aab62b","cdnUrl":"https://cdn.3dassets.dev/assets/35251/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-lifeguard-high-chai-56aab62b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35251/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35251/v1/poster.webp","blurhash":"UGAv:*of01WA~Tof4=Rk--oJIDR-o]aya5j]","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":51140,"triangles":1132,"vertices":2489,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.5800169444911468,0,-0.4439211976201831],"max":[0.5800169444911468,2.5633387565612793,0.42759713010930284]},"sizeMeters":[1.16,2.563,0.872],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:06.202Z","updatedAt":"2026-09-11T12:28:06.407Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35251/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LifeguardHighChairPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35251/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35251/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35251/v1/model.glb\" alt=\"Lifeguard High Chair (Public Swimming Baths and Poolside)\" 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/35251/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/35251/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35257","slug":"public-swimming-baths-and-poolside-lane-marker-board-4f2f1a7e","title":"Lane Marker Board (Public Swimming Baths and Poolside)","summary":"A free standing lane marker board on a chrome post and a weighted plate, 1.5 m tall: a blue surround, a white face and four coloured lane rows under a yellow header. The rows are abstract colour chips and bars rather than readable text.","description":"A free standing lane marker board on a chrome post and a weighted plate, 1.5 m tall: a blue surround, a white face and four coloured lane rows under a yellow header. The rows are abstract colour chips and bars rather than readable text. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-lane-marker-board-4f2f1a7e","cdnUrl":"https://cdn.3dassets.dev/assets/35257/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-lane-marker-board-4f2f1a7e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35257/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35257/v1/poster.webp","blurhash":"UC7_QSxt00IV?wt7DhMyxut7RiM_9Ffl-;e-","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":20956,"triangles":372,"vertices":844,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.36000001430511475,0,-0.17998077197678375],"max":[0.36000001430511475,1.5400184503872627,0.17998077197678375]},"sizeMeters":[0.72,1.54,0.36],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:08.891Z","updatedAt":"2026-09-11T12:28:09.092Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35257/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LaneMarkerBoardPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35257/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35257/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35257/v1/model.glb\" alt=\"Lane Marker Board (Public Swimming Baths and Poolside)\" 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/35257/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/35257/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35269","slug":"public-swimming-baths-and-poolside-poolside-shower-pos-5d90b871","title":"Poolside Shower Post (Public Swimming Baths and Poolside)","summary":"A free standing poolside shower post 2.25 m tall on a cast socket plate: a chrome column with two arms and fixed heads, a domed cap, and push button controls with a red button on both faces. Running water is not modelled and nothing on it moves.","description":"A free standing poolside shower post 2.25 m tall on a cast socket plate: a chrome column with two arms and fixed heads, a domed cap, and push button controls with a red button on both faces. Running water is not modelled and nothing on it moves. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-shower-pos-5d90b871","cdnUrl":"https://cdn.3dassets.dev/assets/35269/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-shower-pos-5d90b871","thumbnailUrl":"https://cdn.3dassets.dev/assets/35269/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35269/v1/poster.webp","blurhash":"U15hfFxv009F4TR%_4xv_3fk8_n$9at7-oIn","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":36916,"triangles":804,"vertices":1726,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.3899631560345385,0,-0.22003632105204113],"max":[0.3899631560345385,2.25,0.22003632105204113]},"sizeMeters":[0.78,2.25,0.44],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:17.130Z","updatedAt":"2026-09-11T12:28:17.239Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35269/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolsideShowerPostPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35269/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35269/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35269/v1/model.glb\" alt=\"Poolside Shower Post (Public Swimming Baths and Poolside)\" 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/35269/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/35269/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35284","slug":"public-swimming-baths-and-poolside-foyer-bin-7c56238f","title":"Foyer Bin (Public Swimming Baths and Poolside)","summary":"A 860 mm foyer bin: a dark cylindrical body with a blue label panel and a yellow band, a stainless inner rim and a domed steel lid. The lid is a named node and lifts on its hinge at the back.","description":"A 860 mm foyer bin: a dark cylindrical body with a blue label panel and a yellow band, a stainless inner rim and a domed steel lid. The lid is a named node and lifts on its hinge at the back. Metre units, +Y up, the water 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/public-swimming-baths-and-poolside-foyer-bin-7c56238f","cdnUrl":"https://cdn.3dassets.dev/assets/35284/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-foyer-bin-7c56238f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35284/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35284/v1/poster.webp","blurhash":"U97Bo_*0008wxZn$M}S5D4VD%Nt-I@XSxtr;","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":20660,"triangles":388,"vertices":812,"meshes":6,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.27000001072883606,0,-0.2659129817984371],"max":[0.27000001072883606,0.9299983079964029,0.2659129617563753]},"sizeMeters":[0.54,0.93,0.532],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:26.181Z","updatedAt":"2026-09-11T12:28:26.384Z","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/35284/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 FoyerBinPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35284/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/35284/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35284/v1/model.glb\" alt=\"Foyer Bin (Public Swimming Baths and Poolside)\" 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/35284/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/35284/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35262","slug":"public-swimming-baths-and-poolside-pool-cover-reel-6fa320e8","title":"Pool Cover Reel (Public Swimming Baths and Poolside)","summary":"A pool cover reel for the end of a tank: a 3 m tube on two wheeled A frames with the blue and white bubble cover wound onto it and its leading edge run out. The tube and the wound cover are one named node and spin; the unrolled length is one pose.","description":"A pool cover reel for the end of a tank: a 3 m tube on two wheeled A frames with the blue and white bubble cover wound onto it and its leading edge run out. The tube and the wound cover are one named node and spin; the unrolled length is one pose. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Named pivoted nodes: cover-drum. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-pool-cover-reel-6fa320e8","cdnUrl":"https://cdn.3dassets.dev/assets/35262/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-pool-cover-reel-6fa320e8","thumbnailUrl":"https://cdn.3dassets.dev/assets/35262/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35262/v1/poster.webp","blurhash":"UEAT+kaz00a#-p%NIVIU00t6?wM{4oD$?H%h","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":47736,"triangles":1048,"vertices":2244,"meshes":6,"materials":5,"textures":0,"animations":["spin"],"boundingBox":{"min":[-1.909999966621399,0.000037327601154601986,-0.3199232373931539],"max":[1.909999966621399,1.092038355369438,0.5250580129189899]},"sizeMeters":[3.82,1.092,0.845],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:12.367Z","updatedAt":"2026-09-11T12:28:12.472Z","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/35262/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 PoolCoverReelPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35262/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/35262/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35262/v1/model.glb\" alt=\"Pool Cover Reel (Public Swimming Baths and Poolside)\" 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/35262/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/35262/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35250","slug":"public-swimming-baths-and-poolside-poolside-handrail-7d35b2f7","title":"Poolside Handrail (Public Swimming Baths and Poolside)","summary":"A 1.6 m chrome poolside handrail on two socket plates, 980 mm high, with domed end caps and a yellow mid rail. It is the rail that flanks a set of steps or guards a change of level on a wet deck. Static geometry.","description":"A 1.6 m chrome poolside handrail on two socket plates, 980 mm high, with domed end caps and a yellow mid rail. It is the rail that flanks a set of steps or guards a change of level on a wet deck. Static geometry. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-handrail-7d35b2f7","cdnUrl":"https://cdn.3dassets.dev/assets/35250/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-handrail-7d35b2f7","thumbnailUrl":"https://cdn.3dassets.dev/assets/35250/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35250/v1/poster.webp","blurhash":"U69@O-n}02o#~o?a9G9H03oy^#My02%i^*$^","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":20988,"triangles":464,"vertices":1012,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.9100000262260437,-0.00005916890711810119,-0.07998291193978715],"max":[0.9100000262260437,1.006059210868788,0.07998291193978715]},"sizeMeters":[1.82,1.006,0.16],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:05.508Z","updatedAt":"2026-09-11T12:28:05.613Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35250/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolsideHandrailPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35250/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35250/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35250/v1/model.glb\" alt=\"Poolside Handrail (Public Swimming Baths and Poolside)\" 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/35250/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/35250/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35255","slug":"public-swimming-baths-and-poolside-poolside-bench-dd3c4911","title":"Poolside Bench (Public Swimming Baths and Poolside)","summary":"A 1.8 m poolside bench: four beech slats at 440 mm on cantilevered dark steel frames with stainless foot plates, a three slat raked back and a blue rail under it. Static geometry, and the timber is modelled rather than textured.","description":"A 1.8 m poolside bench: four beech slats at 440 mm on cantilevered dark steel frames with stainless foot plates, a three slat raked back and a blue rail under it. Static geometry, and the timber is modelled rather than textured. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-bench-dd3c4911","cdnUrl":"https://cdn.3dassets.dev/assets/35255/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-bench-dd3c4911","thumbnailUrl":"https://cdn.3dassets.dev/assets/35255/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35255/v1/poster.webp","blurhash":"UJFP4;Rj0Lt7~V-;D*IU00%2xtIV4oRkxuRj","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":47796,"triangles":1068,"vertices":2359,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.8600000143051147,-0.00003952143250714364,-0.27525942481716115],"max":[0.8600000143051147,0.9010268236950523,0.24996154048632238]},"sizeMeters":[1.72,0.901,0.525],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:09.100Z","updatedAt":"2026-09-11T12:28:09.246Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35255/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PoolsideBenchPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35255/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35255/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35255/v1/model.glb\" alt=\"Poolside Bench (Public Swimming Baths and Poolside)\" 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/35255/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/35255/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35252","slug":"public-swimming-baths-and-poolside-lifeguard-low-chair-f976fc78","title":"Lifeguard Low Chair (Public Swimming Baths and Poolside)","summary":"The same lifeguard station built low, with its seat at 720 mm and no climbing ladder, which is what is used beside a teaching pool or at a quiet session. It stands on the same four foot pads.","description":"The same lifeguard station built low, with its seat at 720 mm and no climbing ladder, which is what is used beside a teaching pool or at a quiet session. It stands on the same four foot pads. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-lifeguard-low-chair-f976fc78","cdnUrl":"https://cdn.3dassets.dev/assets/35252/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-lifeguard-low-chair-f976fc78","thumbnailUrl":"https://cdn.3dassets.dev/assets/35252/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35252/v1/poster.webp","blurhash":"UOCimkbJ02ad~Tj]9Iaetffia2azSzocsBR+","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":47000,"triangles":1036,"vertices":2267,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.5800335653010048,0,-0.44391895489196526],"max":[0.5800335653010048,1.7333014337064858,0.42758018365402395]},"sizeMeters":[1.16,1.733,0.871],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:05.924Z","updatedAt":"2026-09-11T12:28:06.047Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35252/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LifeguardLowChairPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35252/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35252/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35252/v1/model.glb\" alt=\"Lifeguard Low Chair (Public Swimming Baths and Poolside)\" 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/35252/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/35252/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35256","slug":"public-swimming-baths-and-poolside-float-and-kickboard-9a985099","title":"Kickboard and Float Trolley (Public Swimming Baths and Poolside)","summary":"A poolside kickboard and float trolley: a chrome cage 1 m wide on four swivel castors, a mesh shelf carrying nine kickboards stacked on edge in five colours, and a tray of foam woggles under it. All four castors are named nodes and roll.","description":"A poolside kickboard and float trolley: a chrome cage 1 m wide on four swivel castors, a mesh shelf carrying nine kickboards stacked on edge in five colours, and a tray of foam woggles under it. All four castors are named nodes and roll. Metre units, +Y up, the water 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/public-swimming-baths-and-poolside-float-and-kickboard-9a985099","cdnUrl":"https://cdn.3dassets.dev/assets/35256/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-float-and-kickboard-9a985099","thumbnailUrl":"https://cdn.3dassets.dev/assets/35256/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35256/v1/poster.webp","blurhash":"U5Am#bx^00R4acxbNfNF00M{_MxbN4NZ-j#=","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":112352,"triangles":2904,"vertices":6291,"meshes":11,"materials":7,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.5,5.66244127975235e-10,-0.3099765007477035],"max":[0.5,0.9660000205039978,0.3099765007477035]},"sizeMeters":[1,0.966,0.62],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:09.342Z","updatedAt":"2026-09-11T12:28:09.572Z","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/35256/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 KickboardAndFloatTrolleyPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35256/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/35256/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35256/v1/model.glb\" alt=\"Kickboard and Float Trolley (Public Swimming Baths and Poolside)\" 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/35256/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/35256/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35259","slug":"public-swimming-baths-and-poolside-wet-floor-sign-775645f0","title":"Wet Floor Sign (Public Swimming Baths and Poolside)","summary":"A folding yellow wet floor sign, 620 mm tall, with a dark pictogram panel and a red caption bar on both faces. It is modelled open and does not fold.","description":"A folding yellow wet floor sign, 620 mm tall, with a dark pictogram panel and a red caption bar on both faces. It is modelled open and does not fold. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-wet-floor-sign-775645f0","cdnUrl":"https://cdn.3dassets.dev/assets/35259/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-wet-floor-sign-775645f0","thumbnailUrl":"https://cdn.3dassets.dev/assets/35259/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35259/v1/poster.webp","blurhash":"U7Frg{oZ00kZ=|RkI-xu02Is~T-l_Kad8}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":14716,"triangles":312,"vertices":674,"meshes":3,"materials":3,"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-11T12:28:11.907Z","updatedAt":"2026-09-11T12:28:12.030Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35259/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WetFloorSignPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35259/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35259/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35259/v1/model.glb\" alt=\"Wet Floor Sign (Public Swimming Baths and Poolside)\" 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/35259/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/35259/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35274","slug":"public-swimming-baths-and-poolside-towels-and-kit-bag-3aca404e","title":"Towels and Swim Kit Bag (Public Swimming Baths and Poolside)","summary":"A swimmer kit bag with the kit beside it: a blue holdall with a dark webbing strap, grab handles and a yellow name panel, two rolled towels, a green swim cap and a pair of goggles. Soft goods are modelled in one pose and do not move.","description":"A swimmer kit bag with the kit beside it: a blue holdall with a dark webbing strap, grab handles and a yellow name panel, two rolled towels, a green swim cap and a pair of goggles. Soft goods are modelled in one pose and do not move. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-towels-and-kit-bag-3aca404e","cdnUrl":"https://cdn.3dassets.dev/assets/35274/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-towels-and-kit-bag-3aca404e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35274/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35274/v1/poster.webp","blurhash":"U79aEe9@00^R9u^+nO9t00iy.ANF^700b]~B","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":44192,"triangles":1028,"vertices":2076,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.5149999931454659,0.000012705495306075676,-0.14251290410725231],"max":[0.6800000071525574,0.40591547251625143,0.23076845277317382]},"sizeMeters":[1.195,0.406,0.373],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:20.700Z","updatedAt":"2026-09-11T12:28:20.817Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35274/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TowelsAndSwimKitBagPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35274/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35274/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35274/v1/model.glb\" alt=\"Towels and Swim Kit Bag (Public Swimming Baths and Poolside)\" 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/35274/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/35274/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35276","slug":"public-swimming-baths-and-poolside-baths-reception-des-9358a32f","title":"Baths Reception Desk (Public Swimming Baths and Poolside)","summary":"A 2.6 m swimming baths reception desk with a low return: a white carcass with a beech top, a blue front panel with a tiled band and a yellow kick rail, a raked till screen, a card terminal and a tray of wristbands on the counter. Static geometry.","description":"A 2.6 m swimming baths reception desk with a low return: a white carcass with a beech top, a blue front panel with a tiled band and a yellow kick rail, a raked till screen, a card terminal and a tray of wristbands on the counter. Static geometry. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-baths-reception-des-9358a32f","cdnUrl":"https://cdn.3dassets.dev/assets/35276/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-baths-reception-des-9358a32f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35276/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35276/v1/poster.webp","blurhash":"UBFY=Ot-01%18^?bx^IV00ia%1Ip%%4ow@-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":42116,"triangles":820,"vertices":1827,"meshes":9,"materials":9,"textures":0,"animations":[],"boundingBox":{"min":[-1.340000033378601,-0.00008119830869257605,-1.0400155588621134],"max":[1.7300000190734863,1.4732719493289925,0.5060301226702368]},"sizeMeters":[3.07,1.473,1.546],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:20.800Z","updatedAt":"2026-09-11T12:28:20.927Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35276/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BathsReceptionDeskPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35276/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35276/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35276/v1/model.glb\" alt=\"Baths Reception Desk (Public Swimming Baths and Poolside)\" 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/35276/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/35276/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35277","slug":"public-swimming-baths-and-poolside-entrance-turnstile-d81fae1c","title":"Entrance Turnstile (Public Swimming Baths and Poolside)","summary":"An entrance turnstile: a brushed steel pedestal with a raked reader panel and a green light, three chrome arms with yellow tips, and a guide rail on two socket plates beside it. The arm set is one named node and spins about the pedestal.","description":"An entrance turnstile: a brushed steel pedestal with a raked reader panel and a green light, three chrome arms with yellow tips, and a guide rail on two socket plates beside it. The arm set is one named node and spins about the pedestal. Metre units, +Y up, the water 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/public-swimming-baths-and-poolside-entrance-turnstile-d81fae1c","cdnUrl":"https://cdn.3dassets.dev/assets/35277/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-entrance-turnstile-d81fae1c","thumbnailUrl":"https://cdn.3dassets.dev/assets/35277/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35277/v1/poster.webp","blurhash":"U27nUbD$00RM~pxvRhoZ00-;%MRi00R%-;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":41428,"triangles":872,"vertices":1898,"meshes":6,"materials":5,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.34557677268981934,-0.00002273678175679361,-0.5800370697028601],"max":[1.0299999713897705,1.1572281929922703,0.6600347924436943]},"sizeMeters":[1.376,1.157,1.24],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:20.942Z","updatedAt":"2026-09-11T12:28:21.159Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35277/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 EntranceTurnstilePublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35277/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/35277/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35277/v1/model.glb\" alt=\"Entrance Turnstile (Public Swimming Baths and Poolside)\" 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/35277/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/35277/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35278","slug":"public-swimming-baths-and-poolside-poolside-vending-ma-b10205eb","title":"Vending Machine (Public Swimming Baths and Poolside)","summary":"A glass fronted drinks vending machine 1.86 m tall: a dark cabinet with a blue header, four shelves of coloured stock behind the glass, a coin and card strip and a delivery flap. The whole glazed door is one named node and swings open on its hinge.","description":"A glass fronted drinks vending machine 1.86 m tall: a dark cabinet with a blue header, four shelves of coloured stock behind the glass, a coin and card strip and a delivery flap. The whole glazed door is one named node and swings open on its hinge. Metre units, +Y up, the water 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/public-swimming-baths-and-poolside-poolside-vending-ma-b10205eb","cdnUrl":"https://cdn.3dassets.dev/assets/35278/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-vending-ma-b10205eb","thumbnailUrl":"https://cdn.3dassets.dev/assets/35278/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35278/v1/poster.webp","blurhash":"UG7xXha_4TV[yZk9McahXoa{i]s:tSbHRPn$","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":78288,"triangles":1960,"vertices":4115,"meshes":11,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.48999358391155673,0,-0.4049787836839265],"max":[0.48999358391155673,1.899999976158142,0.41499465946362774]},"sizeMeters":[0.98,1.9,0.82],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:23.219Z","updatedAt":"2026-09-11T12:28:23.347Z","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/35278/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 VendingMachinePublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35278/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/35278/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35278/v1/model.glb\" alt=\"Vending Machine (Public Swimming Baths and Poolside)\" 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/35278/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/35278/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35283","slug":"public-swimming-baths-and-poolside-swimming-trophy-cab-1c59bfc0","title":"Swimming Trophy Cabinet (Public Swimming Baths and Poolside)","summary":"A 1.1 m glazed swimming club trophy cabinet 1.9 m tall: a beech carcass on a dark plinth with three white shelves of cups, shields and medals, and two glazed leaves. Each leaf is a named node and swings on its own stile.","description":"A 1.1 m glazed swimming club trophy cabinet 1.9 m tall: a beech carcass on a dark plinth with three white shelves of cups, shields and medals, and two glazed leaves. Each leaf is a named node and swings on its own stile. Metre units, +Y up, the water 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/public-swimming-baths-and-poolside-swimming-trophy-cab-1c59bfc0","cdnUrl":"https://cdn.3dassets.dev/assets/35283/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-swimming-trophy-cab-1c59bfc0","thumbnailUrl":"https://cdn.3dassets.dev/assets/35283/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35283/v1/poster.webp","blurhash":"U8A^E=9J00~TbexuRiD*9axrt6Irbct7jXM{","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":72260,"triangles":1700,"vertices":3644,"meshes":13,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.5800384646110781,0,-0.22000427687321286],"max":[0.5800384646110781,1.9600000381469727,0.22000427687321286]},"sizeMeters":[1.16,1.96,0.44],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:24.932Z","updatedAt":"2026-09-11T12:28:25.169Z","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/35283/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 SwimmingTrophyCabinetPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35283/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/35283/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35283/v1/model.glb\" alt=\"Swimming Trophy Cabinet (Public Swimming Baths and Poolside)\" 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/35283/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/35283/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35282","slug":"public-swimming-baths-and-poolside-session-times-notic-6ebfdd89","title":"Session Times Notice Board (Public Swimming Baths and Poolside)","summary":"A free standing session times notice board 1.34 m tall: a dark frame on two chrome posts with a white face, a blue header and five rows of coloured chips and bars standing in for a timetable. The rows are abstract marks, not readable text.","description":"A free standing session times notice board 1.34 m tall: a dark frame on two chrome posts with a white face, a blue header and five rows of coloured chips and bars standing in for a timetable. The rows are abstract marks, not readable text. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-session-times-notic-6ebfdd89","cdnUrl":"https://cdn.3dassets.dev/assets/35282/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-session-times-notic-6ebfdd89","thumbnailUrl":"https://cdn.3dassets.dev/assets/35282/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35282/v1/poster.webp","blurhash":"UECjIeog00WA%$x]I9D$00oz~pRPDjW=%gxC","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":33984,"triangles":712,"vertices":1620,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.6499999761581421,-0.00001647393289519461,-0.1400140322906059],"max":[0.6499999761581421,1.3999801547614918,0.1400140322906059]},"sizeMeters":[1.3,1.4,0.28],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:24.427Z","updatedAt":"2026-09-11T12:28:24.563Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35282/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SessionTimesNoticeBoardPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35282/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35282/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35282/v1/model.glb\" alt=\"Session Times Notice Board (Public Swimming Baths and Poolside)\" 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/35282/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/35282/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35285","slug":"public-swimming-baths-and-poolside-poolside-fire-point-cb332e09","title":"Fire Point (Public Swimming Baths and Poolside)","summary":"A poolside fire point: a red backboard on a weighted base with a white notice panel, a water and a carbon dioxide extinguisher in their brackets, a break glass call point and a small hose ring. Static geometry; no notice text is modelled.","description":"A poolside fire point: a red backboard on a weighted base with a white notice panel, a water and a carbon dioxide extinguisher in their brackets, a break glass call point and a small hose ring. Static geometry; no notice text is modelled. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-poolside-fire-point-cb332e09","cdnUrl":"https://cdn.3dassets.dev/assets/35285/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-poolside-fire-point-cb332e09","thumbnailUrl":"https://cdn.3dassets.dev/assets/35285/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35285/v1/poster.webp","blurhash":"UEDku#AD00}Y^Qae9tXS9t$j%2ACrDkCTdi_","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":38828,"triangles":852,"vertices":1824,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.25001819271023673,0,-0.16998972428759254],"max":[0.25001819271023673,0.9399999976158142,0.16998972428759254]},"sizeMeters":[0.5,0.94,0.34],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":1,"publishedAt":"2026-09-11T12:28:25.968Z","updatedAt":"2026-09-11T13:37:57.252Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35285/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FirePointPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35285/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35285/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35285/v1/model.glb\" alt=\"Fire Point (Public Swimming Baths and Poolside)\" 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/35285/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/35285/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35263","slug":"public-swimming-baths-and-poolside-changing-cubicle-mo-b6122d28","title":"Changing Cubicle Module (Public Swimming Baths and Poolside)","summary":"A 1.2 m changing cubicle 2.2 m tall: a white carcass with a blue tiled back wall, a slatted beech bench, a yellow hook rail with three chrome hooks, a divider on its left hand edge and a blue laminate leaf hung clear of the floor. The leaf is one named node and swings.","description":"A 1.2 m changing cubicle 2.2 m tall: a white carcass with a blue tiled back wall, a slatted beech bench, a yellow hook rail with three chrome hooks, a divider on its left hand edge and a blue laminate leaf hung clear of the floor. The leaf is one named node and swings. Ports bay-left and bay-right sit at the bay edges at mid height, so a run of cubicles repeats along a wall. Metre units, +Y up, the water 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/public-swimming-baths-and-poolside-changing-cubicle-mo-b6122d28","cdnUrl":"https://cdn.3dassets.dev/assets/35263/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-changing-cubicle-mo-b6122d28","thumbnailUrl":"https://cdn.3dassets.dev/assets/35263/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35263/v1/poster.webp","blurhash":"UJF6RpIq00=^~pV@9Zo#H=t6kXIpt8bHRjoJ","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":67260,"triangles":1396,"vertices":3119,"meshes":11,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6000366352168148,0,-0.6300761427074443],"max":[0.6000366352168148,2.200000047683716,0.6380002121669032]},"sizeMeters":[1.2,2.2,1.268],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:13.000Z","updatedAt":"2026-09-11T12:28:13.132Z","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/35263/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 ChangingCubicleModulePublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35263/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/35263/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35263/v1/model.glb\" alt=\"Changing Cubicle Module (Public Swimming Baths and Poolside)\" 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/35263/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/35263/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35264","slug":"public-swimming-baths-and-poolside-family-changing-cub-e3c4b43d","title":"Family Changing Cubicle (Public Swimming Baths and Poolside)","summary":"The wide 1.6 m family cubicle: the same carcass with a green leaf, a fold down baby change shelf, a small red stool and four hooks. It carries the same cubicle bay ports at its own half width, so it drops into a run of standard cubicles.","description":"The wide 1.6 m family cubicle: the same carcass with a green leaf, a fold down baby change shelf, a small red stool and four hooks. It carries the same cubicle bay ports at its own half width, so it drops into a run of standard cubicles. Metre units, +Y up, the water 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/public-swimming-baths-and-poolside-family-changing-cub-e3c4b43d","cdnUrl":"https://cdn.3dassets.dev/assets/35264/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-family-changing-cub-e3c4b43d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35264/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35264/v1/poster.webp","blurhash":"UNGc0^EK00wO~qaeD%ba8xxaI:S0bFofRjWB","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":94124,"triangles":2044,"vertices":4482,"meshes":13,"materials":9,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.7999817062334506,0,-0.6300761427074443],"max":[0.7999817062334506,2.200000047683716,0.6380002408232273]},"sizeMeters":[1.6,2.2,1.268],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:13.870Z","updatedAt":"2026-09-11T12:28:13.998Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35264/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 FamilyChangingCubiclePublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35264/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/35264/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35264/v1/model.glb\" alt=\"Family Changing Cubicle (Public Swimming Baths and Poolside)\" 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/35264/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/35264/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35272","slug":"public-swimming-baths-and-poolside-footbath-channel-36c43e54","title":"Footbath Channel (Public Swimming Baths and Poolside)","summary":"A 2 m footbath channel set into a wet floor: a tiled trough 50 mm deep with blue nosings, a yellow warning band and a still, shallow blue surface standing in it. The water is a flat plane like every other surface in this pack and does not move or ripple.","description":"A 2 m footbath channel set into a wet floor: a tiled trough 50 mm deep with blue nosings, a yellow warning band and a still, shallow blue surface standing in it. The water is a flat plane like every other surface in this pack and does not move or ripple. Ports bath-left and bath-right sit at the run ends at the channel lip, so two runs make a full width crossing at a doorway. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-footbath-channel-36c43e54","cdnUrl":"https://cdn.3dassets.dev/assets/35272/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-footbath-channel-36c43e54","thumbnailUrl":"https://cdn.3dassets.dev/assets/35272/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35272/v1/poster.webp","blurhash":"U8DS]?-q00kD-=-=WBIU00Rj~qM_4m4mWB%M","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":32148,"triangles":632,"vertices":1438,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.00004028532657798789,-0.6000549333170568],"max":[1,0.10997759843778412,0.6000549333170568]},"sizeMeters":[2,0.11,1.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:18.040Z","updatedAt":"2026-09-11T12:28:18.157Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35272/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FootbathChannelPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35272/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35272/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35272/v1/model.glb\" alt=\"Footbath Channel (Public Swimming Baths and Poolside)\" 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/35272/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/35272/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35265","slug":"public-swimming-baths-and-poolside-changing-locker-ban-65af1b68","title":"Eight Door Changing Locker Bank (Public Swimming Baths and Poolside)","summary":"A 1.2 m eight door locker bank 1.8 m tall for a wet changing village: two columns of four in blue, green and yellow leaves, with a sloped top, a recessed plinth, punched vents, number plates and coin latches. Every leaf is a named node on its own hinge line.","description":"A 1.2 m eight door locker bank 1.8 m tall for a wet changing village: two columns of four in blue, green and yellow leaves, with a sloped top, a recessed plinth, punched vents, number plates and coin latches. Every leaf is a named node on its own hinge line. Metre units, +Y up, the water 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, locker-door-7, locker-door-8. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-changing-locker-ban-65af1b68","cdnUrl":"https://cdn.3dassets.dev/assets/35265/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-changing-locker-ban-65af1b68","thumbnailUrl":"https://cdn.3dassets.dev/assets/35265/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35265/v1/poster.webp","blurhash":"UAB|scJ700-V-pxtNGMy00oN_LNFo$WCjCof","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":53232,"triangles":2448,"vertices":5475,"meshes":34,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.7000613073828702,0,-0.2999532132814222],"max":[0.7000613073828702,1.8619999885559082,0.2999532132814222]},"sizeMeters":[1.4,1.862,0.6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:14.921Z","updatedAt":"2026-09-11T12:28:15.032Z","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/35265/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 EightDoorChangingLockerBankPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35265/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/35265/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35265/v1/model.glb\" alt=\"Eight Door Changing Locker Bank (Public Swimming Baths and Poolside)\" 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/35265/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/35265/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35266","slug":"public-swimming-baths-and-poolside-changing-locker-ban-3c6a2645","title":"Locker Bank with One Door Open (Public Swimming Baths and Poolside)","summary":"The same eight door locker bank with one leaf standing open on its hinge, for dressing a changing room without animating it. The other seven leaves still swing.","description":"The same eight door locker bank with one leaf standing open on its hinge, for dressing a changing room without animating it. The other seven leaves still swing. Metre units, +Y up, the water 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, locker-door-7, locker-door-8. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-changing-locker-ban-3c6a2645","cdnUrl":"https://cdn.3dassets.dev/assets/35266/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-changing-locker-ban-3c6a2645","thumbnailUrl":"https://cdn.3dassets.dev/assets/35266/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35266/v1/poster.webp","blurhash":"UBC7A_Ri00$+xbt7X4M_00o$~oNE%Ns:I.S1","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":63508,"triangles":2448,"vertices":5459,"meshes":34,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.7000613073828702,0,-0.3730065541267395],"max":[0.7000613073828702,1.8619999885559082,0.2999532132814222]},"sizeMeters":[1.4,1.862,0.673],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:14.328Z","updatedAt":"2026-09-11T12:28:14.458Z","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/35266/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 LockerBankWithOneDoorOpenPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35266/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/35266/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35266/v1/model.glb\" alt=\"Locker Bank with One Door Open (Public Swimming Baths and Poolside)\" 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/35266/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/35266/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35267","slug":"public-swimming-baths-and-poolside-changing-bench-with-be640ddc","title":"Changing Bench with Coat Rail (Public Swimming Baths and Poolside)","summary":"A 2 m changing bench: 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. Static geometry.","description":"A 2 m changing bench: 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. Static geometry. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-changing-bench-with-be640ddc","cdnUrl":"https://cdn.3dassets.dev/assets/35267/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-changing-bench-with-be640ddc","thumbnailUrl":"https://cdn.3dassets.dev/assets/35267/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35267/v1/poster.webp","blurhash":"U5BDQXxG00W;_N-;9F4n00b_%OR5=W_2Ou4o","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":58460,"triangles":1296,"vertices":2910,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.9800000190734863,0,-0.24999489666130134],"max":[0.9800000190734863,1.851199984550476,0.18999489427711555]},"sizeMeters":[1.96,1.851,0.44],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:15.950Z","updatedAt":"2026-09-11T12:28:16.089Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35267/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChangingBenchWithCoatRailPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35267/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35267/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35267/v1/model.glb\" alt=\"Changing Bench with Coat Rail (Public Swimming Baths and Poolside)\" 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/35267/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/35267/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35271","slug":"public-swimming-baths-and-poolside-basin-and-mirror-ru-52dfe6bb","title":"Basin and Mirror Run (Public Swimming Baths and Poolside)","summary":"A 1.8 m changing village basin run: a white top on a dark steel frame with two inset bowls and pillar taps, a blue and white tiled splashback, a mirror strip over it and a hand dryer at one end. Nothing on it turns and no running water is modelled.","description":"A 1.8 m changing village basin run: a white top on a dark steel frame with two inset bowls and pillar taps, a blue and white tiled splashback, a mirror strip over it and a hand dryer at one end. Nothing on it turns and no running water is modelled. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-basin-and-mirror-ru-52dfe6bb","cdnUrl":"https://cdn.3dassets.dev/assets/35271/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-basin-and-mirror-ru-52dfe6bb","thumbnailUrl":"https://cdn.3dassets.dev/assets/35271/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35271/v1/poster.webp","blurhash":"UNEfZzRj00oz~qoe9FRi4mxt%MM_D%t7t8Rj","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":49872,"triangles":1112,"vertices":2432,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.8999999761581421,-0.00003252482142845903,-0.27996978488827984],"max":[0.8999999761581421,1.9600409044708125,0.2599697741594438]},"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-11T12:28:18.873Z","updatedAt":"2026-09-11T12:28:19.067Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35271/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BasinAndMirrorRunPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35271/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35271/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35271/v1/model.glb\" alt=\"Basin and Mirror Run (Public Swimming Baths and Poolside)\" 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/35271/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/35271/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35268","slug":"public-swimming-baths-and-poolside-drying-area-bench-b9ef99fc","title":"Drying Area Bench and Duckboard (Public Swimming Baths and Poolside)","summary":"A drying area bench: a beech slatted seat on a dark steel frame standing on a timber duckboard, with a chrome rail over it, a yellow edge stripe on the duckboard and two towels hung over the rail in one fixed drape. Soft goods do not move.","description":"A drying area bench: a beech slatted seat on a dark steel frame standing on a timber duckboard, with a chrome rail over it, a yellow edge stripe on the duckboard and two towels hung over the rail in one fixed drape. Soft goods do not move. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-drying-area-bench-b9ef99fc","cdnUrl":"https://cdn.3dassets.dev/assets/35268/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-drying-area-bench-b9ef99fc","thumbnailUrl":"https://cdn.3dassets.dev/assets/35268/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35268/v1/poster.webp","blurhash":"UCDcBm-n00ER00eo?ZOXDiIVx]%L~o%MRpa0","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":68380,"triangles":1604,"vertices":3610,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.699999988079071,0.000018767691234850004,-0.48003707998901335],"max":[0.699999988079071,1.2999784540949253,0.48003707998901335]},"sizeMeters":[1.4,1.3,0.96],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:15.937Z","updatedAt":"2026-09-11T12:28:16.094Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35268/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DryingAreaBenchAndDuckboardPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35268/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35268/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35268/v1/model.glb\" alt=\"Drying Area Bench and Duckboard (Public Swimming Baths and Poolside)\" 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/35268/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/35268/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35270","slug":"public-swimming-baths-and-poolside-hairdryer-point-906afc19","title":"Hairdryer Point (Public Swimming Baths and Poolside)","summary":"A free standing hairdryer point: a white wall box on a chrome post and a weighted plate with a fixed nozzle, a blue push button, a yellow label strip, a chrome shelf and a small mirror under it. The nozzle does not move and no airflow is modelled.","description":"A free standing hairdryer point: a white wall box on a chrome post and a weighted plate with a fixed nozzle, a blue push button, a yellow label strip, a chrome shelf and a small mirror under it. The nozzle does not move and no airflow is modelled. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-hairdryer-point-906afc19","cdnUrl":"https://cdn.3dassets.dev/assets/35270/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-hairdryer-point-906afc19","thumbnailUrl":"https://cdn.3dassets.dev/assets/35270/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35270/v1/poster.webp","blurhash":"UD9H64Rj00xu~qRj4n%L-;ayD%j[RjofofRj","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":28600,"triangles":564,"vertices":1242,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.20001815605623727,0,-0.15002882683899607],"max":[0.20001815605623727,1.4500036541376289,0.27162069285538404]},"sizeMeters":[0.4,1.45,0.422],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:17.810Z","updatedAt":"2026-09-11T12:28:17.981Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35270/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function HairdryerPointPublicSwimmingBathsAndPoolside(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35270/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35270/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35270/v1/model.glb\" alt=\"Hairdryer Point (Public Swimming Baths and Poolside)\" 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/35270/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/35270/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35275","slug":"public-swimming-baths-and-poolside-cleaning-trolley-1292ff9b","title":"Cleaning Trolley (Public Swimming Baths and Poolside)","summary":"A caretaker cleaning trolley for the wet side: 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.","description":"A caretaker cleaning trolley for the wet side: 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. Metre units, +Y up, the water 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/public-swimming-baths-and-poolside-cleaning-trolley-1292ff9b","cdnUrl":"https://cdn.3dassets.dev/assets/35275/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-cleaning-trolley-1292ff9b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35275/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35275/v1/poster.webp","blurhash":"UCBzB|-,004_9axb-:In00bd_2nL~UbX9HoN","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":92112,"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-11T12:28:20.119Z","updatedAt":"2026-09-11T12:28:20.250Z","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/35275/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 CleaningTrolleyPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35275/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/35275/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35275/v1/model.glb\" alt=\"Cleaning Trolley (Public Swimming Baths and Poolside)\" 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/35275/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/35275/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35244","slug":"public-swimming-baths-and-poolside-lane-rope-on-reel-0d6b9d23","title":"Lane Rope on a Storage Reel (Public Swimming Baths and Poolside)","summary":"A lane rope wound onto its poolside storage reel: a dark steel A frame on a weighted foot with a 1 m drum carrying banded blue and red rope, and a cranked handle at one end. The drum is a named node and spins; the wound rope turns with it.","description":"A lane rope wound onto its poolside storage reel: a dark steel A frame on a weighted foot with a 1 m drum carrying banded blue and red rope, and a cranked handle at one end. The drum is a named node and spins; the wound rope turns with it. Metre units, +Y up, the water or user side toward +Z, resting on y=0. Named pivoted nodes: rope-drum. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/public-swimming-baths-and-poolside-lane-rope-on-reel-0d6b9d23","cdnUrl":"https://cdn.3dassets.dev/assets/35244/v1/model.glb","downloadUrl":"https://3dassets.dev/download/public-swimming-baths-and-poolside-lane-rope-on-reel-0d6b9d23","thumbnailUrl":"https://cdn.3dassets.dev/assets/35244/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35244/v1/poster.webp","blurhash":"U8AJWp$*0KKO=J%MFwE100Na]-#,0fI:}Y$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":39988,"triangles":840,"vertices":1800,"meshes":7,"materials":5,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.7699999809265137,-0.00003202121156714588,-0.4500106703312094],"max":[0.8112000226974487,0.9899993418241277,0.4500106703312094]},"sizeMeters":[1.581,0.99,0.9],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T12:28:00.481Z","updatedAt":"2026-09-11T12:28:00.713Z","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/35244/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 LaneRopeOnAStorageReelPublicSwimmingBathsAndPoolside(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35244/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/35244/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35244/v1/model.glb\" alt=\"Lane Rope on a Storage Reel (Public Swimming Baths and Poolside)\" 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/35244/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/35244/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}}]}}