{
  "schema": "forge.atom-kit.v1",
  "units": "metres",
  "up": "+Y",
  "facade_outward": "+Z",
  "facade_horizontal": "+X",
  "uv_rule": "UV0 is orthonormal surface distance in metres / material tile size. Translation preserves scale. Rotate masters as rigid units; do not rescale. For phase-continuous generated walls, use global facade coordinates.",
  "atoms": [
    {
      "node_name": "slate_a",
      "origin_rule": "Middle of top edge; top edge Z=0, down-slope +Z, underside Y=0.",
      "size_metres": [
        0.345,
        0.012,
        0.42
      ],
      "course_gauge_metres": 0.21,
      "roof_placement": "Rotate X by +44 degrees on street slope; +Z runs down slope. Use .014 m normal offset per overlapping course.",
      "bounding_box": {
        "min": [
          -0.1725,
          0.0,
          0.0
        ],
        "max": [
          0.1725,
          0.012,
          0.42
        ]
      },
      "triangles": 20,
      "triangle_budget": 40,
      "materials": [
        "Blue_grey_slate"
      ]
    },
    {
      "node_name": "slate_b",
      "origin_rule": "Middle of top edge; top edge Z=0, down-slope +Z, underside Y=0.",
      "size_metres": [
        0.345,
        0.012,
        0.42
      ],
      "course_gauge_metres": 0.21,
      "roof_placement": "Rotate X by +44 degrees on street slope; +Z runs down slope. Use .014 m normal offset per overlapping course.",
      "bounding_box": {
        "min": [
          -0.1725,
          0.0,
          0.0
        ],
        "max": [
          0.1725,
          0.012,
          0.42
        ]
      },
      "triangles": 20,
      "triangle_budget": 40,
      "materials": [
        "Blue_grey_slate"
      ]
    },
    {
      "node_name": "slate_c",
      "origin_rule": "Middle of top edge; top edge Z=0, down-slope +Z, underside Y=0.",
      "size_metres": [
        0.345,
        0.012,
        0.42
      ],
      "course_gauge_metres": 0.21,
      "roof_placement": "Rotate X by +44 degrees on street slope; +Z runs down slope. Use .014 m normal offset per overlapping course.",
      "bounding_box": {
        "min": [
          -0.1725,
          0.0,
          0.0
        ],
        "max": [
          0.1725,
          0.012,
          0.42
        ]
      },
      "triangles": 20,
      "triangle_budget": 40,
      "materials": [
        "Blue_grey_slate"
      ]
    },
    {
      "node_name": "ridge_tile",
      "origin_rule": "Centre of ridge line; length along X.",
      "pitch_degrees": 44,
      "length_metres": 0.42,
      "lap_metres": 0.025,
      "bounding_box": {
        "min": [
          -0.21,
          -0.174652,
          -0.185
        ],
        "max": [
          0.21,
          0.053,
          0.185
        ]
      },
      "triangles": 52,
      "triangle_budget": 120,
      "materials": [
        "Terracotta"
      ]
    },
    {
      "node_name": "quoin_long",
      "origin_rule": "Block centre; X along facade, Y vertical; alternate with 0.014 m bed joints.",
      "nominal_size_metres": [
        0.6,
        0.386,
        0.35
      ],
      "bounding_box": {
        "min": [
          -0.3,
          -0.193,
          -0.175
        ],
        "max": [
          0.3,
          0.193,
          0.175
        ]
      },
      "triangles": 44,
      "triangle_budget": 150,
      "materials": [
        "Dressed_granite"
      ]
    },
    {
      "node_name": "quoin_short",
      "origin_rule": "Block centre; X along facade, Y vertical; alternate with 0.014 m bed joints.",
      "nominal_size_metres": [
        0.35,
        0.386,
        0.65
      ],
      "bounding_box": {
        "min": [
          -0.175,
          -0.193,
          -0.325
        ],
        "max": [
          0.175,
          0.193,
          0.325
        ]
      },
      "triangles": 44,
      "triangle_budget": 150,
      "materials": [
        "Dressed_granite"
      ]
    },
    {
      "node_name": "window_ground",
      "origin_rule": "Bottom centre of clear opening at outer wall plane Z=0.",
      "opening": {
        "width": 0.95,
        "height": 1.3,
        "wall_thickness": 0.38,
        "bottom_center": [
          0,
          0,
          0
        ]
      },
      "bounding_box": {
        "min": [
          -0.715,
          -0.1025,
          -0.38
        ],
        "max": [
          0.715,
          1.45,
          0.245
        ]
      },
      "triangles": 1448,
      "triangle_budget": 3000,
      "materials": [
        "Aged_ivory_frames",
        "Dressed_granite",
        "Old_window_glass",
        "Weathered_zinc_iron"
      ]
    },
    {
      "node_name": "window_ground_shutters",
      "origin_rule": "Bottom centre of clear opening at outer wall plane Z=0.",
      "opening": {
        "width": 0.95,
        "height": 1.3,
        "wall_thickness": 0.38,
        "bottom_center": [
          0,
          0,
          0
        ]
      },
      "bounding_box": {
        "min": [
          -1.115,
          -0.1025,
          -0.38
        ],
        "max": [
          1.115,
          1.45,
          0.245
        ]
      },
      "triangles": 2400,
      "triangle_budget": 3000,
      "materials": [
        "Aged_ivory_frames",
        "Breton_blue_timber",
        "Dressed_granite",
        "Old_window_glass",
        "Weathered_zinc_iron"
      ]
    },
    {
      "node_name": "window_upper",
      "origin_rule": "Bottom centre of clear opening at outer wall plane Z=0.",
      "opening": {
        "width": 0.85,
        "height": 1.1,
        "wall_thickness": 0.38,
        "bottom_center": [
          0,
          0,
          0
        ]
      },
      "bounding_box": {
        "min": [
          -0.665,
          -0.1025,
          -0.38
        ],
        "max": [
          0.665,
          1.25,
          0.245
        ]
      },
      "triangles": 1448,
      "triangle_budget": 3000,
      "materials": [
        "Aged_ivory_frames",
        "Dressed_granite",
        "Old_window_glass",
        "Weathered_zinc_iron"
      ]
    },
    {
      "node_name": "window_upper_shutters",
      "origin_rule": "Bottom centre of clear opening at outer wall plane Z=0.",
      "opening": {
        "width": 0.85,
        "height": 1.1,
        "wall_thickness": 0.38,
        "bottom_center": [
          0,
          0,
          0
        ]
      },
      "bounding_box": {
        "min": [
          -1.015,
          -0.1025,
          -0.38
        ],
        "max": [
          1.015,
          1.25,
          0.245
        ]
      },
      "triangles": 2400,
      "triangle_budget": 3000,
      "materials": [
        "Aged_ivory_frames",
        "Breton_blue_timber",
        "Dressed_granite",
        "Old_window_glass",
        "Weathered_zinc_iron"
      ]
    },
    {
      "node_name": "window_small",
      "origin_rule": "Bottom centre of clear opening at outer wall plane Z=0.",
      "opening": {
        "width": 0.5,
        "height": 0.7,
        "wall_thickness": 0.38,
        "bottom_center": [
          0,
          0,
          0
        ]
      },
      "bounding_box": {
        "min": [
          -0.49,
          -0.1025,
          -0.38
        ],
        "max": [
          0.49,
          0.85,
          0.245
        ]
      },
      "triangles": 1248,
      "triangle_budget": 3000,
      "materials": [
        "Aged_ivory_frames",
        "Dressed_granite",
        "Old_window_glass",
        "Weathered_zinc_iron"
      ]
    },
    {
      "node_name": "door",
      "origin_rule": "Bottom centre of 1.00 \u00d7 2.10 opening at outer wall plane.",
      "opening": {
        "width": 1,
        "height": 2.1,
        "wall_thickness": 0.38,
        "bottom_center": [
          0,
          0,
          0
        ]
      },
      "hinge_child": "door_leaf",
      "hinge_axis": "+Y",
      "hinge_position": [
        -0.44,
        0.025,
        -0.12
      ],
      "bounding_box": {
        "min": [
          -0.845,
          -0.21,
          -0.38
        ],
        "max": [
          0.845,
          2.4225,
          0.65
        ]
      },
      "triangles": 1884,
      "triangle_budget": 4000,
      "materials": [
        "Aged_ivory_frames",
        "Breton_blue_timber",
        "Dressed_granite",
        "Old_window_glass",
        "Weathered_zinc_iron"
      ],
      "children": [
        {
          "node_name": "door_leaf",
          "translation": [
            -0.4399999976158142,
            0.02500000037252903,
            -0.11999999731779099
          ],
          "origin_rule": "Left hinge line; rotate about local Y.",
          "triangles": 960
        }
      ]
    },
    {
      "node_name": "dormer",
      "origin_rule": "Bottom centre of dormer front at main wall eaves: Y=0, facade Z=0.",
      "nominal_width_metres": 1.3,
      "main_roof_pitch_degrees": 44,
      "main_roof_plane": "Y = -Z * tan(44 degrees)",
      "roof_cut_polygon_XZ": [
        [
          -0.65,
          0
        ],
        [
          0.65,
          0
        ],
        [
          0.65,
          -1.4497424393067975
        ],
        [
          0,
          -2.0997424393067976
        ],
        [
          -0.65,
          -1.4497424393067975
        ]
      ],
      "roof_cut_note": "Remove underlying main-roof slates and decking inside this polygon; use included valley strips; front is at eaves.",
      "bounding_box": {
        "min": [
          -0.697098,
          0.0,
          -2.120037
        ],
        "max": [
          0.697098,
          2.105698,
          0.286
        ]
      },
      "triangles": 4532,
      "triangle_budget": 8000,
      "materials": [
        "Aged_ivory_frames",
        "Blue_grey_slate",
        "Dressed_granite",
        "Granite_lime_moss",
        "Old_window_glass",
        "Terracotta",
        "Weathered_zinc_iron"
      ]
    },
    {
      "node_name": "chimney_stack",
      "origin_rule": "Bottom centre; nominal stack 1.00 X \u00d7 0.70 Z; pots reach Y=2.00.",
      "nominal_body_size_metres": [
        1,
        0.7
      ],
      "total_height_metres": 2,
      "bounding_box": {
        "min": [
          -0.585,
          0.0055,
          -0.425
        ],
        "max": [
          0.585,
          2.0,
          0.425
        ]
      },
      "triangles": 844,
      "triangle_budget": 2500,
      "materials": [
        "Dressed_granite",
        "Terracotta",
        "Weathered_zinc_iron"
      ]
    },
    {
      "node_name": "gutter_1m",
      "origin_rule": "Middle of back top edge: X=0,Y=0,Z=0; trough projects +Z.",
      "length_metres": 1,
      "open_ends": false,
      "joint_rule": "Butt sections at X endpoints; thin end webs remain internal. Brackets are included.",
      "bounding_box": {
        "min": [
          -0.5,
          -0.096301,
          -0.005934
        ],
        "max": [
          0.5,
          0.0,
          0.171794
        ]
      },
      "triangles": 148,
      "triangle_budget": 250,
      "materials": [
        "Weathered_zinc_iron"
      ]
    },
    {
      "node_name": "downpipe_1m",
      "origin_rule": "Bottom on wall face; pipe extends Y=0..1 and projects +Z.",
      "length_metres": 1,
      "bounding_box": {
        "min": [
          -0.056,
          0.0,
          0.0
        ],
        "max": [
          0.056,
          1.0,
          0.135259
        ]
      },
      "triangles": 84,
      "triangle_budget": 150,
      "materials": [
        "Weathered_zinc_iron"
      ]
    },
    {
      "node_name": "eaves_board_1m",
      "origin_rule": "Middle of top back edge; length along X. Rotate in facade plane for verge.",
      "length_metres": 1,
      "bounding_box": {
        "min": [
          -0.5,
          -0.14,
          0.0
        ],
        "max": [
          0.5,
          0.0,
          0.045
        ]
      },
      "triangles": 44,
      "triangle_budget": 60,
      "materials": [
        "Breton_blue_timber"
      ]
    },
    {
      "node_name": "verge_board_1m",
      "origin_rule": "Middle of top back edge; length along X. Rotate in facade plane for verge.",
      "length_metres": 1,
      "bounding_box": {
        "min": [
          -0.5,
          -0.12,
          0.0
        ],
        "max": [
          0.5,
          0.0,
          0.035
        ]
      },
      "triangles": 44,
      "triangle_budget": 60,
      "materials": [
        "Breton_blue_timber"
      ]
    },
    {
      "node_name": "lantern",
      "origin_rule": "Centre of wall mounting plate on facade face Z=0.",
      "bounding_box": {
        "min": [
          -0.14,
          -0.3725,
          0.0
        ],
        "max": [
          0.14,
          0.12,
          0.43
        ]
      },
      "triangles": 288,
      "triangle_budget": 600,
      "materials": [
        "Old_window_glass",
        "Weathered_zinc_iron"
      ]
    }
  ],
  "total_triangles": 17012,
  "glb_bytes": 1812036,
  "material_binding": "materials.json",
  "images_embedded": 0
}