Hej,

Zanim przejdę do meritum mojego wpisu, to chciałem bardzo wam bardzo podziękować. Pod moim poprzednim wpisem udało mi się zebrać od was równo 700 plusów oraz ponad 100 komentarzy. Dało mi to ogromną motywację do dalszej pracy. Jeszcze raz wam za to wielkie dzięki mirki oraz mirabelki. Pomyślałem, że skoro jest tak duże zainteresowanie tego typu tematyką to chyba te wpisy powinny trochę zmienić swoją formę. Od teraz regularnie (+/- co miesiąc) będę publikował wpisy na temat rozwoju silnika oraz tego co sprawiło mi problemy w implementacji oraz co nadal nie działa tak jak bym chciał. Dodatkowo w komentarzach, jeżeli ktoś będzie miał pytania odnośnie implementacji, którejś z tych rzeczy, które zrobiłem od ostatniego wpisu to chętnie odpowiem. Na inne pytania z silnika też chętnie odpowiem, bo chciałbym podzielić się tą wiedzą, ale wiadomo jak to jest z pamięcią, po prostu mogę czegoś nie pamiętać. Tak więc, jeżeli kogoś interesuje któraś rzecz jak została zaimplementowana to zapraszam do pytania, bo jestem tutaj, by na nie odpowiedzieć (o ile będę tylko umiał). Poza tym, jeżeli ktoś znajdzie czas to zapraszam do przejrzenia kodu i wyrażenia swojej opinii oraz rad. Chętnie wprowadzę zmiany, żeby kod był jak najlepszy, ale wiadomo jak to jest… nie zawsze mam pomysł, a jak spojrzy ktoś z większym doświadczeniem w pisaniu gier lub C++ (na pewno jest tutaj dużo takich osób) to będę po prostu lepszym programistą, bo nauczę się na swoich błędach. Jestem otwarty na krytykę o ile jest konstruktywna.

Wystarczy jednak tego wstępu (wyszedł strasznie długi), ponieważ dzisiaj mijają dokładnie dwa miesiące od kiedy tworzę mój silnik gier CLUSEK. Od ostatniego wpisu mineło pół miesiąca, ale był to czas bardzo pracowity dla mnie, szczególnie ze względu na długi weekend. Przez ten czas udało mi się zaimplementować poniższe rzeczy w silniku:
– Gruntownie zrefaktoryzowano kod;
– Dodano pełne wsparcie kontrolera Xbox 360/One;
– Dodano obsługę przeźroczystości;
– Usunięto model Nanosuit oraz dodano model samochodu;
– Zmieniono skybox z modelu kuli (wczytywanego z pliku .fbx) na generowany (z poziomu kodu) sześcian;
– Zredagowano plik README.md;
– Dodano poziomy loggera;
– Dodano nowe menu dla stanu myszki, klawiatury oraz gamepada;
– Dodano możliwość konfiguracji prędkości poruszania kamerą z pliku oraz dedykowanego menu;
– Poprawiono obsługę tagów;

Refaktorozycja kodu postępuje. Zastosowałem już część rzeczy o której pisali niektórz po „Code Review”, ale nie wszystko. Niektóre rzeczy zaimplementuje w przyszłości, a niektóre raczej nie ze względu na czas oraz na optymailzację. Wolę kod troszkę mniej czytelny, ale za to dużo szybszy oraz gotowy na zrównoleglenie na wszystkie wątki (taki na razie jeszcze jest). Kolejna sprawa, która była dość czasochłonna to przeźroczystność. Jest to bardzo skomplikowany temat, który już czuję, że będzie mi się odbijał przez długi czas. W skrócie nadal nie jest tak jak powinno być i czasem powoduje to, że przez szybę w samochodzie można zobaczyć na prawdę dziwne rzeczy. Walczę z tym i pewnie przez najbliższy czas będę nad tym długo siedział. Ogólnie nie jestem fanem przeźroczystości w grach, ponieważ tworzy to sporo problemów od deferred renderingu po optymalizację. Przeźroczystość wymaga bardzo skomplikowanego renderera, żeby działała bez żadnych problemów. Nie chcę wchodzić w szczegóły, ale jeżeli kogoś to interesuje to najwyżej mogę poruszyć co jest takie problematyczne w komentarzu. Poza tym, dodałem model samochodu i usunąłem ten z Crysisa. To też jest lekka katastrofa, ponieważ nie mam rozbudowanego shadera i to dopiero uwypukla jak ubogi jest ten silnik. Myślałem nad zaimplementowaniem PBR’a, ale… to zajmie mi pewnie dużo czasu, ponieważ jest tam pod spodem dużo trudnej matematyki i fizyki, jak odpowiednie zachowanie energii, BRDF, czy setki innych rzeczy. Inne rzeczy raczej poszły raczej gładko, a nie chcę na każdą poświęcać w tym wpisie 3-4 zdań, bo ten wpis będzie miał długość pracy magisterskiej, a to nie o to chodzi.

pokaż spoiler Jeszcze raz wielkie dzięki za 700 plusów pod poprzednim wpisem! I proszę bardziej doświadczonych programistów gier/silników/rendererów o analizę implementacji rozwiązań, które zastosowałem w moim silniku oraz o uwagi, co poprawić na lepsze.

KOD ŹRÓDŁOWY

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