Generierte 3D-Baummaschen

16

Ich habe noch keine Frage in diesen Zeilen gefunden, korrigiere mich, wenn ich falsch liege.

Bäume (und die Fauna im Allgemeinen) sind in Spielen weit verbreitet. Aufgrund ihrer Natur sind sie ein guter Kandidat für die prozedurale Generierung.

Natürlich gibt es SpeedTree , wenn Sie es sich leisten können. Soweit ich das beurteilen kann, bietet es keine Möglichkeit, Ihre Baumgitter zur Laufzeit zu generieren. Dann gibt es noch SnappyTree , einen webgl-basierten Online-Baumgenerator, der auf der proctree.js basiert und ungefähr 500 Zeilen Javascript enthält.

Man könnte einen der oben genannten (oder einen anderen Baumgenerator, auf den ich nicht gestoßen bin) verwenden, um vorher ein paar Dutzend Baummaschen zu erstellen - oder sie in einem 3D-Modellierer von Grund auf neu zu modellieren - und sie dann für ein paar weitere Varianten zufällig spiegeln / skalieren ..

Aber ich hätte lieber einen kostenlosen, verlinkbaren Baumgittergenerator.

Mögliche Lösungen:

  • Portieren Sie proctree.js auf c ++ und kümmern Sie sich um die Open-Source-Lizenz (scheint nicht gpl zu sein, könnte also machbar sein; der Autor ist möglicherweise auch bereit, zusammenzuarbeiten, um die Lizenz noch freier zu machen).
  • Roll mein eigenes basierend auf L-Systemen.
  • Mach dir keine Sorgen, verwende einfach offline generierte Bäume.
  • Verwenden Sie eine andere Methode, die ich noch nicht gefunden habe.

Update 2015 : Portierung von proctree.js auf c ++ https://github.com/jarikomppa/proctree beendet

Jari Komppa
quelle
5
Ich empfehle das Buch 'the algorithmic beauty of plants' von Prusinkiewicz und Lindenmeyer, das unter algorithmicbotany.org/papers/#abop erhältlich ist . Das Buch und die Site enthalten auch zahlreiche Forschungsarbeiten zur Erzeugung virtueller Botanik.
Exilyth
Ich habe ein Online-Tool namens 3DFlora mit WebGL erstellt. Es hat mehr als 80 Parameter und lässt Sie die Ergebnisse als obj-Datei herunterladen. Sie können damit nahezu jede Art von Pflanzen erzeugen. Sieh es dir hier an: 3dflora.sina-s.com
user2002741

Antworten:

12

Ich habe in diesem Bereich einiges an Arbeit geleistet, obwohl die meisten meiner Demos älter sind:

(Flash 2010)
http://genesisbbs.com/appstem.html (Klicken und Ziehen der Maus)
http://genesisbbs.com/appstem2.html
(DirectX 2006)
http://vimeo.com/5206795

Ich ermutige Sie sehr, Ihre eigenen zu würfeln, wenn Sie dies zum Spaß tun. Sie werden mit ziemlicher Sicherheit mit Quaternions arbeiten müssen . Es ist sehr schwer, sie zu verstehen, aber Sie müssen nicht zu tief gehen, um sie zu verwenden. Stellen Sie sich eine Quaternion als einen Vektor mit einer zusätzlichen Komponente vor: Rotation. Wenn Sie möchten, dass sich Ihre Pflanzen während des Wachstums drehen und wenden, benötigen sie Quaternionen.

Andere Dinge zu lernen:
Lichtenberg-Figuren
Laplace-Wachstum
Voronoi-Diagramme
Algorithmen für die nächsten Nachbarn (google sie)

