I think the metaphor is great.
Each tile has a superposition of possible states that collapse into one observed state. That’s all the metaphor is meant to mean, I think.
What are better names?
- Lego Simplices
- Tile Constraint Pairing
- Pipe Fitting
- Cartesian Convolution (nah)
- Finite automata (ok that’s fair, but subthings need names)
I dunno, I think the WFC metaphor works for me. The “wavefunction” is just the finite set of states that have a non-zero probability of being observed.
> Each tile has a superposition of possible states
This is like saying an uninitialized integer has a superposition of all possible values. I find it a very convoluted way of saying "each tile has a set of possible next states" - dragging quantum terms to this is just confusing, in my opinion.
The first definition of this type of procedural generation algorithm was called Model Synthesis by Paul Merrell [1] which built upon texture synthesis. You can even read Merrell's later comparison of the two algorithms [2].
[1] https://paulmerrell.org//thesis.pdf [2] https://paulmerrell.org/wp-content/uploads/2021/07/compariso...
You’re not wrong. I think I initially had higher expectations myself. But as a person who names things, I don’t really find this one to be a huge stretch.
> This is like saying an uninitialized integer has a superposition of all possible values.
Well? Yeah! And I personally like that way of thinking about sets. It maps pretty directly to my understandings of other things in math and physics.
Here's the algorithm described without the quantum nonsense:
1. Analyze Rules: Extract valid patterns (modules) and their compatibility rules (adjacency constraints) from input or define them.
2. Initialize Grid: Create an output grid where each cell initially contains all possible modules (maximum uncertainty).
3. Choose and Assign: Select the cell with the fewest valid modules remaining. Randomly assign one compatible module to it.
4. Propagate Constraints: Update neighboring cells by removing modules incompatible with the newly assigned one. If a cell loses all options, a contradiction occurs.
5. Handle Contradiction: If a contradiction arises, either backtrack to a previous choice or restart the process.
6. Repeat: Continue from step 3 until all cells are assigned a module or an unresolvable contradiction occurs.
Which is essentially how a basic sudoku solver works (which usually only has one solution, as opposed to many)
That's a very long name.
Constraint Collapse would be good
Ad hoc Prolog
- Stohastic Sudoku solvers