SKLEP

Blog użytkownika axeMaltesse

axeMaltesse axeMaltesse 03.04.2017, 17:22
Game Engines - Co to właściwie jest?
1122V

Game Engines - Co to właściwie jest?

Zapewne wielu z was się nie raz zastanawiało co to są te loga wyświetlane po odpaleniu gry i po co w ogóle są zamieszczane. Otóż wiele w grze zależy od silnika na jakim została ona stworzona. Mam nadzieje, że ten wpis wam nieco rozjaśni jak działają owe silniki gier oraz po co w ogóle się ich używa. Miłego czytania!

Jeżeli interesujecie sie grami, to nie raz słyszeliście o tak zwanych Game Engines czyli o silnikach gier. Szczególnie można zauważyć taką tendencje na pokazach, targach czy E3, kiedy producenci danych gier starają się przyciągnąć uwagę gracza pokazując swoją technologie oraz udostępniając jakieś piękne zrzuty ekranu albo teasery.

*W żadnym wypadku nie chcę tutaj obrazić nowej Zeldy, czy też jej fanów, lecz po prostu zobrazować to o czym piszę... Swoją drogą tak wyglądająca Zelda robi nie małe wrażenie. 


Co to jest Game Engine:

Silnik jest to struktura, która pomaga nam w kilkunastu bardzo ważnych elementach gry takich jak: Grafika, Audio, Logika, Fizyka, Networking, AI (Sztuczna inteligencja) i wiele, wiele innych. Najłatwiej skupić się na podstawowych czynnikach, jakie każda gra posiada. Tak więc dany silnik dostarcza strukture, oraz narzędzia wymagane przez każdą grę aby funkcjonowała.

Zaczynając od początku. Powiedzmy, że chcemy stworzyć grę taką jak Mario, gra którą zna chyba każdy. Cofając się w czasie, taki projekt musimy stworzyć od zera, tzw. from scratch. 

Mamy tutaj proste zastosowanie kilku elementów, jak rury, potwory, bloczki i tak dalej. Każdy z tych elementów musi posiadać swoje współżędne w danym świecie, parametry określające zachowanie oraz musi być kasowany, by zwolnić miejsce w pamięci operacyjnej urządzenia. Czyli idąc sobie w prawo i mijając kolejne obiekty sprawiamy, żę po zniknięciu tej rury z lewej strony ekranu jest ona po prostu usuwana, by następna rura z prawej strony mogła się pojawić. Tak więc potrzebny jest nam popularnie zwany manager pamięci, który będzie pilnować aby każdy obiekt był systematycznie usuwany, jak pojawi się nowy. Co by było jakby takiego managera brakowało? Wszystkim znany Blue Screen, wyskakujący tak często jest właśnie powodem złego lockowania oraz relockowania pamięci systemowej.

Każdy silnik posiada właśnie takiego managera oraz wiele innych funkcjonalności wymienionych powyżej, dzięki czemu nie musimy wszystkiego wymyślać i tworzyć na nowo. Po co wymyślać koło, skoro już ktoś to zrobił? Oczywiście wiele firm dalej robi swoje własne śilniki jak CD Projekt RED co pozwala im dostosować dany twór do własnych unikalnych wymagań. Stworzenie silnika trwa latami oraz opisanie jego funkcjonalności jest strasznie trudne, dlatego też wielu developerów używa Unity, Unreal Engine 4 czy swego czasu CryEngine. 

Dostęp mam do Unity oraz UE4, więc postaram się wam wyjaśnić ten fenomen bazując na tych silnikach. 


Unreal Engine 4 jest to potężny game engine dający przeogromne możliwości oraz obecnie można nawet przerabiać i grzebać w plikach na których on bazuje, dostosowując go do własnych potrzeb. Brzmi świetnie? Otóż posiada on  tysiące klas, wiele połączonych ze sobą poprzez dziedziczenie i zmiana jakiegokolwiek elementu wpłynełaby na inny... Przedstawiając to za pomocą prostego wykresu:

