Wygenerowane siatki drzew 3d

16

Nie znalazłem jeszcze pytania w tych liniach, popraw mnie, jeśli się mylę.

Drzewa (i ogólnie fauna) są powszechne w grach. Ze względu na swój charakter są dobrym kandydatem do pokolenia proceduralnego.

Jest oczywiście SpeedTree , jeśli możesz sobie na to pozwolić; o ile wiem, nie zapewnia możliwości generowania siatki drzew w czasie wykonywania. Jest też SnappyTree , internetowy generator drzew oparty na proctree.js, który zawiera około 500 linii javascript.

Można użyć dowolnego z powyższych (lub innego generatora drzew, na które nie natknąłem się), aby wcześniej stworzyć kilkadziesiąt siatek drzew - lub wymodelować je od zera w modelu 3D - a następnie losowo wykonać kopię lustrzaną / przeskalować dla kilku innych wariantów ..

Ale wolałbym mieć darmowy generator sieci drzewiastych.

Możliwe rozwiązania:

  • Przenieś proctree.js do c ++ i poradzić sobie z licencją typu open source (nie wydaje się być gpl, więc może być wykonalna; autor może również chcieć współpracować, aby uczynić licencję jeszcze bardziej darmową).
  • Rzuć własną w oparciu o systemy L.
  • Nie przejmuj się, po prostu używaj drzew generowanych offline.
  • Użyj innej metody, której jeszcze nie znalazłem.

Aktualizacja 2015 : zakończyłem przenoszenie proctree.js do c ++ https://github.com/jarikomppa/proctree

Jari Komppa
źródło
5
Do skręcania własnych polecam książkę „algorytmiczne piękno roślin” Prusinkiewicza i Lindenmeyera, dostępną na stronie algorytmicbotany.org/papers/#abop . Książka i strona zawierają również wiele artykułów naukowych na temat generowania wirtualnej botaniki.
Exilyth,
Stworzyłem internetowe narzędzie o nazwie 3DFlora z WebGL. Ma ponad 80 parametrów i pozwala pobrać wyniki jako plik obj. Za jego pomocą możesz stworzyć prawie każdy rodzaj roślin. Sprawdź to tutaj: 3dflora.sina-s.com
user2002741

Odpowiedzi:

12

Wykonałem sporo pracy w tym obszarze, chociaż większość moich demonstracji jest starszych:

(flash 2010)
http://genesisbbs.com/appstem.html (kliknij i przeciągnij myszą)
http://genesisbbs.com/appstem2.html
(directX 2006)
http://vimeo.com/5206795

Gorąco zachęcam do rzucenia własnym, jeśli robisz to dla zabawy. Prawie na pewno będziesz musiał współpracować z Quaternions . Zrozumienie ich jest bardzo trudne, ale nie musisz zejść zbyt głęboko, aby z nich skorzystać. Pomyśl o czwartorzędu jako wektorze z dodatkowym składnikiem: rotacją. Jeśli chcesz, aby twoje rośliny skręcały się i obracały w miarę wzrostu, będą potrzebować czwartorzędów.

Inne rzeczy do nauczenia:
Liczby Lichtenberga Diagramy
wzrostu Laplaciana
Voronoi
Najbliższe algorytmy sąsiadów (google)

