Projekt WorldGen

Opis gotowego projektu generatora światów wokselowych.

09.01.2019 21:30 WorldGen

WorldGen to, opisywany już przeze mnie w trakcie tworzenia, projekt wokselowego generatora światów. Umożliwia on generowanie wokselowych światów (ograniczając się tylko do terenu, bez dodatkowych obiektów), poruszanie się po nich oraz ich modyfikacje poprzez niszczenie bądź wstawianie nowych wokseli. Świat generowany jest w czasie rzeczywistym w miarę poruszania się po nim. Niestety zmiany wprowadzone przez użytkownika są zapominane w momencie kiedy zostaną usunięte z pamięci podręcznej (tzn. jeśli wyłączymy program lub oddalimy się za daleko od miejsca, w którym zmiany zostały wprowadzone).

Aby uruchomić program wystarczy wcisnąć dwukrotnie ikonkę aplikacji WorldGen.exe znajdująca się w archiwum dostępnym do pobrania. Przy założeniu, że archiwum zostało prawidłowo rozpakowane (struktura plików/folderów wewnątrz została zachowana) program powinien od razu się uruchomić oraz wyświetlić menu główne.

Istnieje możliwość, że program nie uruchomi się. W takim wypadku możliwe jest, że nie jest obsługiwana wymagana wersja biblioteki OpenGL lub wystąpił inny błąd. Jeśli chcesz sprawdzić co dokładnie się stało możesz zajrzeć do pliku log.txt, który powinien zostać utworzony w folderze ,w którym znajduje się aplikacja WorldGen.exe w momencie uruchomienia aplikacji. Jeśli nie rozumiesz co oznacza błąd możesz przesłać go do mnie za pomocą formularza kontaktowego (w treści wklej log z pliku), a ja postaram się sprawdzić w miarę możliwości co poszło nie tak.

Po uruchomieniu aplikacji za pomocą kursora można wybrać jedną z trzech opcji w menu głównym. Opcja "Exit" zakończy działanie programu. Wybór przycisku "Options" przeniesie nas do ekranu konfiguracji niektórych parametrów działania programu. Przycisk "Run" uruchomi natomiast generowanie wokselowego świata.

Po uruchomieniu generowania przy pomocy przycisku "Run" powinien pojawić się pasek postępu mówiący o tym w jakiej części jest już wygenerowany świat. Po zakończeniu wstępnego wczytywania możliwe będzie już poruszanie się i eksploracja świata. Poruszanie jest możliwe za pomocą klawiszy "W", "S", "A", oraz "D". Można się także unosić używając klawisza spacji oraz opadać za pomocą prawego klawisza "shift". Niszczenie wokseli jest możliwe po wciśnięciu lewego klawisza myszy (jeśli jesteśmy dostatecznie blisko woksela, w który celujemy), a wstawianie nowych wokseli jest możliwe po wciśnięciu lewego klawisza myszy. Typ woksela do wstawienia można kontrolować za pomocą rolki myszy.

Opcje dostępne z poziomu menu są to jedynie podstawowe opcje dostępne w aplikacji. Więcej opcji można znaleźć w pliku konfiguracyjnym config.ini. W pliku tym są też mniejsze ograniczenia dotyczące wartości poszczególnych opcji (można nadać im wartości niemożliwe do nadania z poziomu menu). Poniżej przedstawione są podstawowe opcje wraz z opisem:

  • Resolution - Rozdzielczość ekranu
  • Multisampling - Ilość próbek dla antyaliasingu (wygładzania krawędzi)
  • View distance - Zasięg widzenia (ile kawałków świata będzie wczytane do pamięci)
  • Chunk size - Rozmiar pojedynczego kawałka świata (podana w wokselach)
  • Chunk height - Wysokość pojedynczego kawałka świata (podana w wokselach)
  • Fullscreen - Pełny ekran
  • VSync - Synchronizacja pionowa
  • Allow flying voxels - Czy zezwolić na latające woksele?

Dodatkowe opcje dostępne z poziomu pliku konfiguracyjnego wraz z krótkim opisem każdej możesz znaleźć poniżej:

  • Sun_light_color - kolor światła słonecznego (w formacie RGB z zakresem 0.0-1.0)
  • Sun_light_direction - kierunek światła słonecznego (wektor w formacie XYZ)
  • Fog_color - kolor mgły (w formacie RGB z zakresem 0.0-1.0)
  • Fog_density - gęstość mgły (liczba z zakresu 0.0-1.0)
  • Ambient_light - moc światła otoczenia (liczba z zakresu 0.0-1.0)
  • Smoothness - bazowa "łagodność" terenu (liczba z zakresu 0.0-1.0)
  • Base_min - minimalna wysokość bazowa terenu
  • Base_max - maksymalna wysokość bazowa terenu
  • Rough_smoothness - "łagodność krzywizny" (czym mniejsza tym bardziej strome góry, liczba z zakresu 0.0-1.0)
  • Details_min - minimalna detali terenu
  • Details_max - maksymalna wartość detali terenu
  • Rock_sharpness - ostrość kamienia (określa rozrzut materiału pomiędzy warstwami np. kamień-ziemia, albo ziemia-śnieg itp.)
  • Rock_offset - przesunięcie warstwy kamienia pod ziemię (powinno być większe niż 0)
  • Snow_level - wysokoś od której będzie generowany śnieg
  • Rock_hills_level - wysokość od której będzie generowany kamień na górach
  • Sand_level - wysokość poniżej której będzie generowany piasek

Dla wyjaśnienia warto byłoby jeszcze napisać nieco czym są "detale" terenu. Jest to o tyle istotne, że z błędnymi ustawieniami w pliku konfiguracyjnym program także może się nie uruchomić lub działać nieprawidłowo. Wartość minimalna i maksymalna detali terenu jest dodawana do bazowej wysokości, aby zapewnić większą różnorodność. Warto zatem pamiętać, że prawdziwa maksymalna wysokość terenu to bazowa maksymalna wysokość + maksymalne "detale", a minimalna wartość terenu to minimalna bazowa wysokość + minimalne detale. Aby program się uruchomił muszą być spełnione następujące warunki: minimalna bazowa wysokość + minimalne detale > 0 oraz maksymalna bazowa wysokość + maksymalne detale < wysokość jednego kawałka świata.

Program przewidziany jest jedynie na system operacyjny Windows. Teoretycznie po niewielkich zmianach powinien działać także na systemie Linux, ale nie próbowałem tego, a załączone pliki są przygotowane dla systemu Windows. Dodatkowo, aby program działał poprawnie, wymagana jest karta graficzna obsługująca bibliotekę OpenGL w wersji co najmniej 4. Ponadto wymagane może być także zainstalowanie Microsoft Visual C++ Redistributable for Visual Studio 2018, albo starsza wersja Visual C++ Redistributable.