Dodając rure do mario dodajemy aktora. Dlaczego? Otóż dany aktor posiada swój Korzeń (Root Component), który dziedziczy Komponent Sceny (Scene Component), który dziedziczy z kolejnego komponentu i tak w dół... Tak więc chcąc zmienić cokolwiek w klasie danego komponentu byśmy zaburzyli hierarchię tej struktury co by spowodowało jednym wielkim bugiem oraz brakiem przyszłej funkcjonalności. Jak to wygląda w silniku? Przedstawie to na podstawie projektu, który obecnie robię:

Po lewej stronie jest panel z pokazaną hierarchią, którą przedstawia właśnie diagram wyżej. Tank_BP jest to aktor, jego Korzeń to Tank_Body łączący wszystkie elementy razem. Komponentem Sceny jest zbiórka wszystkich pozostałych elementów które widzicie na zrzucie ekranu powyżej. Dlaczego więc nie dodajemy osobno tych komponentów do naszego projektu tylko bawimy sie w dodawanie aktorów? Odpowiedzią jest prawy panel. Otóż zachowanie aktora możemy zdefiniować w różnoraki sposób, możemy spowodować, że bedzie oddziaływać na niego grawitacja, że będzie ruchomy czy też statyczny, jakie parametry będzie posiadał, natomiast sam komponent jedynie co posiada to parametry gdzie znajduje się w świecie przez nas tworzonym. Nie można na niego oddziaływać ani przeprowadzać interakcji, a jedynie co można określić to proste kolizje oraz to czy gracz będzie przez niego mógł przenikać czy tez nie. Można dołączyć do komponentu zestaw funkcji opisujących jego zachowanie oraz parametry lecz z punktu wydajności jest to bardzo nieopłacalne.

Kolejną sprawą jest też łączenie danych elementów aktora. Im bardziej projekt jest złożony tym więcej elementów będzie posiadać, jak widać u mnie czołg jest dość prosto zbudowany z kilku elementów połączonych ze sobą.


Kolejnym aspektem ważnym w silnikach jest to jak łatwo zrobić jest na nim grę i dlaczego UE4 jest tak popularny. Otóż nie musisz w cale znać się na programowaniu aby stworzyć grę dlatego też mamy zasyp śmieci takich jak X-11 czy innych bazujących na tym oto silniku. Czyli jak nie programowanie to co?

Blueprint:

Otóż jest to tak zwany Visual Scripting, który nie wymaga jakiejkolwiek wiedzy programistycznej, jedynie silnej woli i zaparcia aby cokolwiek powstało. Ta metoda ma również swoje naturalne wady oraz nie daje takiej swobody w tworzeniu poprzez naturalne ograniczenia jak brak deklaracji swoich funkcji czy zachowań. Tak więc jestem w 99% pewien, że perełki takie jak Rocket League nie bazowały tylko i wyłącznie na tym modelu. Developerzy musieli programować większość zachowań, a jakiekolwiek specyfikacje tych zachowań robili za pomocą Blueprints, bo jest po prostu łatwiej. UE4 jest bardzo elastyczny, tak że deklarując swoją funkcję w C++ mogę sprawić by była widoczna w Skrypcie, co pozwoli mi na zdefiniowanie tego kiedy i jak zostanie wywołana, albo czy w ogóle zostanie użyta.


Unity to trochę inna historia dlatego, że był on darmowy od samego początku, wiele jego bilbiotek stworzyli sami gracze, którzy zaczęli stawiać kroki w developerce i systematycznie poświęcili się rozwojowi tego silnika. 

Obecnie Unity posiada trzy razy większą społeczność niż Unreal, dzięki czemu o wiele łatwiej jest znaleźć pomoc na forach internetowych. Samo programowanie też jest łatwiejsze przez to, że silik bazuje na języku C# oraz Java Scripcie, które nie są jezykami proceduralnymi tylko obiektowymi*. Jeśli zaś chodzi o sam wygląd i design - oba prezętują się dość podobnie i największa różnica jest w osiach świata (X,Y,Z), bo oś X jest po prostu przestawiona o 90 stopni tak, że importując animacje z Unreala, postać zamiast w przód przejdzie w bok. 

