jak powiedział Josh Petrie :
„ Nie zbudowano tutaj syndromu ”;
Piszę też własny silnik i przypuszczam, że powód będzie inny dla każdego programisty, ale tak naprawdę - generalnie nie lubię pracować w kodzie innych ludzi. Jestem kompulsywny w tym sensie, że jeśli czuję, że mógłbym sam go zbudować, nie ma sensu zadowalać się czymkolwiek innym .
Testowałem różne typy silników gier, renderowanie API i takie, w szczególności Ploobs, UNITY WaveEngine, XNAFinalEngine, Love, Ogre itp. Wiele innych ... Chciałem zacząć pisać gry - ściągnąłem dużo, szukając dobrego komfortu i dobrze udokumentowany punkt wejścia ...
Mój problem polegał jednak na tym, że nie miałem pojęcia, co dzieje się pod silnikiem. Chciałem dobrej kontroli i chciałem ramy, które znam jak tył mojej dłoni. Wpadłem na pomysł „HEJ! Myślę, że jedynym sposobem, aby dowiedzieć się, jak to działa i zrozumieć, jest próba zbudowania własnego silnika całkowicie i całkowicie od zera. Większość mojej historii programowania dotyczyła rozwiązań internetowych i przetwarzania - to była dla mnie zupełnie nowa gra w piłkę.
I tak właśnie skończyłem.
Zdecydowałem się więc skonfigurować XNA, ponieważ znałem już język C # i zacząłem myśleć o tym, jak i od czego powinienem zacząć. Potrzebowałem pomysłu.
Zdecydowałem, że bez względu na wszystko przejdę prosto do 3D .
Zrozumienie podstaw było fajne - wsadowe duszki, ale w miarę postępu odkryłem nowe bariery i przeszkody - moim pierwszym prawdziwym był limit wsadu . Moim celem było stworzenie gry, która w dowolnym momencie mogłaby renderować co najmniej 10000 podmiotów w widoku frustum.
Wyruszyłem w nową podróż do implementacji Instancji opartej na Shaderze (podczas gdy nauczyłem się HLSL), porzuciłem wbudowane w XNA obiekty Model i Efekt, aby zamiast tego napisać własne zamienniki. Na początku miałem problem ze zrozumieniem strumieni VBO; Zepsułem różne rzeczy - przeszedłem do sieci, zadając pytania na temat instancji, i trzymałem się tego, dopóki w końcu nie zrozumiałem, co robi GPU. Opłaciło się; teraz po kilku dniach debugowania mojego VBO z PIX (dxsdk) miałem ponad dwadzieścia tysięcy jednostek testowych powiększających się w moim obszarze wyświetlania.
Teraz miałem „jakieś” pojęcie o tym, jak działały potoki renderowania, ale jeszcze tego nie zrobiłem - ostatecznie stworzyłem własny stan gry, kamerę, efekty postu i obiekty bytu, odsuwając się od potoku treści XNA, budując własny moduły ładujące (osobista niechęć do rzeczy XNB), stworzyły skomplikowany, posortowany łańcuch geometrii i oddzielony stanem mieszania, a także miały instancje sprite'ów i tekstu wyświetlane na scenie gry.
Ciągle dodawałem, naprawiałem, zmieniałem i eksperymentowałem z tym przez prawie cały rok. W końcu wyszło całkiem nieźle. Teraz zrozumiałem, co dzieje się pod maską, bo to stworzyłem - moje dziecko.
Teraz mój silnik był w większości stabilny i prawie gotowy. To nie jest idealne: skrypty są uczciwe, a GUI wcale nie było świetne. Ale nadal mi się podobało. Tysiące wierszy kodu, zasobów i mediów - ukrytych w prywatnym repozytorium git 2 GB, i wszystkie problemy, z którymi musiałem się zmagać, próbując zrobić coś, czego nigdy wcześniej nie robiłem. Każda pokonana przeze mnie przeszkoda była wyciągniętą lekcją - i ulgą.
Wyciągnąłem prawie wszystko, co chciałem.
Ale w końcu - zdecydowałem, że czas ją położyć.
O ile usatysfakcjonowałem się pisaniem tak ogromnego silnika samemu, z radą sieci i innych znajomych z gamedev, zdecydowałem, że zrobię to jeszcze raz - i zrobię to lepiej - ponieważ teraz tym razem głównie wiem co ja robię.
Ten projekt wciąż jest ukryty w moim repozytorium GIT.
Mój drugi krok przy pisaniu nowego silnika (tym razem na MonoGame) postępuje dobrze. Kiedy coś się psuje, łatwiej to naprawić. Mniej bałaganu Mam nadzieję, że w tym roku publicznie pokażę swoją grę, ponieważ jestem trochę „zbyt” przywiązany do mojego kodu.
Na koniec napisałem własny silnik, w jaki sposób nauczyłem się „jak” to robić, a jednocześnie móc powiedzieć, że wiem i rozumiem dokładnie, co robi każdy element i jak powinny działać. Nienawidzę czytać kodu innych ludzi, szczególnie w przypadku dużych nieudokumentowanych projektów. Chcę, aby wszystko, czego używam, zostało zbudowane przeze mnie.
Ale to tylko ja. Wątpię, czy kiedykolwiek użyję gotowego silnika, prawdopodobnie dlatego, że myślę, że pisanie własnych frameworków to dla mnie więcej zabawy niż siedzenie i zajmowanie się kodem innej osoby - pełna kontrola.