Jakie zalety ma nagi OpenGL w porównaniu z frameworkami / silnikami dla małych programistów? [Zamknięte]

16

Zauważyłem trend, w którym niezależni programiści odchodzili od frameworków i silników i przechodzili na używanie gołego OpenGL lub używanie go w połączeniu z SDL / SFML2. Jako niezależny programista nie widzę, co może zaoferować OpenGL niskiego poziomu w stosunku do oddzielnych silników lub platform.

Większość przyzwoitych silników i struktur zapewnia funkcjonalność, której potrzebujesz, i nigdy nie przeszkadza. Mogą również otworzyć opcję bezpośredniej obsługi OpenGL. Niektóre oferują nawet funkcję kompilacji na wiele platform!

Rozumiem aspiracje, aby dowiedzieć się, co dzieje się pod maską, ale nie widzę żadnych pozytywnych stron, które OpenGL może zaoferować niezależnym programistom w stosunku do silników lub platform.

Czy możesz wyjaśnić powód tworzenia gier od zera za pomocą OpenGL?

Szczery
źródło
Jako doktorant w dziedzinie programowania gier i grafiki mogę potwierdzić złożoność uczenia się OpenGL od zera. Gdybym dzisiaj grał w indyka, absolutnie użyłbym SDL lub innej biblioteki. Ale rozumiem dziś znacznie więcej na temat grafiki niż kiedy zaczynałem studia, nauka API pomogła mi trochę zrozumieć, w jaki sposób ogólnie działają układy GPU oraz jak działa sprzęt i oprogramowanie. Ale aby stworzyć produkt komercyjny, w tym momencie absolutnie użyłbym biblioteki innej firmy.
Philip

Odpowiedzi:

23

Jest to w dużej mierze oparte na opiniach pytanie / odpowiedź, więc niekoniecznie jest idealne dla tej platformy, ale w każdym razie:

Dlaczego żaden framework / silnik nie jest niezależny? Oto moje dwa centy:

  • Brak budżetu: jest to prawdopodobnie największy punkt dla większości małych / niezależnych programistów. Wiele frameworków lub silników nie pozwoli ci opublikować produktu bez kupowania droższej wersji (zakładając, że w ogóle dostępna jest tania lub darmowa wersja) i / lub płacenia tantiem, co zawsze będziesz musiał wziąć pod uwagę przy małych projektach. Czasami trzeba nawet zapłacić raz na platformę.
  • Złożoność: większość silników lub ram należy do jednej z dwóch kategorii:
    • Są albo bardzo ograniczone w jednym gatunku specjalnym ( typowym przykładem jest RPG Maker ).
    • Lub są po prostu zbyt ogólne z wieloma rzeczami, których najprawdopodobniej i tak nie wykorzystasz (np. Unity ).
  • Kod własności: większość silników nie jest open source i aby uzyskać rzeczywiste źródło, musisz zapłacić jeszcze więcej (jeśli nawet dostępne). Bez faktycznego kodu źródłowego przenoszenie na inne platformy może być trudne, a nawet niemożliwe (ponownie, RPG Maker byłby doskonałym przykładem).
  • Clunkyness: To jest moja osobista opinia, ale przynajmniej dla mnie jest to często dość duże rozczarowanie, biorąc pod uwagę gotowe silniki i frameworki, szczególnie gdy budujesz tylko małą grę. Kto chce zagrać w małą przerwę, która ma rozmiar 200 KB, ale zapewnia 50 MB czasu działania?
  • Wybór języka: niektóre silniki i frameworki nie zapewniają bibliotek do użycia we własnym kodzie. Zamiast tego zapewniają platformę lub środowisko wykonawcze, które będą używać własnego języka skryptowego lub innego ustawionego języka (takiego jak Javascript lub C #). Jeśli piszesz swój własny silnik, możesz swobodnie używać dowolnego wybranego języka.
  • Ochrona Twojej pracy: jeśli korzystasz z gotowego silnika lub frameworka, są duże szanse, że inni mogą mieć znacznie łatwiejszy czas na zmianę lub dekompilację kodu lub zasobów, czego możesz chcieć uniknąć (nawet jeśli tylko po to, aby utrzymać swój najlepszy wynik) czysty). Niestandardowy kod i obsługa zasobów stanowią znacznie większą przeszkodę, szczególnie w przypadku kompilacji do kodu macierzystego.
  • Znakowanie: dla wielu może to być niewielkie, ale niektóre silniki i ramy zmuszają do pokazywania ich logo, a może nawet reklam, zasadniczo ograniczając swobodę wyboru, kto / co promować. Oczywiście zależy to często od faktycznej licencji, opłat licencyjnych itp.
  • Niezgodność z licencjami: jest to coś, czego wielu nawet nie bierze pod uwagę przy wyborze silnika, ale w zależności od tego, co chcesz zrobić, może to być główny czynnik. Nawet jeśli kupisz jakiś silnik, możesz nie mieć możliwości ujawnienia jakichkolwiek źródeł lub powiązanych materiałów. Coś takiego może uniemożliwić modowanie, nawet jeśli użytkownik ma taką możliwość. Weźmy na przykład silnik Valve's Source ( Half-Life 2 , Team Fortress 2 itp.): Pozwalają modderom używać silnika do własnych projektów. Gdyby te gry były oparte (na przykład) na Unreal Engine, nie byłoby to możliwe ze względu na ograniczenia wynikające z warunków licencyjnych.