Ja (osobiście) odradzałbym korzystanie z systemów L, poza tym, że może dyktowałbym gramatykę tego, co rośnie gdzie, tj. [Ziarno -> [korzeń] / [pień -> gałąź -> [kwiat / liść]]. Układy L nie są odpowiednie do reagowania na bodźce środowiskowe, takie jak kierunek światła słonecznego, grawitacja, przeszkody itp.

Jeśli chodzi o prędkość, pojedyncze drzewo można wygenerować w czasie rzeczywistym. Jednak dla celów pamięci i wydajności prawdopodobnie będziesz chciał wygenerować tylko niewielki zestaw drzew i wstawić je trochę, jeśli masz do czynienia z lasami.

Większość istniejących generatorów drzew nie jest aż tak świetnych (IMHO), oprócz wysokiej klasy generatorów używanych dla Mayi i tym podobnych.

Gorąco polecam również użycie wokseli do wygenerowania drzewa (w razie potrzeby skórki z siatką). Zaletą wokseli jest to, że można łatwo symulować algorytmy wzrostu, używając rzeczy takich jak wzrost Laplaciana i różne automaty (nie gra w życie Conwaya, ale inne reguły dają interesujące wyniki).

Gavan Woolery
źródło
3

Osobiście prawdopodobnie zacznę od wstępnie wygenerowanych drzew i tylko raz będę miał niesamowity silnik do renderowania lasu - wraz z krzakami, trawą, grzybami i innymi rzeczami - zacznę szukać, czy potrzebuję więcej zmiennych drzew.

Biorąc to pod uwagę, możesz rzucić okiem na ngPlant . Zawiera aplikację GPL do modelowania drzew proceduralnych, ale biblioteki, które wykonują wszystkie zadania, są licencjonowane przez BSD. Jest napisany w C ++.

Do renderowania lasu dostępna jest (licencjonowana MIT) geometria stronicowana dla silnika renderowania Ogre .

Tapio
źródło
3

Głównym problemem w drzewach proceduralnych nie jest ich generowanie, ale renderowanie ich wszystkich klatek w czasie wykonywania. To jest powód, dla którego zobaczysz wiele identycznych drzew w grach AAA, to nie jest tak, że nie mogli oni wdrożyć ani napisać technologii, która stworzyła unikalne drzewa, to znaczy, że musiałbyś wyciąć wiele innych funkcji dla gry biegać.

Jeśli masz wiele identycznych drzew, możesz je obracać i ewentualnie skalować równomiernie, aby wyglądały inaczej pod każdym kątem, a ponieważ są one identyczne, możesz je wstawić, aby zaoszczędzić cenne milisekundy dla każdej klatki.

Wystarczy pomyśleć o tym problemie przez sekundę, może być szczęśliwe medium - a może wygenerujesz kilka różnych części drzewa, pni, gałęzi, liści itp., Ale takie, które wszystkie pasują do siebie modułowo, jak na przykład klocki Lego. Wtedy możesz mieć wiele kombinacji, a więc kilka całkiem unikatowych drzew, ale możesz też instancjonować wszystkie te części w celu szybszej gry.

SirYakalot
źródło
Oprócz drobiazgowego pomysłu ta odpowiedź tak naprawdę nie dodaje niczego nowego.
Jari Komppa,
3
zawsze miło, gdy OP jest tak wdzięczny. W przypadku witryny QandA Twój post ma wyraźny brak pytań. Poza tym odpowiedź bezpośrednio dotyczy twoich punktów.
SirYakalot,
Tak, byłem tam sam, przepraszam.
Jari Komppa,
1

Natknąłem się na drzewo [d] jakiś czas temu ... Użyłem go tylko przez krótki czas, aby przetestować projekt, ale to tylko dlatego, że przestałem programować - narzędzie oferuje szeroki zakres opcji generatora do zabawy i z tego, co pamiętam, jest dość szybki. Link znajduje się poniżej.

Minusem jest to, że nie jest to generator drzew, który można włączyć. Trzeba będzie wstępnie wygenerować kilka drzew, a następnie zmodyfikować dane podczas umieszczania ich w czasie wykonywania, aby poprawić ich wyjątkowość.

Najlepsze ze wszystkich TreeD jest darmowy i możesz uwzględnić drzewa, które tworzysz we własnych projektach, komercyjne lub darmowe, o ile nie są to paczki modeli, paczki tekstur, generatory modeli 3D lub generatory tekstur.

Dalin Seivewright
źródło
Miło widzieć inne bezpłatne generatory, nawet jeśli są w formacie biblioteki.
Jari Komppa,
1

Jest to małe, schludne rozwiązanie, które wykorzystałem w projekcie i mogę powiedzieć, że jest wystarczająco szybki do generowania drzew w locie, dlaczego gra jest uruchomiona. Z pewnością nie jest szczegółowy, ale jeśli pozbyłeś się billboardów, może być całkiem fajnie.

http://ltrees.codeplex.com/

Mikrofon
źródło
Wydaje się być dobrym rozwiązaniem dla użytkowników XNA.
Jari Komppa,