Prozedurale Dungeon-Generierung in Roblox: BSP-Räume, Delaunay & Chunk-Streaming

2026-09-29 • DopaBrain Roblox Procedural Architecture Team • DopaBrain Engineering

Featured DopaBrain Interactive Tools

Prozedurale Generierung ist das Herzstück moderner Roguelikes und Crawler-RPGs auf Roblox. Schlecht geplante Algorithmen führen zu Speicherüberlastungen und unschönen Geometrie-Kollisionen.

Mithilfe von BSP zur Raumaufteilung, Delaunay-Triangulation für natürliche Rundwege und Roblox StreamingEnabled lassen sich gewaltige, performante Dungeons erschaffen.

1. Raumaufteilung mittels Binary Space Partitioning (BSP)

Rekursive Raumunterteilung für ausgewogene Grundrisse:

2. Natürliche Gänge: Delaunay-Triangulation & Minimaler Spannbaum (MST)

Organische Vernetzung aller Kammern ohne Sackgassen:

3. Rasterbasierter Gangbau & Mesh-Instanziierung

Umsetzung der Graphen in physische Roblox-Geometrie:

ServerScriptService.Dungeon.BSPGenerator
-- BSP-Knoten-Teilungsmodul
local BSPNode = {}
BSPNode.__index = BSPNode

function BSPNode.new(x, z, width, depth)
    local self = setmetatable({}, BSPNode)
    self.X, self.Z = x, z
    self.Width, self.Depth = width, depth
    self.LeftChild = nil
    self.RightChild = nil
    self.Room = nil
    return self
end

function BSPNode:Split(minSize)
    if self.LeftChild or self.RightChild then return false end
    local splitHorizontal = math.random() > 0.5
    if self.Width > self.Depth and (self.Width / self.Depth) >= 1.25 then
        splitHorizontal = false
    elseif self.Depth > self.Width and (self.Depth / self.Width) >= 1.25 then
        splitHorizontal = true
    end
    local maxDimension = (splitHorizontal and self.Depth or self.Width) - minSize
    if maxDimension <= minSize then return false end
    local splitPos = math.random(minSize, maxDimension)
    if splitHorizontal then
        self.LeftChild = BSPNode.new(self.X, self.Z, self.Width, splitPos)
        self.RightChild = BSPNode.new(self.X, self.Z + splitPos, self.Width, self.Depth - splitPos)
    else
        self.LeftChild = BSPNode.new(self.X, self.Z, splitPos, self.Depth)
        self.RightChild = BSPNode.new(self.X + splitPos, self.Z, self.Width - splitPos, self.Depth)
    end
    return true
end

return BSPNode

4. Speicher-Culling & StreamingEnabled-Architektur

Riesige Welten stabil auf Mobilgeräten ausführen:

5. Deterministische Seeds & Server-Autorität

Latenzfreie Kartenerstellung bei maximaler Cheatsicherheit:

Frequently Asked Questions

Warum BSP statt rein zufälliger Raumplatzierung?

Reiner Zufall erfordert teure Kollisionsprüfungen und hinterlässt Leerräume. BSP garantiert eine gleichmäßige Verteilung ohne Überlappungen.

Warum wird Delaunay mit einem MST kombiniert?

Delaunay findet Nachbarschaften, der MST garantiert Erreichbarkeit aller Räume, und zusätzliche Kanten verhindern monotone Sackgassen.

Wie hilft StreamingEnabled bei großen Dungeons?

Es lädt nur Räume in Spielernähe, wodurch auch riesige 100-Räume-Dungeons auf schwachen Mobilgeräten flüssig laufen.

Wie synchronisiert man die Geometrie ohne Lag?

Indem man denselben Integer-Seed an Client und Server übergibt, generieren beide exakt dieselbe Karte ohne Netzwerk-Overhead.

Explore More Interactive Tests & Guides

Discover personalized cognitive assessments, stress evaluations, and game psychology tools on DopaBrain.

Go to Portal Hub