proceduralgeneration | Unsorted

Telegram-канал proceduralgeneration - procedural generation

99

Created by @r_channels

Subscribe to a channel

procedural generation

0113
https://redd.it/1luoxll
@proceduralgeneration

Читать полностью…

procedural generation

GitHub - BloodyFish/UnityVoxelEngine: My first 3D voxel implementation for the Unity game engine [WIP]
https://github.com/BloodyFish/UnityVoxelEngine

https://redd.it/1lt8i8z
@proceduralgeneration

Читать полностью…

procedural generation

gothic tracery | python + gimp
https://redd.it/1lt7n65
@proceduralgeneration

Читать полностью…

procedural generation

I used WFC but result is not good.

https://preview.redd.it/bs08bd71m9bf1.png?width=1040&format=png&auto=webp&s=7ce2a45abd9f4ede87935527f74a84922f93ca8f

In the end it turned out to be some kind of mishmash of objects. Can you help me find out what's wrong?

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO.Compression;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Tilemaps;

public class WaveFunction : MonoBehaviour
{
    public int dimensions;
    public Tie[] tileObjects;
    public List<Cell> gridCompoments;
    public Cell cellObj;

    public float tileSize = 1.0f;

    int iterations = 0;

    void Awake()
    {
        gridCompoments = new List<Cell>();
        InitializeGrid();
    }

    void InitializeGrid()
    {
        for (int z = 0; z < dimensions; z++)
        {
            for (int x = 0; x < dimensions; x++)
            {
                Vector3 pos = new Vector3(x * tileSize, 0, z * tileSize); // Y = 0
                Cell newCell = Instantiate(cellObj, pos, Quaternion.identity);
                newCell.CreateCell(false, tileObjects);
                gridCompoments.Add(newCell);
            }
        }

        StartCoroutine(CheckEntropy());
    }

    IEnumerator CheckEntropy()
    {
        List<Cell> tempGrid = new List<Cell>(gridCompoments);

        tempGrid.RemoveAll(c => c.collapsed);

        tempGrid.Sort((a, b) => { return a.tileOptions.Length - b.tileOptions.Length; });

        int arrLenght = tempGrid[0].tileOptions.Length;
        int stopIndex = default;

        for (int i = 1; i < tempGrid.Count; i++)
        {
            if (tempGrid[i].tileOptions.Length > arrLenght)
            {
                stopIndex = i;
                break;
            }
        }

        if (stopIndex > 0)
        {
            tempGrid.RemoveRange(stopIndex, tempGrid.Count - stopIndex);
        }

        yield return new WaitForSeconds(0.01f);

        CollapseCell(tempGrid);
    }

    void CollapseCell(List<Cell> tempGrid)
    {
        int randIndex = UnityEngine.Random.Range(0, tempGrid.Count);

        Cell cellToCollapse = tempGrid[randIndex];

        cellToCollapse.collapsed = true;
        Tie selectedTile = cellToCollapse.tileOptions[UnityEngine.Random.Range(0, cellToCollapse.tileOptions.Length)];
        cellToCollapse.tileOptions = new Tie[] { selectedTile };

        Tie foundTile = cellToCollapse.tileOptions[0];
        Instantiate(foundTile, cellToCollapse.transform.position, Quaternion.identity);

        UpdateGeneration();
    }

