Jak proceduralnie (tworzyć) wyhodować drzewo artystyczne (2D) w czasie rzeczywistym (L-System?)

20

Ostatnio zaprogramowałem moduł L-system , zainteresowało mnie to bardziej. Jestem ćpunem Plants vs. Zombies, bardzo podobała mi się koncepcja Tree of Wisdom. Chciałbym stworzyć podobną sztukę proceduralną dla zabawy i dowiedzieć się więcej.

Pytanie: Jak mam dynamicznie podchodzić do procesu tworzenia drzewa artystycznego (być może 2d ze stałą kamerą / perspektywą)?

Idealnie chciałbym zacząć od rośliny (tylko łodyga z liściem) i rozwijać ją dynamicznie, wykorzystując pewien wpływ (działanie użytkownika / użytkownika) na jej strukturę. Wpływy te mogą powodować różnego rodzaju rozgałęzienia, krzywe w gałęziach, ich rozprzestrzenianie się, położenie owoców, kolor kwiatów itp. Chcesz, aby było naprawdę pełne życia / ducha. :)

Plants vs. Zombies: Drzewo mądrości Byłoby wspaniale dynamicznie wyhodować podobne drzewo, ale przy znacznie większej różnorodności i animacjach.

Moje tło: programista, użyłem kilku silników gier (Ogre3d, cocos2d, jedność). Naprawdę nie programowałem bezpośrednio za pomocą openGL, próbując to naprawić :).

Jestem gotowy spędzić dużo czasu. Daj mi znać o interfejsach API? i w jaki sposób ekspert taki jak ty podjąłby się tego problemu?

Dlaczego 2D? Myślę, że łatwiej jest rozwiązać problem tylko biorąc pod uwagę 2 wymiary.

Inspiracje artystyczne:

Tylko drzewo, z owocami i liśćmi, bez krzewów na dole

Duże drzewo (widoczne gałęzie, zielone liście, kwiaty, owoce, itp) po lewej stronie, za małpa.

PixelJunk's Eden (inspiracja stylem artystycznym).

Jabłoń generowana proceduralnie za pomocą fraktali

Daj mi znać, jeśli zrozumienie pytania było dla ciebie łatwe, mogę rozwinąć sprawę.

Mam nadzieję, że dyskusja na temat różnych podejść byłaby pomocna dla wszystkich. Jesteście niesamowici.

lal
źródło
2
Może nie mam dla ciebie odpowiedzi, ale zdecydowanie chciałbym zobaczyć, dokąd to zmierza. Niesamowita koncepcja!
Bloodyaugust
Świetne pytanie, interesowałem się L-Systems przez jakiś czas, ale nic z tym nie zrobiłem :)
Luther
Jeszcze jedna sztuka referencyjna. jinsonathemes.com/demo3/wp-content/uploads/2011/02/...
lal
1
@ Stephen tylko dlatego, że wiesz, że to pytanie pochodzi z 2011 roku i został nekrologicznie wprowadzony przez użytkownika zadającego edycję pytania Student/zStudent/Programmer
PeterT
@lalan Dokonuj tylko istotnych zmian w pytaniu, fakt, że nie jesteś już studentem, nie jest istotną zmianą ani powodem do edycji.
MichaelHouse

Odpowiedzi:

8

Kilka pomysłów na twoją „grę”:

  • Najpierw przekaż użytkownikowi nazwę swojego drzewa. Użyj tej nazwy, aby wygenerować ziarno dla algorytmu. Więc każde imię będzie miało swoje unikalne drzewo. Nasiona mogą również wpływać na rodzaj liści i owoców drzewa.
  • Możesz zaimplementować coś w rodzaju „drzewa tamagotchi ”, w którym drzewo rośnie i jest ładniejsze, im bardziej dba o to użytkownik (nawożenie, woda itp.)
  • Utwórz listę najlepszych wyników z najwyższych drzew. Innym pomysłem byłoby pokazanie wysokości i nazw innych użytkowników obok twojego drzewa. Możesz więc porównać wysokość swojego drzewa bezpośrednio z innymi użytkownikami. Zobacz ten film jako przykład. Chmury wskazują wysokość osiągniętą przez innych użytkowników.

Istnieje wiele algorytmów i dokumentów do generowania drzew proceduralnych ( ten wątek może być interesujący ). Trudnym zadaniem jest ładne połączenie gałęzi. 2D na pewno będzie pod tym względem łatwiejsze, ponieważ można to rozwiązać za pomocą mieszania alfa.

Ponieważ masz doświadczenie z Ogre3D, Unitiy i cocos2d, możesz iść od razu i wdrożyć to (nie musisz zaczynać nauki OpenGL teraz IMHO). Osobiście wybrałbym cocos2d i wydałem na iPada i / lub iPhone'a, aby każdy mógł nosić swoje drzewo ze swoim urządzeniem mobilnym.

grzmot
źródło
1
W tej grze chciałbym grać z L-Systems w sposób społeczny / konkurencyjny.
deft_code
1
Dzięki za wskazanie mi wątku gamedev .. Ładne pomysły, tamagotchi i goo-tower .. Aplikacja mobilna byłaby naprawdę fajna. znalazł film z wtyczką 3DS Max - który jest całkiem niesamowitym linkiem ..
lal
5

Bezkontekstowy i jego trójwymiarowy odpowiednik StructureSynth może stanowić doskonałą podstawę lub inspirację.

Przykłady:

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj itp...

W dzisiejszych czasach możesz napisać wizualizator online w WebGL!

Wola
źródło