Ich (persönlich) würde von der Verwendung von L-Systemen abraten, außer vielleicht eine Grammatik für das zu diktieren, was wo wächst, dh [Samen -> [Wurzel] / [Stamm-> Zweig -> [Blume / Blatt]. L-Systeme sind nicht geeignet, um auf Umwelteinflüsse wie Sonnenlichtrichtung, Schwerkraft, Hindernisse usw. zu reagieren.

Aus Gründen der Geschwindigkeit kann ein einzelner Baum in Echtzeit generiert werden. Aus Speicher- und Leistungsgründen möchten Sie wahrscheinlich nur eine kleine Gruppe von Bäumen generieren und diese ein wenig instanziieren, wenn Sie sich mit Wäldern befassen.

Die meisten existierenden Baumgeneratoren sind nicht so toll (IMHO), abgesehen von den High-End-Generatoren, die für Maya und andere verwendet werden.

Ich empfehle auch sehr, Voxel zu verwenden, um den Baum zu erzeugen (dann Haut mit einem Netz, wenn nötig). Der Vorteil von Voxeln besteht darin, dass Sie Wachstumsalgorithmen mithilfe von Laplace-Wachstum und verschiedenen Automaten leicht simulieren können (nicht Conways Lebensspiel, aber andere Regeln führen zu interessanten Ergebnissen).

Gavan Woolery
quelle
3

Persönlich würde ich wahrscheinlich mit vorgenerierten Bäumen anfangen und nur wenn ich eine umwerfende Forest-Rendering-Engine hätte - komplett mit Büschen, Gras, Pilzen und so weiter - würde ich anfangen zu suchen, ob ich mehr variable Baummaschen benötige.

Davon abgesehen können Sie sich ngPlant ansehen . Es enthält eine GPL-App für den prozeduralen Baummodellierer, aber die Bibliotheken, die all das schwere Heben ausführen, sind BSD-lizenziert. Es ist in C ++ geschrieben.

Für das Forest-Rendering gibt es eine (MIT-lizenzierte) Paged Geometry for Ogre- Rendering-Engine.

Tapio
quelle
3

Das Hauptproblem bei prozeduralen Bäumen besteht darin, sie nicht zu generieren, sondern zur Laufzeit alle Frames zu rendern. Dies ist der Grund, warum Sie in AAA-Spielen viele identische Bäume sehen werden. Es ist nicht so, dass sie keine Technologie implementieren oder schreiben könnten, die einzigartige Bäume erzeugt laufen.

Wenn Sie viele identische Bäume haben, können Sie sie drehen und möglicherweise gleichmäßig skalieren, damit sie aus jedem Winkel anders aussehen. Da sie identisch sind, können Sie sie instanziieren, um kostbare Millisekunden pro Frame zu sparen.

Wenn Sie nur eine Sekunde über dieses Problem nachdenken, könnte es ein fröhliches Medium geben - wie wäre es, wenn Sie ein paar verschiedene Baumteile, Stämme, Zweige, Blätter usw. erzeugen, die aber alle modular zusammenpassen, wie zum Beispiel Tree Lego. Dann könnten Sie viele Kombinationen und damit einige ziemlich einzigartige Bäume haben, aber Sie könnten auch alle Teile für ein schnelleres Laufspiel einsetzen.

SirYakalot
quelle
Abgesehen von der stückweisen Idee fügt diese Antwort nichts wirklich Neues hinzu.
Jari Komppa
3
Immer schön, wenn der OP so dankbar ist. Für eine QandA-Site fehlen in Ihrem Post eindeutig Fragen. Außerdem spricht diese Antwort direkt Ihre Stichpunkte an.
SirYakalot
Ja, ich war selbst dort, entschuldige mich.
Jari Komppa
1

Ich bin vor einiger Zeit über tree [d] gestolpert ... Ich habe es nur eine kleine Zeit lang verwendet, um ein Projekt zu testen, aber das lag nur daran, dass ich die Entwicklung gestoppt habe - das Tool bietet Ihnen eine große Auswahl an Generatoroptionen zum Spielen mit und Soweit ich mich erinnere, ist es ziemlich schnell. Ein Link ist unten.

Der Nachteil ist, dass es sich nicht um einen Baumgenerator handelt, den Sie einbinden können. Sie müssten einige Bäume vorab generieren und dann die Daten ändern, wenn Sie sie zur Laufzeit platzieren, um ihre Eindeutigkeit zu optimieren.

Das Beste ist, dass TreeD kostenlos verwendet werden kann. Sie können die von Ihnen erstellten Bäume in Ihre eigenen kommerziellen oder kostenlosen Projekte einbinden , sofern es sich nicht um Modellpakete, Texturpakete, 3D-Modellgeneratoren oder Texturgeneratoren handelt.

Dalin Seivewright
quelle
Schön, andere kostenlose Generatoren zu sehen, auch wenn es sich um ein Bibliotheksformat handelt.
Jari Komppa
1

Dies ist eine nette kleine Lösung, und ich habe sie in einem Projekt verwendet und kann Ihnen sagen, dass sie schnell genug ist, um Bäume im laufenden Betrieb zu erzeugen, warum das Spiel läuft. Es ist sicherlich nicht detailliert, aber wenn Sie die Werbetafeln loswerden, könnte es ziemlich ordentlich sein.

http://ltrees.codeplex.com/

Mike
quelle
Scheint eine gute Lösung für XNA-Benutzer zu sein.
Jari Komppa