Ich denke, ich verstehe besser, was Sie jetzt fragen.
Rauschen ist nicht zufällig - es sieht zufällig aus, basiert jedoch vollständig auf einer mathematischen Formel und ist wiederholbar. Alle Informationen sind in der Formel verschlüsselt. Dies bedeutet, dass Sie eine Formel haben können, die möglicherweise einen unendlichen Bereich abdeckt, und die Formel einfach für die Koordinaten des gewünschten Bereichs verwenden können. Wenn Sie einen angrenzenden Bereich benötigen, verwenden Sie die Formel einfach für die neuen Koordinaten erneut. Da die Formel kontinuierliche Werte liefert, werden die Bereiche nahtlos miteinander verbunden.
Hier ist ein vereinfachtes Beispiel, in dem Sinus anstelle von Perlin-Rauschen für die Höhenerzeugung verwendet wird und die Vorstellung, die Welt sei auf der X-Achse unendlich, auf der Y- und der Z-Achse jedoch nur 1 Einheit hoch.
Die Formel lautet: height(x,y) = sin(x/20)
Das Spiel beginnt und wir generieren Höhen für die nähere Umgebung, dh. (0,0) bis (9,0):
[0.0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.34, 0.39, 0.43]
Wir haben einen Hügel, der sich nach rechts erhebt. Nehmen wir an, wir gehen bis zum Ende und müssen jetzt die Werte von (10,0 bis 19,0) generieren:
[0.48, 0.52, 0.56, 0.61, 0.64, 0.68, 0.72, 0.75, 0.78, 0.81]
Beachten Sie, wie der Hügel stetig ansteigt und dass der Wert bei (10,0) dem bei (9,0) folgt. Dies liegt daran, dass die Sinusfunktion stetig ist. Wenn Sie also zwei benachbarte Zahlen eingeben, erhalten Sie zwei benachbarte Ergebnisse - für eine bestimmte Definition von benachbart. Wenn Sie also Ihre Weltkoordinaten als Parameter für die Funktion verwenden, die Ihre Welt definiert, erhalten Sie eine kontinuierliche Landschaft, die unabhängig davon, wie viel oder wenig Sie gleichzeitig generieren, zusammenpasst. Wenn Sie neue Teile erstellen, werden diese automatisch aus den vorhandenen Teilen übernommen, da die Höhen bereits festgelegt sind.
Wenn sich die Welt nicht ändern wird, müssen Sie nicht einmal etwas speichern, da Sie anhand der Formel genau berechnen können, wie hoch die Höhe an einem bestimmten Punkt ist. Offensichtlich ist die Welt mit so etwas wie Minecraft total verformbar, so dass Sie einfach jeden Teil speichern, während Sie ihn erstellen. Angesichts der Tatsache, dass zwischen benachbarten Blöcken ein hohes Maß an Kohärenz besteht (dh, wenn ein Block Gras ist, ist es wahrscheinlich, dass auch der Block daneben Gras ist), können Sie die Daten sehr effizient komprimieren - die Lauflängencodierung würde funktionieren Na ja, aber dann wäre es fast jeder Standard-Kompressionsalgorithmus.
Während ich von der Höhe als dem offensichtlichsten Wert gesprochen habe, können Sie mit demselben System jedes gewünschte Merkmal generieren. Verwenden Sie eine mathematische Funktion mit stetigen Eigenschaften, bei der die Eingaben Ihre Weltkoordinaten sind und die über das Vorhandensein von Orientierungspunkten, Mineralvorkommen und Laichpunkten entscheiden kann. (Offensichtlich können sich die Werte in einer Formel auf eine andere Formel auswirken. Es macht keinen Sinn, ein Kohlevorkommen in der Luft zu platzieren. Daher generieren Sie die Welthöhenkarte und berechnen dann nur die Kohlemöglichkeiten für die Blöcke, die weit genug unter der Erde liegen.)