{"data":{"id":"28895","slug":"medieval-siege-and-castle-defence-castle-639472aa-starter-scene","title":"Castle Wall Under Assault (Medieval Siege and Castle Defence)","summary":"Forty metres of defended curtain on the 4 m wall grid, with a barred gate, a cracked bay and an open breach in it. Timber hoardings bracket the wall head in two runs, defenders work the merlons over a pitch cauldron, braziers and stocked arrows, and a repair scaffold stands...","description":"Forty metres of defended curtain on the 4 m wall grid, with a barred gate, a cracked bay and an open breach in it. Timber hoardings bracket the wall head in two runs, defenders work the merlons over a pitch cauldron, braziers and stocked arrows, and a repair scaffold stands behind the breach. Below, the ram penthouse is at the gate, the siege tower is closing on the eastern wall and hooked ladders are on the stone with men climbing them. Back in the field the trebuchets, the mangonel and the springald shoot from behind gabions and mantlets with their crews, and the besiegers camp sits inside its own gated palisade at the rear.","status":"published","url":"https://3dassets.dev/assets/medieval-siege-and-castle-defence-castle-639472aa-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/28895/v1/model.glb","downloadUrl":"https://3dassets.dev/download/medieval-siege-and-castle-defence-castle-639472aa-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/28895/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/28895/v1/poster.webp","blurhash":"U8AmbnNG00w]IVRQobtR00xu~VNH-.x]t8Mw","category":{"slug":"environments","title":"Environments & Scenes"},"tags":[{"slug":"medieval","title":"Medieval"},{"slug":"low-poly","title":"Low Poly"},{"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":1313892,"triangles":28904,"vertices":67012,"meshes":281,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-22,-0.0003342640775745309,-6.359866537577422],"max":[18.245482490420386,9.12242603302002,34.017259162095236]},"sizeMeters":[40.245,9.123,40.377],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Fable 5.1","downloads":0,"publishedAt":"2026-09-08T03:57:40.779Z","updatedAt":"2026-09-08T03:57:40.984Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/28895/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CastleWallUnderAssaultMedievalSiegeAndCastleDefence(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/28895/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/28895/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/28895/v1/model.glb\" alt=\"Castle Wall Under Assault (Medieval Siege and Castle Defence)\" 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/28895/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/28895/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}}