Login / Sign up
Discover Bonzai
Terms of Use
Legal notice
Privacy
Region
Language
matyo91
matyo91
10
Subscribers
Facebook
X
Whatsapp
Telegram
👉 You must follow matyo91 to access chat.
Feed Shop About

Wave function collapse

Facebook
Twitter
Whatsapp
Telegram
7 months ago

Introduction : Qu'est-ce que le Wave Function Collapse ?

Le Wave Function Collapse (WFC) est un puissant algorithme de gĂ©nĂ©ration procĂ©durale qui suscite un vif intĂ©rĂȘt dans le dĂ©veloppement de jeux et la crĂ©ation de contenu. Bien qu’il s’inspire de concepts en mĂ©canique quantique, le WFC est accessible et offre des applications uniques pour gĂ©nĂ©rer des motifs, des cartes et des mises en page suivant des rĂšgles spĂ©cifiques.

En physique, une fonction d’onde reprĂ©sente tous les Ă©tats possibles dans lesquels une particule pourrait exister simultanĂ©ment, et « s’effondre » en un seul Ă©tat lors de l’observation. De maniĂšre similaire, l’algorithme WFC commence avec de nombreux Ă©tats potentiels pour chaque tuile ou cellule et rĂ©duit progressivement chaque option en appliquant des contraintes, jusqu'Ă  ce qu’une seule solution valide Ă©merge.

Ce guide vous expliquera comment fonctionne le WFC, ses applications et comment l'utiliser avec PHP – un langage pas forcĂ©ment associĂ© Ă  la gĂ©nĂ©ration procĂ©durale, mais tout Ă  fait capable de la gĂ©rer.

Comment fonctionne l'algorithme de Wave Function Collapse ?

L’algorithme WFC est un solveur basĂ© sur des contraintes qui s’assure que les cellules voisines suivent des rĂšgles spĂ©cifiques. Ces rĂšgles peuvent reprĂ©senter des exigences d’adjacence de tuiles dans un jeu, voire des contraintes de mise en page pour Ă©viter le chevauchement d'Ă©lĂ©ments visuels.

Concepts de Base

  • Entropie : Dans le WFC, l’entropie dĂ©signe le nombre d'Ă©tats valides restants pour une cellule. Une cellule avec une faible entropie a peu d’états possibles, tandis qu'une cellule avec une forte entropie en a plusieurs.

  • Propagation : Au fur et Ă  mesure que les cellules s’effondrent, elles influencent leurs voisines en limitant les Ă©tats que celles-ci peuvent avoir, rĂ©duisant ainsi leur entropie.

  • Effondrement : L’algorithme choisit toujours une cellule avec la plus faible entropie, l’effondre en un seul Ă©tat, puis propage ce changement aux cellules voisines. Ce processus continue jusqu'Ă  ce que toutes les cellules soient effondrĂ©es ou qu’une contradiction soit dĂ©tectĂ©e.

Le WFC en Action

Voici une vue d’ensemble Ă©tape par Ă©tape du fonctionnement de l'algorithme WFC :

  1. Initialisation : Chaque cellule commence avec tous les états possibles (par exemple, dans une carte en tuiles, une cellule pourrait représenter des options comme mur, sol, eau, etc.).

  2. SĂ©lection de la plus faible entropie : Choisir la cellule avec le moins d’états possibles (la plus faible entropie).

  3. Effondrement de la cellule : SĂ©lectionner au hasard l’un des Ă©tats valides restants.

  4. Propagation des contraintes : Mettre à jour les cellules voisines pour éliminer les états qui ne sont plus valides en fonction de la cellule effondrée.

  5. RĂ©pĂ©ter ou gĂ©rer les contradictions : Si toutes les cellules s’effondrent avec succĂšs, vous avez une solution. Sinon, il faudra gĂ©rer les contradictions.

Visualiser le WFC

Imaginez que vous rĂ©solvez un puzzle oĂč chaque tuile doit s’ajuster parfaitement Ă  ses voisines. Au dĂ©part, chaque cellule a plusieurs options de tuiles, mais Ă  mesure que vous placez des tuiles, vous rĂ©duisez les choix des cellules environnantes jusqu'Ă  ce que seules des configurations valides restent.

ImplĂ©menter le WFC en PHP : Guide Étape par Étape

Bien que PHP ne soit peut-ĂȘtre pas votre premier choix pour la gĂ©nĂ©ration procĂ©durale, il fonctionne bien pour les projets web et la gĂ©nĂ©ration dynamique de mises en page. Voici comment implĂ©menter le WFC en PHP.

Définir les Tuiles et Contraintes

Tout d'abord, nous dĂ©finissons une classe Tile en PHP, oĂč chaque tuile a des contraintes qui spĂ©cifient avec quelles autres tuiles elle peut ĂȘtre adjacente. Par exemple, une tuile « eau » peut ĂȘtre autorisĂ©e uniquement Ă  cĂŽtĂ© de « eau » ou de « sable ».

