Silniki gry - szukam eksperta nt. gamedev'u m.in cry engine (dlaczego tak trudno się w nim robiło gry) i nie tylko

2

Dzisiaj obejrzałem filmik na tvgry pt. "Dlaczego gry nie chcą wyglądać jak Crysis".
Było m.in. co nieco o cry engine, ale biorąc pod uwagę możliwości forumowiczów, chciałbym się dowiedzieć czy jest rzeczywiście taki trudny do ogarnięcia i jakie w nim są elementy, które sprawiają, że wydaje się trudny bądź zwyczajnie upierdliwy.

I chciałbym jednocześnie spytać się czym się różnią jeśli chodzi o tworzenie gier silniki gry takie jak wspomniany Cry Engine, Unreal Engine czy Unity. NIe chodzi mi oczywiście o standardowe, unity to c# a pozostałe to c++. Chodzi mi to co np. lepiej się robi w jednym, albo co jest wyjątkowo irytujące w innym.

No i do tego czym się różni silnik gry od API takiego jak Opengl, directx czy chociażby vulkan?
Bo np. zastanawiam się dlaczego chociażby w grze takiej jak Detroit Become Human na PS4 użyto autorskiego silnika opartego (przynajmniej wg polskiej wikipedii: https://pl.wikipedia.org/wiki/Detroit:_Become_Human ) na opengl. Czy jak się tworzy coś większego i droższego to opłaty licencyjne za np. takiego unreal engine rosną?
Dlaczego czasem lepiej jest stworzyć własny silnik bazując na api, a w innych przypadkach lepiej jest użyć gotowego silnika.

1

Było m.in. co nieco o cry engine, ale biorąc pod uwagę możliwości forumowiczów, chciałbym się dowiedzieć czy jest rzeczywiście taki trudny do ogarnięcia i jakie w nim są elementy, które sprawiają, że wydaje się trudny bądź zwyczajnie upierdliwy

Nie wypowiem się, nie miałem z cryengine styczności

No i do tego czym się różni silnik gry od API takiego jak Opengl, directx czy chociażby vulkan?

Silnik gry składa się na kilka modułów odpowiedzialnych za dźwięk, renderowanie, fizykę, itp.
Natomiast opengl, vulkan oraz directx to interfejsy do komunikacji z kartą graficzną.

Bo np. zastanawiam się dlaczego chociażby w grze takiej jak Detroit Become Human na PS4 użyto autorskiego silnika opartego ... na opengl

Powód jest bardzo prosty: opengl jest otwartym interfejsem, który dodatkowo jest wspierany przez ps4.
Directx nie byl by tutaj możliwy do użycia ze względu na to że ten interfejs działa tylko na Windowsie i Xboxie.
Vulkan natomiast jest najmłodszym interfejsem, i osobiście traktuję go jako następcę opengl.
Wybór na opengl prawdopodobnie mógł paść ze względu na wcześniejsze doświadczenie załogi tworzącej silnik (moja spekulacja)

Czy jak się tworzy coś większego i droższego to opłaty licencyjne za np. takiego unreal engine rosną?

Licencja to czasami bardzo ciężki orzech do zgryzienia, skoro ktoś postanawia stworzyć wlasny silnik zamiast zamiast płacić tantiemy, to prawdopodobnie przeliczył że na tym więcej zarobi albo że nie ma silnika który spełnia jego oczekiwania.

Dlaczego czasem lepiej jest stworzyć własny silnik bazując na api, a w innych przypadkach lepiej jest użyć gotowego silnika.

Wszystko zależy od wielkości projektu, jakie narzędzia sa potrzebne, terminu na "dostawę", budżetu oraz ograniczeń, jedna prawidłowa odpowiedź według mnie nie istnieje.

Pisane z fona,
Nie zajmuję się gamedevem

1

Na forum jest użytkownik pracujący dla CDPR i to chyba nawet przy silniku, ale pamiętam tylko że jego nick zaczynał się na s...chyba. Może @kq będzie pamiętał? Na jedno pytanie sam mogę odpowiedzieć, "swoimi słowami" - nie zajmuje się gamedevem.

No i do tego czym się różni silnik gry od API takiego jak Opengl, directx czy chociażby vulkan?

Wymienione przez Ciebie technologie w typowym zastosowaniu służą do sprzętowego renderowania grafiki. Są one dość niskopoziomowe, TUTAJ masz przykład ile kodu potrzeba, żeby wyświetlić na ekranie prostą kostkę i piramidkę. Silnik gry opakowuje takie API pod konkretne potrzeby tworząc renderer graficzny. Oprócz renderera w silniku znajduje się logika, która nie jest wspierana przez wymienione API, czyli przykładowo fizyka, interakcja obiektów, skryptowanie itd. Mając to wszystko można zbudować narzędzia pozwalające sporą część pracy wykonać ludziom, którzy o programowaniu wiedzą nie wiele. Mając do dyspozycji tylko API graficzne jak opengl, o programowaniu musisz wiedzieć na prawdę sporo jeśli chciałbyś zrobić nawet prostą gierkę.

1

Jeśli robimy silnik pod konkretny typ gry, to implementujemy tylko rzeczy wykorzystywane przez grę. Nie staramy się obsłużyć rzeczy, które komuś się mogą przydać przy innych grach. Możemy zastosować sztuczki, skróty i optymalizacje, które w gotowych silnikach musielibyśmy obchodzić, co obciążałoby sprzęt docelowy N razy bardziej...

Capcom zrobił sobie silnik RE Engine, bo pewnie kiedy robili Resident Evil 7, ciężko było o dobre wsparcie VR...
Inaczej tego nie potrafię wytłumaczyć, bo z tego co piszą tutaj - https://residentevil.fandom.com/wiki/RE_Engine - wszystkie te rzeczy można by osiągnąć nawet w Unity. Za jakość grafiki odpowiadają shadery, filtrowanie tekstur, post-efekty i wszelakie ustawienia silnika dotyczące sposobu renderowania obiektów, cieni itp.,,
Jeśli porównywane silniki obsługują te wszystkie rzeczy, to jest możliwe osiągnąć w nich niemalże identyczne wyniki.

Jeśli chcesz dogłębnych porównań silników, to jest tylko jedna metoda...
Mem
Na pewno jest wiele filmików i artykułów realizujących takie porównania!

0

Panowie, czyli @Spine @satirev @several @plx211 z tego co zrozumiałem API lepiej jest wykorzystać zamiast silnika gry wtedy kiedy tworzymy projekt na daną platformę głównie.
Przypuśśmy, hipotetycznie, że chciałbym wydać grę na wszystkie konsole tj. PS4, Xbox One, Nintendo Switch oraz PC. W takim wypadku użycie gotowego silnika jak unnreal engine wydaje się najlepszym wyjściem. Jesli jednakże chcę zrobić grę tylko na PC i platformy Microsoftu to również dobrym rozwiązaniem wydaje się użycie chociażby DirectX. Natomiast jesli chciałbym wycisnąć ze sprzętu ostatnie soki i do tego zadbać o np. energooszczędność to najlepszym rozwiązaniem wydaje się użycie API takiego jak OpenGL czy Vulkan.
Co do vulkana znalazłem taki filmik:

gdzie gość pokazał, że prosty program generujący zwykły trójkąt ma bodajże ponad 1000 linijek. Z jednej strony to przeraża, ale z drugiej można pomyśleć, że w rękach zdolnego programisty może się okazać, że da się zrobić graficzne cudo nawet na sprzęcie, który ma wydajność mniejszą niż współczesne smartfony. Oczywiście nie mam odpowiednich kompetencji, żeby stwierdzić, że no da się zrobić crysisa 3 na Raspbery Pi 4 w 1080p i 60 fps'ach.

Znalazłem dwa tutoriale na youtube dot. Vulkana. Pierwszy:
Drugi:
Jeśli ktoś ma dostęp do lepszych źródeł (albo do czegoś związanego z DirectX 12 czy OpenGL w miarę współczesnym) będę wdzięczny.

3

z tego co zrozumiałem API lepiej jest wykorzystać zamiast silnika gry wtedy kiedy tworzymy projekt na daną platformę głównie.

@Mirai nie bardzo. Jeśli silnik wspiera platformę od jakiegoś czasu to nie ma spejcjalnego sensu pisać własnego renderera jeśli nie wiesz jak go napisać. Nauka obsługi silnika pójdzie sprawniej i da jakieś namacalne efekty dużo szybciej.

Natomiast jesli chciałbym wycisnąć ze sprzętu ostatnie soki i do tego zadbać o np. energooszczędność to najlepszym rozwiązaniem wydaje się użycie API takiego jak OpenGL czy Vulkan.

Czysto teoretycznie - być może, jeśli zarabiasz na chleb pisząc renderery, to wtedy faktycznie to może być najlepszym rozwiązaniem. W każdym innym przypadku to mocno wątpię, gdyż zwyczajnie nie będziesz potrafił wykorzystać tego API. Na początku oczywiście będzie zapał, radośnie będziesz kopiował kod z internetu lub z githube'a, i z entuzjazmem będziesz podziwiał "swoje" dzieła. Ale po miesiącu stwierdzisz, że nic poza kopiowaniem nie umiesz i na dodatek brakuje Ci jeszcze podstaw matematycznych żeby coś swojego spłodzić więc projekt porzucisz.

Jak chcesz robić grę, rób grę i nie bierz się za pisanie swojego silnika.

2

Jak nauczysz się obsługi różnych silników, to przynajmniej będziesz miał pojęcie jak mógłby wyglądać Twój własny silnik...

1 użytkowników online, w tym zalogowanych: 0, gości: 1