    void UpdateGeneration()
    {
        List<Cell> newGenerationCell = new List<Cell>(gridCompoments);

        for (int z = 0; z < dimensions; z++)
        {
            for (int x = 0; x < dimensions; x++)
            {
                int index = GetIndex(x, z);
                Cell currentCell = gridCompoments[index];

                if (currentCell.collapsed)
                {
                    newGenerationCell[index] = currentCell;
                }
                else
                {
                    List<Tie> options = new List<Tie>(tileObjects);

                    // LEFT
                    if (x > 0)
                        ApplyConstraint(x - 1, z, "XP", options);

                    // RIGHT
                    if (x < dimensions - 1)
                        ApplyConstraint(x + 1, z, "XM", options);

                    // FORWARD
                    if (z < dimensions - 1)
                        ApplyConstraint(x, z + 1, "ZM",

Читать полностью…

procedural generation

a (maybe ugly) representation of the organic dungeon procedural generation processes I made

https://redd.it/1lt22e6
@proceduralgeneration

Читать полностью…

procedural generation

Help me please

I'm an almost complete beginner to Godot 4.4 and have not done procedural generation yet how would i go about making a 2d procedurally generated tunnel system

ps. please explain it like I'm five years old or something

https://redd.it/1lt00a2
@proceduralgeneration

Читать полностью…

procedural generation

i created a little site with a bunch of free prompts

I am a little older guy and i am absolutely amazed by all that is possible with ai anymore so i tried to make a little website where you can get a bunch of free pretty good prompts i am not trying to spam and the website is kinda janky but check it out it took allot of work for me. www.42ify.com i have a bunch of cool image prompts and it can go straight to chatgpt with a link. the prompts are mainly for inspiration they are not as good as what you guys do yall are way better. i also made a subreddit where you can check out some of the pictures i dont know how to link that

https://redd.it/1ls3nzs
@proceduralgeneration

Читать полностью…

procedural generation

Designing Better Procedural Tools for 2D Games – Looking for Developer Input! (Academic Survey)

Hello All,

I'm Utkarsh Jha, a Master’s student at TU Ilmenau, Germany, conducting academic research on 2D procedural world generation as part of my thesis.

I’m looking for developers and designers who have experience with 2D world generation — whether you're using Unity, Godot, custom tools, or anything else — to take a quick, anonymous survey (5–7 mins).

The goal is to understand your challenges, expectations, and workflow needs when it comes to creating immersive 2D environments. Your input will directly support the development of a prototype tool aimed at improving procedural workflows.

🔗 Survey link: https://tally.so/r/n0y54Z
📩 Questions? Feel free to reach me at **utkarsh.jha@tu-ilmenau.de**

Thanks so much for your time — every response helps move this research forward!

https://redd.it/1lrr0v0
@proceduralgeneration

Читать полностью…

procedural generation

Lambournian Grid Shifting explainer: Part 1
https://www.patreon.com/posts/lambournian-grid-133322960

https://redd.it/1lre48q
@proceduralgeneration

Читать полностью…

procedural generation

AV / VI

https://redd.it/1lr7i6k
@proceduralgeneration

Читать полностью…

procedural generation

Still just parsing through

https://redd.it/1lq4y9x
@proceduralgeneration

Читать полностью…

procedural generation

I built a universe simlation that generates entire galaxies and planets from a single seed

No database, no 3D engine, just Python, math, and the Pillow library for image generation. Planets and star systems are generated on-the-fly just by navigating to different coordinates. Every seed gives you a whole new deterministic universe.

GitHub: https://github.com/SurceBeats/Atlas
Live demo included in the repo

Dwarf Galaxy




https://redd.it/1lpimsz
@proceduralgeneration

Читать полностью…

procedural generation

Just added a way to swap between multiple configurations of your Procedural Model (called Variable Profiles) to my Node-based 3D modeling tool. Web demo and source code in comments

https://redd.it/1lp5xte
@proceduralgeneration

Читать полностью…

procedural generation

A Solo Developer's War Journal: Architecture as a Survival Tool

https://redd.it/1lof9h8
@proceduralgeneration

Читать полностью…

procedural generation

Flow Field
https://www.reddit.com/gallery/1lo2dn1

https://redd.it/1lo2epi
@proceduralgeneration

Читать полностью…

procedural generation

Vortex- Unreal Engine Niagara

https://redd.it/1lteu04
@proceduralgeneration

Читать полностью…

procedural generation

The parsed and the furious

https://redd.it/1lt8q2l
@proceduralgeneration

Читать полностью…

procedural generation

options);

                    // BACKWARD
                    if (z > 0)
                        ApplyConstraint(x, z - 1, "ZP", options);

                    Tie[] newTileList = options.ToArray();
                    newGenerationCell[index].RecreateCell(newTileList);
                }
            }
        }

        gridCompoments = newGenerationCell;
        iterations++;

        if (iterations < dimensions * dimensions)
        {
            StartCoroutine(CheckEntropy());
        }
    }

    int GetIndex(int x, int z)
    {
        return x + z * dimensions;
    }

    void ApplyConstraint(int x, int z, string direction, List<Tie> options)
    {
        Cell neighbor = gridCompoments[GetIndex(x, z)];
        List<Tie> validOptions = new List<Tie>();

        foreach (Tie possible in neighbor.tileOptions)
        {
            int idx = Array.FindIndex(tileObjects, obj => obj == possible);

            Tie[] valid = possible.GetNeighbors(direction, neighbor.rotation);

            validOptions = validOptions.Concat(valid).ToList();
        }

        CheckValidity(options, validOptions);
    }

    void CheckValidity(List<Tie> optionsList, List<Tie> validOption)
    {
        for (int x = optionsList.Count - 1; x >= 0; x--)
        {
            var element = optionsList[x];
            if (!validOption.Contains(element))
            {
                optionsList.RemoveAt(x);
            }
        }
    }
}

