2017-12-15 5 views
2

Stellen Sie sich ein Höhlensystem vor, das als Diagramm von Scheitelpunkten und Kanten dargestellt wird, wobei jeder Scheitelpunkt eine Position im 3D-Raum hat und jede Kante einen Tunnel darstellt. Oder die Kanten stellen Straßen dar und die Eckpunkte repräsentieren Ecken und Kreuzungen. Der Punkt ist, dass wir eine Grafik von geometrischen Daten haben und wir in der Lage sein wollen, beliebige Strukturen um diese Daten zu extrapolieren. Welcher Algorithmus könnte ein Mesh erzeugen, um diese Dinge in 3D zu rendern?Generieren eines prozeduralen Netzes aus einem 3D-Diagramm

Hier ist ein ausgezeichnetes Youtube Video zu einem ähnlichen Thema: Unite 2015 - A coder's guide to spline-based procedural geometry. Es geht um einen einfacheren Fall, in dem wir nur ohne Verzweigung von einem Punkt zum anderen gehen müssen, aber sicherlich würden ähnliche Konzepte beim Rendern von graphenbasierten 3D-Strukturen nützlich sein.

+0

nicht sicher, dies qualifiziert sich als '[graph-algorithm]]. Sowieso interessantes Problem (so +1) Ich habe eine Antwort mit Annäherung hinzugefügt, wie ich das angreifen würde. – Spektre

Antwort

2
  1. beginnen mit kreisförmigen Höhlen zu schaffen

    können Sie Smoothly connecting circle centers als Startpunkt verwenden. Dann fügen Sie etwas Zufälligkeit und mehr höhlenartiges Profil hinzu, indem Sie den Kreis in verschiedene Formen ändern. Sie können den Radius (oder die Breite) auch basierend auf der Entfernung zum Diagrammschnittpunkt modulieren. Vergessen Sie nicht, auch das UV Mapping für die richtige Texturierung zu speichern. Das sollte einfach sein. Sie können die Zylinderachse als U und den Winkelparameter des "Kreises" als V verwenden. Dies kann auch als TBN Matrix für bump/normal mapping verwendet werden.

    Das Hauptproblem dabei sind die Schnittpunkte des Diagramms. Sie müssen ein Gitter erstellen, das die sich kreuzenden Röhren zum Beispiel durch einen Höhlenraum "glatt" verbindet. Es sollte machbar sein, da die Scheitelpunkte nach dem Parameterwinkel des Kreises geordnet sein sollten, damit Sie wissen, welche Scheitelpunkte sich auf welcher Seite jeder Röhre befinden und sie ohne schreckliche Anstrengung (selbst mit richtiger Polygonwicklung) programmatisch verbinden können.

    Auf diese Weise sollten Sie in der Lage sein, die Geometrie zu generieren.

  2. Objekte hinzufügen und verfügt über

    für, dass Sie entweder vollständig zufällig sein können oder einigen körperlichen Ansatz verwenden, wie ich hier tat Random Island generator für Biome zu schaffen. Sie können also einige Regeln hinzufügen/auswerten, wie weit Sie von der Eingabe oder dem Wasser entfernt sind oder wie tief Sie Vegetation und andere Dinge erzeugen können.

  3. verallgemeinern

    Wenn 1 # setzen, # 2 zusammen versuchen, es zu codieren, um Eingangs einige spezifische Samen pro Höhle Bereich und Ihr Diagramm ist. Auf diese Weise können Sie jeden Teil der Höhle separat und wiederholend erzeugen. Füge diesen Samen einfach zu deinem Graph hinzu.

    Um weiche Übergänge zu erzeugen, sollten Sie auch die benachbarten Höhlenbereiche erzeugen und die Verbindung zwischen ihnen interpolieren. Eine andere Möglichkeit ist es, eine gleichmäßige Höhlenumgebung ohne Biome zu haben und das Höhleninnere viel mehr zu den Randbereichen hinzuzufügen, so dass sich an den Gelenkpunkten nicht zu viel auf einmal ändern wird.

[Notizen]

Jetzt haben Sie offensichtlich die Grafik als eine Eingabe aber nur für den Fall, dass Sie Sie nicht, dass generieren zufällig zu sehen:

Um die Höhlenwände realistischer zu gestalten, können Sie DiamondverwendenPlatz (von der Island-Generator-Link), um die Radien zu modulieren, stellen Sie einfach sicher, dass die Mittelung zirkulär in Winkelparameterrichtung erfolgt, so dass die resultierende Karte nahtlos ist, wenn sie der Zylinderoberfläche hinzugefügt wird.

Verwandte Themen