Perlin-Rauschen, prozedurale Inhaltsgenerierung und interessanter Raum

Das wahrscheinlich Schlimmste, was auf dem Gebiet der Erzeugung von prozeduralen Inhalten passiert ist (vorausgesetzt, dies ist tatsächlich der Bereich der Erzeugung von prozeduralen Inhalten, dessen ich mir nicht ganz sicher bin), ist Perlins Lärm. Perlins Lärm ist unglaublich gut geeignet (zumindest wenn man nicht zu genau hinschaut), um interessante Landschaften zu erzeugen. In der Subreddit / r / prozeduralen Generierung vergeht keine Woche, ohne dass jemand ein "prozedurales Generierungssystem" veröffentlicht, das sich als Perlins Rauschen herausstellt, das in verschiedenen Farben visualisiert wird. (Während des Schreibens dieses Artikels erschienen zwei solcher Beiträge!)


Ich möchte Perlins Lärm nicht demütigen. Dies ist ein unglaublich nützliches Werkzeug für die prozedurale Generierung, das für viele Menschen, einschließlich mir, zu einem Einstiegspunkt in diesem Bereich geworden ist. Gleichzeitig ist es jedoch sehr verwirrend, da dies impliziert, dass die prozedurale Generierung viel einfacher ist als sie wirklich ist. Die meisten wöchentlichen Beiträge zu „prozeduralen Generierungssystemen“ in / r / prozedurale Generierung verschwinden spurlos, wenn ihre Autoren feststellen, dass der nächste Schritt in der prozeduralen Generierung viel komplizierter ist. Die Wahrheit ist, Perlins Lärm war eine Art glücklicher Zufall. Es ist großartig, um interessante Landschaften zu erzeugen, aber es gibt keine systematischen oder wiederholbaren Gründe.

Mike Cook hat kürzlich ein Tutorial veröffentlicht , das den Raum der Möglichkeiten mit dem Raum der Generation kontrastiert. Wenn Sie ein Generierungssystem erstellen, um X zu erstellen, ist der Raum der Möglichkeiten gleich allen möglichen X, und der Generierungsraum ist alles X, das Ihr System tatsächlich generieren kann. Mike illustriert diese Idee mit Minecraft:


Im Fall meines Spiels Dragons Abound umfasst der Raum der Möglichkeiten jede mögliche Karte, einschließlich vieler entarteter Fälle, zum Beispiel eine Karte, die vollständig aus dem Ozean mit einer kleinen Insel besteht. Der Generierungsraum ist der kleinere Raum aller Karten, die Dragons Abound tatsächlich erzeugen kann. Dank der verschiedenen Regeln kann Dragons Abound keine Karte aus dem Ozean mit einer kleinen Insel erstellen , sodass sich diese Karte nicht im Bereich der Spielgenerierung befindet. Der Vergleich des Raums der Möglichkeiten mit dem Raum der Generierung ist ein interessanter und nützlicher Blick auf die prozedurale Generierung. Ich empfehle daher, Mikes Beitrag zu lesen, in dem diese Idee ausführlicher erläutert wird, und es gibt mehrere interaktive Beispiele.

Neben dem Raum der Möglichkeiten und dem Raum der Erzeugung ist es auch nützlich, sich einen „interessanten Raum“ vorzustellen. Wenn wir X erstellen, ist dies der Raum aller interessanten X. Das heißt, im Fall meines Spiels ist dies der Raum aller interessanten Fantasy-Karten. Ein interessanter Raum ist eine Teilmenge des Raums der Möglichkeiten und überschneidet sich hoffentlich mit dem Generationsraum. Ich hoffe beispielsweise, dass sich zumindest einige der von meinem Spiel generierten Karten als interessant herausstellen.

