WaveFunctionCollapse Module
Technical Docs · Procedural Generation
Wave Function
Collapse
제약 조건을 전파하며 격자를 채워가는 절차적 타일 배치 알고리즘. 엔트로피가 가장 낮은 슬롯을 관측하고 인접 규칙을 전파해 일관된 구조물을 생성합니다.
COMPONENTS
3
PHASES
Observe · Collapse · Propagate
OUTPUT
Deterministic Tile Layout
스크롤
ALGORITHM
세 단계 반복
하나의 슬롯이 확정될 때마다 인접 슬롯의 가능성이 줄어들고, 그 변화가 다시 전파됩니다. 모순이 발생하면 백트래킹하거나 재시작합니다.
01
Observe
엔트로피(가능한 타일 수)가 가장 낮은 미확정 슬롯을 선택합니다. 동률이면 무작위 선택.
02
Collapse
선택된 슬롯의 도메인에서 가중치 기반으로 하나의 타일을 확정합니다. 슬롯 엔트로피 = 0.
03
Propagate
확정된 슬롯의 인접 규칙을 이웃 슬롯에 전파. 제거된 가능성이 있으면 그 이웃도 큐에 추가.
슈퍼포지션
관측 중
확정됨
전파 중
CORE ARCHITECTURE
주요 구성 요소
Slots
Grid Unit WFC 알고리즘이 동작하는 격자(Grid) 단위. 각 슬롯은 현재 가능한 타일 집합(Domain)과 엔트로피 값을 보유하며, 확정 전까지 슈퍼포지션 상태를 유지합니다.
domain가능한 타일 목록
entropydomain.Count 기반 우선순위
collapsed단일 타일로 확정된 상태
position격자 좌표 (2D / 3D)
4
3
■
2
1
■
■
2
■
숫자 = 남은 가능성 수 (엔트로피)
Domain
Adjacency Rules 슬롯에 배치될 수 있는 타일 집합과 인접 규칙을 정의합니다. 각 방향에 대해 허용되는 이웃 타일 조합을 명시하며, 전파 단계에서 불가능한 타일을 제거합니다.
tiles타일 목록 + 가중치
adjacencyRules방향별 허용 이웃 집합
CanPlace(tile, dir, nb)인접 유효성 검사
A
B
↑ 허용
C
→ 허용
X
↓ 불허
B
← 허용
Flow
Process Controller WFC 프로세스 전체 실행 흐름을 제어합니다. Observe → Collapse → Propagate 루프를 비동기로 구동하며, 모순 발생 시 재시작 또는 백트래킹을 처리합니다.
Initialize(grid, domain)슈퍼포지션 초기화
RunAsync(ct)메인 WFC 루프 (async)
Propagate(slot)큐 기반 제약 전파
OnContradiction모순 감지 콜백
Init
→
Observe
→
Collapse
→
Propagate
남은 슬롯 있으면 반복
PROPAGATION
제약 전파 상세
하나의 슬롯이 확정되면, 그 효과가 이웃으로 퍼져나갑니다. 이웃에서 제거된 타일이 있으면 그 이웃의 이웃도 다시 검사됩니다.
1
슬롯 A가 타일
T로 확정됨2
A의 모든 이웃을 전파 큐에 추가
3
큐에서 슬롯 B를 꺼내
CanPlace 검사4
B의 도메인에서 불가능한 타일 제거
5
B 도메인이 줄었으면 B의 이웃도 큐에 추가 → 반복
!
B 도메인이 0이 되면 모순 — 재시작
T
?
?
?
·
·
?
·
·
파동이 이웃으로 전파되는 모습
INTEGRATION
시스템 연동
Flow Module
FlowSession 안에서 WFC가 실행됩니다. RunAsync는 전체 루프를 비동기로 구동하며, CancellationToken으로 중단 가능합니다.
지형 생성
바이옴 타일셋과 높이 제약을 Domain에 주입하여 일관된 지형 패턴을 절차적으로 생성합니다.
구조물 생성
건물, 던전, 마을 레이아웃을 타일 기반으로 생성합니다. 타일셋 교체만으로 다른 스타일의 구조물을 즉시 출력합니다.