An open API service indexing awesome lists of open source software.

https://github.com/selfsame/unity-wave-function-collapse


https://github.com/selfsame/unity-wave-function-collapse

Last synced: about 1 year ago
JSON representation

Awesome Lists containing this project

README

          

# Unity WaveFunctionCollapse

A fork of [https://github.com/mxgmn/WaveFunctionCollapse](https://github.com/mxgmn/WaveFunctionCollapse) with tools for the Unity Game engine.

# Installation

Clone this repo under your projets `Assets` directory, or import a unity package asset from
[http://selfsame.itch.io/unitywfc](http://selfsame.itch.io/unitywfc).

# Usage

## video tutorial

[https://www.youtube.com/watch?v=CTJJrC3BAGM](https://www.youtube.com/watch?v=CTJJrC3BAGM)

## Training

Training components define sample data from their child objects. The contained objects must have a prefab connection. Rotation of objects are recorded. The OverlapWFC component will auto compile it's training on Start, in editor mode you will need to use the `compile` button.

Whitespace (no object) is recorded for the OverlapWFC, but ignored for the SimpleTiledWFC.

NOTE: for SimpleTiledWFC all prefabs must be located within an `Assets/Resources` directory!

## TilePainter

Simple tilemap painting utility to help create training data. To paint, assign it's `color` prefab property and hover over the canvas region with the TilePainter's object selected.

Adding objects to the `palette` array will show them below the canvas area, palette or painted tiles can be sampled by holding the [s] key and clicking on them.

Note: You can drag a folder of prefabs from under `Assets/Resources` onto the palette array!

## OverlapWFC

Generates output from a Training sample. On `Start` will compile it's training component, generate, and run.

NOTE: Using rotation specific tiles will only give nice results for symmetry 1 generation. Personally I like to use rotation for the overlap model, with a larger training area to make up for the loss of symetry variants.

* seed: `0` for randomized
* N: size of the overlap patterns (this is hidden in the inspector, as higher values can often freeze Unity)
* Periodic Input: repeating sample pattern
* Periodic Output: repeating output pattern
* Symmetry: sample grid re-read with additional rotation/reflection variations. Note: rotation of sample tiles will only make sense for symmetry-1 output
* Iterations: 0 will run until finished/unfinishable. Also used by incremental output.
* Incremental: Runs iterations every update in play mode.

## SimpleTiledWFC

This model uses XML data representing legal tile neighbors. The Training component has a "record neighbors" command to generate these files, the file is saved to `"Assets/{{trainingGameObject.name}}.xml"`.

Whitespace is ignored in the neighbor scan, and can be used as margins to isolate neighbors. Training components have a `weight` array for neighbor xml.

NOTE: Prefabs must be located within `Assets/Resources` or a subdirectory within.

### `X` `I` `T` `L`

Tile symmetry class can be declared via the last letter of the prefab name, for example "GroundX" or "Road-T".

Note: `L` tiles have an initial orientation of
```
OO
OX
```

## API

Both models have a `public GameObject[,] rendering;` 2d array that stores their output.