using UnityEngine;
using UnityEngine.Tilemaps;

public class Cell : MonoBehaviour
{
    public bool collapsed;
    public Tie[] tileOptions;
    public int rotation;

    public void CreateCell(bool collapseState, Tie[] tiles)
    {
        collapsed = collapseState;
        tileOptions = tiles;
    }

    public void RecreateCell(Tie[] tiles)
    {
        tileOptions = tiles;
    }
}


using System;
using UnityEngine;

public enum Direction { North_ZP, South_ZM, East_XP, West_XM }
public class Tie : MonoBehaviour
{
    [Header("BVars:")]
    public string type;
    public Direction[] connections;
    [Header("Other Vars:")]
    public Tie[] ZP_neighbors; //Up
    public Tie[] ZM_neighbors; //Down

    public Tie[] XP_neighbors; //Right
    public Tie[] XM_neighbors; //Left

    public Tie[] GetNeighbors(string direction, int rotation)
    {

        int dirIndex = direction switch
        {
            "XP" => 0,
            "ZP" => 1,
            "XM" => 2,
            "ZM" => 3,
            _ => -1
        };

        int rotatedDirIndex = (dirIndex - rotation + 4) % 4;

        switch(rotatedDirIndex)
        {
            case 0: return XP_neighbors;
            case 1: return ZP_neighbors;
            case 2: return XM_neighbors;
            case 3: return ZM_neighbors;
            default: return Array.Empty<Tie>();
        }
    }
}




https://redd.it/1lt2rfj
@proceduralgeneration

Читать полностью…

procedural generation

I used WFC but result is not good.

https://preview.redd.it/bs08bd71m9bf1.png?width=1040&amp;format=png&amp;auto=webp&amp;s=7ce2a45abd9f4ede87935527f74a84922f93ca8f

In the end it turned out to be some kind of mishmash of objects. Can you help me find out what's wrong?

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO.Compression;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Tilemaps;

public class WaveFunction : MonoBehaviour
{
    public int dimensions;
    public Tie tileObjects;
    public List<Cell> gridCompoments;
    public Cell cellObj;

    public float tileSize = 1.0f;

    int iterations = 0;

    void Awake()
    {
        gridCompoments = new List<Cell>();
        InitializeGrid();
    }

    void InitializeGrid()
    {
        for (int z = 0; z < dimensions; z++)
        {
            for (int x = 0; x < dimensions; x++)
            {
                Vector3 pos = new Vector3(x tileSize, 0, z tileSize); // Y = 0
                Cell newCell = Instantiate(cellObj, pos, Quaternion.identity);
                newCell.CreateCell(false, tileObjects);
                gridCompoments.Add(newCell);
            }
        }

        StartCoroutine(CheckEntropy());
    }

    IEnumerator CheckEntropy()
    {
        List<Cell> tempGrid = new List<Cell>(gridCompoments);

        tempGrid.RemoveAll(c => c.collapsed);

        tempGrid.Sort((a, b) => { return a.tileOptions.Length - b.tileOptions.Length; });

        int arrLenght = tempGrid0.tileOptions.Length;
        int stopIndex = default;

        for (int i = 1; i < tempGrid.Count; i++)
        {
            if (tempGridi.tileOptions.Length > arrLenght)
            {
                stopIndex = i;
                break;
            }
        }

        if (stopIndex > 0)
        {
            tempGrid.RemoveRange(stopIndex, tempGrid.Count - stopIndex);
        }

        yield return new WaitForSeconds(0.01f);

        CollapseCell(tempGrid);
    }

    void CollapseCell(List<Cell> tempGrid)
    {
        int randIndex = UnityEngine.Random.Range(0, tempGrid.Count);

        Cell cellToCollapse = tempGridrandIndex;

        cellToCollapse.collapsed = true;
        Tie selectedTile = cellToCollapse.tileOptionsUnityEngine.Random.Range(0, cellToCollapse.tileOptions.Length);
        cellToCollapse.tileOptions = new Tie { selectedTile };

        Tie foundTile = cellToCollapse.tileOptions0;
        Instantiate(foundTile, cellToCollapse.transform.position, Quaternion.identity);

        UpdateGeneration();
    }