*Języki obiektowe są to języki, które zamiast struktur używają obiekty, do definiowania zachowań tworzonego podmiotu. np Tworząc samochod w strukturze określamy jego maksymalną prędkość, masę i podstawowe parametry. Natomiast tworząc obiek samochodu, możemy to zrobić z kół, silnika, kierownicy, czyli osobnych obiektów, przez co nasz projekt jest dokładniejszy i bardziej złożony.


Podsumowanie:

Co robi Game Engine?

- Pomaga w podstawowych zadaniach, więc nie musimy zaczynać wszystkiego od zera i tworzenie danych gier jest o wiele prostsze. Nie zawsze również wymaga wiedzy programistycznej.

Czy lepszy silnik robi lepsze gry?

- Niektóre silniki są w stanie stworzyć bardziej realistyczną czy bardziej detaliczną grę, mogą inaczej też na nie wpływać dodając świetne zachowanie, złożoną fizykę ale to nie one tworzą gry lecz pasja i kreatywność zespołu bądź twórcy. Coś takiego jak najlepszy silnik nie istnieje, istnieją tylko najlepsze gry oparte na danym silniku. W końcu to tylko framework!


Opinia:

Silniki to dość złożona maszyna działająca by powołać do życia świetne tytuły oraz opowieści. Gdyby nie one, nie uświadczylibyśmy tak na prawdę 70% gier, bo ich tworzenie od zera byłoby zbyt czasochłonne i zbyt mało opłacalne. 

Osobiście preferuje Unreal Engine, bo dostarcza o wiele więcej możliwości poprzez łączenie programowania i Vizualizacji Skryptów. Fajną opcją jest też podgląd podczas uruchomienia gry po kompilacji kodu - jestem w stanie sprawdzić poszczególne zachowanie elemetów, kiedy są tworzone  oraz mogę obserwować kolejne tworzenie obiektów podczas uruchomionej gry. Dzięki temu, że silnik jest wciąż rozwijany dochodzą do niego nowe rzeczy takie jak oprogramowanie do tworzenia animacji wewnątrz jednego programu poprzez współpracę Epic Games oraz twórców Maya Software. Jeżeli chce dany kawałek kodu, lub jakąkolwiek animacje sprzedać jest to też proste dzięki marketowi jaki znajduje się w Launcherze. Czasami idzie zarobić krocie na kilkunastu animacjach!

Dla wszystkich tych, którzy myślą o tym, żeby zacząć tworzyć grę ale też nie wiedzą od czego zacząć:

  1. Określcie swoje możliwości oraz zastanówcie się w jakim języku chcecie programować, oraz czy w ogólne chcecie to robić
  2. Pamiętajcie, że nie będziecie tworzyć gier AAA, są to tysiące godzin kodowania nie jednego człowieka lecz całego zespołu developerów... UE4 jak i Unity dostarczają narzędzi oraz pozwalają na stworzenie świetnej oprawy wizualnej ale jeśli sama gra będzie crapem, to nikt na nią nie spojrzy.
  3. O wiele lepiej jest stworzyć grę z gorszą grafiką ale o wiele lepszą funkcjonalnością.
  4. Zamiast siedzieć i czytać ten blog Bierzcie się do pracy! :)

Mam nadzieję, że w całym blogu znaleźliście coś ciekawego dla siebie oraz udało mi się wyjaśnić niektóre pytania. Cały temat niestety jest bardzo złożony, przez co też ciężko jest go ugryźć i opowiedzieć w łatwy sposób jak smakował. Wszystko sprowadza się jednak do chęci oraz wolnego czasu jakim dysponujecie. Dość ciekawym zagadnieniem są też języki programowania na których te silniki bazują oraz czy trudno jest się ich w ogóle nauczyć. Myślałem, żeby stworzyć serię blogów pod tytułem: "XX - Co to właściwie jest?", z ramienia programistycznego ale nie wiem czy kogokolwiek to interesować będzie. Zapraszam do komentowania :)!

Tagi: Engines Game Engines games

Oceń notkę
+ +47 -

Oceń profil
+ +10 -
axeMaltesse
Ranking: 3077 Poziom: 22
PD: 1927
REPUTACJA: 685
Miesięcznik PSX Extreme