Przez ostatnie dwa i pół roku…

Categories Programowanie

Przez ostatnie dwa i pół roku tworzyłem silnik gier w swojej domowej jaskini. Jako, że koronawirus kompletnie zatrzmał nas wszystkich w domach, to silnik rozrósł się dość mocno i jest w nim już zaimplementowane sporo rzeczy, takich jak:
* W pełni otwarty kod źródłowy;
* Renderer oparty o DirectX 11;
* Silnik fizyczny oparty o PhysX 4.1;
* Architektura ECS;
* Skalowalność na wielowątkowe procesory oraz super-szybkie dystki SSD;
* Zaawansowana symulacja pojazdów (od symulowania stabilizatora poprzecznego po symulację uślizgu sprzęgła);
* Terenem z teselacją;
* Zaawansowany algorytmam odpowiedzialny za renderowanie gęstej trawy;
* Wsparcie materiałów PBR;
* Realistyczny model oświetlenia;
* Drogi (od najnowszej wersji!!!);
* I wiele innych…

Także ma on kilka ciekawych elementów. Przez ostatnie dwa miesiące siedziałem nad dodaniem dróg do silnika. Udało się to zaimplementować w większości, ale nie w pełni, bo zmieniałem komputer na nowy i dostałem uszkodzony zasilacz. Zabawie oczywiście nie było końca, ale przez to nie miałem komputera przez dwa tygodnie i dewelopment został trochę zatrzymany i nie udało mi się wykonać tego co sobie założyłem. Nie mniej i tak to co jest, jest całkiem fajne, ponieważ można z poziomu edytora modyfikować drogi i ich model jest automatycznie modyfikowany oraz cała siatka kolizjii jest natychmiast przebudowywana, a inne obiekty przemieszczane, aby to odzwierciedlić. Gdyby kogoś interesowało jak dokładnie zostały zaimplementowane drogi to zapraszam do mojego artykułu na Linkedin (link na końcu) oraz po prostu do pytań do tego wpisu na mirkoblogu ( ͡° ͜ʖ ͡°).

Przy okazji zmiany komputer o której pisałem wyżej, udało mi się tez przetesować jak silnik działa na nowym komputerze i muszę przyznać, że sam zostałem zaskoczony jak dobrze się skaluje. Otóż na dysku MP600 od Corsair oraz na procesorze AMD 5950x udało mi się załadować cały silnik z 1687 encjami w średnio 1339 ms. Jest to bardzo krótki czas na władowanie wszystkiego, a jest to możliwe dzięki wykorzystaniu wszystkich wątków procesora oraz prawie całej przepustowości jaką ofertuje dysk na PCIe NVMe 4.0 x4. Oczywiście nadal silnik nie wykorzystuje pełnej możliwości dysku i pewnie wymagało by to dalszych zmian, aby osiągnąć czas ładowania poniżej jednej sekundy na takich danych wejściowych. Nie mniej mam to zaplanowane, żeby zerknąć na ten element w przyszłości.

Także to tyle z ważnych informacji. Pełna lista zmian prezentuje się następująco:
* Dodano zaawansowany system dróg;
* Dodano teksutry oraz materiały dla dróg;
* Dodano model kolizji dla dróg;
* Dodano okno z możliwością blokowania zaznaczania myszką obiektów na scenie;
* Podzielono mapę na podpliki;
* Dodano kompilacje na wielu rdzeniach;
* Zmieniono wartość domyślną dla DefaultMetalicSmoothness;
* Dodano pełnoekranowe renderowanie GUI;
* Dodano narzędzie do transformacji GUI;
* Dodano narzędzie do krzywych;
* Dodano narzędzie z funkcjami matematycznymi;
* Dodano zapisywanie konfiguracji ImGui;
* Delikatnie zmodyfikowano domyślne parametry pojazdu;

W razie pytań zaprszam do komentowania, a ja postaram się odpowiedzieć najlepiej jak potrafię. Poniżej zamieszczam linki do artykułu, kodu źródłowego silnika oraz wersji wykonywalnej. Osobiście polecam pobranie wersji wykonywalnej, bo jest ona gotowa do działa od razu bez potrzeby pobierania kodu przez GIT LFS, co potrafi być czasochłonne.

Link do artykułu
Link do kodu źródłowego
Link do wersji wykonywalnej

#programowanie #gamedev #gry #directx #grafikakomputerowa #physx #clusek