Cześć miki i…

Categories Programowanie

Cześć miki i mirabelki!
Wracam do was z aktualizacją silnika do gier CLUSEK, który publikuje tutaj regularnie od dłuższego czasu. Jest to dość ważna aktualizacja, ponieważ ostatnia w tym roku. Po nowym roku mam zamiar wrócić do was z jeszcze większymi zmianami, które wprowadzą wiele udoskonaleń. Jak wiadomo, silnik CLUSEK potrzebuje wielu zmian w różnych obszarach. Jako, że pracuję sam nad tym projektem to niestety nie jestem tak szybki i wielozadaniowy jako nowe procesory Zen 3 od AMD.

Co jednak się zmieniło? Szczerze mówiąc całkiem sporo. Najważniejsze zmiany zaprezentowałem na filmie, który jest dołączony do tego wpisu, nie mniej pełna lista już dużo większa. Z góry przepraszam za jakość dźwięku, ale mój mikrofon o wartości 5 zł nie daje niestety rady i chyba będę musiał zainwestować w coś lepszego, bo bez tego jakość nagrania jest taka, jak bym mówił z głową pod wodą. Skończmy jednak o moim mikrofonie i przejdźmy do pełnej listy zmian i prezentuje się ona następująco:
– Dodano ponad tysiąc drzew na mapie!;
– Dodano realistyczny materiał wody, wraz z teksturami;
– Dodano model wody;
– Dodano jezioro na mapie;
– Pozycja nowych obiektów może być zmodyfikowana po kliknięciu na mapie w Entity Creatorze;
– Dodano możliwość kopiowania JSONa z Entity Creatora do systemowego schowka;
– Entity Creator akceptuje od teraz również tablice encji poza pojedynczymi encjami;
– Dodano wsparcie dla Convex Meshy jako geometrię kolizji;
– Dodano możliwość transformacji geometrii kolizji względem transformacji początkowej;
– Zmieniono pliki map terenu;
– Poprawiono geometrię kolizji dla terenu (niepoprawna konwersja danych);
– Dodano Convex Mesh dla pojazdu;
– Zmieniono geometrię kolizji dla drzew;
– Częściowo rozwiązano problem migającej trawy;
– Zmieniono nazwę filtra/folderu z „Append” na „AppendBufferTypes”;
– Naprawiono początkową rotację kamery;
– Entity Creator może nie usuwać danych po dodaniu encji na scenę.

Dużo tego jest, ale często jedna zmiana wynikała z drugiej i dlatego, aż tyle ich powstało. Nie mniej jestem nadal dumny z tempa rozwoju silnika. Jest ono dość szybkie i non-stop powstają dość znaczące zmiany. Można by się jednak zastanawiać jednak z jakiego powodu akurat takie rzeczy zostały wprowadzone? Otóż starałem się słuchać społeczności gamedev, która jest dość aktywna na FB i wsparła mnie w tym temacie, co powinienem poprawić, żeby uatrakcyjnić mój silnik. Żeby nie było na wykopie też są świetni eksperci domenowi, którzy też nie raz mnie wsparli swoją dobrą radą ( ͡° ͜ʖ ͡°).

Także zacznijmy od pierwszej z dwóch spraw, którą chciałbym wam tutaj przedstawić i jest to przebudowa przykładowej sceny, która jest dołączona do silnika i prezentuje ona możliwości samego silnika. Dzięki uwagom jednej z osób, postanowiłem przebudować tą właśnie scenę.. Także zabrałem się za robotę i dodałem 1658 obiektów. Większość tych obiektów (jakieś 99%) to drzewa, ale poza tym dodałem również jeziorko na mapie, aby podkreślić różnorodność terenu. Po dodaniu takiej ilości obiektów silnik nadal trzyma stałe 60 klatek na sekundę w 1080p i myślę, że jest to najlepsze świadectwo wydajności tego silnika. Oczywiście te 1658 obiektów to tylko początek i mam nadzieję, że kiedyś będę ich miał dziesiątki tysięcy, ale no to przyjdzie czas.

