Udało mi się ostatnio wrócić na trochę dłużej do projektu własnego "silnika gier".

Nie poddałem się jeszcze. Trochę różnych zmian wprowadzałem i podokrążyłem kilka rzeczy, żeby były w stanie działać. Na filmiku pokazuję proste animacje tłoku. Na razie na tylko tyle mnie stać, jeśli chodzi o tworzenie w blenderze.
Będzie troszkę technicznego pitolenia.


Najtrudniejsze, nad czym ostatnio główkowałem, to VAT (vertex animation texture). W skrócie, animacje obiektów nie ogarnia jak to zazwyczaj bywa CPU tylko GPU. U mnie animacje zapisuję jako plik png, dzięki czemu bez problemu mogę taką grafikę wykorzystać w shaderze. Pomysł na samo wykorzystanie pliku graficznego do zapisywania tego typu danych jest imo bardzo ciekawy. Każdy piksel, np. w formacie PNG, ma kilka warstw (RGBA) i w każdej z tych warstw można zapisać jakieś dane, np. nową pozycję danego wierzchołka.

Kolejne wyzwanie, które sobie wymyśliłem, to przejście z programowania w samym OpenGL (Silk.Net.OpenGL) na coś bardziej nowszego i uniwersalnego.
Trafiłem na Zenith.NET, bibliotekę-warstwę, gdzie, pisząc jedno, będzie to bez problemów działać na różnych API graficznych (Vulkan 1.4, DX12 oraz Metal) pod spodem. Poziom kontroli nad tym, jak wszystko działa, można porównać do tego, jakby programowało się w samym Vulkan-ie. Dodatkowym plusem jest jeszcze obsługa języka shaderów Slang (HLSL). Miodzio.

W wyrenderowaniu pojedynczego obiektu z teksturami lub kolorami nie mam już najmniejszego problemu.
Pod górkę zaczyna się, gdy chce się więcej obiektów na raz wyrenderować. Wtedy nie ma wyjścia i jedynym wyjściem jest zabawa z optymalizacją. Cach-owanie czego się da, batch rendering i inne pomniejsze.
Batch rendering można porównać do wysyłania wiadomości do wielu ludzi. Zamiast wysyłać do każdego człeka po kolei wiadomość, rozsyłamy na raz grupowo do wszystkich. Także zamiast wysyłać pojedynczą instrukcję dla każdego obiektu, wysyłamy jedną, żeby na raz wygenerowało ich kilka.

Zacząłem dodatkowo implementować pierwszą wersję systemu ECS. Odpowiada za zarządzanie obiektami, ich właściwościami i takie tam.
Co do GUI, to nadal pozostaje Dear ImGui. Aż takim masochistą nie jestem, żeby coś swojego robić.
Obiekty do renderowania wczytuję z plików .obj. Jest jednym z najprostszych formatów plików 3d, w których bez czytania dokumentacji ogarniesz zapisane dane. W parze ładuję też plik .mtl, który zawiera informację o kolorach i teksturach i jest tak samo prosty jak .obj.


Jak będą siły i czas, to będę sobie nadal w tym grzebał. Motywacja nadal jest, zwłaszcza że udało mi się parę blokerów pokonać i coś już faktycznie zaczyna działać, a to mnie jeszcze bardziej motywuje.

Robię to głównie dla siebie. Lubię poznawać, jak coś pod spodem działa. Tym razem padło na grafikę komputerową.

Im dłużej samemu w tym siedzę, tym bardziej podziwiam tych, co spędzają w tym większość swojego czasu.
Web-ówka się do tego nie umywa.

#gamedev #programowanie #csharp #chwalesie #grafikakomputerowa

Komentarze (11)

Bedę jeszcze przez kilka dni zadowolony łaził, że udało mi się ogarnąć, żeby animacja z blendera była odwzorowana 1:1
No, pomijam tępo, ale ono akurat jest najmniej ważne.

https://streamable.com/evaqcl
Załączam przykładowy obrazek-animacje tego, co jest widoczne na filmikach.
Pokazałem tylko 2 z 5 animacji. Zrobię na następny raz ładne przełączanie w gui.

Wysokość zdjęcia w pikselach to liczba klatek wszystkich animacji.
Szerokość odpowiada za liczbę wierzchołków w obiekcie.
Im bardziej skomplikowany obiekt, tym szersze to będzie.
Animacja idzie klatka po klatce (piksel po pikselu) od góry do dołu.

e9ce6945-4ce6-46a1-a56c-c916c72df7f2

Szanuje fes ludzi którzy potrafią takie rzeczy albo chociaż wiedzą jak się za takie coś zabrać.

Web-ówka się do tego nie umywa.

Ta, ogólnie webdev to jest chyba najprostsza gałąź programowania z niemal zerowym progiem wstępu. Już nawet tworzenie aplikacji desktopowych (poza electronem) jest trudniejsze.
Jedynie różnica taka, że pojedyncza osoba jest w stanie napisać jakiś duży projekt webowy w sensownym czasie a tymczasem tego silnika nigdy nie skończysz xd. W sensie fajny projekt aby się pobawić i pouczyć albo żeby wpisać sobie go do portfolio. No ale na dłuższą mete pisanie czegoś takiego samemu nie ma większego sensu. No i na githubie jest masa takich eksperymentalnych niedokończonych silników w przeróżnych językach.

@Catharsis Czy ma to sens, zależy przede wszystkim od tego, jaki ma się cel.

Jesli chciałoby się coś komercyjnego, welp, powodzenia życzę :v

No chyba że jest się geniuszem i ma się możliwość poświęcenia temu całego życia.

Trafiłem na Zenith.NET , bibliotekę-warstwę, gdzie, pisząc jedno, będzie to bez problemów działać na różnych API graficznych (Vulkan 1.4, DX12 oraz Metal) pod spodem. Poziom kontroli nad tym, jak wszystko działa, można porównać do tego, jakby programowało się w samym Vulkan-ie. Dodatkowym plusem jest jeszcze obsługa języka shaderów Slang (HLSL). Miodzio.

Na Twoim miejscu skupiłbym się nie na tym jakie drzwi otwiera, a na tym jaka jest tego cena, i w jakie ograniczenia Cię to wepchnie na kolejnych etapach.

@tomasz-frankowski Akurat dobrze wiem co ze sobą to niesie.

Ograniczenia? Jak się siedzi nad tym samemu to największe. Śledzę sobie kilka OSS silników I widzę, ilu ludzi potrzeba, żeby coś sensownego osiągnąć. Samo to, że w zespole można sobie podzielić na role kto się czym zajmuje I specjalizuje dużo daje. Samemu muszę być ekspertem we wszystkim.

A to tylko część ograniczeń.

Nie planuje też robić kto wie jakich rzeczy, nie ma to być też pełnoprawny silnik. Bez edytora, żadnych wodotryskow I przekombinowanych rzeczy.

Dla własnej satysfakcji.

@Garf ekspert ma wielokrotne doświadczenie w całym procesie wdrożenia. Ekspert się nie wyjebie- zastanów się czy nie robisz tego żeby się jednak trochę poobijać. Bo bez obijania niczego się nie nauczysz.

@tomasz-frankowski

Ekspertem nie jestem i nigdzie tak siebie nie określiłem... Dodatkowo też nie muszę nim być, żeby coś takiego sobie spróbować porobić.

Po drugie, ignorujesz coś o czym pisałem już kilka razy.

@tomasz-frankowski Wybacz, zapomniałem użyć cudzysłowia… Wiesz, żeby było wiadomo, że nie miałem tego dosłownie na myśli.

Zaloguj się aby komentować