Wo soll ich anfangen, wenn ich einen 3D-Terrain-Editor baue? [geschlossen]

22

Ich möchte (zu Beginn) ein einfaches Werkzeug bauen, das das Gelände heben, senken, glätten und texturieren kann.

Also, was sind die Dinge, die ich durchmachen muss, um einen solchen Terrain-Editor zu erstellen?

Und vielleicht gibt es wertvolle Ressourcen zu diesem Thema?

Ja, ich habe vergessen zu erwähnen, dass ich an einem 3D-Terrain-Editor interessiert bin.

Ruckmodus
quelle

Antworten:

24

Für einen "klassischen" 3D-Terrain-Editor können die folgenden Schritte ausgeführt werden:

Erzeugen Sie ein Netz (z. B. ein Quadratgitter, jedes Quadrat besteht aus zwei Dreiecken). Alle Eckpunkte werden zwischen den Dreiecken geteilt (so dass es nur eine Normale pro Schnittpunkt gibt). Bildbeschreibung hier eingeben

Dies sollte ein 3DMesh gemacht und in Ihrem Programm gerendert werden.

Erstellen Sie ein Werkzeug, um Teile des Gitters zu heben und zu senken (kleinere und größere) (Sie müssen berechnen, wo sich der Mauszeiger auf dem Gitter befindet, und die Scheitelpunkte des Gitters ändern, jedoch nur nach oben und unten).

Erstelle eine große Textur (wie 1024x1024x4 oder besser) und texturiere sie mit einer sogenannten Splat-Map: Bildbeschreibung hier eingeben

Machen Sie es möglich, es zu malen (zum Beispiel mit R, G, B ODER Alpha, nicht mit Pink) und Texturen zu wählen, die diese hässlichen Grundfarben ersetzen (Rot, Blau, Grün, Alpha), oder lassen Sie sich darüber hinaus durch diese darstellen:

Der Shader (den Sie erstellen müssen) sollte diese schönen Texturen (z. B. Stein, Gras, ...) mit der Intensität in der Splatmap (der hässlichen) multiplizieren und dann das Ganze so mischen, dass es beispielsweise aussieht (mit) wie nur 2 Farben), wie folgt: Bildbeschreibung hier eingeben

Entschuldigung für die großen Bilder, ich habe das bei der Arbeit zusammengeschlagen ...

Valmond
quelle
Ah, das machte es ein bisschen klarer. Theoretisch ist es nach dem 3D-Netz einfach die Vertice-Neupositionierung (auf / ab) und die Texturierung in diesem Beispiel. Sie haben den "Splatmap" -Weg ausgeführt, nach dem der Shader es in ein "3D" -Gelände umwandelt.
Joltmode
1
Korrigieren Sie für das 3D-Netz. Der Shader macht nichts spezielles mit dem Mesh (dem Vertex-Shader), die große Aufgabe ist der Fragment-Shader (der "Pixel-Shader"), bei dem die Texel-Suche aus der Splatmap angibt, wie viel Gras, Stein usw. das endgültige Pixel ist erhalten soll (Sie können natürlich auch eine "Basis" -Textur haben, wie z. B. Stein, die immer zu 100% ist und andere Texturen darauf aufspritzen).
Valmond
6

Als Erstes müssen Sie die Datenstruktur Ihres Geländes und die Anforderungen eines Editors klar definieren. Ist es ein Netz? Eine Reihe von Höhen? Eine Art Minecraft-artiges Voxelsystem? Müssen Sie in der Lage sein, Geländemesh-Features wie Bäume und Gebäude hinzuzufügen? Manuell, automatisch oder beides? Ich könnte weitermachen, aber du kommst auf die Idee.

Ein einfacher Terrain-Editor ist nicht so schwer zu schreiben, aber die Details variieren sehr abhängig von dem Spiel, das Sie machen, und somit der Art des Terrains, das Sie machen möchten.

SimonW
quelle
Nun, ein Netz / Array oder Höhen / Voxel usw. ist nur eine Möglichkeit, die zugeordneten Daten zu speichern. Ich war mehr daran interessiert, wie die Tools zum Auffüllen dieser Daten geschrieben werden. Eigentlich habe ich total keine Ahnung, wie ein Terrain Editor "hinter den Kulissen" aussieht. Ich kann es ehrfürchtig konstruieren, aber nur auf meine eigene Art. Ich wette, es gibt einige Richtlinien, denen ich folgen sollte ...
Joltmode 18.11.11
2
-1. Das scheint mir keine gute Antwort zu sein. Sie stellen einige Fragen, die als Kommentar besser geeignet gewesen wären.
Bummzack
5

Dies ist meistens nur eine Fortsetzung von Valmonds Antwort, aber es scheint nicht kurz genug zu sein, um einen Kommentar hinzuzufügen.

Wenn Sie erst einmal einen einfachen Editor erstellt haben, können Sie experimentieren, indem Sie die Höhenkarte vollständig auf der GPU generieren. Dies ist völlig optional, aber es ist eine gute Möglichkeit, die Arbeit für ein sich ständig änderndes Terrain auf die GPU zu verlagern. Valmond hat bereits erwähnt, dass Textur-Splatting im Pixel-Shader ausgeführt wird, aber der Vertex-Shader kann auch verwendet werden, indem die Vertices im Raster mithilfe einer Textur-Suche angehoben und abgesenkt werden. Hier ist ein Tutorial, wie dies mit dem Vertex-Shader erreicht werden kann. Das Nicht-Shader-Material ist C # - und XNA-spezifisch, aber das wichtigste Material befindet sich im Shader-Code.

In diesem Fall kümmert sich Ihr Code auf der CPU-Seite nur um das Ändern der im Speicher abgelegten Graustufentextur. Ihr Gitter bleibt flach, Scheitelpunkte werden von der CPU nicht aktualisiert. Jedes Mal, wenn die Textur geändert wird, kann die neue Textur an die GPU übergeben werden.

Beachten Sie, dass nicht alle Shader-Modelle die Texturabtastung auf dem Vertex-Shader unterstützen (beispielsweise benötigen Sie in HLSL mindestens das Shader-Modell 3.0).

ChrisC
quelle
0

Sie können einen Blick auf Ogres ETM werfen. Http://www.ogre3d.org/addonforums/viewforum.php?f=16 , sollte Ihnen einige Ideen geben. Artifex Terra basiert darauf, wenn Sie es in Aktion sehen möchten.

Johann
quelle
2
Ich schlage vor, dass Sie Ihre Antworten zusammenführen und nicht verwendete löschen.
Joltmode
Weitere Informationen zu GPU-erstelltem / manipuliertem Terrain finden Sie in den Scape-Artikeln von Gilliam de Carpentier. decarpentier.nl/scape-render
Johann
Wie Tom bereits angedeutet hat, könnten die Scape-Artikel bereits als interessante Referenz für das Generieren und Rendern von Terrain gedient haben. Aber seit diesem Vorschlag habe ich einen weiteren Scape-Artikel veröffentlicht, der für dieses Thema noch relevanter ist und dessen pinselbasierte Bearbeitungspipeline vollständig abdeckt. Also dachte ich, ich würde dich wissen lassen. www.decarpentier.nl/scape-brush-pipeline