{
  "schema": "forge.material-shelf.v2",
  "materials": {
    "Granite_lime_moss": {
      "tile_size_metres": 2.25,
      "maps": {
        "BaseColor": "materials/Granite_lime_moss/BaseColor.png",
        "Normal": "materials/Granite_lime_moss/Normal.png",
        "ORM": "materials/Granite_lime_moss/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      },
      "displacement_scale_metres": 0.105,
      "displacement_bias_metres": 0.006,
      "height_map": "materials/Granite_lime_moss/Height.png",
      "height_formula": "outward_metres = 0.006 + sampled_Height * 0.105",
      "height_repeat_metres": 2.25,
      "height_encoding": "16-bit grayscale; original scan extrema normalized 0..1 after periodic seam correction"
    },
    "Dressed_granite": {
      "tile_size_metres": 1.6,
      "maps": {
        "BaseColor": "materials/Dressed_granite/BaseColor.png",
        "Normal": "materials/Dressed_granite/Normal.png",
        "ORM": "materials/Dressed_granite/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      }
    },
    "Blue_grey_slate": {
      "tile_size_metres": 3.57,
      "maps": {
        "BaseColor": "materials/Blue_grey_slate/BaseColor.png",
        "Normal": "materials/Blue_grey_slate/Normal.png",
        "ORM": "materials/Blue_grey_slate/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      }
    },
    "Breton_blue_timber": {
      "tile_size_metres": 1.0,
      "maps": {
        "BaseColor": "materials/Breton_blue_timber/BaseColor.png",
        "Normal": "materials/Breton_blue_timber/Normal.png",
        "ORM": "materials/Breton_blue_timber/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      }
    },
    "Aged_ivory_frames": {
      "tile_size_metres": 1.0,
      "maps": {
        "BaseColor": "materials/Aged_ivory_frames/BaseColor.png",
        "Normal": "materials/Aged_ivory_frames/Normal.png",
        "ORM": "materials/Aged_ivory_frames/ORM.png"
      },
      "resolution": 512,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      }
    },
    "Weathered_zinc_iron": {
      "tile_size_metres": 1.0,
      "maps": {
        "BaseColor": "materials/Weathered_zinc_iron/BaseColor.png",
        "Normal": "materials/Weathered_zinc_iron/Normal.png",
        "ORM": "materials/Weathered_zinc_iron/ORM.png"
      },
      "resolution": 512,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      },
      "v2_finish": "Polished zinc: roughness 0.25..0.35, metallic 0.94; iron parts may receive runtime near-black tint."
    },
    "Old_window_glass": {
      "tile_size_metres": 1.0,
      "maps": {
        "BaseColor": "materials/Old_window_glass/BaseColor.png",
        "Normal": "materials/Old_window_glass/Normal.png",
        "ORM": "materials/Old_window_glass/ORM.png"
      },
      "resolution": 512,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      }
    },
    "Terracotta": {
      "tile_size_metres": 1.0,
      "maps": {
        "BaseColor": "materials/Terracotta/BaseColor.png",
        "Normal": "materials/Terracotta/Normal.png",
        "ORM": "materials/Terracotta/ORM.png"
      },
      "resolution": 512,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      }
    },
    "Granite_lime_moss_base": {
      "tile_size_metres": 2.25,
      "maps": {
        "BaseColor": "materials/Granite_lime_moss_base/BaseColor.png",
        "Normal": "materials/Granite_lime_moss_base/Normal.png",
        "ORM": "materials/Granite_lime_moss_base/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT_X_CLAMP_Y",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      },
      "displacement_scale_metres": 0.105,
      "displacement_bias_metres": 0.006,
      "height_map": "materials/Granite_lime_moss_base/Height.png",
      "height_formula": "outward_metres = 0.006 + sampled_Height * 0.105",
      "height_repeat_metres": [
        2.25,
        0.9
      ],
      "height_encoding": "16-bit grayscale; original scan extrema normalized 0..1 after periodic seam correction",
      "tile_size_uv_metres": [
        2.25,
        0.9
      ],
      "uv_rule": "U=facade distance / 2.25; V=height above wall foot / 0.9. Clamp V. No second UV scaling."
    },
    "Granite_ochre": {
      "tile_size_metres": 2.25,
      "maps": {
        "BaseColor": "materials/Granite_ochre/BaseColor.png",
        "Normal": "materials/Granite_ochre/Normal.png",
        "ORM": "materials/Granite_ochre/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      },
      "displacement_scale_metres": 0.105,
      "displacement_bias_metres": 0.006,
      "height_map": "materials/Granite_ochre/Height.png",
      "height_formula": "outward_metres = 0.006 + sampled_Height * 0.105",
      "height_repeat_metres": 2.25,
      "height_encoding": "16-bit grayscale; original scan extrema normalized 0..1 after periodic seam correction",
      "derivation": "Registered colour grade of CC0 rock_wall_09; same topology, normal and height as grey granite."
    },
    "Granite_pink": {
      "tile_size_metres": 2.25,
      "maps": {
        "BaseColor": "materials/Granite_pink/BaseColor.png",
        "Normal": "materials/Granite_pink/Normal.png",
        "ORM": "materials/Granite_pink/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      },
      "displacement_scale_metres": 0.105,
      "displacement_bias_metres": 0.006,
      "height_map": "materials/Granite_pink/Height.png",
      "height_formula": "outward_metres = 0.006 + sampled_Height * 0.105",
      "height_repeat_metres": 2.25,
      "height_encoding": "16-bit grayscale; original scan extrema normalized 0..1 after periodic seam correction",
      "derivation": "Registered colour grade of CC0 rock_wall_09; same topology, normal and height as grey granite."
    },
    "Lime_render_white": {
      "tile_size_metres": 2.25,
      "maps": {
        "BaseColor": "materials/Lime_render_white/BaseColor.png",
        "Normal": "materials/Lime_render_white/Normal.png",
        "ORM": "materials/Lime_render_white/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      },
      "displacement_scale_metres": 0.105,
      "displacement_bias_metres": 0.006,
      "height_map": "materials/Lime_render_white/Height.png",
      "height_formula": "outward_metres = 0.006 + sampled_Height * 0.105",
      "height_repeat_metres": 2.25,
      "height_encoding": "16-bit grayscale; original scan extrema normalized 0..1 after periodic seam correction",
      "derivation": "Registered colour grade of CC0 rock_wall_09; same topology, normal and height as grey granite."
    },
    "Green_grey_slate": {
      "tile_size_metres": 3.57,
      "maps": {
        "BaseColor": "materials/Green_grey_slate/BaseColor.png",
        "Normal": "materials/Green_grey_slate/Normal.png",
        "ORM": "materials/Green_grey_slate/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      }
    },
    "Window_frame_paint": {
      "tile_size_metres": 1.0,
      "maps": {
        "BaseColor": "materials/Window_frame_paint/BaseColor.png",
        "Normal": "materials/Window_frame_paint/Normal.png",
        "ORM": "materials/Window_frame_paint/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      },
      "tint_rule": "Multiply BaseColor by a muted village palette colour; keep neutral texture and normal. Timber grain runs along V."
    },
    "Door_paint": {
      "tile_size_metres": 1.0,
      "maps": {
        "BaseColor": "materials/Door_paint/BaseColor.png",
        "Normal": "materials/Door_paint/Normal.png",
        "ORM": "materials/Door_paint/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      },
      "tint_rule": "Multiply BaseColor by a muted village palette colour; keep neutral texture and normal. Timber grain runs along V."
    },
    "Shutter_paint": {
      "tile_size_metres": 1.0,
      "maps": {
        "BaseColor": "materials/Shutter_paint/BaseColor.png",
        "Normal": "materials/Shutter_paint/Normal.png",
        "ORM": "materials/Shutter_paint/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      },
      "tint_rule": "Multiply BaseColor by a muted village palette colour; keep neutral texture and normal. Timber grain runs along V."
    },
    "Sign_paint": {
      "tile_size_metres": 1.0,
      "maps": {
        "BaseColor": "materials/Sign_paint/BaseColor.png",
        "Normal": "materials/Sign_paint/Normal.png",
        "ORM": "materials/Sign_paint/ORM.png"
      },
      "resolution": 1024,
      "normal_convention": "OpenGL tangent +Y",
      "roughness_factor": 1.0,
      "metalness_factor": 1.0,
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "wrap": "REPEAT",
      "color_space": {
        "BaseColor": "sRGB",
        "Normal": "linear",
        "ORM": "linear"
      },
      "tint_rule": "Multiply BaseColor by a muted village palette colour; keep neutral texture and normal. Timber grain runs along V."
    }
  },
  "moss_lower_zone": {
    "material": "Granite_lime_moss_base",
    "height_metres": 0.9,
    "uv_rule": "U=facade distance / 2.25; V=height above wall foot / 0.9. Clamp V. No second UV scaling.",
    "upper_transition": "At V=1 use grey granite at wall height 0.9 / 2.25; switch to ordinary world-metre granite UV above. For coloured walls, use this grey band sparingly or tint its exposed stone to match.",
    "normal_and_height_shared": false
  },
  "runtime_binding": "Bind maps by exact material name. BaseColor sRGB; Normal and ORM linear; RepeatWrapping; texture.flipY=false for glTF UVs; normalScale=(1,1), roughness=1, metalness=1 (ORM drives both). AO reads UV0. Geometry UVs already divide by tile size: do not divide or repeat again.",
  "provenance": {
    "license": "CC0",
    "source": "Poly Haven",
    "ids": [
      "rock_wall_09",
      "worn_rock_natural_01",
      "wooden_planks",
      "metal_plate_02",
      "slate_floor_03"
    ],
    "read_only_source": "/root/fal-author/breton-stone-house-v1"
  },
  "paint_slots": [
    "Window_frame_paint",
    "Door_paint",
    "Shutter_paint",
    "Sign_paint"
  ],
  "village_palettes": [
    {
      "name": "Harbour blue",
      "wall": "Granite_lime_moss",
      "roof": "Blue_grey_slate",
      "frames": "#c4c9bd",
      "doors": "#45627a",
      "shutters": "#55758b",
      "sign": "#3b5862"
    },
    {
      "name": "Ochre & sage",
      "wall": "Granite_ochre",
      "roof": "Green_grey_slate",
      "frames": "#d1cbb6",
      "doors": "#536b60",
      "shutters": "#6b8071",
      "sign": "#4d5e52"
    },
    {
      "name": "Pink & oxblood",
      "wall": "Granite_pink",
      "roof": "Blue_grey_slate",
      "frames": "#cdc7b8",
      "doors": "#744b48",
      "shutters": "#87645d",
      "sign": "#63493e"
    },
    {
      "name": "Lime & ocean",
      "wall": "Lime_render_white",
      "roof": "Blue_grey_slate",
      "frames": "#bec9c5",
      "doors": "#3e596b",
      "shutters": "#5c7680",
      "sign": "#4f6368"
    }
  ],
  "coherence_rules": [
    "Choose one palette per street, with at most one adjacent palette for accents.",
    "Keep all full-storey windows window_std at scale 1; only attic/gable windows use window_small.",
    "Keep the four paint slots independently tintable; frame colour stays quieter and lighter than doors.",
    "Share dressed granite, gutter profile, roof gauge, pitches and opening datums across village buildings."
  ]
}