← Урок WFC/Лаба: коллапс вживую
EN
Lab · потрогать руками

WFC вживую

Лаба без кода: смотри, как сетка из «суперпозиций» схлопывается тайл за тайлом. Жёлтая рамка — клетка с минимальной энтропией (она коллапсит следующей); после выбора волна propagate срезает варианты у соседей. Включи энтропию — увидишь числа оставшихся вариантов. Тапни кисть и поставь якорь — почувствуй constraint propagation пальцем.
🏠 эксперимент~8 мин
Как пользоваться
▶ Авто — гонит коллапс до конца; ⏭ Шаг — один observe + propagate (видно поштучно); ↻ Рестарт — чистая сетка. Скорость — задержка между шагами. Галка энтропия рисует число вариантов в каждой нерешённой клетке (это и есть «энтропия»). Кисть: выбери тайл и тапни клетку — поставишь якорь, ограничения разойдутся от него. Правила смежности — «лестница высот»: глубина ↔ вода ↔ песок ↔ трава ↔ лес, через одну ступень нельзя (вода не касается травы напрямую — между ними всегда песок).
глубина вода песок трава лес
кисть-якорь (тапни тайл, потом клетку):
Что заметить: 1) Коллапсит всегда клетка с наименьшей энтропией (жёлтая рамка) — это эвристика MRV из CSP, не магия. 2) Каждый выбор волной сужает соседей (propagate) — иногда одна клетка решает целую полосу. 3) Береговая линия всегда связна: вода никогда не касается травы напрямую — между ними песок (так заданы ограничения). 4) Противоречия на этом «рыхлом» тайлсете почти не случаются (счётчик рестартов часто 0) — ровно тезис урока. Чтобы увидеть откат: поставь два несовместимых якоря впритык (глубокую воду и лес рядом) — домен между ними опустеет → противоречие → рестарт.
🏠 Что дальше
Вернись в урок, блок «🔧 Запусти и поковыряй» — там как собрать wfc.py (simple-tile: extract_adjacency, propagate, weighted collapse, anchoring), добавить backtracking вместо рестарта и overlapping-режим (правила из картинки-образца).
Связи
из урока
Wave Function Collapse — теория: WFC = CSP, propagate = AC-3, энтропия Шеннона ≈ MRV, неполнота без бэктрекинга.
пересечение
Pathfinding — сгенерированный уровень обязан быть проходимым: после WFC гоняют flood-fill/A* на связность.
Что заметить по итогу (чеклист наблюдений)