Wie fängt man mit der prozeduralen Generierung an?


147

Die Prozedurgenerierung wurde kürzlich ins Rampenlicht gerückt (von Spore, MMOs usw.) und scheint eine interessante / leistungsstarke Programmiertechnik zu sein.

Meine Fragen sind folgende:

  • Kennen Sie mittelgroße Projekte, die prozedurale Generierungstechniken verwenden?
  • Welche Sprache / Sprachklasse eignet sich am besten für die prozedurale Generierung?
  • Können Sie die prozedurale Generierung für "seriösen" Code verwenden? (dh kein Spiel)

1
Frage mich, ob Sie diesen Artikel von X-Team hilfreich finden würden? x-team.com/blog/…
Adam Gerard

Antworten:


117

Sie sollten wahrscheinlich mit einer kleinen Theorie und einfachen Beispielen wie dem Mittelpunktverschiebungsalgorithmus beginnen . Sie sollten auch ein wenig über Perlin Noise lernen, wenn Sie Grafiken generieren möchten. Ich nutzte dies, um mit meinem letzten Projekt zur prozeduralen Generierung zu beginnen.

Fraktale sind eng mit der prozeduralen Generierung verbunden.

Terragen und SpeedTree zeigen Ihnen einige erstaunliche Möglichkeiten der prozeduralen Generierung.

Die prozedurale Generierung ist eine Technik, die in jeder Sprache verwendet werden kann (sie ist definitiv nicht auf prozedurale Sprachen wie C beschränkt, da sie in OO-Sprachen wie Java und Logiksprachen wie Prolog verwendet werden kann). Ein gutes Verständnis der Rekursion in jeder Sprache stärkt Ihr Verständnis der prozeduralen Generierung.

In Bezug auf "ernsthaften" oder Nicht-Spiel-Code wurden prozedurale Generierungstechniken verwendet, um:

  • simulieren Sie das Wachstum von Städten, um das Verkehrsmanagement zu planen
  • das Wachstum von Blutgefäßen zu simulieren
  • SpeedTree wird in Filmen und Architekturpräsentationen verwendet

Dieses Perlin-Rauschen ähnelt stark dem "Wolken" -Filter von Photoshop.
DoubleOrt

Erster Link ist unterbrochen
Jean Carlo Machado

Einige Electro-Musik verwendet die Erstellung von Prozeduren
Poyda

50

Wiki zur Erstellung prozeduraler Inhalte:

http://pcg.wikidot.com/

wenn das, was du willst, nicht da ist, dann füge es hinzu;)


11
Ich kann hier nicht das gesamte Wiki kopieren! Es gibt keinen "wesentlichen Teil".
Martin

12

Die Generierung von prozeduralen Inhalten ist jetzt vollständig für die GPU geschrieben, sodass Sie eine Shader-Sprache kennen müssen. Das bedeutet GLSL oder HLSL. Dies sind Sprachen, die an OpenGL bzw. DirectX gebunden sind.

Während ich aufgrund der Geschwindigkeit, einer einfacheren Lernkurve und Frank D Luna meine persönliche Vorliebe für Dx11 / HLSL habe , wird OpenGL auf mehr Plattformen unterstützt.

Sie sollten auch WebGL ausprobieren, wenn Sie direkt mit dem Schreiben von Shadern beginnen möchten, ohne die (beträchtliche) Zeit aufwenden zu müssen, die zum Einrichten einer OpenGL / DirectX-Spiel-Engine erforderlich ist.

Der prozedurale Inhalt beginnt mit Rauschen.

Sie müssen sich also mit Perlin-Rauschen (und seinem Nachfolger) vertraut machen Simplex-Rauschen ) vertraut machen .

Shadertoy ist eine hervorragende Referenz zum Erlernen der Shader-Programmierung. Ich würde empfehlen, dass Sie dazu kommen, wenn Sie die Shader-Codierung selbst ausprobiert haben, da der Code dort nicht für mathematisch zimperlich ist, aber so wird prozeduraler Inhalt erstellt.

Shadertoy wurde von einem prozeduralen Genie, Inigo Quilez , einem Produkt der Demoszene , die bei Pixar arbeitet , kreiert . Er hat einige Youtube-Videos ( tolles Beispiel ) von Live-Codierungssitzungen und ich kann diese auch empfehlen.


17
Was meinst du mit "Prozedurale Inhaltsgenerierung ist jetzt alles für die GPU geschrieben"? Sie sprechen nur über Dinge wie Grashalme? Sie meinen zum Beispiel nicht die Erstellung von Karten oder Städten für Spiele, oder?
Dronz

2
Ja, ich denke, der "Alles" -Kommentar hier ist eine Übergeneralisierung, aber im Bereich der Landschaftsgenerierung (was meiner Meinung nach die häufigste Art ist) ist dies eine hilfreiche Antwort. Obwohl ich mir nicht vorstellen kann, wer jemanden sehen möchte, der Code in ein Video eingibt.
Nate CK

1
Jemand, der lernen möchte, wie man komplizierten Code schreibt, z. B. Shader, oder wie man komplexe Muster in seinem Design verwendet. Und das kratzt nur an der Oberfläche.
Ultroman der Tacoman