class Tile { public $name; public $constraints; public function __construct($name, $constraints) { $this->name = $name; $this->constraints = $constraints; } }

Initialiser la Grille

Ensuite, nous crĂ©ons une grille oĂč chaque cellule commence avec tous les Ă©tats de tuile possibles :

$grid = array_fill(0, $width, array_fill(0, $height, ['eau', 'sable', 'forĂȘt', 'montagne']));

Propager les Contraintes

Pour reflĂ©ter l’état de chaque cellule, nous dĂ©finissons une fonction qui met Ă  jour les cellules voisines en fonction des contraintes d’une cellule effondrĂ©e.

function propagateConstraints(&$grid, $x, $y, $tile) { $directions = [ 'gauche' => [-1, 0], 'droite' => [1, 0], 'haut' => [0, -1], 'bas' => [0, 1] ]; foreach ($directions as $direction => $offset) { $dx = $x + $offset[0]; $dy = $y + $offset[1]; if (isset($grid[$dx][$dy])) { $grid[$dx][$dy] = array_intersect($grid[$dx][$dy], $tile->constraints[$direction]); } } }

Effondrer la Cellule avec la Plus Faible Entropie

Nous sĂ©lectionnons la cellule avec la plus faible entropie, l’effondrons, puis propageons les contraintes aux cellules voisines.

function getLowestEntropyCell($grid) { $minEntropy = PHP_INT_MAX; $bestCell = null; foreach ($grid as $x => $row) { foreach ($row as $y => $cell) { if (count($cell) < $minEntropy && count($cell) > 1) { $minEntropy = count($cell); $bestCell = [$x, $y]; } } } return $bestCell; } function collapseCell(&$grid, $x, $y) { $possibilities = $grid[$x][$y]; if (empty($possibilities)) { throw new Exception("Contradiction détectée en [$x, $y]"); } $choice = $possibilities[array_rand($possibilities)]; $grid[$x][$y] = [$choice]; propagateConstraints($grid, $x, $y, new Tile($choice, [])); }

Exécuter l'Algorithme

Pour terminer, nous exĂ©cutons l’algorithme jusqu’à ce que toutes les cellules soient effondrĂ©es.

while ($cell = getLowestEntropyCell($grid)) { list($x, $y) = $cell; collapseCell($grid, $x, $y); } // Afficher la grille foreach ($grid as $row) { foreach ($row as $cell) { echo $cell[0] . ' '; } echo PHP_EOL; }

Si une contradiction se produit, lĂ  oĂč une cellule n’a pas d'options valides, vous pouvez essayer de revenir en arriĂšre ou de redĂ©marrer de maniĂšre alĂ©atoire.

Gérer les Contradictions

Les contradictions surviennent lorsque les contraintes d’une cellule lui laissent aucun Ă©tat valide. Pour y remĂ©dier, vous pouvez :

  • Revenir Ă  un Ă©tat prĂ©cĂ©dent et essayer une autre option.

  • RedĂ©marrer le processus avec des conditions initiales diffĂ©rentes.

  • Ajuster les calculs d’entropie pour Ă©viter les contradictions plus tĂŽt.

Exploration d’Autres Algorithmes de GĂ©nĂ©ration de Cartes

Au-delà du WFC, il existe de nombreux autres algorithmes de génération procédurale, chacun étant adapté à des tùches spécifiques comme la génération de terrain, les formes organiques ou les structures complexes. Voici un aperçu de quelques alternatives :

  • Perlin & Simplex Noise : IdĂ©al pour gĂ©nĂ©rer des terrains lisses et naturels comme des montagnes et des vallĂ©es.

  • Automates Cellulaires : Parfait pour crĂ©er des structures de grottes organiques.

  • Diagrammes de Voronoi : Utile pour diviser un espace en rĂ©gions basĂ©es sur la proximitĂ© de points, parfait pour la gĂ©nĂ©ration de biomes.

  • L-Systems : Souvent utilisĂ©s pour crĂ©er des structures de branchement naturelles comme des arbres.

  • GĂ©nĂ©ration de Donjons : Des algorithmes comme la partition binaire (BSP) et la marche alĂ©atoire crĂ©ent des piĂšces et des couloirs pour des structures de type donjon.

Chacun de ces algorithmes a des forces uniques, donc le choix dépend des besoins et des contraintes du projet.

Applications du Wave Function Collapse

