Cotton canvas
=============

Material Studio export — contract gridsnap.material 0.1.0
Material mat_g9s56dv9uho66de5t6erss revision 1 · family fabric · created 2026-10-05T14:50:51.179Z
Bake engine 1.0.0 · app 0.1.0

PHYSICAL SIZE
  One repeat of these maps covers 99.4 mm (U, image width) × 100.5 mm (V, image height).
  Set your UV/texture scale so that one tile = 0.099 m × 0.101 m.
  The images are square; for a non-square repeat the pixels are not square on the surface.
  Grain/pattern direction: grain v, pattern none (U = image right, V = image up).

MAPS
  Base colour  maps/basecolor.png  — sRGB colour, 1024×1024, 8-bit
  Normal       maps/normal-gl.png  — Non-Color / linear data, 1024×1024, 8-bit, OpenGL convention (+Y / green = up)
  Occlusion    maps/ao.png (channel R)  — Non-Color / linear data, 1024×1024, 8-bit
  Height       maps/height-16bit.png  — Non-Color / linear data, 1024×1024, 16-bit
               sample 0..1 → -0.038 … 0.3 mm (h = min + s × (max − min)); 0 mm is the nominal finished face; negative values are recessed (joints, pores).

  Constants (no image file): roughness = 0.851 (no map; constant); metalness = 0 (no map; constant)

  Base colour contains no baked lighting or occlusion; apply AO only as ambient occlusion.
  Channel origin: baseColor=authored, normal=authored, roughness=constant, metalness=constant, occlusion=authored, height=authored
  ("inferred" = artistic estimate from an image, not measured data.)

TILING QA
  Automated seam check: passed (worst boundary/interior ratio 0.978).
  Human seam review: not recorded.

SETUP — tested and untested targets
  Status of each target is listed in the project's compatibility report. Everything below
  is image-map setup guidance; no native material file for these applications is included.

  Blender (Principled BSDF):
    - Base colour → Image Texture, Color Space "sRGB" → Base Color.
    - Normal → Image Texture "Non-Color" → Normal Map node (Tangent Space) → Normal.
      Maps are OpenGL convention, so no green-channel flip is needed.
    - Roughness/metalness/AO → Image Texture "Non-Color" (use the stated channel).
    - Height (optional) → Image Texture "Non-Color" → Displacement node, Midlevel = 0.1124, Scale = 0.00034 (metres).
    - Mapping node Scale = (surface size in m) / (0.099, 0.101), or use Object/real-world UVs.

  Unreal Engine: import base colour with sRGB on; normal with "Flip Green Channel" ON
    (Unreal expects DirectX-style normals); roughness/metalness/AO with sRGB OFF and
    compression "Masks". UNVERIFIED in a real Unreal import.
  Twinmotion: assign colour, normal, roughness and metallic images in the PBR material; normal
    convention and scale must be checked in the application. UNVERIFIED.
  SketchUp + Enscape / V-Ray: set the texture size to 99.4 × 100.5 mm; add the normal/roughness
    maps in the renderer's material editor. UNVERIFIED.
  three.js / glTF: raster row 0 is the top (+V) edge. With glTF UVs (origin top-left) use
    texture.flipY = false; with three.js built-in geometries (v up) use flipY = true.
    roughnessMap reads G and metalnessMap reads B: route grayscale maps or use the ORM file.

LICENCE
  gridsnap-texture-licence-1.0 — redistribution not-granted. Gridsnap Texture Licence: free to use in personal and commercial projects; do not resell or redistribute the files. https://gridsnap.app/textures/licence/

Recipe preset: cotton-canvas