Przy okazji, jeżeli mówimy o drzewach to przebudowałem edytor. Wcześniej stawiałem te drzewa jedno po drugim i w każdym delikatnie modyfikowałem parametry, ale po dodaniu w ten sposób 100 drzew dostałem depresji. Z tego powodu przebudowałem Entity Creator i dodałem w nim sporo opcji w tym możliwość losowej rotacji, czy klikania na mapie, aby dodać nowy obiekt. Tym sposobem dodanie takiej ilości obiektów to była sama przyjemność. Jaki morał z tej historii? Automatyzujcie swoją pracę i twórzcie narzędzia, które ułatwią wam pracę, bo robienie czegoś ręcznie 100x tyle czasu jest bez sensu.

Druga osoba zwróciła uwagę, że samochód blokuje się czasem na terenie i wyglądało to tak, jak bym umieścił niewidzialne ściany. Problem w tym, że na przykładowej mapie dołączonej do silnika, nie stosowałem do tej pory niewidzialnych ścian. Problem leżał w dwóch głównych rzeczach. Po pierwsze reprezentowałem samochód jako prostopadłościan, a to było niezgodne z prawdą, ponieważ pojazd ma zdecydowanie więcej krzywizn i po prostu z tego powodu nie działało to poprawnie. Dodałem do silnika wsparcie dla Convex Meshy i przypisałem taką geometrię do pojazdu, którym na ten moment się jeździ. To rozwiązało problem w znacznej większości. Drugi problem wynikał z mojej nieznajomości PhysX oraz roztargnienia. Otóż konwertowałem typ zmiennoprzecinkowy na typ całkowity. Niby nic trudnego, ale zrobiłem to całkowicie źle. Dlaczego? Aaaaaaaaaa to bardzo dobre pytanie, otóż typy w różnych bibliotekach są często tak szalone, że można się pogubić i zrobić to źle. Oba typy były ukryte za makrami lub za wieloma typedefami i to spowodowało, że nie zajrzałem głęboko w temat i… źle je przekonwertowałem. Dodatkowo PhysX też jest dość trudny i… jeżeli teren był za wysoko to zaczynały dziać się cuda. Dla osób niezaznajomionych z tematem, konwersja między tymi typami jest trudna dlatego, że każdy bit w liczbie całkowitej reprezentuje zmianę samej wartości lub sam znak, jeżeli liczba może być ujemna (ZM, ZU1, ZU2), a w zmiennoprzecinkowych mamy koncept cechy i mantysy, a to pozwala nam reprezentować ogromne lub bardzo małe liczby. Wiem, że napisałem to cholernie chaotycznie, ale jeżeli kogoś interesuje temat to mogę to wytłumaczyć lepiej i w bardziej przejrzysty sposób w komentarzu. Nie mniej może to nikogo nie interesować i dlatego nie chcę się rozpisywać niepotrzebnie.

Mimo, że próbowałem napisać ten post krótki to mi kompletnie nie wyszło i powstała niezła kobyła, ale zaważyłem, że taki dłuższe formy zdobywają czasami więcej plusów. Nie mniej to co tutaj czytać i tak jest krótkie, natomiast na platformie Linkedin zamieściłem cały artykuł na te tematy, której tutaj oraz przy okazji opisałem również inne tematy, które są trochę mniej ciekawe, ale też fajne. Jeżeli kogoś to zainteresuje to na końcu znajduje się link do artykułu. Natomiast zainteresowany zapraszam na platformę GitHub, gdzie można pobrać najnowszą wersję silnika, jak i pobrać wersję wykonywalną (w sumie to bardzo polecam wersję już skompilowaną). To tyle, miejcie się dobrze w tych chorych czasach, gdzie nowy dzień to dziesiątki tysięcy nowych zakażeń. Mam nadzieję, że będzie lepiej i ta epidemia się uspokoi, bo to siedzenie w domu jest okropne i nawet mimo, że uwielbiam programować to mam ostatnio nadmiar czasu i chętnie bym wyszedł i pożył znowu jak normalny człowiek, a nie tylko siedział w swojej piwnicy. W sumie to też z tego powodu ten artykuł pojawił się na wykopie w niedzielę o 10:59.

Artkuł na Linkedin -> Link
Kod źródłowy -> Link
Wersja wykonywalna -> Link

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