{"data":{"id":"105","slug":"opticians-and-eyewear-showroom","title":"Opticians and Eyewear Showroom","summary":"Walk a high street opticians: frame bays and a spinning carousel, dispensing desks with mirrors, a waiting corner, an eye test room with phoropter and chair, and the adjustment bench and lens stock at the back.","url":"https://3dassets.dev/demos/opticians-and-eyewear-showroom","coverUrl":"https://cdn.3dassets.dev/media/opticians-and-eyewear-showroom-demo.png","featured":true,"pack":{"slug":"opticians-and-eyewear-showroom","title":"Opticians and Eyewear Showroom","url":"https://3dassets.dev/packs/opticians-and-eyewear-showroom","summary":"A realistic high street opticians: ported frame display bays, a turning carousel, display island, dispensing desks and waiting sofas, an eye test room with a phoropter on its swing arm, test chair, slit lamp and chart, and the adjustment bench, edger and lens stock behind.","assetCount":48,"totalBytes":4509968,"starterScene":{"slug":"opticians-and-eyewear-showroom-high-stre-83048d1d-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/35078/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-high-stre-83048d1d-starter-scene","fileSize":1870660}},"placementCount":146,"assetCount":44,"spawn":{"position":[-0.64,0.005,1.44],"yaw":180},"publishedAt":"2026-09-11T11:18:43.836Z","updatedAt":"2026-09-11T11:18:43.837Z","description":"## What is placed\n\nA high street opticians laid out as one shop. The front is the retail floor: wall bays of frames in three fills, island units, a spinning carousel, sunglasses stands, a contact lens shelf unit, an accessories rail and a childrens frame corner, with price and brand cards beside the stock. Two dispensing desks with counter mirrors and frame trays face the floor, and a waiting corner of sofa runs and a low table of magazines sits off to one side. Behind a partition wall is the eye test room with the phoropter, test chair, test chart, room mirror, slit lamp, autorefractor, visual field screener, stool and instrument trolley. The back of the shop holds the adjustment bench, lens edger, tint bath, lens stock drawer banks, order pickup rack, cleaning station, staff lockers and a first aid box. The floor tiles, wall modules and doors are the pack's own, repeated.\n\n## What moves\n\nThe frame carousel spins. The phoropter's arm swings across and its head tilts. The test chair reclines and its headrest tilts with it. The optometrist stool spins and the instrument trolley rolls. The shop and consulting room doors open and close, and so do the adjustment bench drawer, the lens edger lid, the lens stock drawer banks, the staff lockers and the pedal bin. Clips play as you come near the piece.\n\n## What does not move, and why\n\nLenses, cables, cords and cloth are static geometry: none of it is reachable with the rigid node transforms this library uses, so it is modelled in place rather than faked. There are no staff and no customers, because nothing here is skinned. This is the customer facing side of the practice only: the catalogue carries the lens grinding workshop separately. Brand cards are abstract, with no real optical or eyewear brand named.","scene":{"version":1,"spawn":{"position":[-0.64,0.005,1.44],"yaw":180},"ground":{"style":"none"},"environment":{"preset":"room","wallHeight":4,"lampHeight":3.6,"shadows":true},"placements":[{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-9,-0.06,-7],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-9,-0.06,-5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-9,-0.06,-3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-9,-0.06,-1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-9,-0.06,1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-wood-c442b741","position":[-9,-0.06,3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-wood-c442b741","position":[-9,-0.06,5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-7,-0.06,-7],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-7,-0.06,-5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-7,-0.06,-3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-7,-0.06,-1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-7,-0.06,1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-wood-c442b741","position":[-7,-0.06,3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-wood-c442b741","position":[-7,-0.06,5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-5,-0.06,-7],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-5,-0.06,-5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-5,-0.06,-3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-5,-0.06,-1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-5,-0.06,1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-wood-c442b741","position":[-5,-0.06,3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-wood-c442b741","position":[-5,-0.06,5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-3,-0.06,-7],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-3,-0.06,-5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-3,-0.06,-3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-3,-0.06,-1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-3,-0.06,1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-3,-0.06,3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-3,-0.06,5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-1,-0.06,-7],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-1,-0.06,-5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-1,-0.06,-3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-1,-0.06,-1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-1,-0.06,1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-1,-0.06,3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[-1,-0.06,5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[1,-0.06,-7],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[1,-0.06,-5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[1,-0.06,-3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[1,-0.06,-1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[1,-0.06,1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[1,-0.06,3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[1,-0.06,5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[3,-0.06,-7],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[3,-0.06,-5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[3,-0.06,-3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[3,-0.06,-1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[3,-0.06,1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[3,-0.06,3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[3,-0.06,5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[5,-0.06,-7],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[5,-0.06,-5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[5,-0.06,-3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[5,-0.06,-1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[5,-0.06,1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[5,-0.06,3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","position":[5,-0.06,5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-9,0,-8],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-7,0,-8],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-5,0,-8],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-3,0,-8],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-1,0,-8],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[1,0,-8],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[3,0,-8],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[5,0,-8],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-9,0,-2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-door-mo-64321c6a","position":[-7,0,-2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-5,0,-2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-3,0,-2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-1,0,-2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[1,0,-2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-door-mo-64321c6a","position":[3,0,-2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[5,0,-2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-2,0,-7],"rotation":90},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-2,0,-5],"rotation":90},{"asset":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","position":[-2,0,-3],"rotation":90},{"asset":"opticians-and-eyewear-showroom-shop-wall-module-815f56a0","position":[-10,0,-1],"rotation":90},{"asset":"opticians-and-eyewear-showroom-shop-wall-module-815f56a0","position":[-10,0,1],"rotation":90},{"asset":"opticians-and-eyewear-showroom-shop-door-module-open-efedbe85","position":[-10,0,3],"rotation":90},{"asset":"opticians-and-eyewear-showroom-shop-wall-module-815f56a0","position":[-10,0,5],"rotation":90},{"asset":"opticians-and-eyewear-showroom-frame-display-bay-a3b85937","position":[-6.5,0,-1.79],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-display-bay-blue-112c86d2","position":[-5.5,0,-1.79],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-display-bay-a3b85937","position":[-4.5,0,-1.79],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-display-bay-spars-f7f1e177","position":[-3.5,0,-1.79],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-display-bay-blue-112c86d2","position":[-2.5,0,-1.79],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-display-bay-a3b85937","position":[-1.5,0,-1.79],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-display-bay-spars-f7f1e177","position":[-0.5,0,-1.79],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-display-bay-a3b85937","position":[-9.79,0,-1],"rotation":90},{"asset":"opticians-and-eyewear-showroom-frame-display-bay-blue-112c86d2","position":[-9.79,0,0],"rotation":90},{"asset":"opticians-and-eyewear-showroom-frame-display-bay-a3b85937","position":[-9.79,0,1],"rotation":90},{"asset":"opticians-and-eyewear-showroom-frame-carousel-28a1a28d","position":[-4.4,0,0.9],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-display-island-fa2bc895","position":[-6.6,0,2.2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-price-card-holder-brand-840562c9","position":[-7.2,0.87,2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-price-card-holder-7d485cc3","position":[-6,0.87,2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-tray-b2bcb58c","position":[-5.9,0.87,2.45],"rotation":0},{"asset":"opticians-and-eyewear-showroom-sunglasses-stand-143c2a25","position":[-2.6,0,1.1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-carousel-28a1a28d","position":[-1.4,0,3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-display-island-fa2bc895","position":[1,0,4.2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-price-card-holder-7d485cc3","position":[0.4,0.87,4],"rotation":0},{"asset":"opticians-and-eyewear-showroom-price-card-holder-brand-840562c9","position":[1.6,0.87,4],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-tray-b2bcb58c","position":[1,0.87,4.45],"rotation":0},{"asset":"opticians-and-eyewear-showroom-sunglasses-stand-143c2a25","position":[-4.6,0,3.6],"rotation":0},{"asset":"opticians-and-eyewear-showroom-contact-lens-shelf-unit-86c5866b","position":[4.6,0,-1.76],"rotation":0},{"asset":"opticians-and-eyewear-showroom-accessories-rail-8639e0fb","position":[2,1.15,-1.83],"rotation":0},{"asset":"opticians-and-eyewear-showroom-counter-mirror-e68951a5","position":[1.1,0,0.4],"rotation":0},{"asset":"opticians-and-eyewear-showroom-dispensing-desk-e43b4934","position":[3.6,0,0.6],"rotation":-90},{"asset":"opticians-and-eyewear-showroom-counter-mirror-e68951a5","position":[3.6,0.8,1.1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-tray-b2bcb58c","position":[3.35,0.8,0.2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-dispensing-desk-e43b4934","position":[3.6,0,3.4],"rotation":-90},{"asset":"opticians-and-eyewear-showroom-counter-mirror-e68951a5","position":[3.6,0.8,3.9],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-tray-b2bcb58c","position":[3.35,0.8,3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-pedal-waste-bin-acaa6fb1","position":[5.3,0,2],"rotation":0},{"asset":"opticians-and-eyewear-showroom-waiting-sofa-run-9cbae1c2","position":[-8.8,0,4.6],"rotation":90},{"asset":"opticians-and-eyewear-showroom-waiting-sofa-run-coral-c215e465","position":[-6.4,0,4.6],"rotation":-90},{"asset":"opticians-and-eyewear-showroom-low-table-with-magazine-714caa15","position":[-7.6,0,4.6],"rotation":0},{"asset":"opticians-and-eyewear-showroom-childrens-frame-corner-60cedeec","position":[-4.2,0,4.4],"rotation":0},{"asset":"opticians-and-eyewear-showroom-low-table-with-magazine-714caa15","position":[-2.4,0,4.6],"rotation":0},{"asset":"opticians-and-eyewear-showroom-test-chair-66182fe7","position":[-6,0,-5.4],"rotation":0},{"asset":"opticians-and-eyewear-showroom-phoropter-on-arm-f6682f7f","position":[-6,0,-4.4],"rotation":180},{"asset":"opticians-and-eyewear-showroom-optometrist-stool-76e7a891","position":[-4.9,0,-4.7],"rotation":0},{"asset":"opticians-and-eyewear-showroom-test-chart-60de2929","position":[-6,1.2,-2.1],"rotation":180},{"asset":"opticians-and-eyewear-showroom-test-room-mirror-574c0eaf","position":[-6,1,-7.91],"rotation":0},{"asset":"opticians-and-eyewear-showroom-instrument-table-48e9797f","position":[-8.9,0,-3.3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-slit-lamp-6686d099","position":[-8.9,0.71,-3.3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-instrument-table-48e9797f","position":[-8.9,0,-5.1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-autorefractor-d84a2886","position":[-8.9,0.71,-5.1],"rotation":0},{"asset":"opticians-and-eyewear-showroom-instrument-table-48e9797f","position":[-8.9,0,-6.9],"rotation":0},{"asset":"opticians-and-eyewear-showroom-visual-field-screener-c3de2a57","position":[-8.9,0.71,-6.9],"rotation":0},{"asset":"opticians-and-eyewear-showroom-instrument-trolley-9b092208","position":[-4.6,0,-6.3],"rotation":0},{"asset":"opticians-and-eyewear-showroom-dimmable-wall-light-7611e838","position":[-6.6,2,-7.88],"rotation":0},{"asset":"opticians-and-eyewear-showroom-dimmable-wall-light-7611e838","position":[-3.6,2,-2.12],"rotation":180},{"asset":"opticians-and-eyewear-showroom-pedal-waste-bin-acaa6fb1","position":[-3,0,-7.4],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-adjustment-bench-3cb0a72d","position":[-0.4,0,-7.4],"rotation":0},{"asset":"opticians-and-eyewear-showroom-instrument-table-48e9797f","position":[1.2,0,-7.5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-lens-edger-126c22dc","position":[1.2,0.71,-7.5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-instrument-table-48e9797f","position":[2.6,0,-7.5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-tint-bath-bb48c347","position":[2.6,0.71,-7.5],"rotation":0},{"asset":"opticians-and-eyewear-showroom-lens-stock-drawer-bank-775b1e35","position":[4.2,0,-7.65],"rotation":0},{"asset":"opticians-and-eyewear-showroom-lens-stock-drawer-bank-775b1e35","position":[5,0,-7.65],"rotation":0},{"asset":"opticians-and-eyewear-showroom-lens-stock-drawer-bank-775b1e35","position":[5.8,0,-7.65],"rotation":0},{"asset":"opticians-and-eyewear-showroom-order-pickup-rack-4edb0434","position":[1.4,0,-2.35],"rotation":180},{"asset":"opticians-and-eyewear-showroom-staff-lockers-e365b382","position":[-1.7,0,-3.4],"rotation":90},{"asset":"opticians-and-eyewear-showroom-cleaning-station-3d4e78f4","position":[3.4,0,-5.6],"rotation":0},{"asset":"opticians-and-eyewear-showroom-frame-tray-repair-5db4a499","position":[3.4,0.89,-5.6],"rotation":0},{"asset":"opticians-and-eyewear-showroom-first-aid-box-a5156d0e","position":[0.4,1.4,-7.87],"rotation":0},{"asset":"opticians-and-eyewear-showroom-pedal-waste-bin-acaa6fb1","position":[0.4,0,-6.6],"rotation":0},{"asset":"opticians-and-eyewear-showroom-dimmable-wall-light-7611e838","position":[3,2,-7.88],"rotation":0}],"points":[{"position":[-3.5,0.005,0.2],"title":"Frame display bays","text":"Wall bays in three fills carry the frames, with a carousel that spins as you come near and island units in the middle of the floor. Price cards and brand cards sit beside them.","asset":"opticians-and-eyewear-showroom-frame-display-bay-a3b85937"},{"position":[2.4,0.005,2],"title":"Dispensing desks","text":"Two desks face the floor with a mirror on each, frame trays to hand and a card holder. This is where a frame is measured and fitted before it goes for glazing.","asset":"opticians-and-eyewear-showroom-dispensing-desk-e43b4934"},{"position":[-7.6,0.005,3.8],"title":"Waiting corner","text":"Two sofa runs around a low table of magazines, with the childrens frame corner next to them and a sunglasses stand within reach.","asset":"opticians-and-eyewear-showroom-waiting-sofa-run-9cbae1c2"},{"position":[-5,0.005,-4.9],"title":"Eye test room","text":"The test room behind the shop floor: a phoropter whose arm swings across and whose head tilts, a chair that reclines with its headrest, the test chart and the room mirror.","asset":"opticians-and-eyewear-showroom-phoropter-on-arm-f6682f7f"},{"position":[-7.9,0.005,-4.2],"title":"Slit lamp and autorefractor","text":"Both instruments stand on their tables along the test room wall, with the optometrist stool and a rolling instrument trolley beside them.","asset":"opticians-and-eyewear-showroom-slit-lamp-6686d099"},{"position":[-0.4,0.005,-6.5],"title":"Adjustment bench and lens stock","text":"The back of the shop: an adjustment bench with a drawer that opens, the lens edger and tint bath, and a run of lens stock drawer banks along the rear wall.","asset":"opticians-and-eyewear-showroom-frame-adjustment-bench-3cb0a72d"}],"poster":{"position":[-3.5,1.7,2.1],"lookAt":[-4.5,1,-1.8]}},"bounds":{"min":[-12.886637273327098,-0.06003021365965735,-10.059987183285433],"max":[8.205000001192094,4.700000047683716,8]},"assets":[{"id":"35051","slug":"opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","title":"Shop Floor Tile (Opticians and Eyewear Showroom)","summary":"A 2 m shop floor tile: a pale poured floor with a darker inlay border, ported on all four edges so a showroom floor of any size lays flush.","description":"A 2 m shop floor tile: a pale poured floor with a darker inlay border, ported on all four edges so a showroom floor of any size lays flush. Overall 2.00 by 0.06 by 2.00 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The tile top sits at y=0.06, so place it at y=-0.06 for a floor whose surface is the world origin plane. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","cdnUrl":"https://cdn.3dassets.dev/assets/35051/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-shop-floor-tile-80c9af7e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35051/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35051/v1/poster.webp","blurhash":"UAEMLE%M00V@x]ayRjof00M{~qayD%ofofRj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":7184,"triangles":180,"vertices":260,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.000030213659657350733,-1],"max":[1,0.06453791825919293,1]},"sizeMeters":[2,0.065,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:31.178Z","updatedAt":"2026-09-11T11:15:31.286Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35051/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShopFloorTileOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35051/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35051/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35051/v1/model.glb\" alt=\"Shop Floor Tile (Opticians and Eyewear Showroom)\" 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/35051/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/35051/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35053","slug":"opticians-and-eyewear-showroom-shop-floor-tile-wood-c442b741","title":"Shop Floor Tile Wood (Opticians and Eyewear Showroom)","summary":"The floor tile in wood, for the waiting corner and the dispensing side of a showroom that should not read as one flat white plane.","description":"The floor tile in wood, for the waiting corner and the dispensing side of a showroom that should not read as one flat white plane. Overall 2.00 by 0.06 by 2.00 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-shop-floor-tile-wood-c442b741","cdnUrl":"https://cdn.3dassets.dev/assets/35053/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-shop-floor-tile-wood-c442b741","thumbnailUrl":"https://cdn.3dassets.dev/assets/35053/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35053/v1/poster.webp","blurhash":"U8D+xS%M00WU-.axRjof00IV~VWB4;ogozRj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":7216,"triangles":180,"vertices":260,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1,-0.000030213659657350733,-1],"max":[1,0.06453791825919293,1]},"sizeMeters":[2,0.065,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:32.744Z","updatedAt":"2026-09-11T11:15:32.854Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35053/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShopFloorTileWoodOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35053/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35053/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35053/v1/model.glb\" alt=\"Shop Floor Tile Wood (Opticians and Eyewear Showroom)\" 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/35053/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/35053/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35054","slug":"opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","title":"Consulting Room Wall Module (Opticians and Eyewear Showroom)","summary":"The same 2 m bay solid, for the consulting room and the back of house, where a test room has to be dark and a stock wall carries units.","description":"The same 2 m bay solid, for the consulting room and the back of house, where a test room has to be dark and a stock wall carries units. Overall 2.00 by 2.70 by 0.15 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","cdnUrl":"https://cdn.3dassets.dev/assets/35054/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-consulting-room-wall-mo-e15b8666","thumbnailUrl":"https://cdn.3dassets.dev/assets/35054/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35054/v1/poster.webp","blurhash":"U9HC4a-=00D%~W_3E10000oJ_4R+W?xbe-E1","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":4524,"triangles":48,"vertices":112,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.9999237213855982,0,-0.05998718328543184],"max":[0.9999237213855982,2.700000047683716,0.0899540710518729]},"sizeMeters":[2,2.7,0.15],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:32.918Z","updatedAt":"2026-09-11T11:15:33.021Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35054/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ConsultingRoomWallModuleOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35054/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35054/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35054/v1/model.glb\" alt=\"Consulting Room Wall Module (Opticians and Eyewear Showroom)\" 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/35054/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/35054/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35056","slug":"opticians-and-eyewear-showroom-consulting-room-door-mo-64321c6a","title":"Consulting Room Door Module (Opticians and Eyewear Showroom)","summary":"A 2 m consulting room door bay: a solid leaf with a teal panel and a lever handle, for the wall between a showroom and a test room.","description":"A 2 m consulting room door bay: a solid leaf with a teal panel and a lever handle, for the wall between a showroom and a test room. Overall 2.00 by 2.70 by 0.16 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-consulting-room-door-mo-64321c6a","cdnUrl":"https://cdn.3dassets.dev/assets/35056/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-consulting-room-door-mo-64321c6a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35056/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35056/v1/poster.webp","blurhash":"U9G98Lxu00M{~q-;D%9F00WB.8W;%2xuM{IU","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":13868,"triangles":264,"vertices":438,"meshes":5,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-1.0000541876163285,0,-0.06999084418875733],"max":[1.0000541876163285,2.700000047683716,0.08999084746701279]},"sizeMeters":[2,2.7,0.16],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:34.542Z","updatedAt":"2026-09-11T11:15:34.663Z","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/35056/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 ConsultingRoomDoorModuleOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35056/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/35056/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35056/v1/model.glb\" alt=\"Consulting Room Door Module (Opticians and Eyewear Showroom)\" 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/35056/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/35056/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35052","slug":"opticians-and-eyewear-showroom-shop-wall-module-815f56a0","title":"Shop Wall Module (Opticians and Eyewear Showroom)","summary":"A 2 m shop wall bay with a high glazed strip: a plastered wall with a steel framed window band, a teal dado rail and skirting, ported so any run of bays and doors lines up.","description":"A 2 m shop wall bay with a high glazed strip: a plastered wall with a steel framed window band, a teal dado rail and skirting, ported so any run of bays and doors lines up. Overall 2.00 by 2.70 by 0.15 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The bay is 2.7 m tall and 0.12 m thick with its centre line on the module origin, so a wall run is placed every 2 m along one axis. The glazing is a single pane with no opening light. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-shop-wall-module-815f56a0","cdnUrl":"https://cdn.3dassets.dev/assets/35052/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-shop-wall-module-815f56a0","thumbnailUrl":"https://cdn.3dassets.dev/assets/35052/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35052/v1/poster.webp","blurhash":"U7Gu?*%g00Mx^+_3IU0000s9_NNv%g%MR59F","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":8400,"triangles":120,"vertices":280,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.9999237213855982,0,-0.05998718328543184],"max":[0.9999237213855982,2.700000047683716,0.0899540710518729]},"sizeMeters":[2,2.7,0.15],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:32.712Z","updatedAt":"2026-09-11T11:15:32.816Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35052/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShopWallModuleOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35052/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35052/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35052/v1/model.glb\" alt=\"Shop Wall Module (Opticians and Eyewear Showroom)\" 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/35052/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/35052/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35057","slug":"opticians-and-eyewear-showroom-shop-door-module-open-efedbe85","title":"Shop Door Module Open (Opticians and Eyewear Showroom)","summary":"The shop entrance bay with the door standing open, for a scene that should read as trading rather than shut.","description":"The shop entrance bay with the door standing open, for a scene that should read as trading rather than shut. Overall 2.00 by 2.70 by 0.98 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The open pose is baked into the geometry, so the leaf node is present for assembly but carries no clips here. Use the plain bay where the door should animate. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-shop-door-module-open-efedbe85","cdnUrl":"https://cdn.3dassets.dev/assets/35057/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-shop-door-module-open-efedbe85","thumbnailUrl":"https://cdn.3dassets.dev/assets/35057/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35057/v1/poster.webp","blurhash":"UDE:3v~q0000ay%Mxu9F00Rj_3t6j]t7xuWB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":12992,"triangles":264,"vertices":438,"meshes":5,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1.0000541876163285,0,-0.8866372733270989],"max":[1.0000541876163285,2.700000047683716,0.08999084746701279]},"sizeMeters":[2,2.7,0.977],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:35.625Z","updatedAt":"2026-09-11T11:15:35.725Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35057/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShopDoorModuleOpenOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35057/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35057/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35057/v1/model.glb\" alt=\"Shop Door Module Open (Opticians and Eyewear Showroom)\" 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/35057/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/35057/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35032","slug":"opticians-and-eyewear-showroom-frame-display-bay-a3b85937","title":"Frame Display Bay (Opticians and Eyewear Showroom)","summary":"A 1 m wall display bay of spectacle frames: a plinth, a teal back panel, a lit canopy and five rails carrying twenty pairs on their price tickets, ported so a run repeats along a wall.","description":"A 1 m wall display bay of spectacle frames: a plinth, a teal back panel, a lit canopy and five rails carrying twenty pairs on their price tickets, ported so a run repeats along a wall. Overall 1.00 by 2.17 by 0.31 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The bay-left and bay-right ports sit at the module edges, so bays butt into a continuous run of any length and mix freely with the sparse and blue versions. Every ticket is a blank card: there is no readable text anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-frame-display-bay-a3b85937","cdnUrl":"https://cdn.3dassets.dev/assets/35032/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-frame-display-bay-a3b85937","thumbnailUrl":"https://cdn.3dassets.dev/assets/35032/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35032/v1/poster.webp","blurhash":"UBD0ie%M00Me~Wxu9FIU8_j[yDRk-;t7IUM{","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":181304,"triangles":5568,"vertices":11730,"meshes":10,"materials":10,"textures":0,"animations":[],"boundingBox":{"min":[-0.5020607550949573,-1.7881393032936899e-9,-0.14999148695561385],"max":[0.5020607550949573,2.1700000762939453,0.1555421672620237]},"sizeMeters":[1.004,2.17,0.306],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:20.411Z","updatedAt":"2026-09-11T11:15:20.643Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35032/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FrameDisplayBayOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35032/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35032/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35032/v1/model.glb\" alt=\"Frame Display Bay (Opticians and Eyewear Showroom)\" 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/35032/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/35032/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35033","slug":"opticians-and-eyewear-showroom-frame-display-bay-blue-112c86d2","title":"Frame Display Bay Blue (Opticians and Eyewear Showroom)","summary":"The display bay with a blue back panel, for the second brand wall in a showroom that should not read as one long identical run.","description":"The display bay with a blue back panel, for the second brand wall in a showroom that should not read as one long identical run. Overall 1.00 by 2.17 by 0.31 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-frame-display-bay-blue-112c86d2","cdnUrl":"https://cdn.3dassets.dev/assets/35033/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-frame-display-bay-blue-112c86d2","thumbnailUrl":"https://cdn.3dassets.dev/assets/35033/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35033/v1/poster.webp","blurhash":"UBDT09%M00IT~Wxu9FE19Ej@%NRk-;t7IUM{","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":205164,"triangles":5568,"vertices":11730,"meshes":10,"materials":10,"textures":0,"animations":[],"boundingBox":{"min":[-0.5019999742507935,-1.7881393032936899e-9,-0.14999148695561385],"max":[0.5019999742507935,2.1700000762939453,0.1555152412132304]},"sizeMeters":[1.004,2.17,0.306],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:20.425Z","updatedAt":"2026-09-11T11:15:20.656Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35033/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FrameDisplayBayBlueOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35033/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35033/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35033/v1/model.glb\" alt=\"Frame Display Bay Blue (Opticians and Eyewear Showroom)\" 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/35033/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/35033/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35035","slug":"opticians-and-eyewear-showroom-frame-display-bay-spars-f7f1e177","title":"Frame Display Bay Sparse (Opticians and Eyewear Showroom)","summary":"The display bay picked over: three rails and eight pairs left on them, for the end of a run, a sale wall or a shop that should read as mid trading day.","description":"The display bay picked over: three rails and eight pairs left on them, for the end of a run, a sale wall or a shop that should read as mid trading day. Overall 1.00 by 2.17 by 0.31 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-frame-display-bay-spars-f7f1e177","cdnUrl":"https://cdn.3dassets.dev/assets/35035/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-frame-display-bay-spars-f7f1e177","thumbnailUrl":"https://cdn.3dassets.dev/assets/35035/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35035/v1/poster.webp","blurhash":"U9Cs{q%f00IA~qxv9FD%8wj@yDRk^*t79aM_","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":96128,"triangles":2808,"vertices":5626,"meshes":10,"materials":10,"textures":0,"animations":[],"boundingBox":{"min":[-0.5020607550949573,-1.7881393032936899e-9,-0.15000474721779047],"max":[0.5020607550949573,2.1700000762939453,0.1555421672620237]},"sizeMeters":[1.004,2.17,0.306],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:20.480Z","updatedAt":"2026-09-11T11:15:20.661Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35035/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FrameDisplayBaySparseOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35035/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35035/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35035/v1/model.glb\" alt=\"Frame Display Bay Sparse (Opticians and Eyewear Showroom)\" 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/35035/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/35035/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35034","slug":"opticians-and-eyewear-showroom-frame-carousel-28a1a28d","title":"Frame Carousel (Opticians and Eyewear Showroom)","summary":"A freestanding frame carousel: a weighted base and column carrying three tiers of four display wings, twenty four pairs in all, that turn together on the column.","description":"A freestanding frame carousel: a weighted base and column carrying three tiers of four display wings, twenty four pairs in all, that turn together on the column. Overall 0.46 by 1.55 by 0.46 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The whole head turns as one node on the column, the way a real spinner does; the wings do not swing on their own hinges, since each is a free pivot a shopper pushes and nothing drives it. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-frame-carousel-28a1a28d","cdnUrl":"https://cdn.3dassets.dev/assets/35034/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-frame-carousel-28a1a28d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35034/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35034/v1/poster.webp","blurhash":"UAAAt2xv00D%.Rj[Diae00Rj~q%29FWC-;s:","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":256328,"triangles":6064,"vertices":13151,"meshes":11,"materials":9,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.23000000417232513,0.00001602165735231642,-0.23000000417232513],"max":[0.23000000417232513,1.5499999284744264,0.23000000417232513]},"sizeMeters":[0.46,1.55,0.46],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:20.441Z","updatedAt":"2026-09-11T11:15:20.645Z","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/35034/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 FrameCarouselOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35034/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/35034/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35034/v1/model.glb\" alt=\"Frame Carousel (Opticians and Eyewear Showroom)\" 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/35034/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/35034/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35038","slug":"opticians-and-eyewear-showroom-frame-display-island-fa2bc895","title":"Frame Display Island (Opticians and Eyewear Showroom)","summary":"A freestanding display island: a glass fronted case on a plinth with a wood top, twelve pairs laid out on the top in their trays and a standing mirror at one end.","description":"A freestanding display island: a glass fronted case on a plinth with a wood top, twelve pairs laid out on the top in their trays and a standing mirror at one end. Overall 1.62 by 1.52 by 0.82 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The mirror face is a flat emissive panel, not a reflection: a real mirror needs a render target the consumer supplies. Nothing on the island moves. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-frame-display-island-fa2bc895","cdnUrl":"https://cdn.3dassets.dev/assets/35038/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-frame-display-island-fa2bc895","thumbnailUrl":"https://cdn.3dassets.dev/assets/35038/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35038/v1/poster.webp","blurhash":"U9E{kJ-:00oO00xt?bIp009F~pxu?wNJROac","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":133872,"triangles":4116,"vertices":8677,"meshes":11,"materials":11,"textures":0,"animations":[],"boundingBox":{"min":[-0.8100000023841858,0.000007460372890788491,-0.41000579972362766],"max":[0.8100000023841858,1.5199925198085646,0.41000579972362766]},"sizeMeters":[1.62,1.52,0.82],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:23.452Z","updatedAt":"2026-09-11T11:15:23.567Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35038/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FrameDisplayIslandOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35038/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35038/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35038/v1/model.glb\" alt=\"Frame Display Island (Opticians and Eyewear Showroom)\" 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/35038/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/35038/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35042","slug":"opticians-and-eyewear-showroom-price-card-holder-brand-840562c9","title":"Price Card Holder Brand (Opticians and Eyewear Showroom)","summary":"The card holder as a brand card: a taller teal card with an abstract mark blocked out on it, for the head of a display bay or the end of an island.","description":"The card holder as a brand card: a taller teal card with an abstract mark blocked out on it, for the head of a display bay or the end of an island. Overall 0.12 by 0.28 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-price-card-holder-brand-840562c9","cdnUrl":"https://cdn.3dassets.dev/assets/35042/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-price-card-holder-brand-840562c9","thumbnailUrl":"https://cdn.3dassets.dev/assets/35042/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35042/v1/poster.webp","blurhash":"UB72sxs:00NGuiofQSRjwJf*NaaLQlfit,f8","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":8404,"triangles":192,"vertices":270,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.060001579088434856,-5.215405884939628e-11,-0.0320408358567913],"max":[0.060001579088434856,0.2775644063949585,0.029997853257006345]},"sizeMeters":[0.12,0.278,0.062],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:26.543Z","updatedAt":"2026-09-11T11:15:26.675Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35042/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PriceCardHolderBrandOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35042/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35042/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35042/v1/model.glb\" alt=\"Price Card Holder Brand (Opticians and Eyewear Showroom)\" 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/35042/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/35042/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35043","slug":"opticians-and-eyewear-showroom-price-card-holder-7d485cc3","title":"Price Card Holder (Opticians and Eyewear Showroom)","summary":"A small acrylic card holder: a steel foot and stem holding a tilted blank card with abstract rules on it, for a price, a lens option or an offer beside a display.","description":"A small acrylic card holder: a steel foot and stem holding a tilted blank card with abstract rules on it, for a price, a lens option or an offer beside a display. Overall 0.11 by 0.18 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The card carries three abstract rules, never letters or numbers: nothing in this pack is readable, so no brand or price is implied. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-price-card-holder-7d485cc3","cdnUrl":"https://cdn.3dassets.dev/assets/35043/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-price-card-holder-7d485cc3","thumbnailUrl":"https://cdn.3dassets.dev/assets/35043/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35043/v1/poster.webp","blurhash":"UGCP^njZ00fk~qja9FWBRjofj[Rj9Ft7-pM{","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":8844,"triangles":204,"vertices":296,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.054999999701976776,-5.215406578829018e-11,-0.030001956102397483],"max":[0.054999999701976776,0.1833476463700731,0.030001956102397483]},"sizeMeters":[0.11,0.183,0.06],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:26.435Z","updatedAt":"2026-09-11T11:15:26.557Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35043/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PriceCardHolderOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35043/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35043/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35043/v1/model.glb\" alt=\"Price Card Holder (Opticians and Eyewear Showroom)\" 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/35043/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/35043/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35040","slug":"opticians-and-eyewear-showroom-frame-tray-b2bcb58c","title":"Frame Tray (Opticians and Eyewear Showroom)","summary":"A dispensing tray of six frames: a shallow white tray with a mint liner and three pairs open and three folded, for a desk, a counter or the top of a display island.","description":"A dispensing tray of six frames: a shallow white tray with a mint liner and three pairs open and three folded, for a desk, a counter or the top of a display island. Overall 0.44 by 0.09 by 0.33 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-frame-tray-b2bcb58c","cdnUrl":"https://cdn.3dassets.dev/assets/35040/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-frame-tray-b2bcb58c","thumbnailUrl":"https://cdn.3dassets.dev/assets/35040/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35040/v1/poster.webp","blurhash":"U9D]rE.600oOITxuo$M|00D*~pRj.9IVZ}tP","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":50604,"triangles":1488,"vertices":3144,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.2199999988079071,-0.0000032041217480037465,-0.18030820533355374],"max":[0.2199999988079071,0.0947035800598085,0.15000579770397843]},"sizeMeters":[0.44,0.095,0.33],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:25.210Z","updatedAt":"2026-09-11T11:15:25.396Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35040/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FrameTrayOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35040/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35040/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35040/v1/model.glb\" alt=\"Frame Tray (Opticians and Eyewear Showroom)\" 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/35040/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/35040/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35044","slug":"opticians-and-eyewear-showroom-sunglasses-stand-143c2a25","title":"Sunglasses Stand (Opticians and Eyewear Showroom)","summary":"A floor standing sunglasses spinner: a dark weighted base, a column and four fixed tiers carrying sixteen pairs with tinted lenses, at the height a shopper reaches straight out.","description":"A floor standing sunglasses spinner: a dark weighted base, a column and four fixed tiers carrying sixteen pairs with tinted lenses, at the height a shopper reaches straight out. Overall 0.50 by 1.64 by 0.44 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The tiers are fixed: this is the shop display where the frames are the stock, so use the frame carousel where a turning unit is wanted. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-sunglasses-stand-143c2a25","cdnUrl":"https://cdn.3dassets.dev/assets/35044/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-sunglasses-stand-143c2a25","thumbnailUrl":"https://cdn.3dassets.dev/assets/35044/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35044/v1/poster.webp","blurhash":"U68g~ctP00Mg?^ofDORQ00t7~WIo55bY?HaM","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":165064,"triangles":3932,"vertices":8559,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.2499870544557958,8.940697071579962e-10,-0.21996826709938028],"max":[0.2499870544557958,1.6399999856948853,0.21996826709938028]},"sizeMeters":[0.5,1.64,0.44],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:28.058Z","updatedAt":"2026-09-11T11:15:28.162Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35044/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SunglassesStandOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35044/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35044/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35044/v1/model.glb\" alt=\"Sunglasses Stand (Opticians and Eyewear Showroom)\" 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/35044/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/35044/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35045","slug":"opticians-and-eyewear-showroom-contact-lens-shelf-unit-86c5866b","title":"Contact Lens Shelf Unit (Opticians and Eyewear Showroom)","summary":"A contact lens shelf unit: an open white carcass of four shelves stocked with boxes of monthlies and dailies, solution bottles and a blank shelf edge strip on every tier.","description":"A contact lens shelf unit: an open white carcass of four shelves stocked with boxes of monthlies and dailies, solution bottles and a blank shelf edge strip on every tier. Overall 0.92 by 1.78 by 0.36 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-contact-lens-shelf-unit-86c5866b","cdnUrl":"https://cdn.3dassets.dev/assets/35045/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-contact-lens-shelf-unit-86c5866b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35045/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35045/v1/poster.webp","blurhash":"UBE{qf%M00RP~q%M9FD%00j[%gNG-;t7IUM{","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":81232,"triangles":3420,"vertices":3508,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.46003295878052375,8.940697071579962e-10,-0.18001548085330452],"max":[0.46003295878052375,1.7799999713897705,0.18001548085330452]},"sizeMeters":[0.92,1.78,0.36],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:29.107Z","updatedAt":"2026-09-11T11:15:29.205Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35045/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ContactLensShelfUnitOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35045/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35045/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35045/v1/model.glb\" alt=\"Contact Lens Shelf Unit (Opticians and Eyewear Showroom)\" 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/35045/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/35045/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35046","slug":"opticians-and-eyewear-showroom-accessories-rail-8639e0fb","title":"Accessories Rail (Opticians and Eyewear Showroom)","summary":"A wall rail of accessories: hard cases, soft pouches and microfibre cloths hanging on hooks under a shelf of cleaning sprays, in the colours a counter run needs.","description":"A wall rail of accessories: hard cases, soft pouches and microfibre cloths hanging on hooks under a shelf of cleaning sprays, in the colours a counter run needs. Overall 1.21 by 0.44 by 0.23 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The shelf rests on y=0 so it can be placed at whatever height a wall needs; about 1.2 m puts the hooks at eye level. The pouches and cloths are rigid panels: cloth needs skinning, which this library does not have. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-accessories-rail-8639e0fb","cdnUrl":"https://cdn.3dassets.dev/assets/35046/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-accessories-rail-8639e0fb","thumbnailUrl":"https://cdn.3dassets.dev/assets/35046/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35046/v1/poster.webp","blurhash":"U9BzX%xu4TOX?c?wtRMw00-;?^VsDh4Tr@tm","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":39824,"triangles":1104,"vertices":1717,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.6050000190734863,-0.000008444229789655866,-0.11001312733060342],"max":[0.6050000190734863,0.44000844184560384,0.12302104659758936]},"sizeMeters":[1.21,0.44,0.233],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:29.319Z","updatedAt":"2026-09-11T11:15:29.422Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35046/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function AccessoriesRailOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35046/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35046/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35046/v1/model.glb\" alt=\"Accessories Rail (Opticians and Eyewear Showroom)\" 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/35046/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/35046/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35039","slug":"opticians-and-eyewear-showroom-counter-mirror-e68951a5","title":"Counter Mirror (Opticians and Eyewear Showroom)","summary":"A counter mirror on a weighted stand: a dark foot, a steel stem and a framed oval panel at the height a seated customer tries a frame on.","description":"A counter mirror on a weighted stand: a dark foot, a steel stem and a framed oval panel at the height a seated customer tries a frame on. Overall 0.30 by 0.63 by 0.16 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-counter-mirror-e68951a5","cdnUrl":"https://cdn.3dassets.dev/assets/35039/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-counter-mirror-e68951a5","thumbnailUrl":"https://cdn.3dassets.dev/assets/35039/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35039/v1/poster.webp","blurhash":"U88}3@%2009F~qt700IU8_ay?bj]00Rj~qx]","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":8864,"triangles":192,"vertices":285,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.15000000596046448,-1.8626450382086546e-10,-0.0799925223833779],"max":[0.15000000596046448,0.6299999952316284,0.0799925223833779]},"sizeMeters":[0.3,0.63,0.16],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:23.525Z","updatedAt":"2026-09-11T11:15:23.673Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35039/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CounterMirrorOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35039/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35039/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35039/v1/model.glb\" alt=\"Counter Mirror (Opticians and Eyewear Showroom)\" 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/35039/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/35039/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35036","slug":"opticians-and-eyewear-showroom-dispensing-desk-e43b4934","title":"Dispensing Desk (Opticians and Eyewear Showroom)","summary":"A dispensing desk set for a fitting: a wood topped desk on a white body, a screen on a stem, a frame tray, and two upholstered chairs facing each other across it.","description":"A dispensing desk set for a fitting: a wood topped desk on a white body, a screen on a stem, a frame tray, and two upholstered chairs facing each other across it. Overall 1.56 by 1.28 by 2.21 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The chairs are part of the desk model so a fitting station is one placement; the screen, tray and chairs are all static, and the screen shows a lit panel rather than any readable content. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-dispensing-desk-e43b4934","cdnUrl":"https://cdn.3dassets.dev/assets/35036/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-dispensing-desk-e43b4934","thumbnailUrl":"https://cdn.3dassets.dev/assets/35036/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35036/v1/poster.webp","blurhash":"UDDS:r-p00WWt6RPWXaf00E1~ps:a%%NjEax","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":76292,"triangles":2556,"vertices":3337,"meshes":10,"materials":10,"textures":0,"animations":[],"boundingBox":{"min":[-0.7799999713897705,-0.00004182473760261374,-1.1169999837875366],"max":[0.7799999713897705,1.2800417959783617,1.090000033378601]},"sizeMeters":[1.56,1.28,2.207],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:23.389Z","updatedAt":"2026-09-11T11:15:23.492Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35036/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DispensingDeskOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35036/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35036/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35036/v1/model.glb\" alt=\"Dispensing Desk (Opticians and Eyewear Showroom)\" 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/35036/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/35036/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35076","slug":"opticians-and-eyewear-showroom-pedal-waste-bin-acaa6fb1","title":"Pedal Waste Bin (Opticians and Eyewear Showroom)","summary":"A pedal waste bin for a back room: a white drum on a dark base with a teal lid that lifts, a pedal plate at the foot and a liner rim inside.","description":"A pedal waste bin for a back room: a white drum on a dark base with a teal lid that lifts, a pedal plate at the foot and a liner rim inside. Overall 0.38 by 0.65 by 0.44 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The lid hinges at the back. The pedal and its push rod are static: that is a multi bar linkage, and one rigid node cannot drive both ends of it. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-pedal-waste-bin-acaa6fb1","cdnUrl":"https://cdn.3dassets.dev/assets/35076/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-pedal-waste-bin-acaa6fb1","thumbnailUrl":"https://cdn.3dassets.dev/assets/35076/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35076/v1/poster.webp","blurhash":"UECs]h-q009YACM{,sxu00WV~Wso%2kCM{jt","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":17960,"triangles":352,"vertices":775,"meshes":5,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.18998969792064563,-0.0000062635509560961256,-0.18711347877979279],"max":[0.18998969792064563,0.6449978531989862,0.2499818560866095]},"sizeMeters":[0.38,0.645,0.437],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:46.913Z","updatedAt":"2026-09-11T11:15:47.033Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35076/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 PedalWasteBinOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35076/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/35076/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35076/v1/model.glb\" alt=\"Pedal Waste Bin (Opticians and Eyewear Showroom)\" 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/35076/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/35076/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35047","slug":"opticians-and-eyewear-showroom-waiting-sofa-run-9cbae1c2","title":"Waiting Sofa Run (Opticians and Eyewear Showroom)","summary":"A three seat waiting sofa: a white shell on wood feet with teal seat and back cushions and solid arms, the length a shop window bay takes.","description":"A three seat waiting sofa: a white shell on wood feet with teal seat and back cushions and solid arms, the length a shop window bay takes. Overall 1.80 by 0.93 by 0.72 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-waiting-sofa-run-9cbae1c2","cdnUrl":"https://cdn.3dassets.dev/assets/35047/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-waiting-sofa-run-9cbae1c2","thumbnailUrl":"https://cdn.3dassets.dev/assets/35047/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35047/v1/poster.webp","blurhash":"UIEM|1o}L}$*?^.8nORP00xuK4Myz;MxE1Io","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":35944,"triangles":1620,"vertices":1411,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.8999999761581421,-0.000045317899208696666,-0.3599505504792154],"max":[0.8999999761581421,0.9299526852515924,0.3599505504792154]},"sizeMeters":[1.8,0.93,0.72],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:29.343Z","updatedAt":"2026-09-11T11:15:29.554Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35047/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WaitingSofaRunOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35047/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35047/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35047/v1/model.glb\" alt=\"Waiting Sofa Run (Opticians and Eyewear Showroom)\" 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/35047/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/35047/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35048","slug":"opticians-and-eyewear-showroom-waiting-sofa-run-coral-c215e465","title":"Waiting Sofa Run Coral (Opticians and Eyewear Showroom)","summary":"The waiting sofa in coral, for the second run facing the first across a low table.","description":"The waiting sofa in coral, for the second run facing the first across a low table. Overall 1.80 by 0.93 by 0.72 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-waiting-sofa-run-coral-c215e465","cdnUrl":"https://cdn.3dassets.dev/assets/35048/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-waiting-sofa-run-coral-c215e465","thumbnailUrl":"https://cdn.3dassets.dev/assets/35048/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35048/v1/poster.webp","blurhash":"UNH-+5xa0foz~V-;NHIo00xu#+M{9^IoR5RP","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":36004,"triangles":1620,"vertices":1411,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.8999999761581421,-0.000045317899208696666,-0.3599505504792154],"max":[0.8999999761581421,0.9299526852515924,0.3599505504792154]},"sizeMeters":[1.8,0.93,0.72],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:30.832Z","updatedAt":"2026-09-11T11:15:30.936Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35048/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WaitingSofaRunCoralOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35048/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35048/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35048/v1/model.glb\" alt=\"Waiting Sofa Run Coral (Opticians and Eyewear Showroom)\" 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/35048/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/35048/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35049","slug":"opticians-and-eyewear-showroom-low-table-with-magazine-714caa15","title":"Low Table With Magazines (Opticians and Eyewear Showroom)","summary":"A low waiting table: a wood top on steel legs with a lower shelf, three magazines fanned across it and a stack of lens leaflets on the shelf.","description":"A low waiting table: a wood top on steel legs with a lower shelf, three magazines fanned across it and a stack of lens leaflets on the shelf. Overall 0.86 by 0.47 by 0.50 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-low-table-with-magazine-714caa15","cdnUrl":"https://cdn.3dassets.dev/assets/35049/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-low-table-with-magazine-714caa15","thumbnailUrl":"https://cdn.3dassets.dev/assets/35049/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35049/v1/poster.webp","blurhash":"UMD]e#t74nf*~WxuM{Rj00xt%MM|4oWBozV]","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":17776,"triangles":624,"vertices":667,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.4300000071525574,0.0000065587712249903785,-0.24999237453096768],"max":[0.4300000071525574,0.47199181575459653,0.24999237453096768]},"sizeMeters":[0.86,0.472,0.5],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:30.852Z","updatedAt":"2026-09-11T11:15:30.974Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35049/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LowTableWithMagazinesOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35049/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35049/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35049/v1/model.glb\" alt=\"Low Table With Magazines (Opticians and Eyewear Showroom)\" 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/35049/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/35049/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35050","slug":"opticians-and-eyewear-showroom-childrens-frame-corner-60cedeec","title":"Childrens Frame Corner (Opticians and Eyewear Showroom)","summary":"A childrens frame corner: a low coral unit with two rails of small bright frames, a mirror at a childs height and a pair of soft cube seats in front of it.","description":"A childrens frame corner: a low coral unit with two rails of small bright frames, a mirror at a childs height and a pair of soft cube seats in front of it. Overall 1.00 by 1.07 by 0.85 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-childrens-frame-corner-60cedeec","cdnUrl":"https://cdn.3dassets.dev/assets/35050/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-childrens-frame-corner-60cedeec","thumbnailUrl":"https://cdn.3dassets.dev/assets/35050/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35050/v1/poster.webp","blurhash":"UFG[f@Kj00n4}mIU59og00wI.8WC%gx]oer?","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":78340,"triangles":1944,"vertices":3700,"meshes":9,"materials":9,"textures":0,"animations":[],"boundingBox":{"min":[-0.5,-0.00001686151152036075,-0.17998084117097857],"max":[0.5,1.0700000524520874,0.6699996111165467]},"sizeMeters":[1,1.07,0.85],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:31.241Z","updatedAt":"2026-09-11T11:15:31.359Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35050/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChildrensFrameCornerOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35050/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35050/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35050/v1/model.glb\" alt=\"Childrens Frame Corner (Opticians and Eyewear Showroom)\" 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/35050/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/35050/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35059","slug":"opticians-and-eyewear-showroom-test-chair-66182fe7","title":"Test Chair (Opticians and Eyewear Showroom)","summary":"An eye test chair: a cast base and column under an upholstered seat with solid arms, a reclining back and a headrest on the hinge above it, at the height a phoropter arm swings to.","description":"An eye test chair: a cast base and column under an upholstered seat with solid arms, a reclining back and a headrest on the hinge above it, at the height a phoropter arm swings to. Overall 0.61 by 1.26 by 0.60 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The patient faces +Z, so the chart wall is at +Z and the phoropter stands in front of the chair. The height adjustment is hydraulic and therefore static: a rigid node transform cannot carry a lift ram. Rigid node-transform clips: back-tilt and headrest-tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-test-chair-66182fe7","cdnUrl":"https://cdn.3dassets.dev/assets/35059/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-test-chair-66182fe7","thumbnailUrl":"https://cdn.3dassets.dev/assets/35059/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35059/v1/poster.webp","blurhash":"U79Hz+EL00=|?v9FH@~qHXM{Yk-;z:%gGGH?","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":36408,"triangles":1316,"vertices":1444,"meshes":9,"materials":5,"textures":0,"animations":["back-tilt","headrest-tilt"],"boundingBox":{"min":[-0.3049899192903854,8.940696516468449e-10,-0.30000624684984767],"max":[0.3049899192903854,1.2600067177684728,0.30000624684984767]},"sizeMeters":[0.61,1.26,0.6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:36.050Z","updatedAt":"2026-09-11T11:15:36.157Z","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/35059/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 TestChairOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35059/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/35059/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35059/v1/model.glb\" alt=\"Test Chair (Opticians and Eyewear Showroom)\" 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/35059/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/35059/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35058","slug":"opticians-and-eyewear-showroom-phoropter-on-arm-f6682f7f","title":"Phoropter On Arm (Opticians and Eyewear Showroom)","summary":"A phoropter on its swing arm: a weighted stand and column carrying a jointed arm and the refractor head the patient looks through, with its lens dials, forehead rest and levelling knob.","description":"A phoropter on its swing arm: a weighted stand and column carrying a jointed arm and the refractor head the patient looks through, with its lens dials, forehead rest and levelling knob. Overall 0.51 by 1.49 by 0.94 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The head node is parented to the arm node, so the swing carries the head and the head still tilts on its own trunnion. There is no power or control cable: a cable is flexible and this library has no skinning, and the lens wheels inside the head are sealed, so the dials turn nothing. Rigid node-transform clips: arm-swing and head-tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-phoropter-on-arm-f6682f7f","cdnUrl":"https://cdn.3dassets.dev/assets/35058/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-phoropter-on-arm-f6682f7f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35058/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35058/v1/poster.webp","blurhash":"UAAd7gD%00_N~Wt79FM{4n%M-;9G9ZV@%Mxu","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":48380,"triangles":1156,"vertices":2056,"meshes":13,"materials":6,"textures":0,"animations":["arm-swing","head-tilt"],"boundingBox":{"min":[-0.2549999952316284,0.000006409488158169024,-0.20999999344348907],"max":[0.2549999952316284,1.4899496146323405,0.7339961695093625]},"sizeMeters":[0.51,1.49,0.944],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:34.806Z","updatedAt":"2026-09-11T11:15:34.908Z","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/35058/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 PhoropterOnArmOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35058/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/35058/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35058/v1/model.glb\" alt=\"Phoropter On Arm (Opticians and Eyewear Showroom)\" 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/35058/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/35058/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35066","slug":"opticians-and-eyewear-showroom-optometrist-stool-76e7a891","title":"Optometrist Stool (Opticians and Eyewear Showroom)","summary":"An optometrist stool: a five star castored base, a gas column and a round upholstered seat that turns on it.","description":"An optometrist stool: a five star castored base, a gas column and a round upholstered seat that turns on it. Overall 0.44 by 0.58 by 0.43 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The gas lift is static: a change of height is not a rigid node transform in this kit, so the seat turns and does not rise. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-optometrist-stool-76e7a891","cdnUrl":"https://cdn.3dassets.dev/assets/35066/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-optometrist-stool-76e7a891","thumbnailUrl":"https://cdn.3dassets.dev/assets/35066/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35066/v1/poster.webp","blurhash":"UC7V48xu4TMxy?kCQmaeJQWBxGofMdjZx]bb","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":31056,"triangles":712,"vertices":1542,"meshes":4,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.21820245491465873,0,-0.20000000298023224],"max":[0.21820245491465873,0.5800057824981385,0.22663637141382725]},"sizeMeters":[0.436,0.58,0.427],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:40.579Z","updatedAt":"2026-09-11T11:15:40.674Z","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/35066/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 OptometristStoolOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35066/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/35066/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35066/v1/model.glb\" alt=\"Optometrist Stool (Opticians and Eyewear Showroom)\" 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/35066/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/35066/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35065","slug":"opticians-and-eyewear-showroom-test-chart-60de2929","title":"Test Chart (Opticians and Eyewear Showroom)","summary":"A wall mounted test chart: a lit panel in a steel frame showing rows of abstract blocks in decreasing size, with a dark surround and a mounting rail.","description":"A wall mounted test chart: a lit panel in a steel frame showing rows of abstract blocks in decreasing size, with a dark surround and a mounting rail. Overall 0.60 by 0.79 by 0.08 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The blocks are abstract rectangles, never letters: nothing in this pack is readable. The panel rests on y=0, so place it at the height the wall needs, about 1.2 m to the bottom edge for a seated patient. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-test-chart-60de2929","cdnUrl":"https://cdn.3dassets.dev/assets/35065/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-test-chart-60de2929","thumbnailUrl":"https://cdn.3dassets.dev/assets/35065/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35065/v1/poster.webp","blurhash":"UFD,7h-;004n%NxuRPIU00M{~qxuxuj[M{WB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":13240,"triangles":240,"vertices":560,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.30000001192092896,0,-0.04497905846017922],"max":[0.30000001192092896,0.7900129868576611,0.0320187842075159]},"sizeMeters":[0.6,0.79,0.077],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:39.203Z","updatedAt":"2026-09-11T11:15:39.309Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35065/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TestChartOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35065/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35065/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35065/v1/model.glb\" alt=\"Test Chart (Opticians and Eyewear Showroom)\" 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/35065/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/35065/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35037","slug":"opticians-and-eyewear-showroom-test-room-mirror-574c0eaf","title":"Test Room Mirror (Opticians and Eyewear Showroom)","summary":"The wall mirror that faces the test chart down a short consulting room, doubling the test distance: a framed panel with a teal surround and a steel hanging rail.","description":"The wall mirror that faces the test chart down a short consulting room, doubling the test distance: a framed panel with a teal surround and a steel hanging rail. Overall 1.06 by 0.82 by 0.07 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The panel rests on y=0 like everything else here, so mount it by placing it at the height the wall needs: about 1.0 m to the bottom edge puts it opposite a chart at seated eye level. The face is emissive, not a reflection. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-test-room-mirror-574c0eaf","cdnUrl":"https://cdn.3dassets.dev/assets/35037/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-test-room-mirror-574c0eaf","thumbnailUrl":"https://cdn.3dassets.dev/assets/35037/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35037/v1/poster.webp","blurhash":"UNGI$J%M00M{tl%NoLD%00R*~qs:aKR*WBxu","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":5292,"triangles":60,"vertices":140,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.5299999713897705,-0.000014034423581610334,-0.04498611544375283],"max":[0.5299999713897705,0.8200140272710242,0.026991608209346832]},"sizeMeters":[1.06,0.82,0.072],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:22.365Z","updatedAt":"2026-09-11T11:15:22.467Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35037/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TestRoomMirrorOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35037/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35037/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35037/v1/model.glb\" alt=\"Test Room Mirror (Opticians and Eyewear Showroom)\" 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/35037/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/35037/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35064","slug":"opticians-and-eyewear-showroom-instrument-table-48e9797f","title":"Instrument Table (Opticians and Eyewear Showroom)","summary":"A height adjustable instrument table: a dark weighted base, a steel column and a white topped table with a raised lip, sized for a slit lamp or an autorefractor.","description":"A height adjustable instrument table: a dark weighted base, a steel column and a white topped table with a raised lip, sized for a slit lamp or an autorefractor. Overall 0.81 by 0.73 by 0.61 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The lift column is static: the height adjustment is a motor and screw, which a rigid node transform cannot carry. The table top sits at 0.71 m, the height the table instruments in this pack are drawn for. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-instrument-table-48e9797f","cdnUrl":"https://cdn.3dassets.dev/assets/35064/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-instrument-table-48e9797f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35064/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35064/v1/poster.webp","blurhash":"UWD9@wt74nV@~qofIUWBxas;WBWBD%t7t7Rj","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":15164,"triangles":372,"vertices":536,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.4050000011920929,3.048498186455917e-7,-0.30503235051788874],"max":[0.4050000011920929,0.7330100612437085,0.30503235051788874]},"sizeMeters":[0.81,0.733,0.61],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:39.226Z","updatedAt":"2026-09-11T11:15:39.343Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35064/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function InstrumentTableOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35064/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35064/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35064/v1/model.glb\" alt=\"Instrument Table (Opticians and Eyewear Showroom)\" 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/35064/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/35064/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35061","slug":"opticians-and-eyewear-showroom-slit-lamp-6686d099","title":"Slit Lamp (Opticians and Eyewear Showroom)","summary":"A slit lamp: a sliding base plate with a joystick, the binocular viewing head on its arm facing the operator, the illumination tower on its own swinging arm, and the chin and forehead rest the patient leans into from the front.","description":"A slit lamp: a sliding base plate with a joystick, the binocular viewing head on its arm facing the operator, the illumination tower on its own swinging arm, and the chin and forehead rest the patient leans into from the front. Overall 0.41 by 0.58 by 0.53 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The model rests on y=0 and is meant for a table top at about 0.71 m; the patient leans in from +Z and the operator works from -Z. The joystick, the head arm and the illumination arm are static: each is a free hand positioned joint in a cluster too small for one channel to read, and the power lead is flexible. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-slit-lamp-6686d099","cdnUrl":"https://cdn.3dassets.dev/assets/35061/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-slit-lamp-6686d099","thumbnailUrl":"https://cdn.3dassets.dev/assets/35061/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35061/v1/poster.webp","blurhash":"UCA,wexa00IoITWVWCs:00Rj~qt7xuj@%La}","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":37504,"triangles":1136,"vertices":1615,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.20000000298023224,-0.00000402180979577893,-0.16999420401631057],"max":[0.2049993104394619,0.5799999884329736,0.35499998927116394]},"sizeMeters":[0.405,0.58,0.525],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:37.655Z","updatedAt":"2026-09-11T11:15:37.749Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35061/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SlitLampOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35061/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35061/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35061/v1/model.glb\" alt=\"Slit Lamp (Opticians and Eyewear Showroom)\" 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/35061/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/35061/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35062","slug":"opticians-and-eyewear-showroom-autorefractor-d84a2886","title":"Autorefractor (Opticians and Eyewear Showroom)","summary":"An autorefractor: a white cased instrument with a screen on the operator side, the measuring port and its lens on the patient side, a joystick and the chin and forehead rest.","description":"An autorefractor: a white cased instrument with a screen on the operator side, the measuring port and its lens on the patient side, a joystick and the chin and forehead rest. Overall 0.38 by 0.50 by 0.53 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. A table top instrument: it rests on y=0 and is placed on a table at about 0.71 m, the patient leaning in from +Z. The joystick and the internal optics are static, and there is no cable. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-autorefractor-d84a2886","cdnUrl":"https://cdn.3dassets.dev/assets/35062/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-autorefractor-d84a2886","thumbnailUrl":"https://cdn.3dassets.dev/assets/35062/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35062/v1/poster.webp","blurhash":"UCEV?5Di00xa%MNGE1xZ00x[_Nt8VYt7x]R*","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":27764,"triangles":752,"vertices":1075,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.19001800149638937,4.4703482582342247e-10,-0.19400159200720454],"max":[0.19001800149638937,0.4999984504575591,0.33500000834465027]},"sizeMeters":[0.38,0.5,0.529],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:37.469Z","updatedAt":"2026-09-11T11:15:37.567Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35062/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function AutorefractorOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35062/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35062/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35062/v1/model.glb\" alt=\"Autorefractor (Opticians and Eyewear Showroom)\" 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/35062/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/35062/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35063","slug":"opticians-and-eyewear-showroom-visual-field-screener-c3de2a57","title":"Visual Field Screener (Opticians and Eyewear Showroom)","summary":"A visual field screener: a white bowl on a cased base with the patient chin rest at its mouth, a response button on its lead rest and an operator screen on the back.","description":"A visual field screener: a white bowl on a cased base with the patient chin rest at its mouth, a response button on its lead rest and an operator screen on the back. Overall 0.55 by 0.82 by 0.57 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The bowl is a half sphere open toward the patient at +Z. The response button sits in its cradle on the case rather than on a lead: the lead is flexible, and this library has no skinning. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-visual-field-screener-c3de2a57","cdnUrl":"https://cdn.3dassets.dev/assets/35063/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-visual-field-screener-c3de2a57","thumbnailUrl":"https://cdn.3dassets.dev/assets/35063/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35063/v1/poster.webp","blurhash":"UEC?_wRi00oggMbHVssU00S4_NxZxbaeX5f+","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":36028,"triangles":1320,"vertices":1436,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.2849971797996793,-3.7252906315288215e-10,-0.23997542043826048],"max":[0.2620000094175339,0.8220000267028809,0.33500000834465027]},"sizeMeters":[0.547,0.822,0.575],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:37.950Z","updatedAt":"2026-09-11T11:15:38.055Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35063/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function VisualFieldScreenerOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35063/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35063/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35063/v1/model.glb\" alt=\"Visual Field Screener (Opticians and Eyewear Showroom)\" 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/35063/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/35063/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35067","slug":"opticians-and-eyewear-showroom-instrument-trolley-9b092208","title":"Instrument Trolley (Opticians and Eyewear Showroom)","summary":"A castored instrument trolley: a white two shelf trolley with a lipped top, a push handle and four castors that roll, carrying a trial lens case, a retinoscope and a tray of small instruments.","description":"A castored instrument trolley: a white two shelf trolley with a lipped top, a push handle and four castors that roll, carrying a trial lens case, a retinoscope and a tray of small instruments. Overall 0.59 by 1.00 by 0.43 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The castors roll and nothing else moves: the trial lens case lid and the shelf brakes are left static, and the retinoscope sits in its cradle because its lead is flexible. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-instrument-trolley-9b092208","cdnUrl":"https://cdn.3dassets.dev/assets/35067/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-instrument-trolley-9b092208","thumbnailUrl":"https://cdn.3dassets.dev/assets/35067/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35067/v1/poster.webp","blurhash":"U7ATp1oz00nj?ba#D%oc00Rj~qxu-pj]NGWU","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":54968,"triangles":1824,"vertices":2427,"meshes":11,"materials":7,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.29499999970197677,-9.164900505349849e-7,-0.21500000342726708],"max":[0.29499999970197677,1.0034708976745605,0.21500000342726708]},"sizeMeters":[0.59,1.003,0.43],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:39.723Z","updatedAt":"2026-09-11T11:15:39.822Z","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/35067/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 InstrumentTrolleyOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35067/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/35067/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35067/v1/model.glb\" alt=\"Instrument Trolley (Opticians and Eyewear Showroom)\" 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/35067/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/35067/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35069","slug":"opticians-and-eyewear-showroom-dimmable-wall-light-7611e838","title":"Dimmable Wall Light (Opticians and Eyewear Showroom)","summary":"A dimmable wall light for a test room: a white housing with a lit strip behind a diffuser, a steel bracket and a dark dimmer knob under it.","description":"A dimmable wall light for a test room: a white housing with a lit strip behind a diffuser, a steel bracket and a dark dimmer knob under it. Overall 0.46 by 0.18 by 0.14 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Wall mounted: the housing rests on y=0, so place it at the height the wall needs, about 2.0 m for a test room. Dimming is a material change the consumer makes, not a clip. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-dimmable-wall-light-7611e838","cdnUrl":"https://cdn.3dassets.dev/assets/35069/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-dimmable-wall-light-7611e838","thumbnailUrl":"https://cdn.3dassets.dev/assets/35069/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35069/v1/poster.webp","blurhash":"UHEW2b_N00IUtl%NxuRQ00D%_NxaVYM_E1kC","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":8216,"triangles":120,"vertices":275,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.23000000417232513,-0.000009653341442011909,-0.09000457855863003],"max":[0.23000000417232513,0.17999961014464008,0.05500564671299719]},"sizeMeters":[0.46,0.18,0.145],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:42.328Z","updatedAt":"2026-09-11T11:15:42.431Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35069/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DimmableWallLightOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35069/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35069/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35069/v1/model.glb\" alt=\"Dimmable Wall Light (Opticians and Eyewear Showroom)\" 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/35069/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/35069/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35068","slug":"opticians-and-eyewear-showroom-frame-adjustment-bench-3cb0a72d","title":"Frame Adjustment Bench (Opticians and Eyewear Showroom)","summary":"A frame adjustment bench: a wood topped bench on a white carcass with two drawers, a salt pan frame heater, a pad of pliers and screwdrivers, a lens measure and a frame waiting in the jig.","description":"A frame adjustment bench: a wood topped bench on a white carcass with two drawers, a salt pan frame heater, a pad of pliers and screwdrivers, a lens measure and a frame waiting in the jig. Overall 1.36 by 1.04 by 0.68 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The drawers pull out; the heater, the jig and every hand tool are static. The pliers are modelled with their jaws closed and do not open: a plier is a two arm linkage on one rivet and both arms would need channels that a single rigid node cannot drive together. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-frame-adjustment-bench-3cb0a72d","cdnUrl":"https://cdn.3dassets.dev/assets/35068/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-frame-adjustment-bench-3cb0a72d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35068/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35068/v1/poster.webp","blurhash":"UEE:0okr00xB~V?bIp9E00-ntR9aE5RPskoz","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":65604,"triangles":1884,"vertices":2906,"meshes":14,"materials":10,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6800000071525574,0.000005432775909641752,-0.3400518850429336],"max":[0.6800000071525574,1.043987164146127,0.3400518850429336]},"sizeMeters":[1.36,1.044,0.68],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:42.162Z","updatedAt":"2026-09-11T11:15:42.272Z","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/35068/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 FrameAdjustmentBenchOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35068/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/35068/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35068/v1/model.glb\" alt=\"Frame Adjustment Bench (Opticians and Eyewear Showroom)\" 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/35068/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/35068/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35070","slug":"opticians-and-eyewear-showroom-lens-edger-126c22dc","title":"Lens Edger (Opticians and Eyewear Showroom)","summary":"A bench lens edger: a white cased machine with a control panel, a hinged lid over the cutting chamber, a lens blank on the spindle inside it and a waste tray under the door.","description":"A bench lens edger: a white cased machine with a control panel, a hinged lid over the cutting chamber, a lens blank on the spindle inside it and a waste tray under the door. Overall 0.59 by 0.55 by 0.61 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The lid lifts on its back hinge and the spindle inside is static: the cutting wheel turns at thousands of revolutions a minute, which no readable clip can show, and the water feed is flexible tubing this library cannot rig. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-lens-edger-126c22dc","cdnUrl":"https://cdn.3dassets.dev/assets/35070/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-lens-edger-126c22dc","thumbnailUrl":"https://cdn.3dassets.dev/assets/35070/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35070/v1/poster.webp","blurhash":"U9F~p$t6009F~qt7IURj00t7?vxuM{tRsoMx","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":33628,"triangles":844,"vertices":1252,"meshes":11,"materials":9,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.28999999165534973,-0.000005334751563890183,-0.2600149465878024],"max":[0.30000001192092896,0.5499836795506567,0.34999542511042564]},"sizeMeters":[0.59,0.55,0.61],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:41.488Z","updatedAt":"2026-09-11T11:15:41.650Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35070/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 LensEdgerOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35070/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/35070/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35070/v1/model.glb\" alt=\"Lens Edger (Opticians and Eyewear Showroom)\" 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/35070/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/35070/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35071","slug":"opticians-and-eyewear-showroom-tint-bath-bb48c347","title":"Tint Bath (Opticians and Eyewear Showroom)","summary":"A two well tint bath: a steel tank on a cased base with a coral and a blue dye well, lens baskets standing in them, a lid on one well and the temperature dials on the front.","description":"A two well tint bath: a steel tank on a cased base with a coral and a blue dye well, lens baskets standing in them, a lid on one well and the temperature dials on the front. Overall 0.66 by 0.57 by 0.45 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The wells are dye, not water: the surfaces are flat panels, since this library has no liquid simulation. Nothing on the bath moves, including the lid, which lifts straight off in use rather than hinging. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-tint-bath-bb48c347","cdnUrl":"https://cdn.3dassets.dev/assets/35071/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-tint-bath-bb48c347","thumbnailUrl":"https://cdn.3dassets.dev/assets/35071/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35071/v1/poster.webp","blurhash":"UAFF$|?v00t7?v-;IU9F00IoM{D%~pjvD*a_","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":29120,"triangles":872,"vertices":1154,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.33000001311302185,-0.00001266981371339515,-0.2200134368867176],"max":[0.33000001311302185,0.5699859506081072,0.2309950116729501]},"sizeMeters":[0.66,0.57,0.451],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:43.375Z","updatedAt":"2026-09-11T11:15:43.473Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35071/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TintBathOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35071/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35071/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35071/v1/model.glb\" alt=\"Tint Bath (Opticians and Eyewear Showroom)\" 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/35071/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/35071/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35072","slug":"opticians-and-eyewear-showroom-lens-stock-drawer-bank-775b1e35","title":"Lens Stock Drawer Bank (Opticians and Eyewear Showroom)","summary":"A lens stock drawer bank: a white carcass of five teal fronted drawers with steel rails and blank index cards, ported on both sides so a stock wall repeats to any width.","description":"A lens stock drawer bank: a white carcass of five teal fronted drawers with steel rails and blank index cards, ported on both sides so a stock wall repeats to any width. Overall 0.81 by 1.32 by 0.51 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The bank-left and bank-right ports sit on the carcass sides at half height, so banks butt together into a stock wall. Every drawer pulls out a little over its own depth, and every index card is blank. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-lens-stock-drawer-bank-775b1e35","cdnUrl":"https://cdn.3dassets.dev/assets/35072/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-lens-stock-drawer-bank-775b1e35","thumbnailUrl":"https://cdn.3dassets.dev/assets/35072/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35072/v1/poster.webp","blurhash":"UFA-^u9]00}YlnozZhRP4n%2%f9[tlbIVrn$","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":26068,"triangles":1356,"vertices":1671,"meshes":19,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.4050000011920929,0.000008544139699320774,-0.25498672519891585],"max":[0.4050000011920929,1.3175017667867392,0.25599829418215836]},"sizeMeters":[0.81,1.317,0.511],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:44.351Z","updatedAt":"2026-09-11T11:15:44.459Z","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/35072/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 LensStockDrawerBankOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35072/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/35072/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35072/v1/model.glb\" alt=\"Lens Stock Drawer Bank (Opticians and Eyewear Showroom)\" 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/35072/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/35072/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35073","slug":"opticians-and-eyewear-showroom-order-pickup-rack-4edb0434","title":"Order Pickup Rack (Opticians and Eyewear Showroom)","summary":"An order pickup rack: an open steel and white rack of four shelves with bagged and boxed orders waiting on them, each under a blank collection card.","description":"An order pickup rack: an open steel and white rack of four shelves with bagged and boxed orders waiting on them, each under a blank collection card. Overall 0.99 by 1.72 by 0.41 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. The bags are rigid shells: a real bag is soft and this library has no skinning. Nothing on the rack moves. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-order-pickup-rack-4edb0434","cdnUrl":"https://cdn.3dassets.dev/assets/35073/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-order-pickup-rack-4edb0434","thumbnailUrl":"https://cdn.3dassets.dev/assets/35073/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35073/v1/poster.webp","blurhash":"UDCP@g-W009t_NxaDiEL0KWB^+bvozofaKRQ","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":61972,"triangles":2844,"vertices":2836,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.4950217190667999,-2.3841858265427618e-8,-0.2000217516363262],"max":[0.4950217190667999,1.7199957548023983,0.20504485784498638]},"sizeMeters":[0.99,1.72,0.405],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:43.980Z","updatedAt":"2026-09-11T11:15:44.079Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35073/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function OrderPickupRackOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35073/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35073/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35073/v1/model.glb\" alt=\"Order Pickup Rack (Opticians and Eyewear Showroom)\" 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/35073/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/35073/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35075","slug":"opticians-and-eyewear-showroom-staff-lockers-e365b382","title":"Staff Lockers (Opticians and Eyewear Showroom)","summary":"A bank of four staff lockers: a white carcass with teal doors, punched vents, steel handles and blank name cards, on a dark plinth.","description":"A bank of four staff lockers: a white carcass with teal doors, punched vents, steel handles and blank name cards, on a dark plinth. Overall 1.01 by 1.82 by 0.48 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. All four doors swing on their outer edges, so the two columns open away from each other. The locks are modelled shut and do not turn. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-staff-lockers-e365b382","cdnUrl":"https://cdn.3dassets.dev/assets/35075/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-staff-lockers-e365b382","thumbnailUrl":"https://cdn.3dassets.dev/assets/35075/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35075/v1/poster.webp","blurhash":"UABEdaOr00].*JxuQ-Mx00s:%gELt,W;R5jF","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":27740,"triangles":1284,"vertices":1717,"meshes":20,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.5049999952316284,0.000010681850845621621,-0.2350152570356487],"max":[0.5049999952316284,1.819973765814181,0.2469974360837092]},"sizeMeters":[1.01,1.82,0.482],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:45.310Z","updatedAt":"2026-09-11T11:15:45.413Z","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/35075/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 StaffLockersOpticiansAndEyewearShowroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35075/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/35075/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35075/v1/model.glb\" alt=\"Staff Lockers (Opticians and Eyewear Showroom)\" 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/35075/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/35075/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35074","slug":"opticians-and-eyewear-showroom-cleaning-station-3d4e78f4","title":"Cleaning Station (Opticians and Eyewear Showroom)","summary":"A frame cleaning station: a small white stand with an ultrasonic cleaning tank, a bottle of solution, a stack of cloths, a drying tray and a bin of used tissues under it.","description":"A frame cleaning station: a small white stand with an ultrasonic cleaning tank, a bottle of solution, a stack of cloths, a drying tray and a bin of used tissues under it. Overall 0.51 by 1.08 by 0.45 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-cleaning-station-3d4e78f4","cdnUrl":"https://cdn.3dassets.dev/assets/35074/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-cleaning-station-3d4e78f4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35074/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35074/v1/poster.webp","blurhash":"U9E3M8%g00V@xuxtMxIU00M|~qk9%1WBR*t6","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":29412,"triangles":940,"vertices":1080,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.2549999952316284,-1.490116363633831e-10,-0.2249917557952089],"max":[0.2549999952316284,1.0800022506238778,0.2249917557952089]},"sizeMeters":[0.51,1.08,0.45],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:44.393Z","updatedAt":"2026-09-11T11:15:44.502Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35074/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CleaningStationOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35074/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35074/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35074/v1/model.glb\" alt=\"Cleaning Station (Opticians and Eyewear Showroom)\" 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/35074/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/35074/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35041","slug":"opticians-and-eyewear-showroom-frame-tray-repair-5db4a499","title":"Frame Tray Repair (Opticians and Eyewear Showroom)","summary":"The same tray as a repair tray: two frames waiting on it with their screws, a small screwdriver, a spare temple arm and a coil of nose pads.","description":"The same tray as a repair tray: two frames waiting on it with their screws, a small screwdriver, a spare temple arm and a coil of nose pads. Overall 0.46 by 0.10 by 0.34 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-frame-tray-repair-5db4a499","cdnUrl":"https://cdn.3dassets.dev/assets/35041/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-frame-tray-repair-5db4a499","thumbnailUrl":"https://cdn.3dassets.dev/assets/35041/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35041/v1/poster.webp","blurhash":"UAECOS^*00t8Mwxat8R*009Z~BM{.AIoRhsl","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":31484,"triangles":880,"vertices":1796,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.2199999988079071,-0.0000032041217480037465,-0.19030190046065942],"max":[0.23999999463558197,0.0989920803200131,0.15000579770397843]},"sizeMeters":[0.46,0.099,0.34],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:26.215Z","updatedAt":"2026-09-11T11:15:26.418Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35041/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FrameTrayRepairOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35041/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35041/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35041/v1/model.glb\" alt=\"Frame Tray Repair (Opticians and Eyewear Showroom)\" 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/35041/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/35041/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35077","slug":"opticians-and-eyewear-showroom-first-aid-box-a5156d0e","title":"First Aid Box (Opticians and Eyewear Showroom)","summary":"A wall mounted first aid box: a white case with a mint cross, a steel catch and a carry handle, for a back room or a staff corridor.","description":"A wall mounted first aid box: a white case with a mint cross, a steel catch and a carry handle, for a back room or a staff corridor. Overall 0.32 by 0.27 by 0.14 m (X by Y by Z). Metre units, +Y up, the side a customer or a patient approaches from toward +Z, resting on y=0. Wall mounted: the case rests on y=0, so place it at the height the wall needs. The lid does not open, since the box reads shut from every distance a room camera sees it at. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/opticians-and-eyewear-showroom-first-aid-box-a5156d0e","cdnUrl":"https://cdn.3dassets.dev/assets/35077/v1/model.glb","downloadUrl":"https://3dassets.dev/download/opticians-and-eyewear-showroom-first-aid-box-a5156d0e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35077/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35077/v1/poster.webp","blurhash":"UAI#$3_N00M{~q~qM{9F00Rj%MM{Rj%MjZ9F","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":9692,"triangles":204,"vertices":302,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.16200000047683716,9.160768044136347e-7,-0.0670060123435949],"max":[0.16200000047683716,0.2699981429369266,0.07799966530964471]},"sizeMeters":[0.324,0.27,0.145],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T11:15:47.160Z","updatedAt":"2026-09-11T11:15:47.264Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35077/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FirstAidBoxOpticiansAndEyewearShowroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35077/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35077/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35077/v1/model.glb\" alt=\"First Aid Box (Opticians and Eyewear Showroom)\" 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/35077/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/35077/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}]}}