{"data":{"id":"135","slug":"chocolate-and-confectionery-factory","title":"Chocolate and Confectionery Factory","summary":"Walk a full confectionery works from the bean sacks at the intake door to palletised cases at dispatch: roasting, conching, tempering, moulding, a sweets line, enrobing, wrapping and packing.","url":"https://3dassets.dev/demos/chocolate-and-confectionery-factory","coverUrl":"https://cdn.3dassets.dev/media/chocolate-and-confectionery-factory-demo-1.png","featured":true,"pack":{"slug":"chocolate-and-confectionery-factory","title":"Chocolate and Confectionery Factory","url":"https://3dassets.dev/packs/chocolate-and-confectionery-factory","summary":"A low-poly chocolate and sweet works, bean to box: roasting, winnowing, grinding, conching and tempering, a moulding and enrobing belt, a sugar line, wrapping and palletising, a modular 5 m room kit and an open topped factory floor scene.","assetCount":55,"totalBytes":2103348,"starterScene":{"slug":"chocolate-and-confectionery-factory-work-d7d81180-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/36811/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-work-d7d81180-starter-scene","fileSize":932412}},"placementCount":354,"assetCount":54,"spawn":{"position":[-20,0,-11.2],"yaw":90},"publishedAt":"2026-09-12T04:46:53.227Z","updatedAt":"2026-09-12T04:46:53.228Z","description":"## The place\n\nA single open topped works hall, 45 by 35 metres, laid out as one process you can walk end to end. You start at the bean intake with the sack stacks and the roaster drum, and the line runs east along the back bay past the winnower, the grinder mill, the conche vats and the tempering machines to the chocolate tanks.\n\nIt turns south and comes back west through the moulding bay: moulding tables with bar, shell and praline trays, the depositor head, the vibrating table, the cooling tunnel sections and the demoulding station. The third bay is the sweets side, running east again with the caramel kettle, the boiled sweet drop roller, the lollipop spinner, the candy cane twister, the marshmallow extruder, the gummy starch trays and the dusting and panning drums, ending at the enrobing sections.\n\nThe last bay is packing: foil wrapping, flow wrapping, carton erecting, case packing and two palletiser arms, with metal detector arches and QC benches on the outfeed. Finished cases, pallet stacks and stock shelf runs fill the store along the south wall, with the coat and hairnet lockers, the wash sinks and the taste counter beside them. Conveyor runs, curves and an incline connect every bay, so the whole hall reads as one line rather than machines parked in rows.\n\n## What moves\n\nThirty three of the pack's models carry clips, and they are placed along the path. The roaster drum, the winnower fan, the grinder mill, the conche paddle, the caramel stirrer, the dusting drum and the panning drum all spin. Conveyor straights, curves, inclines and roller sections turn their rollers, and so do the enrobing belt, the demoulding station, the drop roller, the candy cane twister and the marshmallow extruder. The depositor head and the filling piping head lower and lift, hoppers, chocolate tanks, clean in place tanks, tempering machines, control panels, lockers and the wall door panel open and close, the vibrating table shakes, the foil wrapper and flow wrapper spin their reels, and the carton erector, case packer and palletiser arms swing.\n\n## What does not move, and why\n\nChocolate flow, the enrobing curtain, the foil web, steam and hoses are static. Fluid and flexible material needs a shader or a joint per element, and neither is reachable with the single rigid node transform this library uses. There are no people either: the pack has no skinned meshes.\n\nEvery wrapper, foil reel, carton, box lid and crate is deliberately blank. The pack carries no textures and no lettering geometry at all.","scene":{"version":1,"spawn":{"position":[-20,0,-11.2],"yaw":90},"bounds":{"min":[-22.5,0,-17.5],"max":[22.5,5.2,17.5]},"ground":{"style":"none"},"environment":{"preset":"hall","wallHeight":5,"light":"cool","lampHeight":4.6,"shadows":true},"placements":[{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-20,-0.1,-15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-15,-0.1,-15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-10,-0.1,-15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-5,-0.1,-15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[0,-0.1,-15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[5,-0.1,-15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[10,-0.1,-15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[15,-0.1,-15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[20,-0.1,-15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-20,-0.1,-10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-15,-0.1,-10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-10,-0.1,-10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-5,-0.1,-10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[0,-0.1,-10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[5,-0.1,-10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[10,-0.1,-10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[15,-0.1,-10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[20,-0.1,-10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-20,-0.1,-5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-15,-0.1,-5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-10,-0.1,-5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-5,-0.1,-5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[0,-0.1,-5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[5,-0.1,-5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[10,-0.1,-5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[15,-0.1,-5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[20,-0.1,-5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-20,-0.1,0],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-15,-0.1,0],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-10,-0.1,0],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-5,-0.1,0],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[0,-0.1,0],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[5,-0.1,0],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[10,-0.1,0],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[15,-0.1,0],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[20,-0.1,0],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-20,-0.1,5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-15,-0.1,5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-10,-0.1,5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-5,-0.1,5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[0,-0.1,5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[5,-0.1,5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[10,-0.1,5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[15,-0.1,5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[20,-0.1,5],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-20,-0.1,10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-15,-0.1,10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-10,-0.1,10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[-5,-0.1,10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[0,-0.1,10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[5,-0.1,10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[10,-0.1,10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[15,-0.1,10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","position":[20,-0.1,10],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-20,-0.1,15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-15,-0.1,15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-10,-0.1,15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[-5,-0.1,15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[0,-0.1,15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[5,-0.1,15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[10,-0.1,15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[15,-0.1,15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","position":[20,-0.1,15],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[-20,0,-17.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-wall-windo-06ed8ffd","position":[-15,0,-17.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[-10,0,-17.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-wall-door--f0ce5b67","position":[-5,0,-17.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-wall-windo-06ed8ffd","position":[0,0,-17.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[5,0,-17.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[10,0,-17.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-wall-windo-06ed8ffd","position":[15,0,-17.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[20,0,-17.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[-22.4,0,-15],"rotation":90},{"asset":"chocolate-and-confectionery-factory-factory-wall-windo-06ed8ffd","position":[-22.4,0,-10],"rotation":90},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[-22.4,0,-5],"rotation":90},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[-22.4,0,0],"rotation":90},{"asset":"chocolate-and-confectionery-factory-factory-wall-windo-06ed8ffd","position":[-22.4,0,5],"rotation":90},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[-22.4,0,10],"rotation":90},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[-22.4,0,15],"rotation":90},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[22.4,0,-15],"rotation":270},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[22.4,0,-10],"rotation":270},{"asset":"chocolate-and-confectionery-factory-factory-wall-windo-06ed8ffd","position":[22.4,0,-5],"rotation":270},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[22.4,0,0],"rotation":270},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[22.4,0,5],"rotation":270},{"asset":"chocolate-and-confectionery-factory-factory-wall-door--f0ce5b67","position":[22.4,0,10],"rotation":270},{"asset":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","position":[22.4,0,15],"rotation":270},{"asset":"chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","position":[-20,3.8,-14.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","position":[-15,3.8,-14.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","position":[-10,3.8,-14.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","position":[-5,3.8,-14.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","position":[0,3.8,-14.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","position":[5,3.8,-14.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","position":[10,3.8,-14.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","position":[15,3.8,-14.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","position":[20,3.8,-14.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ingredient-hopper-2f7c7119","position":[-17.2,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-cocoa-bean-roaster-0aa29700","position":[-14.7,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-cocoa-winnower-75a3df9b","position":[-12.1,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-cocoa-grinder-mill-2e0255b1","position":[-9.9,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-conche-vat-c80baa13","position":[-7.5,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-tempering-machine-47c219dd","position":[-4.9,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-chocolate-tank-wit-aec6b509","position":[-2.6,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-nut-roaster-8dce8adb","position":[-0.3,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-clean-in-place-tan-781b5193","position":[2,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-control-panel-119e842c","position":[3.9,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ingredient-hopper-2f7c7119","position":[5.8,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-conche-vat-c80baa13","position":[8.2,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-cocoa-grinder-mill-2e0255b1","position":[10.4,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-tempering-machine-47c219dd","position":[12.5,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-chocolate-tank-wit-aec6b509","position":[14.7,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-control-panel-119e842c","position":[16.5,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","position":[18.9,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-wash-sink-d7fc6b5d","position":[21.2,0,-15.3],"rotation":0},{"asset":"chocolate-and-confectionery-factory-cocoa-bean-sack-st-477d6aaa","position":[-21.7,0,-16.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-cocoa-bean-sack-st-477d6aaa","position":[-21.7,0,-14.6],"rotation":16},{"asset":"chocolate-and-confectionery-factory-cocoa-bean-sack-st-477d6aaa","position":[-20,0,-16.4],"rotation":-12},{"asset":"chocolate-and-confectionery-factory-cocoa-bean-sack-st-477d6aaa","position":[-20,0,-14.6],"rotation":28},{"asset":"chocolate-and-confectionery-factory-cocoa-bean-sack-st-477d6aaa","position":[-21.7,0,-12.8],"rotation":7},{"asset":"chocolate-and-confectionery-factory-cocoa-bean-sack-st-477d6aaa","position":[-20,0,-12.8],"rotation":-22},{"asset":"chocolate-and-confectionery-factory-cocoa-bean-sack-st-477d6aaa","position":[-18.4,0,-16.4],"rotation":9},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[-21.2,0,-9.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[-19.8,0,-9.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[-18.4,0,-9.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-18.4,0.2,-9.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[-13.6,0,-9.8],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-13.6,0.2,-9.8],"rotation":8},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-14,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-12,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-10,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-8,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-6,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-4,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-2,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-roller-conveyor-8011bfdd","position":[0,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[2,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[4,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[6,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[8,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[10,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[12,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[14,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[16,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[18,0,-13.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-curve-6fd1830b","position":[20.4,0,-13.4],"rotation":270},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[20.4,0,-11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[20.4,0,-9.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-conveyor-curve-6fd1830b","position":[20.4,0,-6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-moulding-table-997c2095","position":[18.6,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-depositor-head-d03877d2","position":[16.4,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-vibrating-table-bb1163cb","position":[14.4,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-moulding-table-997c2095","position":[12.2,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-cooling-tunnel-sec-d7c19a60","position":[10,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-cooling-tunnel-sec-d7c19a60","position":[8.4,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-demoulding-station-4827f40c","position":[6.2,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-filling-piping-hea-dbd58b0f","position":[4.1,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-moulding-table-997c2095","position":[2,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-vibrating-table-bb1163cb","position":[-0.2,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-depositor-head-d03877d2","position":[-2.4,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-moulding-table-997c2095","position":[-4.8,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-cooling-tunnel-sec-d7c19a60","position":[-7.2,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-demoulding-station-4827f40c","position":[-9.4,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-control-panel-119e842c","position":[-11.4,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-ingredient-hopper-2f7c7119","position":[-13.4,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-clean-in-place-tan-781b5193","position":[-15.8,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-wash-sink-d7fc6b5d","position":[-18.2,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","position":[-20.9,0,-8.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-bar-mould-tray-2e67c5f7","position":[18.6,0.9,-8.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-bar-mould-tray-2e67c5f7","position":[18.6,0.9,-7.9],"rotation":12},{"asset":"chocolate-and-confectionery-factory-bar-mould-tray-2e67c5f7","position":[12.2,0.9,-8.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-shell-mould-tray-2395c6d2","position":[12.2,0.9,-7.9],"rotation":-8},{"asset":"chocolate-and-confectionery-factory-praline-shell-tray-6f90c934","position":[2,0.9,-8.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-praline-shell-tray-6f90c934","position":[2,0.9,-7.9],"rotation":15},{"asset":"chocolate-and-confectionery-factory-shell-mould-tray-2395c6d2","position":[-4.8,0.9,-8.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-bar-mould-tray-2e67c5f7","position":[-4.8,0.9,-7.9],"rotation":-14},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[19,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[17,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[15,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[13,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[11,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[9,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[7,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-roller-conveyor-8011bfdd","position":[5,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[3,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[1,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-1,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-3,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-5,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-7,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-9,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-11,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-13,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-15,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-17,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-19,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-metal-detector-arc-b940fd1f","position":[15,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-curve-6fd1830b","position":[-20.8,0,-6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-20.8,0,-4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-20.8,0,-2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-conveyor-incline-121ae208","position":[-20.8,0,1],"rotation":0},{"asset":"chocolate-and-confectionery-factory-conveyor-curve-6fd1830b","position":[-20.8,0,3.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-caramel-kettle-84a80e67","position":[-19.6,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-boiled-sweet-drop--5dd68b01","position":[-17.3,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-lollipop-spinner-bebd68cc","position":[-15.2,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-candy-cane-twister-d4dda3ec","position":[-13.2,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-marshmallow-extrud-be0b4c50","position":[-10.9,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-moulding-table-997c2095","position":[-8.4,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-dusting-drum-d529ebba","position":[-6.2,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-panning-drum-b9cf8613","position":[-4.1,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-nut-roaster-8dce8adb","position":[-1.9,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-caramel-kettle-84a80e67","position":[0.5,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-boiled-sweet-drop--5dd68b01","position":[2.8,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-dusting-drum-d529ebba","position":[4.9,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-panning-drum-b9cf8613","position":[7,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-enrobing-line-sect-b9740529","position":[9.6,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-enrobing-line-sect-b9740529","position":[11.8,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-cooling-tunnel-sec-d7c19a60","position":[14.2,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-control-panel-119e842c","position":[16.2,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-clean-in-place-tan-781b5193","position":[18.2,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","position":[20.6,0,0.2],"rotation":0},{"asset":"chocolate-and-confectionery-factory-gummy-starch-tray-7765194f","position":[-8.4,0.9,0],"rotation":0},{"asset":"chocolate-and-confectionery-factory-gummy-starch-tray-7765194f","position":[-8.4,0.9,0.6],"rotation":10},{"asset":"chocolate-and-confectionery-factory-praline-shell-tray-6f90c934","position":[-8.9,0.9,-0.4],"rotation":-20},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-19,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-17,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-15,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-13,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-11,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-9,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-7,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-5,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-roller-conveyor-8011bfdd","position":[-3,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-1,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[1,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[3,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[5,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[7,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[9,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[11,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[13,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[15,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[17,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[19,0,2.4],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-curve-6fd1830b","position":[20.8,0,2.4],"rotation":270},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[20.8,0,4.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[20.8,0,6.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-conveyor-curve-6fd1830b","position":[20.8,0,9.2],"rotation":180},{"asset":"chocolate-and-confectionery-factory-qc-bench-e19ff11c","position":[19.4,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-foil-wrapping-mach-d3ddcec1","position":[16.6,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-flow-wrapper-3fd82d8f","position":[13.9,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-carton-erector-08ce7a97","position":[11.3,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-case-packer-902faf81","position":[8.9,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-palletiser-arm-34434855","position":[6,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-foil-wrapping-mach-d3ddcec1","position":[3.2,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-flow-wrapper-3fd82d8f","position":[0.6,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-carton-erector-08ce7a97","position":[-2,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-case-packer-902faf81","position":[-4.4,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-palletiser-arm-34434855","position":[-7.3,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-control-panel-119e842c","position":[-9.6,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","position":[-12,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","position":[-14.8,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[-17.2,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[-18.6,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[-20.4,0,7],"rotation":0},{"asset":"chocolate-and-confectionery-factory-metal-detector-arc-b940fd1f","position":[18,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-metal-detector-arc-b940fd1f","position":[-0.8,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[19,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[17,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-roller-conveyor-8011bfdd","position":[15,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[13,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[11,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[9,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[7,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[5,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[3,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[1,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-1,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-3,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-5,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-7,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-9,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-11,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-13,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-15,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-17,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","position":[-19,0,9.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[4,0,5.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[4,0.2,5.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[5.2,0,5.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[5.2,0.2,5.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[-9.3,0,5.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-9.3,0.2,5.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[-8.1,0,5.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-8.1,0.2,5.4],"rotation":0},{"asset":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","position":[-20.6,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","position":[-17.8,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","position":[-15,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[-12.6,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[-11.2,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[-9.8,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-coat-and-hairnet-l-24996893","position":[-7.6,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-coat-and-hairnet-l-24996893","position":[-6.3,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-coat-and-hairnet-l-24996893","position":[-5,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-wash-sink-d7fc6b5d","position":[-3.2,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-qc-bench-e19ff11c","position":[-1,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-taste-counter-4d1ef78f","position":[1.8,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-taste-counter-4d1ef78f","position":[4.4,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-coat-and-hairnet-l-24996893","position":[6.6,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-coat-and-hairnet-l-24996893","position":[7.9,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-control-panel-119e842c","position":[9.6,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","position":[12,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","position":[14.8,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[17.4,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[18.8,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-pallet-stack-449cae55","position":[20.6,0,14.6],"rotation":180},{"asset":"chocolate-and-confectionery-factory-praline-shell-tray-6f90c934","position":[1.8,1,13.9],"rotation":180},{"asset":"chocolate-and-confectionery-factory-praline-shell-tray-6f90c934","position":[2.4,1,14.2],"rotation":165},{"asset":"chocolate-and-confectionery-factory-bar-mould-tray-2e67c5f7","position":[4.4,1,13.9],"rotation":180},{"asset":"chocolate-and-confectionery-factory-shell-mould-tray-2395c6d2","position":[4.9,1,14.2],"rotation":190},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-12.6,0.2,13.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-12.6,1,13.6],"rotation":6},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-11.2,0.2,13.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-11.2,1,13.6],"rotation":6},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-9.8,0.2,13.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-9.8,1,13.6],"rotation":6},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[17.4,0.2,13.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[17.4,1,13.6],"rotation":6},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[18.8,0.2,13.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[18.8,1,13.6],"rotation":6},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[20.6,0.2,13.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[20.6,1,13.6],"rotation":6},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[-13.6,0,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-13.6,0.2,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[-12.4,0,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-12.4,0.2,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[-15,0,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[-15,0.2,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[16.2,0,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[16.2,0.2,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[17.4,0,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[17.4,0.2,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-pallet-eea1b60c","position":[18.6,0,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","position":[18.6,0.2,11.6],"rotation":0},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[-16,0,-11.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[-6,0,-11.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[6,0,-11.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[16,0,-11.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[-14,0,-3.6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[-2,0,-3.6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[10,0,-3.6],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[-12,0,5.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[2,0,5.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[14,0,5.2],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[-8,0,11.9],"rotation":90},{"asset":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","position":[8,0,11.9],"rotation":90}],"points":[{"position":[-15.4,0,-11.4],"title":"Bean intake and roasting","text":"Sacks come in at this end. The roaster drum turns beside the hopper, and the line runs east from here past the winnower and the grinder mill.","asset":"chocolate-and-confectionery-factory-cocoa-bean-roaster-0aa29700"},{"position":[-5.2,0,-11.4],"title":"Conching and tempering","text":"The conche paddle turns for hours to smooth the mass. Next along, the tempering machine holds it at working temperature and the tank feeds the moulding hall through its tap.","asset":"chocolate-and-confectionery-factory-conche-vat-c80baa13"},{"position":[10.4,0,-3.6],"title":"Moulding, cooling, demoulding","text":"Trays are filled under the depositor head, shaken flat on the vibrating table, set in the cooling tunnel and knocked out at the demoulding station.","asset":"chocolate-and-confectionery-factory-demoulding-station-4827f40c"},{"position":[-14.2,0,5],"title":"The sweets side","text":"A second line runs the other way: caramel kettle, drop roller, lollipop spinner, candy cane twister and marshmallow extruder, with the dusting and panning drums after them.","asset":"chocolate-and-confectionery-factory-lollipop-spinner-bebd68cc"},{"position":[10.6,0,5],"title":"Enrobing","text":"Centres pass under the enrobing section and on into the cooling tunnel. The curtain itself is static geometry: flowing chocolate needs a shader, not a node transform.","asset":"chocolate-and-confectionery-factory-enrobing-line-sect-b9740529"},{"position":[11,0,11.9],"title":"Wrapping and cartoning","text":"Foil wrapper, flow wrapper, carton erector and case packer in a row. Every wrapper, carton and box here is blank: the pack carries no lettering and no textures.","asset":"chocolate-and-confectionery-factory-flow-wrapper-3fd82d8f"},{"position":[-6.4,0,11.9],"title":"Palletising and dispatch","text":"The palletiser arm swings finished cases onto pallets and the store runs along the south wall. The metal detector arch and the QC bench sit on the outfeed behind you.","asset":"chocolate-and-confectionery-factory-palletiser-arm-34434855"}],"poster":{"position":[-18.2,1.6,-11.6],"lookAt":[-4,1.55,-13.9]}},"bounds":{"min":[-22.5,0,-17.5],"max":[22.5,5.2,17.5]},"assets":[{"id":"36808","slug":"chocolate-and-confectionery-factory-factory-floor-tile-432cade1","title":"Factory Floor Tile (Chocolate and Confectionery Factory)","summary":"A 5.00 by 5.00 m epoxy floor tile 100 mm thick, the base module of the plant floor, with ports on all four edges.","description":"A 5.00 by 5.00 m epoxy floor tile 100 mm thick, the base module of the plant floor, with ports on all four edges. Dimensions 5.00 by 0.10 by 5.00 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Connectors: west (floor) at (-2.50, 0.05, 0.00) facing (-1, 0, 0); east (floor) at (2.50, 0.05, 0.00) facing (1, 0, 0); north (floor) at (0.00, 0.05, -2.50) facing (0, 0, -1); south (floor) at (0.00, 0.05, 2.50) facing (0, 0, 1). Lay it at y = -0.10 so its top face is the ground plane every other model in the pack stands on. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-factory-floor-tile-432cade1","cdnUrl":"https://cdn.3dassets.dev/assets/36808/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-factory-floor-tile-432cade1","thumbnailUrl":"https://cdn.3dassets.dev/assets/36808/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36808/v1/poster.webp","blurhash":"U9EMLE%M00ay%MayRjof00M{~qWB9FoLofRj","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"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":1604,"triangles":12,"vertices":36,"meshes":1,"materials":1,"textures":0,"animations":[],"boundingBox":{"min":[-2.5,-0.00005035479557733563,-2.5],"max":[2.5,0.10005035628569345,2.5]},"sizeMeters":[5,0.1,5],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:47.852Z","updatedAt":"2026-09-12T04:30:48.021Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36808/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FactoryFloorTileChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36808/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36808/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36808/v1/model.glb\" alt=\"Factory Floor Tile (Chocolate and Confectionery Factory)\" 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/36808/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/36808/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36809","slug":"chocolate-and-confectionery-factory-factory-floor-walk-deede832","title":"Factory Floor Walkway Tile (Chocolate and Confectionery Factory)","summary":"The 5.00 m floor tile with a 1.60 m amber pedestrian walkway painted across it between two dark edge lines, for marking the route through a plant.","description":"The 5.00 m floor tile with a 1.60 m amber pedestrian walkway painted across it between two dark edge lines, for marking the route through a plant. Dimensions 5.00 by 0.11 by 5.00 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Connectors: west (floor) at (-2.50, 0.05, 0.00) facing (-1, 0, 0); east (floor) at (2.50, 0.05, 0.00) facing (1, 0, 0); north (floor) at (0.00, 0.05, -2.50) facing (0, 0, -1); south (floor) at (0.00, 0.05, 2.50) facing (0, 0, 1). The markings sit 6 mm proud of the tile face so nothing is coplanar. Same ports as the plain tile. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-factory-floor-walk-deede832","cdnUrl":"https://cdn.3dassets.dev/assets/36809/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-factory-floor-walk-deede832","thumbnailUrl":"https://cdn.3dassets.dev/assets/36809/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36809/v1/poster.webp","blurhash":"U9E36k-p00Wr-:jYRjbc00IV~VWA4:kXs:aI","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"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":4320,"triangles":48,"vertices":144,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-2.5,-0.00005035479557733563,-2.5],"max":[2.5,0.10796740837764685,2.5]},"sizeMeters":[5,0.108,5],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:48.744Z","updatedAt":"2026-09-12T04:30:48.872Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36809/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FactoryFloorWalkwayTileChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36809/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36809/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36809/v1/model.glb\" alt=\"Factory Floor Walkway Tile (Chocolate and Confectionery Factory)\" 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/36809/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/36809/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36805","slug":"chocolate-and-confectionery-factory-factory-wall-panel-af982a39","title":"Factory Wall Panel (Chocolate and Confectionery Factory)","summary":"A 5.00 m hygienic wall bay 3.60 m high: a light panel face with joint lines, a steel kerb at the floor and a teal service band, for building a plant room.","description":"A 5.00 m hygienic wall bay 3.60 m high: a light panel face with joint lines, a steel kerb at the floor and a teal service band, for building a plant room. Dimensions 5.00 by 3.70 by 0.20 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Connectors: left (wall) at (-2.50, 1.80, 0.00) facing (-1, 0, 0); right (wall) at (2.50, 1.80, 0.00) facing (1, 0, 0). The kerb and the bands stand proud of the panel face so no two surfaces share a plane. Ports sit at each end at 1.80 m. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-factory-wall-panel-af982a39","cdnUrl":"https://cdn.3dassets.dev/assets/36805/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-factory-wall-panel-af982a39","thumbnailUrl":"https://cdn.3dassets.dev/assets/36805/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36805/v1/poster.webp","blurhash":"UDHx.|-;00t8.8~qoL4n00WV_3Rjt6xbWUM{","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"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":6468,"triangles":84,"vertices":252,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-2.5,0.000006411300207620485,-0.10010559520231894],"max":[2.5,3.699993636383508,0.10010559520231894]},"sizeMeters":[5,3.7,0.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:47.149Z","updatedAt":"2026-09-12T04:30:47.249Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36805/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FactoryWallPanelChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36805/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36805/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36805/v1/model.glb\" alt=\"Factory Wall Panel (Chocolate and Confectionery Factory)\" 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/36805/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/36805/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36806","slug":"chocolate-and-confectionery-factory-factory-wall-windo-06ed8ffd","title":"Factory Wall Window Panel (Chocolate and Confectionery Factory)","summary":"The 5.00 m wall bay with a glazed viewing band 4.20 m wide at head height, mullioned in three lights, on the same ports as the plain bay.","description":"The 5.00 m wall bay with a glazed viewing band 4.20 m wide at head height, mullioned in three lights, on the same ports as the plain bay. Dimensions 5.00 by 3.70 by 0.22 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Connectors: left (wall) at (-2.50, 1.80, 0.00) facing (-1, 0, 0); right (wall) at (2.50, 1.80, 0.00) facing (1, 0, 0). Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-factory-wall-windo-06ed8ffd","cdnUrl":"https://cdn.3dassets.dev/assets/36806/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-factory-wall-windo-06ed8ffd","thumbnailUrl":"https://cdn.3dassets.dev/assets/36806/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36806/v1/poster.webp","blurhash":"UDGv9T-;00xu-=~qt7Di00j[t,Rj-V-pNG56","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"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":8292,"triangles":120,"vertices":360,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-2.5,0.000006411300207620485,-0.10005585223329033],"max":[2.5,3.699993636383508,0.1200558480609652]},"sizeMeters":[5,3.7,0.22],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:48.691Z","updatedAt":"2026-09-12T04:30:48.783Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36806/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FactoryWallWindowPanelChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36806/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36806/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36806/v1/model.glb\" alt=\"Factory Wall Window Panel (Chocolate and Confectionery Factory)\" 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/36806/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/36806/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36807","slug":"chocolate-and-confectionery-factory-factory-wall-door--f0ce5b67","title":"Factory Wall Door Panel (Chocolate and Confectionery Factory)","summary":"The 5.00 m wall bay with a 1.50 m personnel doorway, a steel frame and a hinged teal leaf with a vision light, on the same ports as the plain bay.","description":"The 5.00 m wall bay with a 1.50 m personnel doorway, a steel frame and a hinged teal leaf with a vision light, on the same ports as the plain bay. Dimensions 5.00 by 3.70 by 0.29 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: door-plant at (-0.66, 1.05, 0.10) m. Connectors: left (wall) at (-2.50, 1.80, 0.00) facing (-1, 0, 0); right (wall) at (2.50, 1.80, 0.00) facing (1, 0, 0). The door swings. The leaf is set forward of the wall face so the two never share a plane. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-factory-wall-door--f0ce5b67","cdnUrl":"https://cdn.3dassets.dev/assets/36807/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-factory-wall-door--f0ce5b67","thumbnailUrl":"https://cdn.3dassets.dev/assets/36807/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36807/v1/poster.webp","blurhash":"UDG9KqWV00aK~q_39Z4n00xu.8M{Ioog%2RP","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":12468,"triangles":168,"vertices":504,"meshes":6,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-2.5,-0.000004170651613177867,-0.120128172668593],"max":[2.5,3.700004218335329,0.17499099637175924]},"sizeMeters":[5,3.7,0.295],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:48.713Z","updatedAt":"2026-09-12T04:30:48.821Z","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/36807/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 FactoryWallDoorPanelChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36807/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/36807/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36807/v1/model.glb\" alt=\"Factory Wall Door Panel (Chocolate and Confectionery Factory)\" 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/36807/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/36807/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36810","slug":"chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","title":"Ceiling Gantry Beam (Chocolate and Confectionery Factory)","summary":"A 5.00 m overhead service beam with a cable tray on one side and four strip lights under the other, hung above a plant floor at 3.60 m.","description":"A 5.00 m overhead service beam with a cable tray on one side and four strip lights under the other, hung above a plant floor at 3.60 m. Dimensions 5.00 by 0.56 by 0.89 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Connectors: left (gantry) at (-2.50, 0.20, 0.00) facing (-1, 0, 0); right (gantry) at (2.50, 0.20, 0.00) facing (1, 0, 0). The origin is at the bottom of the beam, so place it at the height the underside should sit. Ports at each end let beams run bay to bay. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","cdnUrl":"https://cdn.3dassets.dev/assets/36810/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-ceiling-gantry-bea-b5a05dbf","thumbnailUrl":"https://cdn.3dassets.dev/assets/36810/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36810/v1/poster.webp","blurhash":"U79Q~xyDD$b^pI_No|M{00V@?vnhm,00RP-;","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"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":11704,"triangles":204,"vertices":612,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-2.5,-0.000038454514032643106,-0.39986755273171837],"max":[2.5,0.5600604290353494,0.4900045873133465]},"sizeMeters":[5,0.56,0.89],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:49.590Z","updatedAt":"2026-09-12T04:30:49.685Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36810/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CeilingGantryBeamChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36810/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36810/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36810/v1/model.glb\" alt=\"Ceiling Gantry Beam (Chocolate and Confectionery Factory)\" 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/36810/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/36810/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36794","slug":"chocolate-and-confectionery-factory-ingredient-hopper-2f7c7119","title":"Ingredient Hopper (Chocolate and Confectionery Factory)","summary":"A square teal ingredient hopper on four legs with a tapered outlet, a slide valve, a hinged steel lid and an abstract level plate.","description":"A square teal ingredient hopper on four legs with a tapered outlet, a slide valve, a hinged steel lid and an abstract level plate. Dimensions 1.28 by 2.29 by 1.16 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: lid-hopper at (0.00, 2.18, -0.55) m. The lid lifts on its back edge. The slide valve and the contents are static. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-ingredient-hopper-2f7c7119","cdnUrl":"https://cdn.3dassets.dev/assets/36794/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-ingredient-hopper-2f7c7119","thumbnailUrl":"https://cdn.3dassets.dev/assets/36794/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36794/v1/poster.webp","blurhash":"U69*iQ?^00D4yrx]DODiUbrXLLKN|dxGY5bv","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":18772,"triangles":288,"vertices":864,"meshes":6,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.5799999888986349,0,-0.5799999825656414],"max":[0.7000000178813934,2.2899909824740208,0.5799999952316284]},"sizeMeters":[1.28,2.29,1.16],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:41.259Z","updatedAt":"2026-09-12T04:30:41.358Z","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/36794/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 IngredientHopperChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36794/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/36794/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36794/v1/model.glb\" alt=\"Ingredient Hopper (Chocolate and Confectionery Factory)\" 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/36794/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/36794/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36759","slug":"chocolate-and-confectionery-factory-cocoa-bean-roaster-0aa29700","title":"Cocoa Bean Roaster Drum (Chocolate and Confectionery Factory)","summary":"A stylised batch roaster: a perforated steel drum on a teal frame with internal lifter vanes, a drive motor, a hot air stack and a small abstract dial panel.","description":"A stylised batch roaster: a perforated steel drum on a teal frame with internal lifter vanes, a drive motor, a hot air stack and a small abstract dial panel. Dimensions 2.22 by 3.10 by 1.43 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: drum-roaster at (0.00, 0.92, 0.00) m. The drum turns on its own cross axis node. Hot air, smoke and the burner flame are not modelled. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-cocoa-bean-roaster-0aa29700","cdnUrl":"https://cdn.3dassets.dev/assets/36759/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-cocoa-bean-roaster-0aa29700","thumbnailUrl":"https://cdn.3dassets.dev/assets/36759/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36759/v1/poster.webp","blurhash":"U79RC8%g00I:mRNGNb$+00Md~q-;c@xasAI:","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":20164,"triangles":340,"vertices":1020,"meshes":6,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-1.0800000429153442,-0.000045142326348557305,-0.7300320411547843],"max":[1.1399999856948853,3.0999999046325684,0.6999905350338017]},"sizeMeters":[2.22,3.1,1.43],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:24.669Z","updatedAt":"2026-09-12T04:30:24.774Z","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/36759/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 CocoaBeanRoasterDrumChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36759/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/36759/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36759/v1/model.glb\" alt=\"Cocoa Bean Roaster Drum (Chocolate and Confectionery Factory)\" 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/36759/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/36759/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36760","slug":"chocolate-and-confectionery-factory-cocoa-winnower-75a3df9b","title":"Cocoa Winnower (Chocolate and Confectionery Factory)","summary":"A winnowing tower: a cracking head on top, three stacked sorting decks behind a teal casing, a side aspiration fan and a kraft bin catching the nib fraction.","description":"A winnowing tower: a cracking head on top, three stacked sorting decks behind a teal casing, a side aspiration fan and a kraft bin catching the nib fraction. Dimensions 1.72 by 2.73 by 1.21 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: fan-winnower at (0.62, 1.00, 0.50) m. The fan wheel spins. Falling nibs, husk and the air stream are static or absent: loose particles need a particle system, not a node transform. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: fan-spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-cocoa-winnower-75a3df9b","cdnUrl":"https://cdn.3dassets.dev/assets/36760/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-cocoa-winnower-75a3df9b","thumbnailUrl":"https://cdn.3dassets.dev/assets/36760/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36760/v1/poster.webp","blurhash":"U59a,4?]008w-=Rk9Fj=*KH@Cj.S?G%KM{IW","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":18200,"triangles":292,"vertices":876,"meshes":6,"materials":5,"textures":0,"animations":["fan-spin"],"boundingBox":{"min":[-0.7599999941885471,-0.000023807079476710624,-0.4999801738056188],"max":[0.9599999886751175,2.7300000190734863,0.7091811040352295]},"sizeMeters":[1.72,2.73,1.209],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:24.689Z","updatedAt":"2026-09-12T04:30:24.805Z","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/36760/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 CocoaWinnowerChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36760/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/36760/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36760/v1/model.glb\" alt=\"Cocoa Winnower (Chocolate and Confectionery Factory)\" 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/36760/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/36760/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36757","slug":"chocolate-and-confectionery-factory-cocoa-grinder-mill-2e0255b1","title":"Cocoa Grinder Mill (Chocolate and Confectionery Factory)","summary":"A pin mill that grinds nibs to liquor: a steel grinding chamber on four legs with a teal feed hopper, a three arm rotor inside and a liquor outlet pipe.","description":"A pin mill that grinds nibs to liquor: a steel grinding chamber on four legs with a teal feed hopper, a three arm rotor inside and a liquor outlet pipe. Dimensions 1.26 by 2.11 by 1.00 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: paddle-grinder at (0.00, 1.10, 0.00) m. The rotor spins about its own vertical axis. The liquor is a solid disc in the chamber; flowing chocolate is not modelled. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-cocoa-grinder-mill-2e0255b1","cdnUrl":"https://cdn.3dassets.dev/assets/36757/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-cocoa-grinder-mill-2e0255b1","thumbnailUrl":"https://cdn.3dassets.dev/assets/36757/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36757/v1/poster.webp","blurhash":"U49Q~x_N0000qE-;QS008wIU%~%z*eiwL1X.","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":26108,"triangles":440,"vertices":1320,"meshes":6,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.5000213616883951,0,-0.5000213616883951],"max":[0.7600426983658867,2.109999895095825,0.5000213616883951]},"sizeMeters":[1.26,2.11,1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:24.624Z","updatedAt":"2026-09-12T04:30:24.733Z","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/36757/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 CocoaGrinderMillChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36757/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/36757/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36757/v1/model.glb\" alt=\"Cocoa Grinder Mill (Chocolate and Confectionery Factory)\" 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/36757/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/36757/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36764","slug":"chocolate-and-confectionery-factory-conche-vat-c80baa13","title":"Conche Vat (Chocolate and Confectionery Factory)","summary":"A round conche: a teal jacketed vat of chocolate on three legs with a top drive, two shear arms sweeping the base and an abstract dial plate on the side.","description":"A round conche: a teal jacketed vat of chocolate on three legs with a top drive, two shear arms sweeping the base and an abstract dial plate on the side. Dimensions 1.84 by 2.34 by 1.84 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: paddle-conche at (0.00, 0.30, 0.00) m. The paddle assembly turns about the vat axis. The chocolate is a solid disc: a moving surface would need a shader, not a rigid node. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-conche-vat-c80baa13","cdnUrl":"https://cdn.3dassets.dev/assets/36764/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-conche-vat-c80baa13","thumbnailUrl":"https://cdn.3dassets.dev/assets/36764/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36764/v1/poster.webp","blurhash":"U79kBD?b00DiZNRPX-o}00IU_NtR70tR;NeT","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":28644,"triangles":512,"vertices":1536,"meshes":7,"materials":5,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.9200533736442251,0,-0.9200533736442251],"max":[0.9200533736442251,2.3399999141693115,0.9200533736442251]},"sizeMeters":[1.84,2.34,1.84],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:26.545Z","updatedAt":"2026-09-12T04:30:26.667Z","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/36764/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 ConcheVatChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36764/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/36764/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36764/v1/model.glb\" alt=\"Conche Vat (Chocolate and Confectionery Factory)\" 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/36764/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/36764/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36761","slug":"chocolate-and-confectionery-factory-tempering-machine-47c219dd","title":"Tempering Machine (Chocolate and Confectionery Factory)","summary":"A continuous tempering unit: a steel cabinet with a heated bowl and stirrer under a hinged teal lid, an abstract touch panel and a tempered chocolate outlet over a catch pan.","description":"A continuous tempering unit: a steel cabinet with a heated bowl and stirrer under a hinged teal lid, an abstract touch panel and a tempered chocolate outlet over a catch pan. Dimensions 1.30 by 1.92 by 1.06 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: lid-temper at (-0.28, 1.78, -0.34) m; paddle-temper at (-0.28, 1.30, 0.00) m. The lid lifts and the stirrer turns. Chocolate is solid geometry; the outlet does not flow. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: open, close and spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-tempering-machine-47c219dd","cdnUrl":"https://cdn.3dassets.dev/assets/36761/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-tempering-machine-47c219dd","thumbnailUrl":"https://cdn.3dassets.dev/assets/36761/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36761/v1/poster.webp","blurhash":"U7BD==?b000056t7-UM_00M|_N%1?bXSRPrX","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":29672,"triangles":464,"vertices":1392,"meshes":9,"materials":5,"textures":0,"animations":["open","close","spin"],"boundingBox":{"min":[-0.6499999761581421,0.000014956934702645142,-0.5000320260938838],"max":[0.6499999761581421,1.9199963234736026,0.5599935905173457]},"sizeMeters":[1.3,1.92,1.06],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:27.379Z","updatedAt":"2026-09-12T04:30:27.554Z","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/36761/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 TemperingMachineChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36761/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/36761/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36761/v1/model.glb\" alt=\"Tempering Machine (Chocolate and Confectionery Factory)\" 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/36761/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/36761/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36762","slug":"chocolate-and-confectionery-factory-chocolate-tank-wit-aec6b509","title":"Chocolate Tank With Tap (Chocolate and Confectionery Factory)","summary":"A jacketed holding tank of liquid chocolate on three legs, with a hinged teal lid, a level band and a front tap drawing into a small steel pan.","description":"A jacketed holding tank of liquid chocolate on three legs, with a hinged teal lid, a level band and a front tap drawing into a small steel pan. Dimensions 1.32 by 2.50 by 1.57 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: lid-tank at (0.00, 2.36, -0.24) m. The lid lifts. The tap is closed and the chocolate is a solid surface: a stream would need a shader or a particle system. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-chocolate-tank-wit-aec6b509","cdnUrl":"https://cdn.3dassets.dev/assets/36762/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-chocolate-tank-wit-aec6b509","thumbnailUrl":"https://cdn.3dassets.dev/assets/36762/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36762/v1/poster.webp","blurhash":"U79@hks:00IotlRjR6xt00X8~qsmD%bI%Ms.","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":26772,"triangles":472,"vertices":1416,"meshes":6,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6600000262260437,0.00001403603138994125,-0.6600000262260437],"max":[0.6600000262260437,2.500003385571691,0.9072138149165422]},"sizeMeters":[1.32,2.5,1.567],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:26.520Z","updatedAt":"2026-09-12T04:30:26.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/36762/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 ChocolateTankWithTapChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36762/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/36762/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36762/v1/model.glb\" alt=\"Chocolate Tank With Tap (Chocolate and Confectionery Factory)\" 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/36762/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/36762/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36763","slug":"chocolate-and-confectionery-factory-nut-roaster-8dce8adb","title":"Nut Roaster (Chocolate and Confectionery Factory)","summary":"A small nut roasting drum on an amber frame with internal vanes, a feed hood, an exhaust pipe and a discharge tray of roasted kernels.","description":"A small nut roasting drum on an amber frame with internal vanes, a feed hood, an exhaust pipe and a discharge tray of roasted kernels. Dimensions 1.52 by 2.04 by 1.01 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: drum-nut at (0.00, 0.76, 0.00) m. The drum turns on its cross axis. The burner and its flame are not modelled. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-nut-roaster-8dce8adb","cdnUrl":"https://cdn.3dassets.dev/assets/36763/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-nut-roaster-8dce8adb","thumbnailUrl":"https://cdn.3dassets.dev/assets/36763/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36763/v1/poster.webp","blurhash":"UDB|Ncxu00j;9vjFwIS500Io?c%M}=X8K5xZ","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":14716,"triangles":216,"vertices":648,"meshes":6,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.75,0.00003112753856100714,-0.500030518509476],"max":[0.7699813681128558,2.0399999618530273,0.5099813776495989]},"sizeMeters":[1.52,2.04,1.01],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:26.532Z","updatedAt":"2026-09-12T04:30:26.664Z","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/36763/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 NutRoasterChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36763/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/36763/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36763/v1/model.glb\" alt=\"Nut Roaster (Chocolate and Confectionery Factory)\" 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/36763/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/36763/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36799","slug":"chocolate-and-confectionery-factory-clean-in-place-tan-781b5193","title":"Clean In Place Tank (Chocolate and Confectionery Factory)","summary":"A clean in place vessel: a steel tank on three legs with a hinged teal lid, a riser and return pipe, a small pump skid and an abstract gauge plate.","description":"A clean in place vessel: a steel tank on three legs with a hinged teal lid, a riser and return pipe, a small pump skid and an abstract gauge plate. Dimensions 1.41 by 2.35 by 1.20 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: lid-cip at (0.00, 2.14, -0.20) m. The lid lifts. Hoses, sprays and the liquid inside are not modelled: a flexible hose needs a joint per segment. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-clean-in-place-tan-781b5193","cdnUrl":"https://cdn.3dassets.dev/assets/36799/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-clean-in-place-tan-781b5193","thumbnailUrl":"https://cdn.3dassets.dev/assets/36799/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36799/v1/poster.webp","blurhash":"U7A^g:x]00I9?vWBDioM00Rk~qt7D%oy%MaL","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":27052,"triangles":452,"vertices":1356,"meshes":6,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.699999988079071,0.00002074846015856502,-0.6000106869803817],"max":[0.7100390146554988,2.3499999046325684,0.6000106869803817]},"sizeMeters":[1.41,2.35,1.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:43.347Z","updatedAt":"2026-09-12T04:30:43.468Z","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/36799/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 CleanInPlaceTankChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36799/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/36799/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36799/v1/model.glb\" alt=\"Clean In Place Tank (Chocolate and Confectionery Factory)\" 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/36799/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/36799/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36795","slug":"chocolate-and-confectionery-factory-control-panel-119e842c","title":"Control Panel (Chocolate and Confectionery Factory)","summary":"A floor standing plant control cabinet in teal with an abstract dial strip, unlabelled buttons, a beacon on top and a hinged steel front door.","description":"A floor standing plant control cabinet in teal with an abstract dial strip, unlabelled buttons, a beacon on top and a hinged steel front door. Dimensions 0.90 by 1.82 by 0.54 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: door-panel at (-0.42, 0.80, 0.23) m. The door swings open. Every face and legend plate is blank: the dials are plain circles, not readable instruments. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-control-panel-119e842c","cdnUrl":"https://cdn.3dassets.dev/assets/36795/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-control-panel-119e842c","thumbnailUrl":"https://cdn.3dassets.dev/assets/36795/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36795/v1/poster.webp","blurhash":"U89@|xvg00C5~qWp4.sAmROrY4+_tRs:RPNZ","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":18300,"triangles":280,"vertices":840,"meshes":7,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.44999998807907104,0,-0.24999054919579397],"max":[0.44999998807907104,1.8200000524520874,0.28998687280664354]},"sizeMeters":[0.9,1.82,0.54],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:41.791Z","updatedAt":"2026-09-12T04:30:41.882Z","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/36795/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 ControlPanelChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36795/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/36795/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36795/v1/model.glb\" alt=\"Control Panel (Chocolate and Confectionery Factory)\" 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/36795/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/36795/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36798","slug":"chocolate-and-confectionery-factory-stock-shelf-run-9153a821","title":"Stock Shelf Run (Chocolate and Confectionery Factory)","summary":"A 2.4 m three tier storage rack in the plant amber with steel decks and nine blank stock cases on it, for ingredients or finished goods.","description":"A 2.4 m three tier storage rack in the plant amber with steel decks and nine blank stock cases on it, for ingredients or finished goods. Dimensions 2.52 by 2.20 by 0.92 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Every case is unprinted: no label, stencil or brand mark. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-stock-shelf-run-9153a821","cdnUrl":"https://cdn.3dassets.dev/assets/36798/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-stock-shelf-run-9153a821","thumbnailUrl":"https://cdn.3dassets.dev/assets/36798/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36798/v1/poster.webp","blurhash":"U6G8[p~p00Q:OE~p}?0100r;_MIo-PxGJ:I:","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":27280,"triangles":492,"vertices":1476,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-1.2599999904632568,0.0000021361478181707028,-0.45994018024021166],"max":[1.2599999904632568,2.19994818608376,0.45994018024021166]},"sizeMeters":[2.52,2.2,0.92],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:43.865Z","updatedAt":"2026-09-12T04:30:43.965Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36798/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StockShelfRunChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36798/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36798/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36798/v1/model.glb\" alt=\"Stock Shelf Run (Chocolate and Confectionery Factory)\" 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/36798/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/36798/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36800","slug":"chocolate-and-confectionery-factory-wash-sink-d7fc6b5d","title":"Wash Sink (Chocolate and Confectionery Factory)","summary":"A stainless hand wash station with a deep bowl, a knee operated mixer, a splashback, a wall soap box and an undershelf.","description":"A stainless hand wash station with a deep bowl, a knee operated mixer, a splashback, a wall soap box and an undershelf. Dimensions 1.20 by 1.46 by 0.65 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-wash-sink-d7fc6b5d","cdnUrl":"https://cdn.3dassets.dev/assets/36800/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-wash-sink-d7fc6b5d","thumbnailUrl":"https://cdn.3dassets.dev/assets/36800/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36800/v1/poster.webp","blurhash":"U9Dl~DWB00%M_4t89EIU00M{~qxu4nay-;j@","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":11836,"triangles":188,"vertices":564,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.5999826201259822,0,-0.3350260284365408],"max":[0.5999826201259822,1.4600000381469727,0.3100260224760763]},"sizeMeters":[1.2,1.46,0.645],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:44.351Z","updatedAt":"2026-09-12T04:30:44.470Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36800/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WashSinkChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36800/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36800/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36800/v1/model.glb\" alt=\"Wash Sink (Chocolate and Confectionery Factory)\" 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/36800/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/36800/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36758","slug":"chocolate-and-confectionery-factory-cocoa-bean-sack-st-477d6aaa","title":"Cocoa Bean Sack Stack (Chocolate and Confectionery Factory)","summary":"A stack of six filled hessian cocoa bean sacks on a timber pallet, tied at the neck, with a few spilled beans on the floor beside it.","description":"A stack of six filled hessian cocoa bean sacks on a timber pallet, tied at the neck, with a few spilled beans on the floor beside it. Dimensions 1.22 by 1.28 by 1.11 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Every sack face is blank: no origin stamp, grade mark or brand of any kind. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-cocoa-bean-sack-st-477d6aaa","cdnUrl":"https://cdn.3dassets.dev/assets/36758/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-cocoa-bean-sack-st-477d6aaa","thumbnailUrl":"https://cdn.3dassets.dev/assets/36758/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36758/v1/poster.webp","blurhash":"UBG8r:t700V@01Rja$xu00M|-oxa~Vxu-oM|","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":16804,"triangles":312,"vertices":936,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.5999896433065142,0,-0.5018772775274385],"max":[0.6201022174070085,1.2799999713897705,0.6050342303901209]},"sizeMeters":[1.22,1.28,1.107],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:24.654Z","updatedAt":"2026-09-12T04:30:24.770Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36758/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CocoaBeanSackStackChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36758/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36758/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36758/v1/model.glb\" alt=\"Cocoa Bean Sack Stack (Chocolate and Confectionery Factory)\" 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/36758/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/36758/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36797","slug":"chocolate-and-confectionery-factory-pallet-stack-449cae55","title":"Pallet Stack (Chocolate and Confectionery Factory)","summary":"Three stacked pallets carrying eight blank kraft cases under a clear stretch wrap, 1.20 by 1.00 m and 1.90 m high, ready for despatch.","description":"Three stacked pallets carrying eight blank kraft cases under a clear stretch wrap, 1.20 by 1.00 m and 1.90 m high, ready for despatch. Dimensions 1.20 by 1.90 by 1.00 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Every case face is unprinted and the wrap carries no tape or label. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-pallet-stack-449cae55","cdnUrl":"https://cdn.3dassets.dev/assets/36797/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-pallet-stack-449cae55","thumbnailUrl":"https://cdn.3dassets.dev/assets/36797/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36797/v1/poster.webp","blurhash":"UDHed+?G00E4%%oMI9kC0LR.s+nM%Kt7RiV@","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":39180,"triangles":780,"vertices":2340,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000106594700559,0,-0.5000213616883951],"max":[0.6000106594700559,1.899999976158142,0.5000213616883951]},"sizeMeters":[1.2,1.9,1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:42.566Z","updatedAt":"2026-09-12T04:30:42.663Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36797/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PalletStackChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36797/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36797/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36797/v1/model.glb\" alt=\"Pallet Stack (Chocolate and Confectionery Factory)\" 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/36797/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/36797/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36796","slug":"chocolate-and-confectionery-factory-pallet-eea1b60c","title":"Pallet (Chocolate and Confectionery Factory)","summary":"A plain timber pallet 1.20 by 1.00 m with three bearers, nine blocks and six top boards, unstamped and unmarked.","description":"A plain timber pallet 1.20 by 1.00 m with three bearers, nine blocks and six top boards, unstamped and unmarked. Dimensions 1.20 by 0.20 by 1.00 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-pallet-eea1b60c","cdnUrl":"https://cdn.3dassets.dev/assets/36796/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-pallet-eea1b60c","thumbnailUrl":"https://cdn.3dassets.dev/assets/36796/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36796/v1/poster.webp","blurhash":"U6FFNg?a00IV~p%1IVRk00IV~oaL00IWf$NF","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":11400,"triangles":216,"vertices":648,"meshes":1,"materials":1,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,0.000021360473955220338,-0.500021382825697],"max":[0.6000000238418579,0.199978642506277,0.500021382825697]},"sizeMeters":[1.2,0.2,1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:43.326Z","updatedAt":"2026-09-12T04:30:43.446Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36796/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PalletChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36796/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36796/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36796/v1/model.glb\" alt=\"Pallet (Chocolate and Confectionery Factory)\" 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/36796/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/36796/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36789","slug":"chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","title":"Crate Of Finished Boxes (Chocolate and Confectionery Factory)","summary":"An open kraft crate holding nine finished gift boxes with plain teal lids, stacked two high with one set out on top.","description":"An open kraft crate holding nine finished gift boxes with plain teal lids, stacked two high with one set out on top. Dimensions 1.00 by 0.75 by 0.80 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Every lid and box face is blank: no brand, crest, ribbon motif or printed panel of any kind. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","cdnUrl":"https://cdn.3dassets.dev/assets/36789/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-crate-of-finished--9bc639d3","thumbnailUrl":"https://cdn.3dassets.dev/assets/36789/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36789/v1/poster.webp","blurhash":"UFGI=V_300Mx0,ozvzVt00E2ENVs}locx[Rk","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":13052,"triangles":276,"vertices":828,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.5,0.00002746963876062991,-0.4000213629566332],"max":[0.5,0.7500056452312698,0.4000213629566332]},"sizeMeters":[1,0.75,0.8],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:38.885Z","updatedAt":"2026-09-12T04:30:39.097Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36789/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CrateOfFinishedBoxesChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36789/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36789/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36789/v1/model.glb\" alt=\"Crate Of Finished Boxes (Chocolate and Confectionery Factory)\" 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/36789/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/36789/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36790","slug":"chocolate-and-confectionery-factory-conveyor-straight-3c513366","title":"Conveyor Straight (Chocolate and Confectionery Factory)","summary":"A 2.0 m straight belt conveyor on the pack datum: a dark deck between teal side rails at 0.85 m, six driven rollers and a drive box on one leg.","description":"A 2.0 m straight belt conveyor on the pack datum: a dark deck between teal side rails at 0.85 m, six driven rollers and a drive box on one leg. Dimensions 0.91 by 0.87 by 2.00 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: roller-belt-1 at (0.00, 0.81, -0.85) m; roller-belt-2 at (0.00, 0.81, -0.51) m; roller-belt-3 at (0.00, 0.81, -0.17) m; roller-belt-4 at (0.00, 0.81, 0.17) m; roller-belt-5 at (0.00, 0.81, 0.51) m; roller-belt-6 at (0.00, 0.81, 0.85) m. Connectors: in (conveyor) at (0.00, 0.85, -1.00) facing (0, 0, -1); out (conveyor) at (0.00, 0.85, 1.00) facing (0, 0, 1). Each roller spins on its own cross node. Place pieces two metres apart to chain the ports. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-conveyor-straight-3c513366","cdnUrl":"https://cdn.3dassets.dev/assets/36790/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-conveyor-straight-3c513366","thumbnailUrl":"https://cdn.3dassets.dev/assets/36790/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36790/v1/poster.webp","blurhash":"UD8q]EozDibG?^MxIAxu8wMws:%38wa#%Mof","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":10808,"triangles":288,"vertices":864,"meshes":8,"materials":3,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.5199702283600068,0.00005997959995640567,-1],"max":[0.38993499557481615,0.8699749791783647,1]},"sizeMeters":[0.91,0.87,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:39.703Z","updatedAt":"2026-09-12T04:30:39.799Z","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/36790/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 ConveyorStraightChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36790/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/36790/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36790/v1/model.glb\" alt=\"Conveyor Straight (Chocolate and Confectionery Factory)\" 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/36790/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/36790/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36793","slug":"chocolate-and-confectionery-factory-roller-conveyor-8011bfdd","title":"Roller Conveyor (Chocolate and Confectionery Factory)","summary":"A 2.0 m unpowered gravity roller section for cases and totes, on the same datum and port set as the belt straights.","description":"A 2.0 m unpowered gravity roller section for cases and totes, on the same datum and port set as the belt straights. Dimensions 0.78 by 0.93 by 2.00 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: roller-gravity-1 at (0.00, 0.81, -0.88) m; roller-gravity-2 at (0.00, 0.81, -0.66) m; roller-gravity-3 at (0.00, 0.81, -0.44) m; roller-gravity-4 at (0.00, 0.81, -0.22) m; roller-gravity-5 at (0.00, 0.81, 0.00) m; roller-gravity-6 at (0.00, 0.81, 0.22) m; roller-gravity-7 at (0.00, 0.81, 0.44) m; roller-gravity-8 at (0.00, 0.81, 0.66) m; roller-gravity-9 at (0.00, 0.81, 0.88) m. Connectors: in (conveyor) at (0.00, 0.85, -1.00) facing (0, 0, -1); out (conveyor) at (0.00, 0.85, 1.00) facing (0, 0, 1). Each roller spins freely on its own node. It chains to a belt straight at either end. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-roller-conveyor-8011bfdd","cdnUrl":"https://cdn.3dassets.dev/assets/36793/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-roller-conveyor-8011bfdd","thumbnailUrl":"https://cdn.3dassets.dev/assets/36793/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36793/v1/poster.webp","blurhash":"ULD9*YxuITWB~qM{IUxu4nIURjt74mWBt7j[","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":10676,"triangles":372,"vertices":1116,"meshes":10,"materials":1,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.38993499557481615,-0.000010525309490527768,-1],"max":[0.38993499557481615,0.9300105324620479,1]},"sizeMeters":[0.78,0.93,2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:40.899Z","updatedAt":"2026-09-12T04:30:40.995Z","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/36793/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 RollerConveyorChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36793/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/36793/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36793/v1/model.glb\" alt=\"Roller Conveyor (Chocolate and Confectionery Factory)\" 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/36793/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/36793/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36791","slug":"chocolate-and-confectionery-factory-conveyor-curve-6fd1830b","title":"Conveyor Curve (Chocolate and Confectionery Factory)","summary":"A quarter turn conveyor module that takes a 0.85 m belt line through ninety degrees, with a turning transfer disc at the corner, a slider plate on the outfeed leg and matching teal rails.","description":"A quarter turn conveyor module that takes a 0.85 m belt line through ninety degrees, with a turning transfer disc at the corner, a slider plate on the outfeed leg and matching teal rails. Dimensions 1.40 by 0.87 by 1.40 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: roller-curve-1 at (0.00, 0.81, -0.85) m; roller-curve-2 at (0.00, 0.81, -0.55) m; turntable-curve at (0.00, 0.79, 0.00) m. Connectors: in (conveyor) at (0.00, 0.85, -1.00) facing (0, 0, -1); out (conveyor) at (1.00, 0.85, 0.00) facing (1, 0, 0). Each infeed roller and the corner disc turn on their own node. The in port faces negative Z and the out port positive X. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: roll and spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-conveyor-curve-6fd1830b","cdnUrl":"https://cdn.3dassets.dev/assets/36791/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-conveyor-curve-6fd1830b","thumbnailUrl":"https://cdn.3dassets.dev/assets/36791/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36791/v1/poster.webp","blurhash":"UF98G8%#8_tR?^tRIAR*8wMxozRj8wRP%Ms:","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":18640,"triangles":304,"vertices":912,"meshes":7,"materials":3,"textures":0,"animations":["roll","spin"],"boundingBox":{"min":[-0.4000000059604645,-0.0000010591007025828603,-1],"max":[1,0.8700100863073116,0.4000000059604645]},"sizeMeters":[1.4,0.87,1.4],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:40.216Z","updatedAt":"2026-09-12T04:30:40.309Z","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/36791/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 ConveyorCurveChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36791/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/36791/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36791/v1/model.glb\" alt=\"Conveyor Curve (Chocolate and Confectionery Factory)\" 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/36791/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/36791/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36767","slug":"chocolate-and-confectionery-factory-moulding-table-997c2095","title":"Moulding Table (Chocolate and Confectionery Factory)","summary":"A stainless moulding bench 2.0 m long with an undershelf, three teal trays of cast bars on top and two empty trays stored below.","description":"A stainless moulding bench 2.0 m long with an undershelf, three teal trays of cast bars on top and two empty trays stored below. Dimensions 2.00 by 1.02 by 1.20 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-moulding-table-997c2095","cdnUrl":"https://cdn.3dassets.dev/assets/36767/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-moulding-table-997c2095","thumbnailUrl":"https://cdn.3dassets.dev/assets/36767/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36767/v1/poster.webp","blurhash":"UFD,Q8%M4T%2_N-;V@IU00ofx]M{4TD%WAt7","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":19712,"triangles":360,"vertices":1080,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.00003569711934370279,-0.6000549333170568],"max":[1,1.01996428380717,0.6000549333170568]},"sizeMeters":[2,1.02,1.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:28.280Z","updatedAt":"2026-09-12T04:30:28.387Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36767/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function MouldingTableChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36767/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36767/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36767/v1/model.glb\" alt=\"Moulding Table (Chocolate and Confectionery Factory)\" 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/36767/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/36767/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36770","slug":"chocolate-and-confectionery-factory-depositor-head-d03877d2","title":"Depositor Head (Chocolate and Confectionery Factory)","summary":"A gantry depositor: two teal columns carrying a hopper and a five nozzle head that travels down onto the mould below, with a small abstract dial plate.","description":"A gantry depositor: two teal columns carrying a hopper and a five nozzle head that travels down onto the mould below, with a small abstract dial plate. Dimensions 1.50 by 2.16 by 0.50 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: head-depositor at (0.00, 1.14, 0.00) m. The nozzle head slides down and back on its own node. Deposited chocolate is not modelled: a stream needs a shader. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-depositor-head-d03877d2","cdnUrl":"https://cdn.3dassets.dev/assets/36770/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-depositor-head-d03877d2","thumbnailUrl":"https://cdn.3dassets.dev/assets/36770/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36770/v1/poster.webp","blurhash":"UD85r|xu00Io?^tlDiMdIAX8%MrrE1X8%3r?","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":21940,"triangles":344,"vertices":1032,"meshes":7,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.75,-0.000009766817101991565,-0.25002898596049583],"max":[0.75,2.1600000858306885,0.25002898596049583]},"sizeMeters":[1.5,2.16,0.5],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:30.002Z","updatedAt":"2026-09-12T04:30:30.204Z","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/36770/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 DepositorHeadChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36770/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/36770/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36770/v1/model.glb\" alt=\"Depositor Head (Chocolate and Confectionery Factory)\" 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/36770/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/36770/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36771","slug":"chocolate-and-confectionery-factory-vibrating-table-bb1163cb","title":"Vibrating Table (Chocolate and Confectionery Factory)","summary":"A spring mounted vibrating table that settles a filled mould: a dark base on four coil pads, a steel deck with tray rails and a side drive box.","description":"A spring mounted vibrating table that settles a filled mould: a dark base on four coil pads, a steel deck with tray rails and a side drive box. Dimensions 1.27 by 1.03 by 1.00 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: deck-vibrate at (0.00, 0.90, 0.00) m. The deck shakes about its own node through a small rocking angle. The springs do not compress: that would need a second channel per spring. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: shake. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-vibrating-table-bb1163cb","cdnUrl":"https://cdn.3dassets.dev/assets/36771/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-vibrating-table-bb1163cb","thumbnailUrl":"https://cdn.3dassets.dev/assets/36771/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36771/v1/poster.webp","blurhash":"UHAA,ZtR9Fs:_NkCIBniD%RjV@en8_R*t7oL","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":22396,"triangles":396,"vertices":1188,"meshes":7,"materials":5,"textures":0,"animations":["shake"],"boundingBox":{"min":[-0.7000063992583123,-0.000017086107904684678,-0.4999786391720132],"max":[0.5699999928474426,1.0349899813385712,0.4999786391720132]},"sizeMeters":[1.27,1.035,1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:31.243Z","updatedAt":"2026-09-12T04:30:31.345Z","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/36771/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 VibratingTableChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36771/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/36771/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36771/v1/model.glb\" alt=\"Vibrating Table (Chocolate and Confectionery Factory)\" 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/36771/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/36771/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36765","slug":"chocolate-and-confectionery-factory-cooling-tunnel-sec-d7c19a60","title":"Cooling Tunnel Section (Chocolate and Confectionery Factory)","summary":"A 3.0 m enclosed cooling tunnel: a teal hood over a dark belt with an open mouth at each end, three chiller units on the roof and an abstract dial plate.","description":"A 3.0 m enclosed cooling tunnel: a teal hood over a dark belt with an open mouth at each end, three chiller units on the roof and an abstract dial plate. Dimensions 1.25 by 1.94 by 3.00 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Connectors: in (conveyor) at (0.00, 0.85, -1.50) facing (0, 0, -1); out (conveyor) at (0.00, 0.85, 1.50) facing (0, 0, 1). Static shell with no clip of its own; it chains to a driven conveyor at either end. Cold air is not modelled. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-cooling-tunnel-sec-d7c19a60","cdnUrl":"https://cdn.3dassets.dev/assets/36765/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-cooling-tunnel-sec-d7c19a60","thumbnailUrl":"https://cdn.3dassets.dev/assets/36765/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36765/v1/poster.webp","blurhash":"UF9kpa-qDiNa?^MxD%tRD4D$SgxuD4XQ%3xa","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"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":16144,"triangles":268,"vertices":804,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.6999465662861094,-0.000003814813684499541,-1.5],"max":[0.5499465901279673,1.940034688665072,1.5]},"sizeMeters":[1.25,1.94,3],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:28.257Z","updatedAt":"2026-09-12T04:30:28.351Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36765/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CoolingTunnelSectionChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36765/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36765/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36765/v1/model.glb\" alt=\"Cooling Tunnel Section (Chocolate and Confectionery Factory)\" 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/36765/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/36765/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36772","slug":"chocolate-and-confectionery-factory-demoulding-station-4827f40c","title":"Demoulding Station (Chocolate and Confectionery Factory)","summary":"A demoulding station: a twin roller knock out head on a teal gantry over a dark deck, an emptied mould tray to one side and a kraft tote of turned out bars.","description":"A demoulding station: a twin roller knock out head on a teal gantry over a dark deck, an emptied mould tray to one side and a kraft tote of turned out bars. Dimensions 1.92 by 2.20 by 1.10 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: roller-demould-1 at (0.00, 1.24, -0.32) m; roller-demould-2 at (0.00, 1.24, 0.12) m. Each knock out roller spins on its own node. The trays and bars are static geometry. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-demoulding-station-4827f40c","cdnUrl":"https://cdn.3dassets.dev/assets/36772/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-demoulding-station-4827f40c","thumbnailUrl":"https://cdn.3dassets.dev/assets/36772/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36772/v1/poster.webp","blurhash":"UE9u4+rr00jY*JjFMJM{4nS~-UV@VrXmoMwd","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":20168,"triangles":392,"vertices":1176,"meshes":8,"materials":5,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.949999988079071,-0.00004698595565705288,-0.549989311620227],"max":[0.9700000286102295,2.1999905754093225,0.5500106941977949]},"sizeMeters":[1.92,2.2,1.1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:30.751Z","updatedAt":"2026-09-12T04:30:30.842Z","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/36772/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 DemouldingStationChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36772/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/36772/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36772/v1/model.glb\" alt=\"Demoulding Station (Chocolate and Confectionery Factory)\" 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/36772/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/36772/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36773","slug":"chocolate-and-confectionery-factory-filling-piping-hea-dbd58b0f","title":"Filling Piping Head (Chocolate and Confectionery Factory)","summary":"A bench top piping head on a teal post: a small filling reservoir feeding three nozzles that drop onto a tray of open shells below.","description":"A bench top piping head on a teal post: a small filling reservoir feeding three nozzles that drop onto a tray of open shells below. Dimensions 0.94 by 1.62 by 0.67 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: head-piping at (0.22, 1.16, -0.18) m. The nozzle block slides down and back. The filling itself is not modelled. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-filling-piping-hea-dbd58b0f","cdnUrl":"https://cdn.3dassets.dev/assets/36773/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-filling-piping-hea-dbd58b0f","thumbnailUrl":"https://cdn.3dassets.dev/assets/36773/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36773/v1/poster.webp","blurhash":"U485M~GZ00_%HWW.qGnOixn4SyTx%Go#bJRO","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":27460,"triangles":460,"vertices":1380,"meshes":7,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.3700000047683716,0.00002655197505322532,-0.3702096563047554],"max":[0.5699999928474426,1.6200000047683716,0.29998412961420234]},"sizeMeters":[0.94,1.62,0.67],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:31.800Z","updatedAt":"2026-09-12T04:30:31.904Z","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/36773/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 FillingPipingHeadChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36773/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/36773/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36773/v1/model.glb\" alt=\"Filling Piping Head (Chocolate and Confectionery Factory)\" 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/36773/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/36773/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36768","slug":"chocolate-and-confectionery-factory-bar-mould-tray-2e67c5f7","title":"Bar Mould Tray (Chocolate and Confectionery Factory)","summary":"A teal polycarbonate mould tray of six segmented chocolate bars, each an invented plain rectangle divided into three fingers.","description":"A teal polycarbonate mould tray of six segmented chocolate bars, each an invented plain rectangle divided into three fingers. Dimensions 0.63 by 0.09 by 0.42 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. The bar shape is invented and carries no moulded name, logo or trademarked outline. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-bar-mould-tray-2e67c5f7","cdnUrl":"https://cdn.3dassets.dev/assets/36768/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-bar-mould-tray-2e67c5f7","thumbnailUrl":"https://cdn.3dassets.dev/assets/36768/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36768/v1/poster.webp","blurhash":"U58q{G.m0LIo,Ct,TdMd00Q-[.iw3WQ-qutk","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":17316,"triangles":324,"vertices":972,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.3149999976158142,0.000009615459149493744,-0.21001281618442572],"max":[0.3149999976158142,0.0899903881171292,0.21001281618442572]},"sizeMeters":[0.63,0.09,0.42],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:29.144Z","updatedAt":"2026-09-12T04:30:29.234Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36768/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BarMouldTrayChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36768/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36768/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36768/v1/model.glb\" alt=\"Bar Mould Tray (Chocolate and Confectionery Factory)\" 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/36768/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/36768/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36769","slug":"chocolate-and-confectionery-factory-shell-mould-tray-2395c6d2","title":"Shell Mould Tray (Chocolate and Confectionery Factory)","summary":"A teal mould tray of twelve domed praline shells, the round counterpart to the bar tray and the same 0.62 by 0.42 m footprint.","description":"A teal mould tray of twelve domed praline shells, the round counterpart to the bar tray and the same 0.62 by 0.42 m footprint. Dimensions 0.63 by 0.10 by 0.42 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Plain domes: no moulded pattern, name or trademarked silhouette. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-shell-mould-tray-2395c6d2","cdnUrl":"https://cdn.3dassets.dev/assets/36769/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-shell-mould-tray-2395c6d2","thumbnailUrl":"https://cdn.3dassets.dev/assets/36769/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36769/v1/poster.webp","blurhash":"U58Y9h.m00WC-AyDX-VY00MK^NRj5,H?mkk8","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":49584,"triangles":996,"vertices":2988,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.3149999976158142,0.000009615459149493744,-0.21001281618442572],"max":[0.3149999976158142,0.10201068036928994,0.21001281618442572]},"sizeMeters":[0.63,0.102,0.42],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:29.985Z","updatedAt":"2026-09-12T04:30:30.201Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36769/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShellMouldTrayChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36769/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36769/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36769/v1/model.glb\" alt=\"Shell Mould Tray (Chocolate and Confectionery Factory)\" 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/36769/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/36769/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36774","slug":"chocolate-and-confectionery-factory-praline-shell-tray-6f90c934","title":"Praline Shell Tray (Chocolate and Confectionery Factory)","summary":"A kraft tray of fifteen finished praline shells in two tones, ready for the taste counter or a retail box.","description":"A kraft tray of fifteen finished praline shells in two tones, ready for the taste counter or a retail box. Dimensions 0.52 by 0.09 by 0.36 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Plain domes and a plain tray: nothing carries a name, crest or trademarked shape. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-praline-shell-tray-6f90c934","cdnUrl":"https://cdn.3dassets.dev/assets/36774/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-praline-shell-tray-6f90c934","thumbnailUrl":"https://cdn.3dassets.dev/assets/36774/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36774/v1/poster.webp","blurhash":"U6Db~7~V01NFWD?G%LE300E2wKNH%L4;9Gr;","category":{"slug":"food","title":"Food & Drink"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":61836,"triangles":1236,"vertices":3708,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.25999999046325684,-0.000006252855483591946,-0.1800091489501463],"max":[0.25999999046325684,0.09000625643176227,0.1800091489501463]},"sizeMeters":[0.52,0.09,0.36],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:32.839Z","updatedAt":"2026-09-12T04:30:32.965Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36774/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PralineShellTrayChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36774/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36774/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36774/v1/model.glb\" alt=\"Praline Shell Tray (Chocolate and Confectionery Factory)\" 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/36774/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/36774/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36788","slug":"chocolate-and-confectionery-factory-metal-detector-arc-b940fd1f","title":"Metal Detector Arch (Chocolate and Confectionery Factory)","summary":"A steel inspection arch that straddles a 0.8 m belt, with a dark detection head, an abstract lamp bar and a reject box on one leg.","description":"A steel inspection arch that straddles a 0.8 m belt, with a dark detection head, an abstract lamp bar and a reject box on one leg. Dimensions 1.54 by 1.74 by 0.51 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Static: the arch is designed to be placed over a conveyor section rather than to move. Its legs stand clear of the belt frame. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-metal-detector-arc-b940fd1f","cdnUrl":"https://cdn.3dassets.dev/assets/36788/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-metal-detector-arc-b940fd1f","thumbnailUrl":"https://cdn.3dassets.dev/assets/36788/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36788/v1/poster.webp","blurhash":"UEC%Hjx]00ae~q%M9FD%IAoLWBM{sVxaaeIU","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":9952,"triangles":160,"vertices":480,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.8399963273301597,0,-0.249969481490524],"max":[0.7000106814783166,1.739982186327736,0.2600094557456961]},"sizeMeters":[1.54,1.74,0.51],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:38.426Z","updatedAt":"2026-09-12T04:30:38.607Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36788/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function MetalDetectorArchChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36788/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36788/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36788/v1/model.glb\" alt=\"Metal Detector Arch (Chocolate and Confectionery Factory)\" 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/36788/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/36788/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36792","slug":"chocolate-and-confectionery-factory-conveyor-incline-121ae208","title":"Conveyor Incline (Chocolate and Confectionery Factory)","summary":"A 2.0 m rising conveyor that lifts a line from 0.85 m to 1.75 m over its length, on the same 0.80 m deck as the straights.","description":"A 2.0 m rising conveyor that lifts a line from 0.85 m to 1.75 m over its length, on the same 0.80 m deck as the straights. Dimensions 0.91 by 1.81 by 2.06 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: roller-incline-1 at (0.00, 0.88, -0.80) m; roller-incline-2 at (0.00, 1.06, -0.40) m; roller-incline-3 at (0.00, 1.24, 0.00) m; roller-incline-4 at (0.00, 1.42, 0.40) m; roller-incline-5 at (0.00, 1.60, 0.80) m. Connectors: in (conveyor) at (0.00, 0.85, -1.00) facing (0, 0, -1); high (conveyor-high) at (0.00, 1.75, 1.00) facing (0, 0, 1). Each roller spins on its own node. The low port matches a straight at the pack datum; the high port is for a second run at 1.75 m. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-conveyor-incline-121ae208","cdnUrl":"https://cdn.3dassets.dev/assets/36792/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-conveyor-incline-121ae208","thumbnailUrl":"https://cdn.3dassets.dev/assets/36792/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36792/v1/poster.webp","blurhash":"U45$JG-;HXIAuhoyQ,ni00XRyDn$D4M|.mtR","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":10528,"triangles":256,"vertices":768,"meshes":7,"materials":3,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.5199643718357558,0.00003119991642552833,-1.032453179359436],"max":[0.38998605306960477,1.809582282607744,1.032453179359436]},"sizeMeters":[0.91,1.81,2.065],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:40.528Z","updatedAt":"2026-09-12T04:30:40.706Z","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/36792/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 ConveyorInclineChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36792/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/36792/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36792/v1/model.glb\" alt=\"Conveyor Incline (Chocolate and Confectionery Factory)\" 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/36792/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/36792/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36775","slug":"chocolate-and-confectionery-factory-caramel-kettle-84a80e67","title":"Caramel Kettle (Chocolate and Confectionery Factory)","summary":"An open cooking kettle of caramel on three legs with a bridge mounted stirrer, a heavy rim and a small abstract dial plate on the frame.","description":"An open cooking kettle of caramel on three legs with a bridge mounted stirrer, a heavy rim and a small abstract dial plate on the frame. Dimensions 1.44 by 2.22 by 1.20 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: paddle-kettle at (0.00, 1.00, 0.00) m. The stirrer turns about the kettle axis. The caramel is a solid surface and the gas ring is not modelled. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-caramel-kettle-84a80e67","cdnUrl":"https://cdn.3dassets.dev/assets/36775/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-caramel-kettle-84a80e67","thumbnailUrl":"https://cdn.3dassets.dev/assets/36775/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36775/v1/poster.webp","blurhash":"U7Bg0k-;00Di~qxu9FIU01W?~UV?OBkWspVs","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":29040,"triangles":500,"vertices":1500,"meshes":8,"materials":6,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.720028698649009,0.000017085398931929174,-0.6000000238418579],"max":[0.720028698649009,2.2200000286102295,0.6000000238418579]},"sizeMeters":[1.44,2.22,1.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:32.336Z","updatedAt":"2026-09-12T04:30:32.539Z","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/36775/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 CaramelKettleChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36775/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/36775/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36775/v1/model.glb\" alt=\"Caramel Kettle (Chocolate and Confectionery Factory)\" 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/36775/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/36775/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36776","slug":"chocolate-and-confectionery-factory-boiled-sweet-drop--5dd68b01","title":"Boiled Sweet Drop Roller (Chocolate and Confectionery Factory)","summary":"A forming pair of ribbed drop rollers on a teal frame: a rope of boiled sugar enters from the hopper above and plain round drops collect on the tray below.","description":"A forming pair of ribbed drop rollers on a teal frame: a rope of boiled sugar enters from the hopper above and plain round drops collect on the tray below. Dimensions 1.40 by 1.68 by 1.01 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: roller-drop-1 at (0.00, 0.86, -0.16) m; roller-drop-2 at (0.00, 0.86, 0.16) m. Each roller spins on its own cross node. The sugar rope is a fixed bar: a deforming rope needs a shader or a joint per segment. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-boiled-sweet-drop--5dd68b01","cdnUrl":"https://cdn.3dassets.dev/assets/36776/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-boiled-sweet-drop--5dd68b01","thumbnailUrl":"https://cdn.3dassets.dev/assets/36776/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36776/v1/poster.webp","blurhash":"U6A^,o-q000x}[kq0KrX00IU_3-WB-rr$+K5","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":31832,"triangles":692,"vertices":2076,"meshes":8,"materials":4,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.699999988079071,0.000012817454451030663,-0.4500320367709498],"max":[0.699999988079071,1.6799999475479126,0.5600251609586682]},"sizeMeters":[1.4,1.68,1.01],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:32.857Z","updatedAt":"2026-09-12T04:30:32.980Z","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/36776/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 BoiledSweetDropRollerChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36776/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/36776/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36776/v1/model.glb\" alt=\"Boiled Sweet Drop Roller (Chocolate and Confectionery Factory)\" 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/36776/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/36776/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36777","slug":"chocolate-and-confectionery-factory-lollipop-spinner-bebd68cc","title":"Lollipop Spinner (Chocolate and Confectionery Factory)","summary":"A rotary lollipop plate: eight moulds on a turning teal table with sticks laid in, a drive column, a side control box and a kraft stick bin.","description":"A rotary lollipop plate: eight moulds on a turning teal table with sticks laid in, a drive column, a side control box and a kraft stick bin. Dimensions 1.36 by 1.02 by 1.33 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: turntable-lolly at (0.00, 0.92, 0.00) m. The plate turns about its column. The sticks ride with the plate as part of the same node. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-lollipop-spinner-bebd68cc","cdnUrl":"https://cdn.3dassets.dev/assets/36777/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-lollipop-spinner-bebd68cc","thumbnailUrl":"https://cdn.3dassets.dev/assets/36777/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36777/v1/poster.webp","blurhash":"U69Hqe^j00E#.lX7H?rs009u.T#RHYw|%}S}","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":42568,"triangles":824,"vertices":2472,"meshes":10,"materials":8,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.6299966497438109,-0.000009460439914329988,-0.6200000047683716],"max":[0.7300033543537333,1.0220047582817144,0.7099999785423279]},"sizeMeters":[1.36,1.022,1.33],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:33.644Z","updatedAt":"2026-09-12T04:30:33.849Z","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/36777/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 LollipopSpinnerChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36777/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/36777/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36777/v1/model.glb\" alt=\"Lollipop Spinner (Chocolate and Confectionery Factory)\" 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/36777/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/36777/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36778","slug":"chocolate-and-confectionery-factory-candy-cane-twister-d4dda3ec","title":"Candy Cane Twister (Chocolate and Confectionery Factory)","summary":"A twin roller rope twister that spins two colours of sugar into striped canes, with an amber frame and finished canes cooling on the tray beside it.","description":"A twin roller rope twister that spins two colours of sugar into striped canes, with an amber frame and finished canes cooling on the tray beside it. Dimensions 1.20 by 1.11 by 0.87 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: roller-twist-1 at (0.00, 0.82, -0.20) m; roller-twist-2 at (0.00, 0.82, 0.20) m. Each roller spins on its own node. The rope is two fixed bars and the finished canes are static: a twisting rope is not reachable with one rigid transform. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-candy-cane-twister-d4dda3ec","cdnUrl":"https://cdn.3dassets.dev/assets/36778/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-candy-cane-twister-d4dda3ec","thumbnailUrl":"https://cdn.3dassets.dev/assets/36778/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36778/v1/poster.webp","blurhash":"U6FYfJ.S00]e?^^iQ,4=00m+*J5tHX9vTy%J","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":20952,"triangles":440,"vertices":1320,"meshes":8,"materials":5,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.6000000238418579,0.00001281404919895035,-0.40002443070312294],"max":[0.6000000238418579,1.110011766166692,0.4699880973340922]},"sizeMeters":[1.2,1.11,0.87],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:34.241Z","updatedAt":"2026-09-12T04:30:34.421Z","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/36778/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 CandyCaneTwisterChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36778/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/36778/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36778/v1/model.glb\" alt=\"Candy Cane Twister (Chocolate and Confectionery Factory)\" 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/36778/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/36778/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36779","slug":"chocolate-and-confectionery-factory-marshmallow-extrud-be0b4c50","title":"Marshmallow Extruder (Chocolate and Confectionery Factory)","summary":"A marshmallow extruder: an aerating body on legs with a sugar hopper, a driven forming roller and four ropes of cream marshmallow running out onto the cut off table.","description":"A marshmallow extruder: an aerating body on legs with a sugar hopper, a driven forming roller and four ropes of cream marshmallow running out onto the cut off table. Dimensions 2.11 by 1.92 by 0.92 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: roller-extrude at (0.50, 1.11, 0.00) m. The forming roller spins. The ropes are fixed bars; a flowing extrusion would need a shader. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-marshmallow-extrud-be0b4c50","cdnUrl":"https://cdn.3dassets.dev/assets/36779/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-marshmallow-extrud-be0b4c50","thumbnailUrl":"https://cdn.3dassets.dev/assets/36779/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36779/v1/poster.webp","blurhash":"UABD[~?v00Di?^.8IA9F4T$+g#4.z;R5Xmog","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":22824,"triangles":356,"vertices":1068,"meshes":7,"materials":5,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.800000011920929,0.00003723034694134292,-0.4499649104191022],"max":[1.309999942779541,1.9199820929149636,0.46999785754510515]},"sizeMeters":[2.11,1.92,0.92],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:34.639Z","updatedAt":"2026-09-12T04:30:34.770Z","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/36779/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 MarshmallowExtruderChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36779/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/36779/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36779/v1/model.glb\" alt=\"Marshmallow Extruder (Chocolate and Confectionery Factory)\" 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/36779/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/36779/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36781","slug":"chocolate-and-confectionery-factory-dusting-drum-d529ebba","title":"Dusting Drum (Chocolate and Confectionery Factory)","summary":"A small dusting drum that tumbles finished centres in cocoa or sugar powder, on a teal frame with a drive motor, a dust hood and a discharge tray.","description":"A small dusting drum that tumbles finished centres in cocoa or sugar powder, on a teal frame with a drive motor, a dust hood and a discharge tray. Dimensions 1.51 by 1.60 by 1.12 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: drum-dust at (0.00, 0.90, 0.00) m. The drum turns on its cross axis. Airborne dust is not modelled. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-dusting-drum-d529ebba","cdnUrl":"https://cdn.3dassets.dev/assets/36781/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-dusting-drum-d529ebba","thumbnailUrl":"https://cdn.3dassets.dev/assets/36781/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36781/v1/poster.webp","blurhash":"U8Bgb#wJ00J*~CNa4.-V00Io~q?b56nO?HXl","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":20016,"triangles":332,"vertices":996,"meshes":6,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.8100000023841858,-6.315723943828289e-9,-0.5],"max":[0.699999988079071,1.6000192409235918,0.6200000047683716]},"sizeMeters":[1.51,1.6,1.12],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:35.526Z","updatedAt":"2026-09-12T04:30:35.677Z","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/36781/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 DustingDrumChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36781/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/36781/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36781/v1/model.glb\" alt=\"Dusting Drum (Chocolate and Confectionery Factory)\" 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/36781/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/36781/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36782","slug":"chocolate-and-confectionery-factory-panning-drum-b9cf8613","title":"Panning Drum (Chocolate and Confectionery Factory)","summary":"A revolving pan that builds a hard sugar shell on a centre, on a teal drive pedestal, with a syrup lance over the mouth and a kraft tub of coated sweets beside it.","description":"A revolving pan that builds a hard sugar shell on a centre, on a teal drive pedestal, with a syrup lance over the mouth and a kraft tub of coated sweets beside it. Dimensions 1.41 by 1.88 by 1.20 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: drum-pan at (0.00, 1.20, 0.00) m. The pan turns about its own horizontal axis. Syrup and air are not modelled. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-panning-drum-b9cf8613","cdnUrl":"https://cdn.3dassets.dev/assets/36782/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-panning-drum-b9cf8613","thumbnailUrl":"https://cdn.3dassets.dev/assets/36782/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36782/v1/poster.webp","blurhash":"U88q{KXm00z=W=M_ad-;4TnO.mO?Dixu%NIU","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":20492,"triangles":332,"vertices":996,"meshes":7,"materials":5,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.62000851327093,0,-0.5500213427819699],"max":[0.7900155817879914,1.8799999952316284,0.6499944867710444]},"sizeMeters":[1.41,1.88,1.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:36.010Z","updatedAt":"2026-09-12T04:30:36.112Z","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/36782/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 PanningDrumChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36782/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/36782/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36782/v1/model.glb\" alt=\"Panning Drum (Chocolate and Confectionery Factory)\" 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/36782/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/36782/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36766","slug":"chocolate-and-confectionery-factory-enrobing-line-sect-b9740529","title":"Enrobing Line Section (Chocolate and Confectionery Factory)","summary":"A 2.4 m enrobing section: a wire belt on a teal frame under a curtain head, with coated centres running through and an abstract control plate on the leg.","description":"A 2.4 m enrobing section: a wire belt on a teal frame under a curtain head, with coated centres running through and an abstract control plate on the leg. Dimensions 1.46 by 3.51 by 2.40 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: roller-enrober-1 at (0.00, 0.88, -1.05) m; roller-enrober-2 at (0.00, 0.88, -0.35) m; roller-enrober-3 at (0.00, 0.88, 0.35) m; roller-enrober-4 at (0.00, 0.88, 1.05) m. Connectors: in (conveyor) at (0.00, 0.85, -1.20) facing (0, 0, -1); out (conveyor) at (0.00, 0.85, 1.20) facing (0, 0, 1). Each belt roller spins on its own node. The chocolate curtain is a fixed flat sheet: a falling curtain of chocolate needs a shader, not a rigid node transform. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-enrobing-line-sect-b9740529","cdnUrl":"https://cdn.3dassets.dev/assets/36766/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-enrobing-line-sect-b9740529","thumbnailUrl":"https://cdn.3dassets.dev/assets/36766/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36766/v1/poster.webp","blurhash":"U67_sAyD00H??vRj4nt74TVs.mkqDikW?bjF","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":23284,"triangles":484,"vertices":1452,"meshes":9,"materials":5,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.8100272035951286,-7.679298208995711e-7,-1.2000000476837158],"max":[0.6500271773690849,3.5099834543699586,1.2000000476837158]},"sizeMeters":[1.46,3.51,2.4],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:28.277Z","updatedAt":"2026-09-12T04:30:28.402Z","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/36766/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 EnrobingLineSectionChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36766/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/36766/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36766/v1/model.glb\" alt=\"Enrobing Line Section (Chocolate and Confectionery Factory)\" 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/36766/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/36766/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36780","slug":"chocolate-and-confectionery-factory-gummy-starch-tray-7765194f","title":"Gummy Starch Tray (Chocolate and Confectionery Factory)","summary":"A mogul tray of starch with twenty four impressions holding deposited gummies in two colours, plus a small levelling blade resting on the bed.","description":"A mogul tray of starch with twenty four impressions holding deposited gummies in two colours, plus a small levelling blade resting on the bed. Dimensions 0.80 by 0.15 by 0.56 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Plain rounded gummies: no character, figure or trademarked shape anywhere. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-gummy-starch-tray-7765194f","cdnUrl":"https://cdn.3dassets.dev/assets/36780/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-gummy-starch-tray-7765194f","thumbnailUrl":"https://cdn.3dassets.dev/assets/36780/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36780/v1/poster.webp","blurhash":"U8FP1x?a00rr.8-:i^M|00IV_4M|8^9GOGSL","category":{"slug":"food","title":"Food & Drink"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":55324,"triangles":1524,"vertices":4572,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.4000000059604645,-0.0000022870255996509936,-0.2800134323166947],"max":[0.4000000059604645,0.15000229298606413,0.2800134323166947]},"sizeMeters":[0.8,0.15,0.56],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:34.911Z","updatedAt":"2026-09-12T04:30:35.028Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36780/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GummyStarchTrayChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36780/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36780/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36780/v1/model.glb\" alt=\"Gummy Starch Tray (Chocolate and Confectionery Factory)\" 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/36780/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/36780/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36801","slug":"chocolate-and-confectionery-factory-qc-bench-e19ff11c","title":"Qc Bench (Chocolate and Confectionery Factory)","summary":"A quality control bench with an electronic scale, a stand mounted probe thermometer, a small tray of sample pieces and a blank clipboard board behind.","description":"A quality control bench with an electronic scale, a stand mounted probe thermometer, a small tray of sample pieces and a blank clipboard board behind. Dimensions 1.60 by 1.50 by 0.79 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Static. Every display is a plain emissive rectangle rather than readable numbers. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-qc-bench-e19ff11c","cdnUrl":"https://cdn.3dassets.dev/assets/36801/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-qc-bench-e19ff11c","thumbnailUrl":"https://cdn.3dassets.dev/assets/36801/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36801/v1/poster.webp","blurhash":"UCFr@hs;00%M~qxu9FD%00M{-;M{9F%2t6M{","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":18084,"triangles":288,"vertices":864,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.800000011920929,-0.00005509373353462799,-0.41003051959026493],"max":[0.800000011920929,1.500012965399989,0.3800164856578038]},"sizeMeters":[1.6,1.5,0.79],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:46.065Z","updatedAt":"2026-09-12T04:30:46.161Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36801/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function QcBenchChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36801/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36801/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36801/v1/model.glb\" alt=\"Qc Bench (Chocolate and Confectionery Factory)\" 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/36801/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/36801/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36783","slug":"chocolate-and-confectionery-factory-foil-wrapping-mach-d3ddcec1","title":"Foil Wrapping Machine (Chocolate and Confectionery Factory)","summary":"A twist wrapping machine with a large blank foil reel on a spindle, a feed roller stack, an abstract dial panel and wrapped pieces leaving on the outfeed shelf.","description":"A twist wrapping machine with a large blank foil reel on a spindle, a feed roller stack, an abstract dial panel and wrapped pieces leaving on the outfeed shelf. Dimensions 1.62 by 1.70 by 0.99 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: reel-foil at (-0.62, 1.16, 0.24) m. The foil reel turns on its spindle. The foil web between reel and machine is a fixed flat strip, because a running web needs a deforming surface. The foil is plain and unprinted. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: reel-spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-foil-wrapping-mach-d3ddcec1","cdnUrl":"https://cdn.3dassets.dev/assets/36783/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-foil-wrapping-mach-d3ddcec1","thumbnailUrl":"https://cdn.3dassets.dev/assets/36783/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36783/v1/poster.webp","blurhash":"UIA_Fmxa00Rj~Wt7D%afquR*Oqt6ELRji{Rj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":23960,"triangles":388,"vertices":1164,"meshes":7,"materials":4,"textures":0,"animations":["reel-spin"],"boundingBox":{"min":[-0.7799999666213989,0,-0.450020730348565],"max":[0.8399999737739563,1.6949753653121997,0.540000011920929]},"sizeMeters":[1.62,1.695,0.99],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:36.484Z","updatedAt":"2026-09-12T04:30:36.582Z","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/36783/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 FoilWrappingMachineChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36783/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/36783/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36783/v1/model.glb\" alt=\"Foil Wrapping Machine (Chocolate and Confectionery Factory)\" 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/36783/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/36783/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36784","slug":"chocolate-and-confectionery-factory-flow-wrapper-3fd82d8f","title":"Flow Wrapper (Chocolate and Confectionery Factory)","summary":"A horizontal flow wrapper 2.3 m long: a blank film reel on an overhead unwind, a forming shoulder, driven sealing rollers and a row of plain wrapped bars on the outfeed.","description":"A horizontal flow wrapper 2.3 m long: a blank film reel on an overhead unwind, a forming shoulder, driven sealing rollers and a row of plain wrapped bars on the outfeed. Dimensions 2.32 by 2.28 by 0.91 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: reel-film at (-0.72, 1.50, 0.00) m; roller-wrap-1 at (0.20, 1.34, 0.00) m; roller-wrap-2 at (0.60, 1.34, 0.00) m. The film reel turns and each sealing roller spins on its own node. The film web over the shoulder is a fixed plane, and every wrapper is blank and unprinted. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: reel-spin and roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-flow-wrapper-3fd82d8f","cdnUrl":"https://cdn.3dassets.dev/assets/36784/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-flow-wrapper-3fd82d8f","thumbnailUrl":"https://cdn.3dassets.dev/assets/36784/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36784/v1/poster.webp","blurhash":"U79a{c_N004Tu3.SVY4T00In%fxHACIA#m?H","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":26892,"triangles":552,"vertices":1656,"meshes":11,"materials":5,"textures":0,"animations":["reel-spin","roll"],"boundingBox":{"min":[-1.1699999570846558,-0.000006709925535419714,-0.44996947216173405],"max":[1.149999976158142,2.280062222846766,0.46000397168744506]},"sizeMeters":[2.32,2.28,0.91],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:36.656Z","updatedAt":"2026-09-12T04:30:36.771Z","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/36784/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 FlowWrapperChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36784/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/36784/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36784/v1/model.glb\" alt=\"Flow Wrapper (Chocolate and Confectionery Factory)\" 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/36784/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/36784/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36785","slug":"chocolate-and-confectionery-factory-carton-erector-08ce7a97","title":"Carton Erector (Chocolate and Confectionery Factory)","summary":"A carton erector: a magazine of flat kraft blanks on an inclined rack, a vacuum pick arm on a teal gantry that swings a blank down, and one erected carton on the deck.","description":"A carton erector: a magazine of flat kraft blanks on an inclined rack, a vacuum pick arm on a teal gantry that swings a blank down, and one erected carton on the deck. Dimensions 1.60 by 2.12 by 1.10 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: arm-erector at (0.00, 1.90, -0.32) m. The pick arm swings on its own node. Vacuum cups do not grip and the blanks do not fold: folding card is not reachable with a rigid node transform. Every blank and carton face is unprinted. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: swing. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-carton-erector-08ce7a97","cdnUrl":"https://cdn.3dassets.dev/assets/36785/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-carton-erector-08ce7a97","thumbnailUrl":"https://cdn.3dassets.dev/assets/36785/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36785/v1/poster.webp","blurhash":"U7AnJy-o00E*LLa0qvS$00D%~A-V=}XmNFwv","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":23556,"triangles":380,"vertices":1140,"meshes":7,"materials":5,"textures":0,"animations":["swing"],"boundingBox":{"min":[-0.800000011920929,0.00003723034694134292,-0.5499679637602114],"max":[0.800000011920929,2.119999885559082,0.5499679637602114]},"sizeMeters":[1.6,2.12,1.1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:37.174Z","updatedAt":"2026-09-12T04:30:37.279Z","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/36785/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 CartonErectorChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36785/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/36785/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36785/v1/model.glb\" alt=\"Carton Erector (Chocolate and Confectionery Factory)\" 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/36785/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/36785/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36786","slug":"chocolate-and-confectionery-factory-case-packer-902faf81","title":"Case Packer (Chocolate and Confectionery Factory)","summary":"A top load case packer: a teal portal with a six cup pick head over the deck, an open kraft case being filled with plain wrapped packs and a second case waiting.","description":"A top load case packer: a teal portal with a six cup pick head over the deck, an open kraft case being filled with plain wrapped packs and a second case waiting. Dimensions 2.02 by 2.50 by 1.30 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: arm-packer at (0.00, 2.26, 0.00) m. The pick head swings on one node. Case flaps are fixed and every case face is blank. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: swing. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-case-packer-902faf81","cdnUrl":"https://cdn.3dassets.dev/assets/36786/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-case-packer-902faf81","thumbnailUrl":"https://cdn.3dassets.dev/assets/36786/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36786/v1/poster.webp","blurhash":"U8BXG,.800E1Q7tkVEM|00Io^i-V^kWBMxxY","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":32396,"triangles":552,"vertices":1656,"meshes":8,"materials":6,"textures":0,"animations":["swing"],"boundingBox":{"min":[-1,0.00006164604803700346,-0.6499832148197882],"max":[1.0199999809265137,2.49997223430122,0.6499832148197882]},"sizeMeters":[2.02,2.5,1.3],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:38.777Z","updatedAt":"2026-09-12T04:30:38.876Z","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/36786/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 CasePackerChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36786/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/36786/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36786/v1/model.glb\" alt=\"Case Packer (Chocolate and Confectionery Factory)\" 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/36786/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/36786/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36787","slug":"chocolate-and-confectionery-factory-palletiser-arm-34434855","title":"Palletiser Arm (Chocolate and Confectionery Factory)","summary":"A pedestal palletising arm in invented amber livery: a turning column, a jointed boom and a clamp head that lifts a layer of cases onto a pallet.","description":"A pedestal palletising arm in invented amber livery: a turning column, a jointed boom and a clamp head that lifts a layer of cases onto a pallet. Dimensions 2.38 by 2.41 by 1.12 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: swing-palletiser at (0.00, 0.60, 0.00) m. The whole arm swings about its column as one node, which is the honest limit of a rigid transform: the elbow and the clamp jaws do not articulate separately. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: swing. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-palletiser-arm-34434855","cdnUrl":"https://cdn.3dassets.dev/assets/36787/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-palletiser-arm-34434855","thumbnailUrl":"https://cdn.3dassets.dev/assets/36787/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36787/v1/poster.webp","blurhash":"UCA^RI%z004p}?R54;tR00IB-o?G5TyD-:R5","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":19368,"triangles":296,"vertices":888,"meshes":6,"materials":5,"textures":0,"animations":["swing"],"boundingBox":{"min":[-0.75,-0.00003813777101757676,-0.5600000023841858],"max":[1.6299999952316284,2.4111082315444947,0.5600000023841858]},"sizeMeters":[2.38,2.411,1.12],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:38.114Z","updatedAt":"2026-09-12T04:30:38.211Z","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/36787/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 PalletiserArmChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36787/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/36787/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36787/v1/model.glb\" alt=\"Palletiser Arm (Chocolate and Confectionery Factory)\" 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/36787/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/36787/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36803","slug":"chocolate-and-confectionery-factory-coat-and-hairnet-l-24996893","title":"Coat And Hairnet Locker (Chocolate and Confectionery Factory)","summary":"A two door hygiene locker in teal for coats and hairnets, with louvre slots, a centre divider, a folded coat inside and a plain kraft net box on top.","description":"A two door hygiene locker in teal for coats and hairnets, with louvre slots, a centre divider, a folded coat inside and a plain kraft net box on top. Dimensions 1.20 by 2.22 by 0.51 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Animated pivot nodes: door-locker-left at (-0.56, 1.00, 0.21) m; door-locker-right at (0.56, 1.00, 0.21) m. Both doors swing on one open and close pair. Nothing on the doors is labelled. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-coat-and-hairnet-l-24996893","cdnUrl":"https://cdn.3dassets.dev/assets/36803/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-coat-and-hairnet-l-24996893","thumbnailUrl":"https://cdn.3dassets.dev/assets/36803/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36803/v1/poster.webp","blurhash":"UA8#~DkW00R5~Voz4:R6*xoJGtR+tQt7RQM{","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"},{"slug":"animated","title":"Animated"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":14628,"triangles":228,"vertices":684,"meshes":9,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6000000238418579,-0.000025941975848826904,-0.2500015358596419],"max":[0.6000000238418579,2.2200067037103772,0.2599957209915507]},"sizeMeters":[1.2,2.22,0.51],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:45.476Z","updatedAt":"2026-09-12T04:30:45.576Z","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/36803/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 CoatAndHairnetLockerChocolateAndConfectioneryFactory(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/36803/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/36803/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36803/v1/model.glb\" alt=\"Coat And Hairnet Locker (Chocolate and Confectionery Factory)\" 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/36803/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/36803/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"36804","slug":"chocolate-and-confectionery-factory-taste-counter-4d1ef78f","title":"Taste Counter (Chocolate and Confectionery Factory)","summary":"A tasting counter 2.0 m long with three sample trays of chocolate and caramel pieces, a pot of tasting sticks and a napkin box.","description":"A tasting counter 2.0 m long with three sample trays of chocolate and caramel pieces, a pot of tasting sticks and a napkin box. Dimensions 2.10 by 1.28 by 0.80 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Static. The counter front is plain: no menu, price card or brand panel. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-taste-counter-4d1ef78f","cdnUrl":"https://cdn.3dassets.dev/assets/36804/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-taste-counter-4d1ef78f","thumbnailUrl":"https://cdn.3dassets.dev/assets/36804/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36804/v1/poster.webp","blurhash":"UEG[~2yX8w%KxJ~VXmIV00Z*XAIW9YEh$jMx","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":21700,"triangles":412,"vertices":1236,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-1.0499999523162842,0.00004199438362562091,-0.3999465744456173],"max":[1.0499999523162842,1.279961532544991,0.3999465744456173]},"sizeMeters":[2.1,1.28,0.8],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:45.962Z","updatedAt":"2026-09-12T04:30:46.111Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36804/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TasteCounterChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36804/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36804/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36804/v1/model.glb\" alt=\"Taste Counter (Chocolate and Confectionery Factory)\" 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/36804/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/36804/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"36802","slug":"chocolate-and-confectionery-factory-floor-drain-run-530c781a","title":"Floor Drain Run (Chocolate and Confectionery Factory)","summary":"A 2.4 m hygienic floor drain channel with a slotted stainless grate, a kerb on each side and a sump at one end, set into the epoxy floor.","description":"A 2.4 m hygienic floor drain channel with a slotted stainless grate, a kerb on each side and a sump at one end, set into the epoxy floor. Dimensions 2.40 by 0.15 by 0.40 m (X by Y by Z). Metre units, +Y up, +Z front, origin on the footprint at ground level. Static. The grate sits 20 mm proud of the channel wall so the two never share a face. Confectionery works palette: light epoxy grey, stainless steel, charcoal, cocoa brown, kraft card, an invented deep teal plant colour, an invented warm amber accent and a soft emissive. Flat shaded untextured PBR materials. No real confectionery, cocoa or machinery brand appears anywhere: every wrapper, reel, carton, lid, crate and panel face is blank and every moulded shape is invented. Static geometry; no rig, animation, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/chocolate-and-confectionery-factory-floor-drain-run-530c781a","cdnUrl":"https://cdn.3dassets.dev/assets/36802/v1/model.glb","downloadUrl":"https://3dassets.dev/download/chocolate-and-confectionery-factory-floor-drain-run-530c781a","thumbnailUrl":"https://cdn.3dassets.dev/assets/36802/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/36802/v1/poster.webp","blurhash":"U6AK2KtR00s:_3_3RjD%00%M~qIU0000-;_3","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"low-poly","title":"Low Poly"},{"slug":"interior","title":"Interior"},{"slug":"kit","title":"Kit / Set"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":14052,"triangles":256,"vertices":768,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-1.2000000476837158,-0.00006043037645390992,-0.1999572820323218],"max":[1.2000000476837158,0.14993332177284624,0.1999572820323218]},"sizeMeters":[2.4,0.15,0.4],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-12T04:30:46.142Z","updatedAt":"2026-09-12T04:30:46.257Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/36802/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FloorDrainRunChocolateAndConfectioneryFactory(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/36802/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/36802/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/36802/v1/model.glb\" alt=\"Floor Drain Run (Chocolate and Confectionery Factory)\" 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/36802/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/36802/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}]}}