{
  "schema": "forge.material-shelf.v1",
  "materials": {
    "Rubble_stone": {
      "tile_size_metres": 1.75,
      "maps": {
        "BaseColor": "materials/Rubble_stone/BaseColor.png",
        "Normal": "materials/Rubble_stone/Normal.png",
        "ORM": "materials/Rubble_stone/ORM.png"
      },
      "resolution": 1024,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "height_map": "materials/Rubble_stone/Height.png",
      "height_encoding": "16-bit grayscale linear",
      "displacement_scale_metres": 0.065,
      "displacement_bias_metres": 0,
      "height_repeat_metres": 1.75,
      "base": "materials/Rubble_stone/BaseColor.png",
      "normal": "materials/Rubble_stone/Normal.png",
      "orm": "materials/Rubble_stone/ORM.png",
      "tile": 1.75,
      "roughness": 1,
      "metalness": 1
    },
    "Rubble_stone_dark": {
      "tile_size_metres": 1.75,
      "maps": {
        "BaseColor": "materials/Rubble_stone_dark/BaseColor.png",
        "Normal": "materials/Rubble_stone_dark/Normal.png",
        "ORM": "materials/Rubble_stone_dark/ORM.png"
      },
      "resolution": 1024,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "height_map": "materials/Rubble_stone_dark/Height.png",
      "height_encoding": "16-bit grayscale linear",
      "displacement_scale_metres": 0.065,
      "displacement_bias_metres": 0,
      "height_repeat_metres": 1.75,
      "base": "materials/Rubble_stone_dark/BaseColor.png",
      "normal": "materials/Rubble_stone_dark/Normal.png",
      "orm": "materials/Rubble_stone_dark/ORM.png",
      "tile": 1.75,
      "roughness": 1,
      "metalness": 1
    },
    "Oak_frame": {
      "tile_size_metres": 1,
      "maps": {
        "BaseColor": "materials/Oak_frame/BaseColor.png",
        "Normal": "materials/Oak_frame/Normal.png",
        "ORM": "materials/Oak_frame/ORM.png"
      },
      "resolution": 1024,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "grain_axis": "+X / texture U",
      "physical_repeat_metres": [
        1.0,
        1.0
      ],
      "uv_note": "Geometry maps longitudinal distance to U/1m and cross-grain distance to V/1m. Generated beams must choose their local longitudinal axis, not stretch a whole texture per box.",
      "base": "materials/Oak_frame/BaseColor.png",
      "normal": "materials/Oak_frame/Normal.png",
      "orm": "materials/Oak_frame/ORM.png",
      "tile": 1,
      "roughness": 1,
      "metalness": 1
    },
    "Oak_frame_grey": {
      "tile_size_metres": 1,
      "maps": {
        "BaseColor": "materials/Oak_frame_grey/BaseColor.png",
        "Normal": "materials/Oak_frame_grey/Normal.png",
        "ORM": "materials/Oak_frame_grey/ORM.png"
      },
      "resolution": 1024,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "grain_axis": "+X / texture U",
      "physical_repeat_metres": [
        1.0,
        1.0
      ],
      "uv_note": "Geometry maps longitudinal distance to U/1m and cross-grain distance to V/1m. Generated beams must choose their local longitudinal axis, not stretch a whole texture per box.",
      "base": "materials/Oak_frame_grey/BaseColor.png",
      "normal": "materials/Oak_frame_grey/Normal.png",
      "orm": "materials/Oak_frame_grey/ORM.png",
      "tile": 1,
      "roughness": 1,
      "metalness": 1
    },
    "Plaster_ochre": {
      "tile_size_metres": 1.5,
      "maps": {
        "BaseColor": "materials/Plaster_ochre/BaseColor.png",
        "Normal": "materials/Plaster_ochre/Normal.png",
        "ORM": "materials/Plaster_ochre/ORM.png"
      },
      "resolution": 1024,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "height_map": "materials/Plaster_ochre/Height.png",
      "height_encoding": "16-bit grayscale linear",
      "displacement_scale_metres": 0.0025,
      "displacement_bias_metres": 0,
      "height_repeat_metres": 1.5,
      "base": "materials/Plaster_ochre/BaseColor.png",
      "normal": "materials/Plaster_ochre/Normal.png",
      "orm": "materials/Plaster_ochre/ORM.png",
      "tile": 1.5,
      "roughness": 1,
      "metalness": 1
    },
    "Plaster_white": {
      "tile_size_metres": 1.5,
      "maps": {
        "BaseColor": "materials/Plaster_white/BaseColor.png",
        "Normal": "materials/Plaster_white/Normal.png",
        "ORM": "materials/Plaster_white/ORM.png"
      },
      "resolution": 1024,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "height_map": "materials/Plaster_white/Height.png",
      "height_encoding": "16-bit grayscale linear",
      "displacement_scale_metres": 0.0025,
      "displacement_bias_metres": 0,
      "height_repeat_metres": 1.5,
      "base": "materials/Plaster_white/BaseColor.png",
      "normal": "materials/Plaster_white/Normal.png",
      "orm": "materials/Plaster_white/ORM.png",
      "tile": 1.5,
      "roughness": 1,
      "metalness": 1
    },
    "Plaster_pink": {
      "tile_size_metres": 1.5,
      "maps": {
        "BaseColor": "materials/Plaster_pink/BaseColor.png",
        "Normal": "materials/Plaster_pink/Normal.png",
        "ORM": "materials/Plaster_pink/ORM.png"
      },
      "resolution": 1024,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "height_map": "materials/Plaster_pink/Height.png",
      "height_encoding": "16-bit grayscale linear",
      "displacement_scale_metres": 0.0025,
      "displacement_bias_metres": 0,
      "height_repeat_metres": 1.5,
      "base": "materials/Plaster_pink/BaseColor.png",
      "normal": "materials/Plaster_pink/Normal.png",
      "orm": "materials/Plaster_pink/ORM.png",
      "tile": 1.5,
      "roughness": 1,
      "metalness": 1
    },
    "Clay_tile": {
      "tile_size_metres": 0.65,
      "maps": {
        "BaseColor": "materials/Clay_tile/BaseColor.png",
        "Normal": "materials/Clay_tile/Normal.png",
        "ORM": "materials/Clay_tile/ORM.png"
      },
      "resolution": 1024,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "base": "materials/Clay_tile/BaseColor.png",
      "normal": "materials/Clay_tile/Normal.png",
      "orm": "materials/Clay_tile/ORM.png",
      "tile": 0.65,
      "roughness": 1,
      "metalness": 1
    },
    "Clay_tile_dark": {
      "tile_size_metres": 0.65,
      "maps": {
        "BaseColor": "materials/Clay_tile_dark/BaseColor.png",
        "Normal": "materials/Clay_tile_dark/Normal.png",
        "ORM": "materials/Clay_tile_dark/ORM.png"
      },
      "resolution": 1024,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "base": "materials/Clay_tile_dark/BaseColor.png",
      "normal": "materials/Clay_tile_dark/Normal.png",
      "orm": "materials/Clay_tile_dark/ORM.png",
      "tile": 0.65,
      "roughness": 1,
      "metalness": 1
    },
    "Dressed_limestone": {
      "tile_size_metres": 1.6,
      "maps": {
        "BaseColor": "materials/Dressed_limestone/BaseColor.png",
        "Normal": "materials/Dressed_limestone/Normal.png",
        "ORM": "materials/Dressed_limestone/ORM.png"
      },
      "resolution": 1024,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "base": "materials/Dressed_limestone/BaseColor.png",
      "normal": "materials/Dressed_limestone/Normal.png",
      "orm": "materials/Dressed_limestone/ORM.png",
      "tile": 1.6,
      "roughness": 1,
      "metalness": 1
    },
    "Wrought_iron": {
      "tile_size_metres": 1,
      "maps": {
        "BaseColor": "materials/Wrought_iron/BaseColor.png",
        "Normal": "materials/Wrought_iron/Normal.png",
        "ORM": "materials/Wrought_iron/ORM.png"
      },
      "resolution": 512,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "base": "materials/Wrought_iron/BaseColor.png",
      "normal": "materials/Wrought_iron/Normal.png",
      "orm": "materials/Wrought_iron/ORM.png",
      "tile": 1,
      "roughness": 1,
      "metalness": 1
    },
    "Leaded_glass": {
      "tile_size_metres": 1,
      "maps": {
        "BaseColor": "materials/Leaded_glass/BaseColor.png",
        "Normal": "materials/Leaded_glass/Normal.png",
        "ORM": "materials/Leaded_glass/ORM.png"
      },
      "resolution": 512,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "base": "materials/Leaded_glass/BaseColor.png",
      "normal": "materials/Leaded_glass/Normal.png",
      "orm": "materials/Leaded_glass/ORM.png",
      "tile": 1,
      "roughness": 1,
      "metalness": 1
    },
    "Door_paint": {
      "tile_size_metres": 1,
      "maps": {
        "BaseColor": "materials/Door_paint/BaseColor.png",
        "Normal": "materials/Door_paint/Normal.png",
        "ORM": "materials/Door_paint/ORM.png"
      },
      "resolution": 512,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "grain_axis": "+X / texture U",
      "physical_repeat_metres": [
        1.0,
        1.0
      ],
      "uv_note": "Geometry maps longitudinal distance to U/1m and cross-grain distance to V/1m. Generated beams must choose their local longitudinal axis, not stretch a whole texture per box.",
      "base": "materials/Door_paint/BaseColor.png",
      "normal": "materials/Door_paint/Normal.png",
      "orm": "materials/Door_paint/ORM.png",
      "tile": 1,
      "roughness": 1,
      "metalness": 1
    },
    "Sign_paint": {
      "tile_size_metres": 1,
      "maps": {
        "BaseColor": "materials/Sign_paint/BaseColor.png",
        "Normal": "materials/Sign_paint/Normal.png",
        "ORM": "materials/Sign_paint/ORM.png"
      },
      "resolution": 512,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "ORM_channels": {
        "R": "occlusion",
        "G": "roughness",
        "B": "metallic"
      },
      "grain_axis": "+X / texture U",
      "physical_repeat_metres": [
        1.0,
        1.0
      ],
      "uv_note": "Geometry maps longitudinal distance to U/1m and cross-grain distance to V/1m. Generated beams must choose their local longitudinal axis, not stretch a whole texture per box.",
      "base": "materials/Sign_paint/BaseColor.png",
      "normal": "materials/Sign_paint/Normal.png",
      "orm": "materials/Sign_paint/ORM.png",
      "tile": 1,
      "roughness": 1,
      "metalness": 1
    },
    "Thatch_reed": {
      "maps": {
        "BaseColor": "materials/Thatch_reed/BaseColor.png",
        "Normal": "materials/Thatch_reed/Normal.png",
        "ORM": "materials/Thatch_reed/ORM.png"
      },
      "resolution": 1024,
      "tile_size_metres": 1,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "provenance": "Original periodic varied reed strands, weathered grey-brown albedo and registered analytic height normal, CC0",
      "physical_repeat_metres": [
        1,
        1
      ],
      "grain_axis": "V follows roof downslope",
      "base": "materials/Thatch_reed/BaseColor.png",
      "normal": "materials/Thatch_reed/Normal.png",
      "orm": "materials/Thatch_reed/ORM.png",
      "tile": 1,
      "roughness": 1,
      "metalness": 1
    },
    "Thatch_reed_cut": {
      "maps": {
        "BaseColor": "materials/Thatch_reed_cut/BaseColor.png",
        "Normal": "materials/Thatch_reed_cut/Normal.png",
        "ORM": "materials/Thatch_reed_cut/ORM.png"
      },
      "resolution": 1024,
      "tile_size_metres": 0.4,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "provenance": "Original periodic hollow reed stem ends with registered normals, CC0",
      "base": "materials/Thatch_reed_cut/BaseColor.png",
      "normal": "materials/Thatch_reed_cut/Normal.png",
      "orm": "materials/Thatch_reed_cut/ORM.png",
      "tile": 0.4,
      "roughness": 1,
      "metalness": 1
    },
    "Leather_brown": {
      "maps": {
        "BaseColor": "materials/Leather_brown/BaseColor.png",
        "Normal": "materials/Leather_brown/Normal.png",
        "ORM": "materials/Leather_brown/ORM.png"
      },
      "resolution": 256,
      "tile_size_metres": 0.35,
      "wrap": "REPEAT",
      "normal_convention": "OpenGL +Y",
      "provenance": "Original dark brown leather fine grain, CC0",
      "base": "materials/Leather_brown/BaseColor.png",
      "normal": "materials/Leather_brown/Normal.png",
      "orm": "materials/Leather_brown/ORM.png",
      "tile": 0.35,
      "roughness": 1,
      "metalness": 1
    }
  },
  "runtime_binding": "Exact-name replacement; external images. BaseColor sRGB; Normal/ORM linear. glTF flipY=false; RepeatWrapping; UV0 already contains physical repeat. Set roughness=metalness=1 so ORM controls them. Heights are for generated wall/plaster displacement; do not displace window surrounds.",
  "provenance": {
    "license": "CC0",
    "provider": "Poly Haven",
    "ids": [
      "castle_wall_varriation",
      "rough_wood",
      "rough_plaster_03",
      "worn_rock_natural_01",
      "metal_plate_02"
    ],
    "note": "Registered scan sets graded and made periodic; continuous rough timber scan transposed into longitudinal U; normal X/Y transposed together; glass is an opaque tinted surrogate. No AI texture generation."
  }
}