Wave Function Collapse (WFC) es un algoritmo de generación procedural que permite crear patrones o imágenes a partir de una serie de restricciones.
La implementación original de WFC fue creada por Max Gumin en C#, y actualmente está disponible en su repositorio de Github bajo la licencia MIT.
WFC es un algoritmo que utiliza una técnica llamada “propagación de ondas” para generar patrones. Se parte de una imagen en blanco dividida en celdas y se definen ciertas restricciones que deben cumplirse en cada una de las celdas.
A continuación, analizan las posibles combinaciones de patrones que cumplen con estas restricciones, y se utiliza un algoritmo de backtracking para ir descartando aquellas que no cumplen con las restricciones establecidas.
Este proceso se repite hasta que sólo queda una combinación posible, que será la solución generada por el algoritmo.
Esta técnica ha sido utilizada en diversas aplicaciones, como la creación de texturas en videojuegos, la generación de mapas y niveles, entre otros.
Cómo usar WaveFunctionCollapse
Si queréis probar WFC es necesario descargar la biblioteca de Github. Una vez descargada la biblioteca, se puede utilizar el algoritmo en nuestro proyecto. A continuación, se muestra un ejemplo de cómo utilizar WFC en C#:
Aquí tenéis algunos de cómo utilizar WaveFunctionCollapse extraídos de la documentación de la librería
// Carga la imagen de entrada
Bitmap inputImage = new Bitmap("input.png");
// Crea una nueva instancia de WaveFunctionCollapse
WaveFunctionCollapse wfc = new WaveFunctionCollapse(inputImage, tileSize: 4, randomSeed: 12345);
// Ejecuta el algoritmo WaveFunctionCollapse
bool result = wfc.Run();
if (result)
{
// Si la ejecución es exitosa, se puede obtener la matriz generada con el método GetOutput
Bitmap outputImage = wfc.GetOutput();
outputImage.Save("output.png");
}
Es una herramienta potente y, francamente, muy divertida, para la generación de contenido procedimental en C#. Podemos generar una amplia variedad de patrones y estructuras a partir de una imagen de entrada.
WaveFunctionCollapse es Open Source, y todo el código y documentación está disponible en el repositorio del proyecto en https://github.com/mxgmn/WaveFunctionCollapse