    void UpdateGeneration()
    {
        List<Cell> newGenerationCell = new List<Cell>(gridCompoments);

        for (int z = 0; z < dimensions; z++)
        {
            for (int x = 0; x < dimensions; x++)
            {
                int index = GetIndex(x, z);
                Cell currentCell = gridCompomentsindex;

                if (currentCell.collapsed)
                {
                    newGenerationCellindex = currentCell;
                }
                else
                {
                    List<Tie> options = new List<Tie>(tileObjects);

                    // LEFT
                    if (x > 0)
                        ApplyConstraint(x - 1, z, "XP", options);

                    // RIGHT
                    if (x < dimensions - 1)
                        ApplyConstraint(x + 1, z, "XM", options);

                    // FORWARD
                    if (z < dimensions - 1)
                        ApplyConstraint(x, z + 1, "ZM",

Читать полностью…

procedural generation

Making Explainable Minesweeper
https://sublevelgames.github.io/blogs/2025-07-06-making-explainable-minesweeper/

https://redd.it/1lt2gk4
@proceduralgeneration

Читать полностью…

procedural generation

Procedural Road Generation From Prefabs
https://redd.it/1lslsfh
@proceduralgeneration

Читать полностью…

procedural generation

0100
https://redd.it/1ls0soa
@proceduralgeneration

Читать полностью…

procedural generation

Teskooano: Procedurally generated 3D N-Body Simulation
https://teskooano.space/

https://redd.it/1lrq5ye
@proceduralgeneration

Читать полностью…

procedural generation

Mars through the eyes of Phobos: day/night cycle

https://redd.it/1lrdtru
@proceduralgeneration

Читать полностью…

procedural generation

Struggling with Maintaining Room-Corridor Connections After Random Walk Room Deformation

Oi pessoal,

Estou trabalhando em um gerador de masmorras procedural e encontrei um problema que espero que alguém aqui possa me ajudar.

Meu pipeline de geração tem duas etapas principais:

1. **Geração do layout inicial** – Uso uma abordagem baseada em gráficos para posicionar os quartos e conectá-los com corredores. Cada nó representa um quarto, e calculo os tamanhos e posições exatas dos quartos para garantir as conexões corretas dos corredores. Essa parte funciona muito bem — tudo se conecta de forma limpa e lógica.
2. **Deformação da forma do quarto** – Após a conclusão do layout, aplico um algoritmo de caminhada aleatória para deformar a forma de cada quarto, evitando uma aparência rígida e geométrica. O objetivo é obter formas de quartos mais orgânicas e interessantes.

O problema: **a caminhada aleatória modifica o tamanho e a forma do quarto**, o que geralmente causa desconexões dos corredores. Como a estrutura original do gráfico assume limites fixos dos quartos, qualquer deformação significativa quebra as conexões, especialmente quando os corredores são construídos exatamente no centro ou ao longo das bordas calculadas dos quartos.

Tentei várias abordagens para corrigir isso, incluindo:

* Expandir os corredores dinamicamente após a deformação (bagunçado e pouco confiável)
* Tentar deformar os quartos preservando um “ponto de conexão” (parece muito restrito ou acaba com uma aparência não natural)
* Zonas de buffer, preenchimento ou comprimento elástico do corredor — mas é difícil controlar ou prever visualmente

Alguém já enfrentou esse tipo de problema antes? Adoraria ouvir sobre estratégias ou até mesmo artigos/posts que possam ajudar. Idealmente, quero manter a liberdade de deformação sem sacrificar a conectividade.

Obrigado desde já

https://preview.redd.it/3wlw8gp8qqaf1.png?width=450&amp;format=png&amp;auto=webp&amp;s=8d16e2cd3357329795f3164bbce0ff4285218b02



https://redd.it/1lr3k6b
@proceduralgeneration

Читать полностью…

procedural generation

CTRL+U is an in-development openworld hackermans game that procgens the behavior of billions of npcs
https://redd.it/1lplup2
@proceduralgeneration

Читать полностью…

procedural generation

Added the ability to export scene objects as prefabs in my side-project procedural editor / engine (C++/OpenGL/GLSL)
https://youtu.be/VMAPfSmpqtU?si=n3IBxzXfScohzAvd

https://redd.it/1lpebke
@proceduralgeneration

Читать полностью…

procedural generation

1751267549
https://redd.it/1lolmvn
@proceduralgeneration

Читать полностью…

procedural generation

I found a way to simulate a population of persistent NPCs that move around for my procedural city. Here's how.
https://youtu.be/nBV0yAAJUf0

https://redd.it/1lo5me1
@proceduralgeneration

Читать полностью…

procedural generation

A more detailed look at resource extraction in my sandbox MMO, ERZ Online. I'm working on automation, procedurally generated worlds, and underground base building - I'd love to hear your ideas!

https://redd.it/1lo11ns
@proceduralgeneration

Читать полностью…
Subscribe to a channel