"Die Erstellung von prozeduralen Inhalten ist jetzt vollständig für die GPU geschrieben. Sie müssen also eine Shader-Sprache kennen." ist einfach falsch und 100% irreführend. (Ich mache ein einfaches prozedurales Generierungsprojekt, ich habe 0 Zeilen Shader-Code in meinem Leben geschrieben)
Reduzierung der Aktivität


8

Ich bin kein Experte in diesem Bereich, aber ich kann versuchen, ein paar Antworten beizutragen:

  1. NetHack und seine Brüder sind Open Source und stützen sich stark auf die prozedurale Generierung von Ebenen (Maps). Link zu den Downloads davon. Wenn Sie sich mehr für die Erzeugung von Landschaft, Textur und Wolken interessieren, empfehle ich Ihnen, nach Gamasutra und GameDev zu suchen, die einige Artikel zu diesen Themen enthalten.

  2. AFAIK Ich glaube nicht, dass es einen großen Unterschied zwischen den Sprachen gibt. Der größte Teil des Codes, den Sie sehen, wird in C / CPP sein, da es immer noch die offizielle Sprache der Spieleentwickler ist, aber Sie können alles verwenden, was Sie wollen ...

  3. Nun, es hängt davon ab, ob Sie ein Projekt haben, das von einer solchen Technologie profitieren kann. Ich habe gesehen, wie prozedurale Generierungen in Simulatoren für die Armee verwendet wurden (was als Spiel angesehen werden kann, obwohl sie nicht sehr spielbar sind :)).

Und eine kleine Anmerkung - meine Definition, wenn die prozedurale Generierung etwas ist, das viele Daten aus einer kleinen Menge von Regeln oder Mustern und viel Zufälligkeit generiert, können Ihre Ergebnisse variieren :)


8

Es gibt ein ausgezeichnetes Buch zum Thema:

http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486

Es ist auf visuelle Effekte und die Erzeugung von Animationen in Echtzeit ausgerichtet, aber die Theorie und die Ideen können vermutlich auch außerhalb dieser Bereiche verwendet werden.

Es kann auch erwähnenswert sein, dass es ein professionelles Softwarepaket gibt, das einen vollständigen prozeduralen Workflow namens Houdini von SideFX implementiert. Sie können damit prozedurale Lösungen für Probleme erfinden und prototypisieren, die Sie später in Code übersetzen können.

Obwohl es sich um ein ziemlich teures Paket handelt, verfügt es über eine kostenlose Evaluierungslizenz, die als sehr nützliches Lehr- und / oder Engineering-Tool verwendet werden kann.


7

Die prozedurale Generierung wird in der Demoszene häufig verwendet, um komplexe Grafiken in einer kleinen ausführbaren Datei zu erstellen. Will Wright sagte sogar, dass er sich bei der Herstellung von Spore von der Demoszene inspirieren ließ. Das könnte Ihr bester Anfang sein.

http://en.wikipedia.org/wiki/Demoscene


3

Das Wichtigste ist, zu analysieren, wie Straßen, Städte, Blöcke und Gebäude strukturiert sind. Finden Sie heraus, was alle zB Gebäude gemeinsam haben. Schauen Sie sich Fotos, Karten, Pläne und die Realität an. Wenn Sie dies tun, sind Sie den Menschen einen Schritt voraus, die das Bauen von Städten als rein computertechnologische Angelegenheit betrachten.

Als nächstes sollten Sie Lösungen entwickeln, wie Sie diese Geometrie in winzigen, unterschiedlichen Schritten erstellen können. Sie müssen Regeln definieren, die eine glaubwürdige Stadt ausmachen. Wenn Sie sich für 3D-Modellierung interessieren, müssen Sie viel überdenken, damit der Computer in jeder Situation Ihren Anweisungen folgen kann.

Um nicht den Überblick zu verlieren, sollten Sie viele Bediener einrichten, die nur für kleine Teile des gesamten Prozesses verantwortlich sind. Das erleichtert das Debuggen, Erweitern und Verbessern Ihres Systems erheblich. Im nächsten Schritt sollten Sie diese Operatoren verknüpfen und die Ergebnisse durch Ändern der Parameter überprüfen.

Ich habe zu viele "Stadtgeneratoren" gesehen, die hauptsächlich aus zufällig geformten Kisten mit einigen Fenstertexturen bestehen:


3

(Mehr als 10 Jahre später ...)

Prozedurale Generierung bedeutet nur, dass Code zum Generieren der Daten verwendet wird, anstatt von Hand erstellt zu werden. Wenn Sie beispielsweise einen Wald mit verschiedenen Bäumen generieren möchten, werden Sie nicht jeden Baum von Hand entwerfen. Daher ist die Codierung effizienter, um die Variationen zu generieren. Es könnte die Erzeugung der Baumgrafiken, Größe, Struktur, Platzierung ...

Im Allgemeinen gibt es eine Art Interaktion mit ein paar Regeln . Außerdem können Sie eine eigene Zufälligkeit und Logik hinzufügen und all diese Techniken kombinieren. Alles, was etwas chaotisch, aber nicht zu chaotisch ist, kann zu interessanten Ergebnissen führen.

Hier sind einige bemerkenswerte Techniken:

Einige Spiele, die für ihre prozedurale Generierung bekannt sind:

Video-Tutorial zur prozeduralen Landmassenerzeugung .

Die Konferenz zur Erstellung von prozeduralen Inhalten für Spiele enthält viele Videos zum Thema: alles prozedurale

Habe Spaß.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.