Le WFC a une gamme d’applications :

  • DĂ©veloppement de jeux : GĂ©nĂ©rer des cartes de tuiles cohĂ©rentes, des niveaux ou des cartes.

  • GĂ©nĂ©ration d'images : CrĂ©er des motifs et textures qui suivent des rĂšgles d'adjacence spĂ©cifiĂ©es.

  • Plans de villes : GĂ©nĂ©rer des mises en page oĂč certaines structures doivent coexister.

  • CrĂ©ation de puzzles : Concevoir des puzzles comme le Sudoku ou des mots croisĂ©s qui reposent sur des rĂšgles d'adjacence.

Le Défi Technique avec Symfony UX

IntĂ©grer l’algorithme WFC dans une application Symfony implique des dĂ©fis uniques. Comme Symfony UX est conçu pour des expĂ©riences utilisateur rĂ©actives, il est essentiel de gĂ©rer les mises Ă  jour continues d’une grille gĂ©nĂ©rĂ©e dynamiquement Ă  mesure que WFC progresse. Ici, les composants LiveComponent et la gestion asynchrone de Symfony UX contribuent Ă  crĂ©er une expĂ©rience fluide pour visualiser le WFC tout en garantissant des performances stables.

Un Ă©lĂ©ment crucial de cette implĂ©mentation est Flow, un framework d’orchestration visuelle des donnĂ©es. Flow amĂ©liore considĂ©rablement la rĂ©utilisabilitĂ© et la modularitĂ©, des clĂ©s pour gĂ©rer des processus de gĂ©nĂ©ration procĂ©durale complexes. Par exemple, chaque tĂąche du WFC, de l'effondrement des cellules Ă  l'application des contraintes, est encapsulĂ©e comme une unitĂ© modulaire dans Flow. Cette approche simplifie le code et permet de rĂ©utiliser les fonctionnalitĂ©s du WFC dans diffĂ©rents contextes, que ce soit pour des ensembles de donnĂ©es variĂ©s ou des tailles de grille diffĂ©rentes, avec peu de modifications.

Demo et sources

Voici une vidéo concrÚte générée par l'algorithme

Le code de cette implémentation Symfony est disponible ici : https://github.com/matyo91/flow-live

Conclusion

Le Wave Function Collapse est un outil fascinant pour la gĂ©nĂ©ration procĂ©durale, combinant contraintes et alĂ©atoire pour crĂ©er des sorties cohĂ©rentes et visuellement plaisantes. Bien que PHP ne soit pas forcĂ©ment le premier langage auquel on pense pour le WFC, il est plus que capable de gĂ©rer l’algorithme, ouvrant des possibilitĂ©s intĂ©ressantes pour la gĂ©nĂ©ration de contenu procĂ©dural sur le web.

Le WFC a de vastes applications, allant des jeux à la conception graphique en passant par la mise en page. Maßtriser cet algorithme ouvre la voie à la création de mondes et de motifs générés par algorithme, à la fois complexes et esthétiquement attrayants.

Ressources

