Witajcie mirki i…

Witajcie mirki i…

Witajcie mirki i mirabelki!

To był kolejny miesiąc rozwoju mojego silnika do gier opartego na DirectX 11, PhysX oraz architekturze ECS o dumnej nazwie… CLUSEK. Dzisiaj udało mi się wrzucić kolejną jego wersję na GithHub i chciałbym się z wami podzielić zmianami.

Oto pełna lista zmian:
* Dodano Entity Creator;
* Przebudowano architekture działania systemów;
* Dodano dwustronny UberMaterial;
* Dodano odrzucanie pixeli na podstawie alfy w UberMaterial;
* Dodano dwa rodzaje wiatru do UberShader;
* Dodano 9 drzew z modelami, teksturami oraz materiałami;
* Dodano drzewa w wersji low-poly;
* Dodano kolizje do drzew;
* Dodano folder opakowujący do wersji skryptu budującego werję w paczce zip.
* Dodano test alfa do cieni;
* Naprawiono wyciek pamięci przy niepoprawnym zamknięciu silnika;
* Naprawiono crash silnika przy niepoprawnych wartościach z UI;
* Dodano wykrywanie debuggera;
* Zmieniono rozdzielczość cieni z 2048×2048 na 4096×4096;
* Zmieniono początkową pozycję pojazdu;
* Naprawiono niekonsekwencje w komponentach;
* Zaktualizowano dokumentację silnika.

Moim głównym celem od ostatniej wydanej wersji było rozwinięcie renderowania roślinności, ponieważ to ona buduje atmosferę i urealnia scenę. Skupiłem się w głównej mierze na drzewach, ponieważ trawa jest już zaimplementowana i postanowiłem, że będzie to naturalny krok w dobrym kierunku. Jako, że nie jestem grafikiem 3d to doszedłem do wniosku, że należy skorzystać z jakiegoś narzędzia do generowania drzew. Prawie każda duża firma robiąca gry (CDPR, Activision, czy Ubisoft) wykorzystuje do ich generowania SpeedTree. Jest to praktycznie idealne narzędzie, ale z mojej perspektywy ma jedną wadę, która jest nie do przeskoczenia – cena. W momencie pisania tego wpisu SpeedTree na rok kosztował by mnie prawie 1000 dolarów. Jest to cena nie do zaakceptowania, gdyż projekt CLUSEK jest moim hobby, a nie pracą i władowanie w niego prawie 4000 zł byłoby nieporozumieniem. Także szukałem dalej i szukałem… i szukałem… i szukałem. Po pewnym czasie udało mi się znaleźć darmowe narzędzie, który jest wystarczająco dobre, aby je użyć – TreeIt. Korzystając z tego darmowego rozwiązania wygenerowałem 9 drzew. Niestety materiały nie są zgodne z PBR, także musiałem tekstury ręcznie przerabiać w GIMP i nakładać odpowiednie filtry, aby z tekstury kolorów uzyskać coś co przypomina albedo. Po tych wszystkich bojach udało mi się uzyskać piękny model drzewa, a następnie stworzyć jego wersję low-poly, która była po prostu 4 przecinającymi się płaszczyznami. Następnie w silniku musiałem dość mocno zmodyfikować UberShader, aby dostosować go do renderowania drzew dodając między innymi dwustronne renderowanie, odrzucanie pikseli na podstawie alphy, czy wiatr. Ogólnie wiatr to dość rozbudowany temat, bo dodane zostały dwa rodzaje wiatru, które można na siebie nałożyć, aby stworzyć realistyczny efekt. Jeżeli ktoś jest zainteresowany wiatrem to zapraszam do mojego artykułu na Linkedin w którym dokładnie tłumaczę jak zaimplementowałem wiatr i podaję kawałki kodu, które za niego odpowiadają wraz z omówieniem. Link do tego artykułu na końcu wpisu.

Kolejny elemnt, który dodałem to „Entity Creator”. Jest to narzędzie, które pozwala w czasie rzeczywistym dodawać nowe encje razem z komponentami. Dzięki temu od teraz nie trzeba już przeładowywać całego silnika, aby zobaczyć zmiany, które zostały wprowadzone. Ten element będzie jeszcze rozwiajany, ponieważ nie jest jeszcze idealny i ma problemy z wydajnością.

Na koniec opiszę jeszcze ostatni temat, czyli wykrywanie debuggera. Zaimplementowałem dość naiwne rozwiązanie, które wykrywa wpięty debugger i kończy działanie aplikacji. Nie zabezpieczy to przed profesjonalistami, ale jest w stanie uchronić przed domorosłymi „hakierami”, którzy obejrzeli filmik na YT. Oczywiście silnik pozostaje Open Source, ale gdyby ktoś napisał grę i nie byłby chętny dzielić się jej kodem to element ten powinien trochę utrudnić zadanie osobom ze złymi intencjami.

Także mirki i mirabelki to tyle w tym wpisie. Trzymajcie się ciepło, bo idzie coraz większe ochłodzenie. Mam nadzieję, że zaineresował was mój wpis i uda mi się od was dostać kilka +. 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. Wersja wykonywalna znajduje się tutaj. Jeżeli ktoś chciałby przeczytać o rozwoju silnika po angielsku to zapraszam do mojego artykułu na Linkedin.

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


Comments are closed.