{
  "schema": "forge.atom-kit.v2",
  "style": "medieval-town",
  "units": "metres",
  "up": "+Y",
  "facade_outward": "+Z",
  "facade_horizontal": "+X",
  "atoms": [
    {
      "node_name": "dormer_gabled",
      "nominal_size_whd_metres": [
        1.3,
        1.8,
        1.9
      ],
      "nominal_size_wdh_metres": [
        1.3,
        1.9,
        1.8
      ],
      "origin_rule": "Front sill centre [0,0,0]; +Z downslope; body -Z; keep Y vertical on 55 degree host roof y=-tan(55deg)*z.",
      "triangle_budget": 2500,
      "host_roof_pitch_degrees": 55,
      "host_roof_plane": "y + tan(55deg)*z = 0",
      "burial_depth_back_metres": 1.8,
      "roof_cutout_required": false,
      "triangles": 1444,
      "bounding_box": {
        "min": [
          -0.672099,
          -0.05,
          -1.8
        ],
        "max": [
          0.672099,
          1.794,
          0.102
        ]
      },
      "materials": [
        "Clay_tile",
        "Leaded_glass",
        "Oak_frame",
        "Plaster_ochre",
        "Plaster_white",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "dormer_hipped",
      "nominal_size_whd_metres": [
        1.3,
        2.6,
        1.9
      ],
      "nominal_size_wdh_metres": [
        1.3,
        1.9,
        2.6
      ],
      "origin_rule": "Front sill centre [0,0,0]; +Z downslope; body -Z; keep Y vertical on 55 degree host roof y=-tan(55deg)*z.",
      "triangle_budget": 2500,
      "host_roof_pitch_degrees": 55,
      "host_roof_plane": "y + tan(55deg)*z = 0",
      "burial_depth_back_metres": 1.8,
      "roof_cutout_required": false,
      "triangles": 1778,
      "bounding_box": {
        "min": [
          -0.6675,
          -0.05,
          -1.8175
        ],
        "max": [
          0.6675,
          2.6,
          0.0975
        ]
      },
      "materials": [
        "Clay_tile",
        "Leaded_glass",
        "Oak_frame",
        "Plaster_ochre",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "dormer_wall",
      "nominal_size_whd_metres": [
        1.6,
        2.4,
        1.2
      ],
      "nominal_size_wdh_metres": [
        1.6,
        1.2,
        2.4
      ],
      "origin_rule": "Bottom centre front face at eaves; facade Z=0; body -Z.",
      "triangle_budget": 2500,
      "triangles": 1840,
      "bounding_box": {
        "min": [
          -0.8,
          0.0,
          -1.2
        ],
        "max": [
          0.8,
          2.409168,
          0.075
        ]
      },
      "materials": [
        "Clay_tile",
        "Dressed_limestone",
        "Leaded_glass",
        "Oak_frame",
        "Plaster_white",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "louvre_ridge",
      "nominal_size_whd_metres": [
        1.2,
        0.7,
        1.0
      ],
      "nominal_size_wdh_metres": [
        1.2,
        1.0,
        0.7
      ],
      "origin_rule": "Centre on host roof ridge line Y=0; ridge along X.",
      "triangle_budget": 2000,
      "ridge_axis": "+X",
      "saddle_embed_metres": 0.12,
      "triangles": 740,
      "bounding_box": {
        "min": [
          -0.6,
          -0.12,
          -0.512746
        ],
        "max": [
          0.602,
          0.704,
          0.512746
        ]
      },
      "materials": [
        "Clay_tile",
        "Oak_frame"
      ]
    },
    {
      "node_name": "chimney_cluster",
      "nominal_size_whd_metres": [
        1.6,
        3.4,
        1.0
      ],
      "nominal_size_wdh_metres": [
        1.6,
        1.0,
        3.4
      ],
      "origin_rule": "Bottom centre; vertical Y; placement base 0.55 m below ridge.",
      "triangle_budget": 3000,
      "flue_openings": 3,
      "triangles": 2352,
      "bounding_box": {
        "min": [
          -0.8,
          0.0,
          -0.5
        ],
        "max": [
          0.8,
          3.4,
          0.5
        ]
      },
      "materials": [
        "Dressed_limestone",
        "Rubble_stone",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "chimney_twin",
      "nominal_size_whd_metres": [
        1.2,
        2.8,
        0.8
      ],
      "nominal_size_wdh_metres": [
        1.2,
        0.8,
        2.8
      ],
      "origin_rule": "Bottom centre; vertical Y; placement base 0.55 m below ridge.",
      "triangle_budget": 2000,
      "flue_openings": 2,
      "triangles": 360,
      "bounding_box": {
        "min": [
          -0.6,
          0.0,
          -0.4
        ],
        "max": [
          0.6,
          2.8,
          0.4
        ]
      },
      "materials": [
        "Dressed_limestone",
        "Rubble_stone",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "sign_boot",
      "nominal_size_whd_metres": [
        0.9,
        1.0,
        0.6
      ],
      "nominal_size_wdh_metres": [
        0.9,
        0.6,
        1.0
      ],
      "origin_rule": "Wall bracket fixing point [0,0,0]; object hangs below, body +Z.",
      "triangle_budget": 2000,
      "sockets": {
        "wall_fix": [
          0,
          0,
          0
        ]
      },
      "trade": "cobbler",
      "triangles": 756,
      "bounding_box": {
        "min": [
          -0.44,
          -0.98,
          0.0
        ],
        "max": [
          0.27,
          0.02,
          0.565
        ]
      },
      "materials": [
        "Oak_frame",
        "Sign_paint",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "sign_pig",
      "nominal_size_whd_metres": [
        0.9,
        1.0,
        0.6
      ],
      "nominal_size_wdh_metres": [
        0.9,
        0.6,
        1.0
      ],
      "origin_rule": "Wall bracket fixing point [0,0,0]; object hangs below, body +Z.",
      "triangle_budget": 2000,
      "sockets": {
        "wall_fix": [
          0,
          0,
          0
        ]
      },
      "trade": "butcher",
      "triangles": 948,
      "bounding_box": {
        "min": [
          -0.45,
          -0.98,
          0.0
        ],
        "max": [
          0.45,
          0.02,
          0.56
        ]
      },
      "materials": [
        "Oak_frame",
        "Sign_paint",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "sign_key",
      "nominal_size_whd_metres": [
        0.9,
        1.0,
        0.6
      ],
      "nominal_size_wdh_metres": [
        0.9,
        0.6,
        1.0
      ],
      "origin_rule": "Wall bracket fixing point [0,0,0]; object hangs below, body +Z.",
      "triangle_budget": 2000,
      "sockets": {
        "wall_fix": [
          0,
          0,
          0
        ]
      },
      "trade": "locksmith",
      "triangles": 856,
      "bounding_box": {
        "min": [
          -0.27,
          -0.965,
          0.0
        ],
        "max": [
          0.27,
          0.02,
          0.56
        ]
      },
      "materials": [
        "Wrought_iron"
      ]
    },
    {
      "node_name": "sign_pretzel",
      "nominal_size_whd_metres": [
        0.9,
        1.0,
        0.6
      ],
      "nominal_size_wdh_metres": [
        0.9,
        0.6,
        1.0
      ],
      "origin_rule": "Wall bracket fixing point [0,0,0]; object hangs below, body +Z.",
      "triangle_budget": 2000,
      "sockets": {
        "wall_fix": [
          0,
          0,
          0
        ]
      },
      "trade": "baker",
      "triangles": 884,
      "bounding_box": {
        "min": [
          -0.425597,
          -0.890464,
          0.0
        ],
        "max": [
          0.426041,
          0.02,
          0.574805
        ]
      },
      "materials": [
        "Clay_tile",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "oriel",
      "nominal_size_whd_metres": [
        1.6,
        2.2,
        0.6
      ],
      "nominal_size_wdh_metres": [
        1.6,
        0.6,
        2.2
      ],
      "origin_rule": "Bottom centre BACK face Z=0 at upper-storey floor; corbels extend below Y=0.",
      "triangle_budget": 2000,
      "corbel_drop_metres": 0.43,
      "wall_trim_front_min_z": 0.035,
      "triangles": 1956,
      "bounding_box": {
        "min": [
          -0.798,
          -0.43,
          0.0
        ],
        "max": [
          0.798,
          2.2,
          0.6
        ]
      },
      "materials": [
        "Clay_tile",
        "Leaded_glass",
        "Oak_frame",
        "Plaster_ochre",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "door_arched_stone",
      "nominal_size_whd_metres": [
        1.3,
        2.6,
        0.3
      ],
      "nominal_size_wdh_metres": [
        1.3,
        0.3,
        2.6
      ],
      "origin_rule": "Bottom centre of clear opening; exterior wall plane Z=0; +Z out.",
      "triangle_budget": 2000,
      "opening": {
        "width": 1.1,
        "height": 2.3,
        "spring_height": 1.7499999999999998,
        "arch_radius": 0.55,
        "bottom_center": [
          0,
          0,
          0
        ],
        "wall_thickness": 0.3
      },
      "wall_trim_front_min_z": 0.175,
      "requires_wall_opening": true,
      "triangles": 1132,
      "bounding_box": {
        "min": [
          -0.65,
          0.003,
          -0.125
        ],
        "max": [
          0.65,
          2.592059,
          0.175
        ]
      },
      "materials": [
        "Door_paint",
        "Dressed_limestone",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "door_cellar",
      "nominal_size_whd_metres": [
        1.0,
        2.0,
        0.3
      ],
      "nominal_size_wdh_metres": [
        1.0,
        0.3,
        2.0
      ],
      "origin_rule": "Bottom centre of clear opening; exterior wall plane Z=0; +Z out.",
      "triangle_budget": 2000,
      "opening": {
        "width": 0.9,
        "height": 1.8,
        "spring_height": 1.35,
        "arch_radius": 0.45,
        "bottom_center": [
          0,
          0,
          0
        ],
        "wall_thickness": 0.3
      },
      "wall_trim_front_min_z": 0.175,
      "requires_wall_opening": true,
      "triangles": 1132,
      "bounding_box": {
        "min": [
          -0.5,
          0.003,
          -0.125
        ],
        "max": [
          0.5,
          1.993927,
          0.175
        ]
      },
      "materials": [
        "Oak_frame",
        "Rubble_stone",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "window_cellar",
      "nominal_size_whd_metres": [
        0.6,
        0.5,
        0.25
      ],
      "nominal_size_wdh_metres": [
        0.6,
        0.25,
        0.5
      ],
      "origin_rule": "Bottom centre of clear opening; exterior wall plane Z=0; +Z out.",
      "triangle_budget": 2000,
      "opening": {
        "width": 0.47,
        "height": 0.38,
        "shape": "ellipse",
        "center": [
          0,
          0.19,
          0
        ],
        "bottom_center": [
          0,
          0,
          0
        ]
      },
      "requires_wall_opening": true,
      "triangles": 316,
      "bounding_box": {
        "min": [
          -0.299978,
          -0.059982,
          -0.19
        ],
        "max": [
          0.299978,
          0.439982,
          0.06
        ]
      },
      "materials": [
        "Dressed_limestone",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "window_shuttered",
      "nominal_size_whd_metres": [
        0.8,
        1.1,
        0.3
      ],
      "nominal_size_wdh_metres": [
        0.8,
        0.3,
        1.1
      ],
      "origin_rule": "Bottom centre of clear opening; exterior wall plane Z=0; +Z out.",
      "triangle_budget": 2000,
      "opening": {
        "width": 0.7,
        "height": 1.0,
        "bottom_center": [
          0,
          0,
          0
        ]
      },
      "requires_wall_opening": true,
      "shutter_open_angle_degrees": 90,
      "open_shutter_projection_metres": 0.355,
      "nominal_depth_note": "Frame depth nominal 0.3; open 0.35 m leaf projects 0.355 m.",
      "triangles": 1036,
      "bounding_box": {
        "min": [
          -0.4,
          -0.073,
          -0.125
        ],
        "max": [
          0.4,
          1.05,
          0.352
        ]
      },
      "materials": [
        "Oak_frame",
        "Oak_frame_grey",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "finial",
      "nominal_size_whd_metres": [
        0.25,
        1,
        0.25
      ],
      "nominal_size_wdh_metres": [
        0.25,
        0.25,
        1
      ],
      "origin_rule": "Bottom centre; +Y vertical.",
      "triangle_budget": 2000,
      "triangles": 210,
      "bounding_box": {
        "min": [
          -0.125,
          0.0,
          -0.08
        ],
        "max": [
          0.125,
          1.0,
          0.08
        ]
      },
      "materials": [
        "Wrought_iron"
      ]
    },
    {
      "node_name": "thatch_panel",
      "nominal_size_whd_metres": [
        1,
        0.3,
        1
      ],
      "nominal_size_wdh_metres": [
        1,
        1,
        0.3
      ],
      "origin_rule": "Centre of UPPER edge on rafter plane [0,0,0]; X eaves, Y thickness, +Z downslope.",
      "triangle_budget": 300,
      "grid_step_metres": [
        1,
        1
      ],
      "mesh_overlap_metres": {
        "x": 0.01,
        "z": 0.04
      },
      "roof_pitch_degrees": [
        50,
        55
      ],
      "texture_period_metres": [
        1,
        1
      ],
      "triangles": 112,
      "bounding_box": {
        "min": [
          -0.505,
          0.0,
          0.0
        ],
        "max": [
          0.505,
          0.307329,
          1.04
        ]
      },
      "materials": [
        "Thatch_reed",
        "Thatch_reed_cut"
      ]
    },
    {
      "node_name": "thatch_ridge",
      "nominal_size_whd_metres": [
        1,
        0.45,
        0.9
      ],
      "nominal_size_wdh_metres": [
        1,
        0.9,
        0.45
      ],
      "origin_rule": "Centre on ridge line; ridge along X; lower skirts cover panel tops.",
      "triangle_budget": 300,
      "grid_step_metres": [
        1
      ],
      "lower_skirt_drop_metres": 0.17,
      "triangles": 60,
      "bounding_box": {
        "min": [
          -0.505,
          -0.17,
          -0.45
        ],
        "max": [
          0.505,
          0.45,
          0.45
        ]
      },
      "materials": [
        "Thatch_reed"
      ]
    },
    {
      "node_name": "pillory",
      "nominal_size_whd_metres": [
        1,
        6,
        1
      ],
      "nominal_size_wdh_metres": [
        1,
        1,
        6
      ],
      "origin_rule": "Ground centre; Y=0 base bearing.",
      "triangle_budget": 6000,
      "reference": "Sheet G stone gothic civic pillory; pierced upper lantern, iron restraint chains.",
      "triangles": 2356,
      "bounding_box": {
        "min": [
          -0.5,
          0.0,
          -0.5
        ],
        "max": [
          0.5,
          6.0,
          0.5
        ]
      },
      "materials": [
        "Dressed_limestone",
        "Wrought_iron"
      ]
    },
    {
      "node_name": "well_wheel",
      "nominal_size_whd_metres": [
        2.4,
        3.4,
        2.4
      ],
      "nominal_size_wdh_metres": [
        2.4,
        2.4,
        3.4
      ],
      "origin_rule": "Ground centre; +Y vertical; wheel on -X side.",
      "triangle_budget": 6000,
      "sockets": {
        "winch": [
          0,
          1.48,
          0
        ],
        "wheel": [
          -1.04,
          1.48,
          0
        ],
        "well_opening": [
          0,
          0.8,
          0
        ]
      },
      "triangles": 4432,
      "bounding_box": {
        "min": [
          -1.19,
          0.0,
          -1.18
        ],
        "max": [
          1.18,
          3.4,
          1.18
        ]
      },
      "materials": [
        "Dressed_limestone",
        "Oak_frame",
        "Oak_frame_grey",
        "Rubble_stone",
        "Wrought_iron"
      ]
    }
  ],
  "total_triangles": 24700,
  "triangle_budget": 45000,
  "glb_bytes": 2629860,
  "material_binding": "materials.json",
  "paint_slots": [
    "Door_paint",
    "Sign_paint"
  ],
  "images_embedded": 0,
  "roof_units": null,
  "uv_rule": "Metric UV0 divided by shelf physical repeat, no extra repeat at runtime. Thatch UV V downslope, periodic 1m.",
  "provenance": {
    "geometry": "Original reconstruction from user sheet.jpg using medieval shelf helpers; not extracted source geometry.",
    "textures": "Shared Poly Haven CC0 shelf unchanged; original periodic Thatch_reed height/albedo/normal."
  }
}