Mario
źródło
11
plus jeszcze jedna rzecz: kiedy nauczysz się openGL, wiesz o tym. Nie musisz ponownie uczyć się go w każdym języku ani uczyć, w jaki sposób określony framework / silnik chce, abyś wdrożył go dla każdego nowego framework / silnika. Prowadzi to również do większej przenośności
wes
Nie trudne najczęstszym problemem, możliwe jest, że w silniku lub ram pomysł po prostu nie można dokonać lub byłaby zbyt skomplikowana (ex: minecraft)
akaltar
@akaltar: To prawda, ale jednocześnie oczekiwałbym, że ktoś wybierze silnik, który pasuje do zamierzonego celu. Np. Nie używaj silnika 3D do gry 2D i na odwrót.
Mario,
9

Większość przyzwoitych silników i struktur zapewnia funkcjonalność, której potrzebujesz, i nigdy nie przeszkadza.

Czy oni? To zależy raczej od tego, co robisz, mówiąc graficznie.

W przypadku wielu rodzajów gier istnieją standardowe odpowiedzi na pytania graficzne. Na przykład przeciętną grę 2D można poradzić sobie dobrze dzięki sprawności 2D, na przykład XNA / MonoGame. To tylko duszki, które mogą pojawiać się partiami w terenie, mogą być obracane i tak dalej.

Ale co, jeśli twoja gra była zwykłą grą 2D, to czytasz jakieś fajne techniki, takie jak użycie mapy wysokości do zbudowania impostera, który ma wygląd głębokości w stosunku do ekranu. I chcesz to zrobić.

Teraz stosujesz normalne mapowanie, a nawet mapowanie paralaksy. Wszystko w tym samym kontekście „renderowania duszków”, ale wymaga więcej niż wielu czystych silników 2D. W szczególności wymaga multiteksturowanego „sprite blitting”, co nie jest czymś, co może zrobić wiele silników 2D.

Co robisz, jeśli Twój silnik nie może się z Tobą dostosować? Oznacza to, że musisz wykonać wiele przejść, jeden dla koloru, a drugi dla oświetlenia za pomocą normalnej mapy. Ale to nie działa, ponieważ potrzebujesz normalnego pola wysokości mapy, aby zastosować odwzorowanie paralaksy do wyszukiwania kolorów. I co teraz? Potrzebujesz alfa do przezroczystości, więc nie możesz ukraść alfa. A silnik po prostu nie obsługuje wielu formatów.

Musisz więc wybrać jedną z następujących opcji:

  1. Porzuć ten pomysł. Oznacza to, że Twoja gra jest funkcjonalnie ograniczona przez silnik.
  2. Zhakuj silnik, aby uzyskać multiteksturę. Zakładając, że masz dostęp do kodu źródłowego, zabierasz się za to, by naśladować kod innej osoby. Oznacza to również, że musisz utrzymywać i nie łamać go, gdy się potykasz.
  3. Zrób wszystko, co możesz, w ramach ograniczeń silnika. Możesz więc uzyskać paralaksę na normalnych mapach, ale nie na kolorach. To może nie być dokładnie to, czego chciałeś, ale jest lepsze niż nic.

Jako przykład weźmy Geometry Wars. Większość silników 2D zasysa takie wizualizacje, ponieważ większość z nich opiera się na rysunkach, a nie na liniach. To gra, która wymaga bardzo wyspecjalizowanego renderera.

Pod koniec dnia musisz wziąć odpowiedzialność za elementy swojej gry ważne dla potrzeb Twojej gry. Jeśli wygląd wizualny gry jest opracowany przede wszystkim przez styl artystyczny obrazów i modeli, których używasz, a nie przez określone efekty, to użycie gotowego rozwiązania jest w porządku. Ale jeśli styl wizualny twojej gry jest znacznie zdefiniowany przez niestandardowy kod renderowania, istnieje duża szansa, że ​​standardowy silnik może stać się poważnym ograniczeniem, jeśli zdecydujesz się robić rzeczy, które są nieszablonowe.

Ponadto istnieje bardzo praktyczny problem: nie wszystkie silniki gier są równie przenośne.

W związku z niedawnym wzrostem platform mobilnych rynek gier rozprzestrzenił się na wiele systemów operacyjnych i urządzeń interfejsu użytkownika. Nie wszystkie silniki działają na wszystkich urządzeniach. A jeśli twój silnik nie działa na platformie, na pewno nie poświęcisz czasu, aby sprawić, by działał na jednej platformie . W końcu dlatego użyłeś silnika, prawda?

Jeśli jest dla Ciebie ważne, aby Twoja gra działała na określonej platformie, musisz ponownie wziąć za nią odpowiedzialność. A „najłatwiejszym” sposobem na osiągnięcie sukcesu jest zrobienie tego sam. Aby zbudować silnik, który może działać na wielu platformach, być może przy użyciu prostszych platform specyficznych dla platformy, w razie potrzeby do obsługi niektórych szczegółów niskiego poziomu. W ten sposób, jeśli się zepsuje, to twój kod; jesteś najlepszą osobą, która może to naprawić.

Nicol Bolas
źródło
Podoba mi się twoja odpowiedź, ale wydaje mi się bardzo dziwne, że wybrałeś XNA jako swój przykład. Nie ma żadnej z wymienionych wad, z wyjątkiem możliwości przenoszenia.
Seth Battin,