Bevor ich fortfahre, gebe ich ohne weiteres zu, dass „Interesse“ ein vages und subjektives Konzept ist. Meine und Ihre Vorstellungen über interessante Dinge stimmen höchstwahrscheinlich nicht überein. Ich weiß nicht einmal immer, was mir interessant erscheint - oft sehe ich etwas Neues und finde es interessant, obwohl ich nicht dachte, dass es mir gefallen würde, bis ich es gesehen habe. Schlimmer noch, je interessanter wir sehen, desto weniger interessant wird es. Wenn Sie auf zwanzig Karten hintereinander ein interessantes Feature sehen, scheint es nicht mehr interessant zu sein. Daher ist "Interesse" nicht so leicht zu erfassen. In Zukunft werde ich mehr darüber sprechen, was die Dinge interessant macht (und in der Vergangenheit hatte ich etwas über die enge Idee eines Raums der Kreativität zu sagen), aber bisher ist dies nicht sehr wichtig. Es genügt uns zuzustimmen, dass einige Dinge interessanter sind als andere, und dass sich interessantere Dinge in einem „interessanten Raum“ befinden, während weniger interessante Dinge nicht sind.

Ist es möglich, einen interessanten Raum so zu veranschaulichen, wie Mike den Raum der Möglichkeiten und den Raum der Generation gezeigt hat? Wie oben vorgeschlagen, ist ein interessanter Raum eine Teilmenge des Raums der Möglichkeiten, der sich (wenn Sie Glück haben) mit dem Generationsraum überschneidet:


Ein guter Generator schneidet sich stark mit einem interessanten Raum; Ein schlechter Generator ist schwach.

Diese Muster sind nur eine Metapher, aber im Rahmen dieser Metapher möchte ich die folgende Frage stellen: Habe ich die Formen verschiedener Räume richtig angegeben? Die Form des Raums der Möglichkeiten ist nicht wirklich wichtig, er muss nur zwei andere Räume enthalten. Aber die Formen des Generationsraums und des interessanten Raums sind interessantere (sic) Fragen. Ich habe beide als einzelne kompakte Formen im Raum der Möglichkeiten gemalt. Ist das vernünftig?

Ich glaube, dass die Bezeichnung des Generationsraums als kompakte Ellipse eine gute Wahl für viele prozedurale Generatoren ist, insbesondere für etwas wie Perlin-Rauschen. Das Formular impliziert, dass der Generator alle Lösungen in einem einzigen klar definierten und kompakten Raum erstellt. Wenn der Generator X erstellen kann, kann er normalerweise alle Nachbarn von X erstellen. Normalerweise gibt es keine großen „Löcher“ oder merkwürdigen Verzerrungen im Generierungsraum.

Generationsräume sehen normalerweise aus zwei Gründen so aus. Erstens ist ein Generator auf der Ebene der praktischen Anwendung eine kleine Menge an Code, die mit einem Raum von Möglichkeiten verbunden ist. Derzeit enthält Dragons Abound etwa 28.000 Zeilen Quellcode. Im Vergleich zu vielen anderen prozeduralen Kartengeneratoren ist dies eine Menge (vielleicht sogar ein Rekord), aber es ist immer noch extrem klein im Vergleich zu den Möglichkeiten aller Fantasy-Karten. Unabhängig davon, wie intelligent der Spielcode ist, wird sein Generierungsraum nur einen kleinen Teil des Raums der Möglichkeiten einnehmen, und da Computercode per Definition algorithmisch und deterministisch ist, wird dieser Raum relativ kompakt sein. Das heißt, wenn das Spiel einen Kartentyp erstellen kann, werden mit ziemlicher Sicherheit viele andere ähnliche Karten erstellt.

Der zweite Grund, warum Erzeugungsräume kompakt sind, ist strategisch. Für mich ist das Ziel von Dragons Abound , interessante Karten zu generieren, damit sie sich so weit wie möglich mit dem interessanten Raum überschneiden. Und es ist schwer, in einen interessanten Raum zu gelangen, er ist im Vergleich zum Raum der Möglichkeiten sehr klein. In der Tat ist es sehr, sehr klein. Alle diese Räume haben eine große Anzahl von Dimensionen, und die Größe des Raums wächst im Wesentlichen als Potenz der Anzahl von Dimensionen. Die reale Beziehung zwischen dem interessanten Raum und dem Raum der Möglichkeiten sieht ungefähr so ​​aus:


Nur ein interessanter Raum ist viel, viel kleiner. Dies zwingt die prozedurale Generierung dazu, bestimmte Strategien einzuhalten. Warum erstellt das Spiel beispielsweise keine völlig zufälligen Karten? Dann würde der Generationsraum folgendermaßen aussehen:


Nur grüne Punkte sind viel kleiner. Die Chancen, von einer der zufälligen Karten in ein winziges interessantes Feld zu gelangen, sind im Wesentlichen Null. Um die Chancen zu erhöhen, in einen interessanten Raum zu gelangen, nutzt der Schöpfer der prozeduralen Erzeugung das Wissen über den Raum der Möglichkeiten und den interessanten Raum, um die Erzeugung zu steuern. Der Schöpfer verschiebt den Erzeugungsraum so, dass er sich hauptsächlich in der Nachbarschaft des interessanten Raums befindet und nicht nur zufällig verteilt ist.

Aus all diesen Gründen ist es logisch, den Erzeugungsraum als verbundenen, kompakten Bereich wahrzunehmen.

Aber ich glaube, dass das Zeichnen eines so interessanten Raums wahrscheinlich völlig falsch wäre. Es sollte als verstreuter, geteilter Satz von seltsam geformten Bereichen beschrieben werden. Warum? Weil (1) Dinge aus verschiedenen orthogonalen Gründen interessant sein können und (2) Interesse eine diskontinuierliche Funktion ist.

Betrachten Sie zum Beispiel diese beiden Kartenfragmente:



Das erste Fragment ist insofern interessant, als die Küste sehr detailliert ist und viele kleine Inseln enthält. Das zweite Fragment hat eine langweilige, glatte Küste, aber die Küste hat interessante Merkmale - sie ist unbewohnt und trägt den ominösen Namen „Bleak Shore“. In gewisser Weise sind diese beiden Fragmente interessant, aber aus völlig unterschiedlichen Gründen. Daher werden wir nicht erwarten, dass diese beiden Teile des interessanten Raums Nachbarn sein werden.

Darüber hinaus sind diese beiden Teile des interessanten Raums höchstwahrscheinlich nicht einmal miteinander verbunden. In keiner Weise wird es möglich sein, die erste interessante Karte schrittweise in eine zweite interessante Karte umzuwandeln, ohne dabei mehrere uninteressante Karten zu erstellen. Daher sind diese beiden Teile des interessanten Raums getrennt.

Ein interessanter Raum ist also kein einzelner Bereich, sondern eine Reihe von unterteilten Bereichen. Hat jeder dieser interessanten Räume glatte, kompakte Formen?

Ich wiederhole, ich erkläre nicht, dass ich eine vollständige Definition von "Interesse" geben kann. In einigen Aspekten können wir uns jedoch auf mehrere Punkte einigen. Erstens, wenn X interessant ist, bedeutet dies nicht, dass 2X doppelt so interessant ist. Nehmen Sie das Beispiel der traurigen Küste - ein Bereich der mysteriösen Küste auf der Karte ist interessant, aber ein Dutzend davon wird sehr uninteressant sein. Sie können wahrscheinlich andere Beispiele dafür finden, wie sich „Interesse“ auf seltsame und kontraintuitive Weise verhält. Das Interesse hat also einige Elemente der Diskontinuität - es ist keine reibungslose Funktion, die sich rational und vorhersehbar ändert, wenn man sich durch den Raum der Möglichkeiten bewegt.

All dies macht uns verständlich, dass wir einen interessanten Raum als eine Reihe von unterteilten Bereichen mit einer seltsamen Form bezeichnen sollten.


