# Terrain Material Layers Acceptance ## Evidence ![Terrain layer paint stroke](terrain-material-paint-stroke.png) The native Wayland editor is shown with the deterministic terrain showcase selected, two shared material layers visible in the Inspector, Paint active in the existing horizontal viewport toolbar, and the cyan terrain-following brush footprint over the blended PBR surface. ## Live Acceptance - `Concrete` and `Surface Tint` blend continuously across all four generated chunks. - Layer assignment, clear, reorder, remove, UV tiling, and per-layer sample coverage are visible in the Terrain card without nesting a second panel. - Paint and Erase share the existing horizontal toolbar with layer, radius, and strength controls. - A Paint drag changed layer-two coverage from 13/25 to 16/25 samples and produced exactly one `Undo: Paint Terrain Material` history entry. - Ctrl+Z restored 13/25 samples; Ctrl+Y restored 16/25 samples. - The cyan footprint followed the actual sampled terrain surface and the transform gizmo remained absent while Paint owned viewport input. - Forward PBR and the project `blacksite_surface` terrain extension compiled without GPU pipeline errors. The invalid deferred-only prepass override found during QA was removed from both project material extensions. ## Automated Coverage - Terrain layer/weight RON round-trip and structural validation. - RGBA8 normalization rejection and normalized vertex-color transport. - Paint/Erase normalization and brush-footprint isolation. - Multi-dab single-transaction undo/redo. - Exact restoration of an implicit pre-stroke weight map on cancel. Packaged build tests remain intentionally skipped per current project direction. Source workspace format/check/clippy/tests, project validation, navigation bake validation, and diff hygiene are the required gate for this ticket.