Explorez ces ressources pour approfondir votre compréhension du WFC et des techniques de génération procédurale.

  • Wave function collapse on Wikipedia General : https://en.wikipedia.org/wiki/Wave_function_collapse

  • Wave function collapse on Wikipedia Algorithm : https://en.wikipedia.org/wiki/Model_synthesis

  • WaveFunctionCollapse Github : https://github.com/mxgmn/WaveFunctionCollapse

  • Coding Challenge 171 Wave Function Collapse : https://www.youtube.com/watch?v=rI_y2GAlQFM

  • Wave Function Collapse Explained : https://www.boristhebrave.com/2020/04/13/wave-function-collapse-explained

  • The Wavefunction Collapse Algorithm explained very clearly : https://robertheaton.com/2018/12/17/wavefunction-collapse-algorithm

  • The fascinating Wave Function Collapse algorithm : https://dev.to/kavinbharathi/the-fascinating-wave-function-collapse-algorithm-4nc3

  • A new way to generate worlds (stitched WFC) : https://www.youtube.com/watch?v=dFYMOzoSDNE

  • EPC2018 - Oskar Stalberg - Wave Function Collapse in Bad North : https://www.youtube.com/watch?v=0bcZb-SsnrA

  • Introduction to procedural generation with Wave Function Collapse : https://www.youtube.com/watch?v=ZdbpTkuStKI

  • Wave Function Collapse Is A Thing - Godot 4.1 C# (Full Lesson) : https://www.youtube.com/watch?v=OiJmO2BRcVE

  • Expanding Wave Function Collapse with Growing Grids for Procedural Content Generation : https://www.youtube.com/watch?v=2TDgZfc-bu0

  • The Wave Function Collapse algorithm : https://www.youtube.com/watch?v=qRtrj6Pua2A

  • A.I. Level Generation, High Res (Wave Function Collapse #6) : https://www.youtube.com/watch?v=bVI-i39lYP8

  • PHP-WFC : https://github.com/FeatheredSnek/phpwfc

  • Procedural Generation with Wave Function Collapse and Model Synthesis | Unity Devlog : https://www.youtube.com/watch?v=zIRTOgfsjl0

  • Model Synthesis : https://paulmerrell.org/model-synthesis

  • Wave Collapse Function algorithm in Processing : https://discourse.processing.org/t/wave-collapse-function-algorithm-in-processing/12983

  • PrĂ©sentation du Wave Function Collapse (ProcĂ©dural) https://www.youtube.com/watch?v=_pRIHB8Qbek

  • Automatic Generation of Game Content using a Graph-based Wave Function Collapse Algorithm : https://fr.slideshare.net/slideshow/automatic-generation-of-game-content-using-a-graphbased-wave-function-collapse-algorithm-191777606/191777606

Creative works

  • Creating Little Castles with Wave Function Collapse : https://www.youtube.com/watch?v=MyMbbmWVCDw

  • Eternal Mist. Example of Wave Function Collapse (for #screenshotsaturday ). Indie Game Devlog #2.1 : https://www.youtube.com/watch?v=Ff0tXzaMpvU

  • Wave Function Collapse For Dummies Like Me (With Unity Example) : https://www.youtube.com/watch?v=57MaTTVH_XI

  • Procedural generation from a single example with WaveFunctionCollapse : https://www.youtube.com/watch?v=DOQTr2Xmlz0

  • EASY Wave Function Collapse Tutorial for Unity Games! (Unity Tutorial - Reupload) : https://www.youtube.com/watch?v=3g440SA2hKU

  • Why I use Wave Function Collapse to create levels for my game : https://www.youtube.com/watch?v=TO0Tx3w5abQ

  • How Townscaper Works: A Story Four Games in the Making | AI and Games #65 : https://www.youtube.com/watch?v=_1fvJ5sHh6A

  • OisĂ­n Wave Function Collapse for poetry: https://github.com/mewo2/oisin

  • Townscaper : https://www.townscapergame.com/

  • unity-wave-function-collapse : https://selfsame.itch.io/unitywfc

  • Zelda WFC : https://observablehq.com/@makio135/zelda-wfc

  • Wave Function Collapse Demonstration : https://oskarstalberg.com/game/wave/wave.html

  • Infinite procedurally generated city : https://marian42.de/article/wfc/

  • Generating stairy scenes : https://x.com/exutumno/status/895683455299723265?lang=eu

  • Herbert Wolverson - Procedural Map Generation Techniques : https://www.youtube.com/watch?v=TlLIOgWYVpI

  • What Is Perlin Noise? Procedural Generating in Video Games : https://www.youtube.com/watch?v=9x6NvGkxXhU

matyo91
matyo91
€49.00

Automation avec Flow en PHP

Open
Follow matyo91 to comment
matyo91

matyo91

Je t'aide Ă  automatiser tes process
10
Visit this Bonzai
Follow matyo91 to get the latest updates.

Le nouvel opérateur de PHP 8.5 va changer ta façon de coder

5 days ago
10

Comment j'ai connecté Cursor à Slack pour automatiser mes flux de travail d'IA

1 week ago
12

Télécharger de la musique Légalement

3 weeks ago
14

🎼 CrĂ©er un mini-jeu Discord avec VITE : un retour d'expĂ©rience

1 month ago
29

đŸŽ¶ Open Mic du Groover Club - Mai 🧡

1 month ago
26

▶ 2025-05-26 DjMatyo Soundcloud set with MC

1 month ago
29

🚀 Du dĂ©veloppement Ă  la production : dĂ©ployer une API Symfony avec Upsun

1 month ago
33

🚀 De zĂ©ro Ă  hĂ©ros avec Sylius : Au cƓur de l'atelier sur les essentiels pratiques

1 month ago
30

🚀 Sylius Days 2025 : l'innovation en matiĂšre de commerce Ă©lectronique

1 month ago
41

đŸ‡ȘđŸ‡ș DJ Matyo Live special Eurovision 2025 🌟

1 month ago
33

Générez automatiquement des miniatures YouTube personnalisées de style Ghibli avec PHP et l'IA

1 month ago
33

Recherche, Achat et Organisation de Tracks pour DJ Sets

1 month ago
53

Automating Gmail and Google Calendar with PHP Agents ?🧠⚡

2 months ago
41

Supercharge Your Job Search: Automate with MCP, Astra, Langflow and Arize

2 months ago
41

DJ Matyo Live

2 months ago
42

Build a Game for the largest game dev competition in the world

2 months ago
41

Demande Ă  Codex

2 months ago
52

DJ Matyo Live repost track

2 months ago
44

Darkwood v1.0.1 release

2 months ago
53

Transforme ta voix en article de blog avec GPT et Meteor

2 months ago
56
© 2025 Bonzai Privacy Legal notice Terms of Use