Sie beginnen bereits zu verstehen, warum das Erstellen eines guten Verfahrensgenerators eine schwierige Aufgabe ist. Aufgrund der Funktionsweise der Algorithmen und der Einschränkungen unserer Funktionen wird der Generierungsraum klein und kompakt sein. Gleichzeitig wollen wir in so viele seltsame und verstreute Bereiche von interessantem Raum wie möglich gelangen. Es ist erstaunlich, dass wir es sogar schaffen, in sie hineinzukommen!

Lassen Sie mich nun zum Thema Perlin-Lärm zurückkehren. Wie wird dieses Schema für den Raum zur Erzeugung von Perlin-Lärm im Landschaftsraum aussehen? Ich denke so etwas:


Perlins Geräuschgenerator hat mehr Schnittpunkte mit einem besonders interessanten Raum innerhalb des Universums aller möglichen Landschaften. Und das ist exzellent - fast alles, was mit Perlin-Rauschen erzeugt werden kann, fällt in diesen Bereich und sieht ziemlich interessant aus.

Dieser schnelle Erfolg ist jedoch irreführend. Wenn Sie mit der prozeduralen Generierung noch nicht vertraut sind, werden Sie sehen, wie Perlin-Rauschen gut funktioniert, und höchstwahrscheinlich entscheiden, dass Perlin-Rauschen ein Zauberstab für die Erzeugung aller Arten interessanter Landschaften ist, ganz zu schweigen von allen Arten der prozeduralen Generierung. Aber wie das Diagramm zeigt, ist Perlins Raum zur Geräuschentwicklung tatsächlich weit entfernt von vielen anderen Teilen des interessanten Landschaftsraums. Der zweite Standardschritt bei der Erzeugung prozeduraler Landschaften ist das Hinzufügen von Flüssen. Aber wenn Sie versuchen, die Flüsse mit Hilfe von Perlin-Lärm zu realisieren, werden Sie feststellen, dass dies unmöglich ist! In keiner Weise kann man die Grenzen von Perlins Raum zur Geräuschentwicklung erweitern, um entfernte interessante Räume mit realistischen Flüssen zu erreichen.

Perlins Lärm ist in einem anderen Sinne irreführend. Ich habe bereits darüber gesprochen, dass der interessante Raum so klein ist, dass Sie, wenn Sie sich darauf einlassen möchten, bestimmte Kenntnisse über den Raum der Möglichkeiten und den interessanten Raum benötigen, um die prozedurale Generierung zu steuern. Aber Perlins Rauschalgorithmus weiß nichts über Landschaften, geologische Prozesse, was die Leute interessant finden, und doch funktioniert es irgendwie gut ohne dieses Wissen! Das Geräusch von Perlin stellte sich als Ausnahme heraus und bestätigte die Regel (*). Wenn Sie mit der Prozedurgenerierung noch nicht vertraut sind, kennen Sie diese Regel höchstwahrscheinlich nicht. Tatsächlich leiten Sie eine fehlerhafte Regel ab - die gesamte Prozedurgenerierung als Ganzes sollte wie Perlin-Rauschen funktionieren.

(* Es war kein Zufall, dass er sich als Ausnahme herausstellte. Perlin-Lärm wurde zu einem beliebten Ausgangspunkt, gerade weil er eine Ausnahme darstellt. Es ist sehr einfach, mit Perlin-Lärm zu beginnen, ohne eine große Menge an Informationen über Landschaften studieren zu müssen.)

