Minął rok od kiedy…

Categories Programowanie

Minął rok od kiedy rozpocząłem pracę nad projektem CLUSEK. Rozwój własnego silnika do gier w C++ to nie jest łatwa sprawa. Ojjj nie! Tworzenie gier na UE4/Unity jest na prawdę czymś zupełnie innym od tworzenia własnego silnika. Nie mniej przez ten czas dostałem wiele wsparcia i wytrwałem w tym i po tym roku mam jeszcze więcej siły do tworzenia tego silnika, a co za tym idzie również więcej siły do dziela się tym z wami. Także chwała wam mirki oraz mirabelki za wsparcie!

To tyle tych miłych słów, które mimo swojej prawdziwości pewnie sporą część wykopowych programistów nudzą. Pora na rozwój silnika. Co się zmieniło od mojego ostatniego wpisu? Oto pełna lista:
– Dodano mechanizm LOD z płynnymi przejściami;
– Dodano płynną kamerę, która podąża za celem;
– Dodano mechanizm animacji dla kamery oraz zaimplementowano animację dla kamery pojazdu;
– Przebudowano system obsługi transformacji;
– Zoptymalizowano przechowywanie transformacji;
– Dodano przeliczanie przecięcia promienia z OBB;
– Dodano podział ekranu za pomocą linii trójpodziału;
– Zmieniono sposób przechowywania rotacji w pliku mapy;
– Zoptymalizowano inicjalizację fizyki;
– Dodano nowe ustawienia dla kamery, które można zmienić w pliku konfiguracyjnym;
– Dodano narzędzie do debudowania LOD;
– Usunięto konstruktor kopiujący oraz operator przypisania z systemu fizyki;
– Dodano dokumentację dla klawiszologii.

LOD (Level of Detail) to technika używana w grafice komputerowej czasu rzeczywistko. Technika ta pozwala na renderowanie mniejszej liczby trójkątów dzięki przechowywaniu dwóch (w przypadku mojego silnika) wersji modelu, a następnie na renderowaniu odpowiedniego z nich na podstawie odległości od kamery. Jeden z modeli jest wysokiej jakości (duża liczba trójkątów) i jest renderowany, gdy kamera znajduje się blisko niego, a drugi jest niższej jakości (mniejsza liczba trójkątów) i jest renderowany, gdy kamera znajduje się dalej od dalej od niego.

Sam mechanizm LOD nie jest jednak wystarczający w takiej postaci. Mimo, że modele są bardzo do siebie podobne to jednak przejście między tymi dwoma modelami nie może odbywać się w sposób skokowy, ponieważ będzie to bardzo nieprzyjemne wizualnie. W celu rozwiązania tego problemu zaimplementowana została metoda szachownicowego (lub siatkowego) przejścia pomiędzy tymi dwoma poziomami LOD. Przy pewnej odległości renderowane są oba modele, ale w sposób szachownicowy, czyli część pikseli modelu wysokej jakości i część modelu niskiej jakości. Gęstość tej szachownicy zależy od odległości i jest ona płynnie zmieniana, aby zniwelować możliwie mocno efekt przejścia. Na dołączonym to tego wpisu filmie widać działnie mechanizmu LOD. Polecam obejrzeć go sobie i sprawdzić jak zachowuje się on na piramidzie z cylindrów.

Mimo tego, że system ten jest fajny to nie ułatwia on pracy artystom. W celu ułatwienia im pracy zaprojektowano jednak narzędzie w silniku CLUSEK, która pozwala w sposób manualny ręcznie testować przejścia pomiędzy LOD. Dzięki temu można stworzyć modele w taki sposób, aby przejścia na silniku gry były jak najmniej widoczne.

Ostnią rzeczą, którą bym chciał przedyskutować jest trójpodział. Jest to prosty efekt, który jest nakładany na ekran jako post-processing i pozwala stworzyć lepsze ujęcia. Efekt ten jest bardzo często wykorzystywany przez fotografów oraz kamerzystów. Także efekt ten nie będzie wykorzystwany przez każdego, ale na pewno ułatwi niektórym pracę z silnikiem.

Także mirki i mirabelki to tyle w tym wpisie. Trzymajcie się ciepło i mam nadzieję, że jeżeli was to zainteresowało to dostanę od was plusa. Jeżeli ktoś ma jakieś pytania lub opinię na temat postępu to chętnie odpowiem. Super usłyszeć każdą opinię, bo dzięki temu nie stoję w miejscu, nawet jeżeli jest to opinia negatywna, ale poparta argumentami. Kod jest dostępny na Github, także każdego zainteresowanego zapraszam do kodu. Jeżeli ktoś chciałby przeczytać o rozwoju silnika po angielsku to zapraszam do mojego artykułu na Linkedin, który wrzuciłem kilka minut temu. Linki do tych wszystkich rzeczy na dole.

Kod źródłowy
Wersja wykonywalna
Artykuł po angielsku

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