{"id":13549708,"url":"https://github.com/kchapelier/procedural-generation","last_synced_at":"2025-10-16T17:34:22.978Z","repository":{"id":48066792,"uuid":"72846220","full_name":"kchapelier/procedural-generation","owner":"kchapelier","description":"A mostly javascript-centric resource / links list on procedural content generation (PCG).","archived":false,"fork":false,"pushed_at":"2020-04-12T14:19:31.000Z","size":51,"stargazers_count":282,"open_issues_count":0,"forks_count":14,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-05-07T18:09:05.299Z","etag":null,"topics":["javascript","procedural-generation"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kchapelier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-11-04T12:34:32.000Z","updated_at":"2025-03-21T15:59:22.000Z","dependencies_parsed_at":"2022-08-12T17:50:45.436Z","dependency_job_id":null,"html_url":"https://github.com/kchapelier/procedural-generation","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kchapelier%2Fprocedural-generation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kchapelier%2Fprocedural-generation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kchapelier%2Fprocedural-generation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kchapelier%2Fprocedural-generation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kchapelier","download_url":"https://codeload.github.com/kchapelier/procedural-generation/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252931555,"owners_count":21827112,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","procedural-generation"],"created_at":"2024-08-01T12:01:24.655Z","updated_at":"2025-10-16T17:34:17.934Z","avatar_url":"https://github.com/kchapelier.png","language":null,"funding_links":[],"categories":["Others"],"sub_categories":[],"readme":"# Procedural generation\n\nA mostly javascript-centric resource / links list on procedural content generation (PCG).\n\n\n## JavaScript modules\n\n### \u003ca href=\"https://github.com/kchapelier/convchain\" target=\"_blank\"\u003ekchapelier/convchain\u003c/a\u003e\n\nVanilla javascript port of \u003ca href=\"https://twitter.com/ExUtumno\" target=\"_blank\"\u003e@ExUtumno\u003c/a\u003e's \u003ca href=\"https://github.com/mxgmn/ConvChain\" target=\"_blank\"\u003eConvChain\u003c/a\u003e.\n\n### \u003ca href=\"https://github.com/kchapelier/convchain-gpu\" target=\"_blank\"\u003ekchapelier/convchain-gpu\u003c/a\u003e\n\nVanilla javascript/WebGL2 port of \u003ca href=\"https://twitter.com/ExUtumno\" target=\"_blank\"\u003e@ExUtumno\u003c/a\u003e's \u003ca href=\"https://github.com/mxgmn/ConvChain\" target=\"_blank\"\u003eConvChain\u003c/a\u003e.\n\n### \u003ca href=\"https://github.com/kchapelier/wavefunctioncollapse\" target=\"_blank\"\u003ekchapelier/wavefunctioncollapse\u003c/a\u003e\n\nVanilla javascript port of \u003ca href=\"https://twitter.com/ExUtumno\" target=\"_blank\"\u003e@ExUtumno\u003c/a\u003e's \u003ca href=\"https://github.com/mxgmn/WaveFunctionCollapse\" target=\"_blank\"\u003eWaveFunctionCollapse\u003c/a\u003e.\n\n### \u003ca href=\"https://github.com/kchapelier/cellular-automata\" target=\"_blank\"\u003ekchapelier/cellular-automata\u003c/a\u003e\n\nCellular automata runner supporting a broad set of rule format in arbitrary dimensions.\n\n### \u003ca href=\"https://github.com/kchapelier/poisson-disk-sampling\" target=\"_blank\"\u003ekchapelier/poisson-disk-sampling\u003c/a\u003e\n\nPoisson disk sampling in arbitrary dimensions.\n\n### \u003ca href=\"https://github.com/kchapelier/ngram-word-generator\" target=\"_blank\"\u003ekchapelier/ngram-word-generator\u003c/a\u003e\n\nWord generation based on n-gram models, and a cli utility to generate said models from generic text files.\n\n### \u003ca href=\"https://github.com/scijs/sphere-random\" target=\"_blank\"\u003escijs/sphere-random\u003c/a\u003e\n\nSample random points on the surface of a n-dimensional hypersphere (a sphere of any dimension).\n\n\u003ca href=\"https://github.com/kchapelier/sphere-random/tree/rngAsArgument\" target=\"_blank\"\u003eFork\u003c/a\u003e allowing to use custom random number generators instead of Math.random.\n\n### \u003ca href=\"https://github.com/davidbau/seedrandom\" target=\"_blank\"\u003edavidbau/seedrandom\u003c/a\u003e\n\nSeeded random number generator for JavaScript.\n\n### \u003ca href=\"https://github.com/xixixao/noisejs\" target=\"_blank\"\u003exixixao/noisejs\u003c/a\u003e\n\nJavascript 2D and 3D Perlin \u0026 Simplex noise functions.\n\n### \u003ca href=\"https://github.com/zsoltc/worley-noise\" target=\"_blank\"\u003ezsoltc/worley-noise\u003c/a\u003e\n\nWorley noise (also called Cell noise) in JavaScript.\n\n### \u003ca href=\"https://github.com/kjirou/generate-maze-by-clustering\"\u003ekjirou/generate-maze-by-clustering\u003c/a\u003e\n\nGenerate a 2D maze using a \u003ca href=\"http://apollon.issp.u-tokyo.ac.jp/~watanabe/tips/maze_e.html\" target=\"_blank\"\u003eclustering algorithm\u003c/a\u003e.\n\n### \u003ca href=\"https://github.com/evanw/csg.js\"\u003eevanw/csg.js\u003c/a\u003e\n\nConstructive Solid Geometry in javascript. Create complex 3D geometries using Boolean operations like union and intersection to combine 3D solids.\n\n### \u003ca href=\"https://github.com/galaxykate/tracery\" target=\"_blank\"\u003egalaxykate/tracery\u003c/a\u003e\n\nGrammar-based english text generation.\n\n### \u003ca href=\"https://github.com/sequitur/improv\"\u003esequitur/improv\u003c/a\u003e\n\nA model-backed generative text library for JavaScript. An alternative to Tracery.\n\n### \u003ca href=\"https://github.com/Jam3/heightmap-contours\"\u003ehughsk/heightmap-contours\u003c/a\u003e\n\nGenerate contour meshes from a 2D heightmap.\n\n### \u003ca href=\"https://github.com/hughsk/cave-automata-2d\"\u003ehughsk/cave-automata-2d\u003c/a\u003e\n\nGenerate 2D cave layouts using a single parametrized cellular automata rule.\n\n### \u003ca href=\"https://github.com/gorhill/Javascript-Voronoi\"\u003egorhill/voronoi\u003c/a\u003e\n\nJavascript implementation of Steven J. Fortune's algorithm to efficiently compute Voronoi diagrams on a 2D plane.\n\n### \u003ca href=\"https://github.com/nlp-compromise/nlp_compromise\"\u003enlp_compromise/nlp_compromise\u003c/a\u003e\n\nLightweight natural language toolkit in Javascript for English with \"good-enough\" philosophy.\n\n### \u003ca href=\"https://github.com/NaturalNode/natural\"\u003eNaturalNode/natural\u003c/a\u003e\n\nHeavyweight natural language toolkit in Javascript mainly for English but also with a few utilities for other languages.\n\n### \u003ca href=\"https://github.com/dhowe/RiTaJS\"\u003edhowe/RitaJS\u003c/a\u003e\n\nAnother heavyweight natural language toolkit in Javascript for English.\n\n\n## Talks / videos\n\n### \u003ca href=\"https://www.youtube.com/channel/UCgFSPzCM9rx_Hxl-g13KcYw\"\u003eThe PROCJAM (procedural generation jam) youtube channel\u003c/a\u003e\n\nInclude playlists for all the talks made for PROCJAM 2014, 2015, 2016 and 2017.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=o9RK6O2kOKo\" target=\"_blank\"\u003e[Unite 2015] A coder's guide to spline-based procedural geometry\u003c/a\u003e\n\nGeneration of 3D geometries following a 3D Bézier curve.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=ySTpjT6JYFU\"\u003e[Unite 2014] Generating Procedural Dungeons in Galak Z\u003c/a\u003e\n\nZach Aikman discusses all the techniques he experimented with to generate the 2D levels of Galak-Z (cellular automata, space partitioning and space filling curves).\n\n### \u003ca href=\"https://www.youtube.com/watch?v=GYYuhuarTA0\"\u003e[Nordic Unite 2013] Procedurally generated content in Sir, You Are Being Hunted\u003c/a\u003e\n\nThe two members of Big Robots explain the process used to generate the world in Sir, You Are Being Hunted (voronoi-delaunay dual graph, fractal heightmap, etc.) and present some earlier projects (including a classic 2D dungeon generation extended to 3D with elevation, stairs, etc.). The talk also touches subjects such as the player perspective on PCG (replayability, player-drive stories, ...), the necessity of PCG tools for small game studios and how it may impact the development of AI for the NPCs.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=zPQOHX9hiL0\"\u003e[Unite 2014] Dungeon of the Endless Rendering and Procedural Content\u003c/a\u003e\n\nSébastien Dubois discusses the issues encountered with the initial dungeon generation algorithm (mostly boiling down to lack of control) and how they fixed it by implementing a template-based generation with multiple layers of abstraction (and an extensive toolset for the artists). The first 25 minutes of the talk is purely about the rendering but is not uninteresting either.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=_ooDLiU-o6c\"\u003e[Digital Dragons 2017] GPU-Based Run-Time Procedural Placement in 'Horizon Zero Dawn'\u003c/a\u003e\n\nJaap van Muijden explains the real-time procedural placement technique implemented in Horizon Zero Dawn on the GPU and how the game artists can use it to paint the world with ecotopes.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=sUjW5zlgeoQ\"\u003e[IRDC 2016] Markov by Candlelight\u003c/a\u003e\n\nJason Grinblat discusses the use of markov chain to generate books in Caves of Qud, how the specificities of the algorithm matches the context of the game and how to insert meaningful bits of text in markov chains.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=ClGAApZYIvI\"\u003e[Roguelike Celebration 2017] Procedurally generated histories in Caves of Qud\u003c/a\u003e\n\nJason Grinblat discusses how the history of the world is generated, how it is told to the player and how it is integrated in the gameplay.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=Z6lHExfem6U\"\u003e[Roguelike Celebration 2018] Machine Learning and Level Generation\u003c/a\u003e\n\nBen Berman discusses advances, as well as his own investigation, in the use of Machine Learning and related algorithms in procedural content generation.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=Uo9-IcHhq_w\"\u003e[Roguelike Celebration 2018] Procedural level design in Brogue and beyond\u003c/a\u003e\n\nBrian Walker explains how the level generation in Brogue works. From how the rooms are placed to how the \"puzzles\" are added to bring life to the dungeon. Also discussed are his experiment in making a 2d platformer relying on PCG for its level.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=fMbK7PYQux4#t=7m37s\"\u003e[Nordic Game 2019] Texture Synthesis and Remixing from a Single Example\u003c/a\u003e\n\nAnastasia Opara discusses the general idea as well as the pros and cons of multiple example-based texture synthesis techniques. The talk also addresses different use cases of this type of techniques and how it compares to other methods.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=EXnoHTqO7TE#t=0m15\"\u003e[Exilecon 2019] Procedural World Generation in Path of Exile\u003c/a\u003e\n\nRhys Abraham explains how the levels are generated in Path of Exile using rooms (hand-designed zones), tile keys and tile-based geometry. He also covers how the rooms can be overlapped to create more organic layouts, using custom rules to handle the tile key conflicts / combinations.\n\n### \u003ca href=\"https://www.youtube.com/watch?v=yED9t2tImog\"\u003e[The Thing 2020] Example-based procedural placement in a dialogue system\u003c/a\u003e.\n\nA very well illustrated presentation, by Anastasia Opara, of concepts which can be used to implement procedural placement based on user provided examples. \n\n## Books / Ebooks\n\n### \u003ca href=\"http://www.procjam.com/seeds/\"\u003eSeeds, the PROCJAM Zine\u003c/a\u003e\n\nZine made by the PROCJAM community featuring diverse looks at procedural content generation as a whole and insights on specific pcg methods.\n\n### \u003ca href=\"http://pcgbook.com/\" target=\"_blank\"\u003epcgbook\u003c/a\u003e\n\nA textbook about procedural content generation in games, fully readable online.\n\n### \u003ca href=\"https://books.google.be/books?isbn=1558608486\" target=\"_blank\"\u003eTexturing \u0026amp; modeling: a procedural approach\u003c/a\u003e\n\nA classic reference on the subject by pioneers and creators of the featured methods and algorithms (Ken Perlin, Steven Worley, F. Kenton Musgrave, David S. Ebert and Darwyn Peachey).\n\n### \u003ca href=\"https://books.google.be/books?isbn=1935182625\" target=\"_blank\"\u003eGenerative Art: A Practical Guide Using Processing\u003c/a\u003e\n\nThe book presents multiple examples of generative arts and explains the techniques used in some of them in the form of short tutorials (in Processing).\n\n### \u003ca href=\"https://www.scratchapixel.com/\" target=\"_blank\"\u003eScratchapixel 2.0\u003c/a\u003e\n\nFree online ebook on computer graphics featuring articles on value noise, fractal noise, perlin noise and more in the appendix \"Procedural Generation of Virtual Worlds\". Sample codes are in C++.\n\n### \u003ca href=\"https://books.google.be/books?isbn=0429948581\" target=\"_blank\"\u003eProcedural Storytelling in Game Design\u003c/a\u003e\n\nComposed of essays written by about 30 contributors and edited by Tanya X. Short and Tarn Adams, this book focuses on the procedural generation of narratives and explains some of the techniques used in existing games (such as Dwarf Fortress, The Sims, Frostpunk, Dungeons \u0026 Dragons, etc.) to populate their world with believable characters and backstories.\n\n\n## Dedicated websites and articles\n\n### \u003ca href=\"http://procedural-generation.tumblr.com/\"\u003eProcedural Generation Tumblr\u003c/a\u003e\n\n### \u003ca href=\"http://pcg.wikidot.com/\"\u003eProcedural Content Generation Wiki\u003c/a\u003e\n\n### \u003ca href=\"http://www.roguebasin.com/index.php?title=Articles#Map\"\u003eRogueBasin's articles about development\u003c/a\u003e\n\n### \u003ca href=\"https://www.reddit.com/r/proceduralgeneration/\"\u003eProcedural generation subreddit\u003c/a\u003e\n\n### \u003ca href=\"http://inconvergent.net/\"\u003eThe articles of Anders Hoff, aka inconvergent, on generative algorithms\u003c/a\u003e\n\n### The articles of Martin O'Leary, aka mewo2, on \u003ca href=\"http://mewo2.com/notes/terrain/\"\u003e2D map generation\u003c/a\u003e and \u003ca href=\"http://mewo2.com/notes/naming-language/\"\u003elanguage-driven naming\u003c/a\u003e\n\n### \u003ca href=\"http://tinysubversions.com/spelunkyGen/\"\u003eExplanation of the template based generator used in Spelunky\u003c/a\u003e\n\n### \u003ca href=\"http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/\"\u003eAmit Patel's article on 2D polygon map generation with biomes using Voronoi\u003c/a\u003e\n\n### \u003ca href=\"http://experilous.com/1/blog/post/procedural-planet-generation\"\u003eAndy Gainey's article on procedural planet generation with subdivided icosahedrons, tectonic plates and air currents simulation\u003c/a\u003e\n\n### \u003ca href=\"http://alanluo.com/procgen/midterm.html\"\u003eGenerating Art with Code, a handbook to \"Little Planet Procedural\" by Alan Luo\u003c/a\u003e Procedural generation of landscape with canvas' 2d context.\n\n### \u003ca href=\"http://www.procjam.com/tutorials/\"\u003eProcjam tutorials\u003c/a\u003e PCG tutorials commissioned for the Procjam. The batch from 2017 covers topics such as the generation of music, the generation of text following predefined templates and the use of Wave Function Collapse.\n\n### \u003ca href=\"https://blog.demofox.org/2017/05/29/when-random-numbers-are-too-random-low-discrepancy-sequences/\"\u003eWhen random numbers are too random: Low discrepancy sequences\u003c/a\u003e and \u003ca href=\"http://extremelearning.com.au/unreasonable-effectiveness-of-quasirandom-sequences/\"\u003eThe unreasonable effectiveness of quasirandom sequences\u003c/a\u003e. Two articles discussing the generation and properties of low discrepancy sequences (Van Der Corput, Halton, Hammersley, Fibonacci, Golden Ratio, ...) which can be used in some contexts as simple and efficient alternatives to poisson disc sampling or blue noise.\n\n### \u003ca href=\"https://martindevans.me/game-development/2016/03/30/Procedural-Generation-For-Dummies-Half-Edge-Geometry/\"\u003eProcedural Generation For Dummies: Half Edge Geometry, by Martin Evans\u003c/a\u003e. \n\n### \u003ca href=\"https://odr.chalmers.se/bitstream/20.500.12380/256392/1/256392.pdf\"\u003eExploring Procedural Content Generation for a 2D Space Exploration Game\u003c/a\u003e. A thesis covering multiple PCG schemes, their application in an actual game and the issues encountered by doing so.\n\n### \u003ca href=\"https://www.cs.purdue.edu/cgvlab/urban/urban-procedural-modeling.html\"\u003eUrban Procedural Modeling\u003c/a\u003e. A wealth of information on the subject of (modern) city generation.\n\n## Datasets and corpora\n\n### \u003ca href=\"https://github.com/dariusk/corpora\"\u003edariusk/corpora\u003c/a\u003e\n\nA collection of small corpora available as JSON files for easy consumption.\n\n### \u003ca href=\"https://github.com/caesar0301/awesome-public-datasets\"\u003ecaesar0301/awesome-public-datasets\u003c/a\u003e\n\nA collection of \"high-quality open datasets in public domains\".\n\n### \u003ca href=\"https://www.reddit.com/r/datasets/\"\u003e/r/datasets\u003c/a\u003e\n\nSubreddit about datasets.\n\n### \u003ca href=\"https://www.kaggle.com/datasets\"\u003eKaggle.com\u003c/a\u003e\n\nA collection of open datasets, mostly in CSV. The website requires you to setup an account in order to download datasets.\n\n### \u003ca href=\"https://catalog.data.gov/dataset\"\u003edata.gov\u003c/a\u003e\n\nThe home of the U.S. Government’s open data. Like most government-led open data initiatives, the quality (and even the availability) of the datasets is very variable.\n\n### \u003ca href=\"http://www.wikipedia.com\"\u003eWikipedia\u003c/a\u003e\n\nMore often than not, a good resource for the pragmatic developer who is willing to copy-paste or write two-liners of JavaScript to scrape the website directly in the browser's console.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkchapelier%2Fprocedural-generation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkchapelier%2Fprocedural-generation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkchapelier%2Fprocedural-generation/lists"}