Betrachten Sie einen weiteren beliebten Ausgangspunkt für die Erstellung von prozeduralen Inhalten: Dungeon-Schemata. Im Gegensatz zur Landschaftsgenerierung verfügen Dungeon-Schemata nicht über einen Algorithmus, der dem Perlin-Rauschen ähnelt und auf magische Weise Lösungen in einem interessanten Raum schafft. Basierend auf dem, was wir über den Generationsraum und den interessanten Raum wissen, können wir davon ausgehen, dass die Dungeongeneratoren entweder (1) spezifisches Wissen über die späteren Tage und die Interessantheit enthalten sollten oder (2) meist uninteressante Dungeons erstellen sollten. Wenn Sie sich die Dungeon-Generatoren ansehen, die im letzten Jahr in / r / procedureuralgeneration veröffentlicht wurden, werden Sie feststellen, dass die meisten von ihnen kein Wissen über Dungeons enthalten, außer die Verbindung aller Räume zu überprüfen, und daher sind die von diesen Projekten angezeigten Daten eher zufällig als interessant .


Wenn Sie also der Meinung sind, dass Sie mehr oder weniger mit dem übereinstimmen, was ich geschrieben habe, welche Lehren können Sie dann aus diesem Konzept eines interessanten Raums ziehen?

  • Die prozedurale Generierung ist grundsätzlich komplex, da der interessante Raum ein sehr kleines und schwer zu erreichendes Ziel ist.
  • Trotz gelegentlicher Ausnahmen wie Perlin-Rauschen sollte man nicht erwarten, dass einfache, naive Algorithmen erfolgreich interessante Inhalte generieren. Eine gute Verfahrensgenerierung sollte ein umfassendes, gründliches Wissen über den Themenbereich und ein Verständnis dessen, was den Inhalt interessant macht, beinhalten und nutzen.
  • Aber selbst bei den besten Generierungsalgorithmen ist der Generierungsraum kompakt, aber der interessante Raum ist nicht. Daher wird nicht erwartet, dass die prozedurale Generierung häufig fehlt, und daher müssen die Systeme entsprechend aufgebaut werden.
  • In komplexen Themenbereichen ist der interessante Raum geteilt und hat eine seltsame Form. Sie sollten nicht erwarten, dass ein Algorithmus oder Ansatz, der in einem Teil eines interessanten Raums gut funktioniert, in einem anderen Teil notwendigerweise genauso gut funktioniert. Daher sollten wir erwarten, dass die prozedurale Generierung viele verschiedene Algorithmen umfasst, die verschiedene Teile des interessanten Raums verwenden.

Wenn Sie gerade erst anfangen, mit der prozeduralen Generierung zu arbeiten, empfehle ich Ihnen, über Spaß nachzudenken. Was macht die Ausgabe interessant? Was muss der Algorithmus verstehen, um häufig interessante Daten zu erstellen? Welche andere Möglichkeit zur Datenausgabe könnte interessant sein? Welchen neuen Algorithmus brauche ich, um diese Art von Interesse zu erzeugen? Wie kann man es mit dem ersten Algorithmus kombinieren / ausgleichen?

Wenn ich zum Beispiel einen Dungeongenerator erstellen wollte, dachte ich eine Weile über die Dungeons nach und entschied, dass die Dungeons meiner Meinung nach interessant sind, wenn:

  1. Sie sehen aus, als wären sie geschaffen worden, um Lagerhäuser, Gefängniszellen zu werden
    und andere unterirdische Infrastruktur des großen Schlosses
  2. Später wurden sie mit Monstern gefüllt und von ihnen wieder aufgebaut, um ihre Bedürfnisse nach Schutz, Nahrung, Wasser, Schutz vor Angriffen usw. zu befriedigen.

Jetzt können Sie darüber nachdenken, wie die Ebene der unterirdischen Lager aussehen sollte, wie der Algorithmus für die prozedurale Generierung von Variationen dieses Themas aussehen könnte und wie Monster dieses Schema ändern können. Ich glaube, dass Sie durch das Nachdenken über solche Probleme mehr über die prozedurale Generierung erfahren können als über die Implementierung eines anderen Landschaftsgenerators für Perlin-Lärm oder eines Dungeongenerators aus zufälligen Räumen und Korridoren.

Source: https://habr.com/ru/post/de440286/


All Articles