Bawiąc się tworzeniem krajobrazów świata Minecraftish / Lego w Unity 3D (generowane proceduralnie krajobrazy wokselowe z kostkami), stwierdzam, że siatki stworzone dla tych krajobrazów zajmują dużo pamięci. Siatka składa się obecnie tylko z wierzchołków widocznych boków sześcianu. Zużycie pamięci w złożonym terenie może zająć 6 lub 7set megapikseli.
Te siatki można zoptymalizować, ale staram się znaleźć porządny algorytm, aby to zrobić.
Algorytm musi wziąć pod uwagę, że nie chcesz „scalać” bloków różnych typów terenu. Wydaje mi się, że naprawdę prostym początkiem może być po prostu przetworzenie wszystkich bloków wzdłuż jednej osi i wykonanie dodatkowych przeciągnięć dla pozostałych dwóch osi.
Muszę zachować kształt siatki, czyli nie scalać wierzchołków do punktu, w którym zmienia się pusta lub pełna przestrzeń. Powodem jest to, że mogą istnieć stworzenia / itp., Które nadal muszą poruszać się po siatce. Nie mogę więc po prostu stworzyć zniekształconej siatki o bardzo niskim poziomie szczegółowości.
Wszelkie przemyślenia / sugestie / wskazówki na ten temat?
źródło
Odpowiedzi:
Moje pytanie brzmi:
Dlaczego potrzebowałbyś samej siatki do poruszania się stworzeń?
Nie możesz wykonać obliczenia ścieżki na macierzy 3D ID?
Myślę, że Minecraft używa matrycy 3D z blokiem 4 bitów na blok. Symuluje także stworzenia o określonym promieniu wokół gracza.
Możesz przechowywać swoje części w strukturze drzewa-oc, gdzie każda część jest kompresowana.
Jeśli przechowujesz skompresowane dane w pamięci RAM, możesz w razie potrzeby dość szybko zdekompresować dane.
źródło
Co powiesz na użycie oktetu do przechowywania terenu?
Np. Powietrze = brak węzła, wszystkie inne typy terenu miałyby węzeł z typem terenu.
Podczas wstawiania / usuwania węzłów można sprawdzić, czy wszystkie osiem potomków każdego węzła na zmodyfikowanej ścieżce drzewa ma ten sam typ terain i scalić je w razie potrzeby. W ten sposób duże bloki tego samego materiału zajęłyby tylko jeden węzeł.
źródło
Czy tworzysz tylko kostki dla części geometrii, które gracz może zobaczyć? To byłby mój pierwszy krok. W zależności od wielkości terenu nie musisz mieć załadowanego / rysowanego / widocznego / całego świata.
źródło