Czy powinienem kontynuować naukę OpenGL, czy po prostu przejść na DirectX, aby mieć większą szansę na znalezienie pracy w branży gier? [Zamknięte]

29

Od pewnego czasu uczę się programowania grafiki przy użyciu OpenGL i Linuksa. Jestem zaznajomiony z większością pojęć, ale naprawdę chciałbym pogłębić swoją wiedzę i ostatecznie kontynuować karierę w tworzeniu gier, szczególnie w tworzeniu silników gier.

Do tej pory wydaje mi się, że większość studiów gier tworzy gry dla systemu Windows przy użyciu DirectX.

Edycja: Wiem, że pytanie OpenGL vs. DirectX było już tutaj zadawane, ale nie znalazłem odpowiedzi w perspektywie, której chcę.

Edycja 2: Po przeczytaniu wszystkich odpowiedzi / komentarzy postanowiłem kontynuować nurkowanie głębiej w grafice za pomocą OpenGL / GLSL, ale postaram się również bawić z DX, tylko po to, aby mieć podstawową wiedzę na temat API. Chciałbym podziękować wszystkim za udzielone odpowiedzi i wgląd.

adivasile
źródło
Uogólniona wersja tego pytania może dać dobre odpowiedzi na stronie programmers.stackexchange.com ...
Macke
1
Zasadniczo nauczono mnie dokładniejszych aspektów shaderów DX przez faceta OpenGL, który nigdy nie grał w HLSL. Tak długo, jak wiesz, że „fragment shader” oznacza „pixel shader”, pojęcia są prawie takie same; P
drxzcl
IIRC, DirectX został nieco bardziej podobny do OpenGL w wersji 8 lub 9. Wcześniej DirectX był czasami krytykowany jako niepotrzebnie trudny w użyciu. Interfejsy API są nadal różne, ale ogólne podejścia powinny być dość podobne. Oświadczenie - nie jestem ekspertem od żadnego z nich.
Steve314,
@Macke - Porady dotyczące kariery są nie na temat @ Programiści. Jest to prawdopodobnie zbyt szczegółowe, ale ogólne pytania dotyczące kariery będą na temat @ Professional Matters (obecnie proponowane w obszarze 51). Proszę, idźcie i popierajcie tę SE
Chad,
Przytłaczające szanse nawet, jeśli wejdziesz do branży, nie będziesz programistą grafiki i nie będzie to miało najmniejszego znaczenia, jeśli znasz jeden interfejs API, drugi, oba lub żaden. Poza tym zależy od firmy i projektu. D3D jest znacznie częściej używany w przestrzeni PC, GL | ES jest całkowicie dominujący w przestrzeni mobilnej, a wszystkie konsole używają zastrzeżonych interfejsów API, których tak naprawdę nie można nauczyć się na własną rękę.
Sean Middleditch

Odpowiedzi:

28

To naprawdę nie ma znaczenia. Podstawowe pojęcia są takie same w obu, szczególnie teraz, gdy shadery pikseli są normą. A ponieważ większość gier jest wieloplatformowych, prawdopodobnie będą korzystać z podzbioru funkcji, które są podobne w obu językach. Tak długo, jak możesz pisać shadery w glsl lub hlsl, nic ci nie będzie.

Biorąc to pod uwagę, liczba dostępnych miejsc do „tworzenia silnika gry” jest niewielka. Większość firm używa czegoś z półki. Dla tych pozycji, które istnieją, jeszcze mniej jest na poziomie podstawowym. Większość programistów gier podstawowych nie pisze kodu związanego z grafiką (oprócz być może shaderów), ponieważ wszystko to zostało wyabstrahowane.

Tetrad
źródło
1
Co robią najbardziej programiści na poziomie podstawowym? W dużych, średnich lub małych studiach?
Quazi Irfan
To osobne pytanie. gamedev.stackexchange.com/questions/5538/...
tetradê
1
Żeby dodać bardziej ogólną odpowiedź, z mojego doświadczenia wynika, że ​​młodsi programiści zaczynają od gry, interfejsu użytkownika, hudu i pracy od tego momentu. Rozgrywka jest popularnym punktem wyjścia.
JuniorDeveloper1208 27.10.11
Menu integracji zasobów i interfejs użytkownika są jeszcze bardziej powszechnymi punktami wejścia z mojego doświadczenia.
Coyote
Chłopaki, nie zaczynajmy długiego wątku na temat tego konkretnego pytania w komentarzach tutaj. To są doskonale dobre odpowiedzi na pytanie, które powiązałem.
Tetrad
10

Wszystko zależy od pracy, którą chcesz / dostaniesz. Prawdopodobnie myślisz o pracy na rynku komputerów PC, gdzie DX jest królem. Pamiętaj tylko, że większość firm AAA dąży do rynku konsoli, gdzie interfejsy API są dość specyficzne.

Na przykład PS3 ma zastrzeżone rozszerzenia implementacji OpenGL ES.

OpenGL rozwija się w mobilnej przestrzeni. Teraz jest dostępny na wszystkich nowoczesnych platformach, ale Windows Phone 7.

Obecnie w tej przestrzeni dostępny jest tylko OpenGL ES. Ale nadchodzą kolejne potężne układy PowerVR ze wsparciem dla OpenGL 4 i DX11.

Twoje umiejętności OpenGL są złote. Możesz przełączyć się na DX, aby znaleźć zadanie, które tego wymaga. Tymczasem pamiętaj, że OpenGL jest królem pod względem liczby urządzeń i platform, na których jest on dostępny.


Edycja : Ponadto coraz więcej firm korzysta z istniejących silników, a często nawet główni twórcy gier są coraz bardziej chronieni przed interfejsami API niskiego poziomu. Zawsze lepiej jest mieć dobrą znajomość natywnych interfejsów API, gdy masz do czynienia z błędami i dziwnymi zachowaniami na określonych platformach. Ale wszystko sprowadza się do pojęć, a jak zauważyli inni, DX i OpenGL w istocie będą wymagać znajomości tych samych pojęć.


Edycja : Ponieważ znasz już OpenGL i prawdopodobnie shadery, powinieneś wypróbować OpenCL ... Ten interfejs API może stać się kolejną wielką rzeczą w obliczeniach równoległych.

Wspominam o tym, ponieważ jądra OpenCL używają typów danych, które są interoperacyjne z OpenGL i są łatwe do zrozumienia dla deweloperów OpenGL. Spójrz na to i sprawdź, czy możesz zdobyć doświadczenie dzięki świetnemu ogólnemu rozwiązaniu komputerowemu (obecnie na przykład zintegrowanemu z fizyką pocisków ).

Kojot
źródło
OpenGL jako standard branżowy zainspirował inne biblioteki i interfejsy API. Nie powinieneś lekceważyć jego znaczenia. Ale z drugiej strony nie powinieneś zatrzymywać się na jednym, a gdybym był tobą, rzuciłbym okiem na interfejsy API i silniki wyższego poziomu, które wyodrębniają OpenGL i DirectX.
Coyote
Znam OpenCL. Pracowałem nad projektem pobocznym, budując silnik fizyki (podstawowy, głównie do celów edukacyjnych) i wykorzystałem trochę OpenCL, aby przyspieszyć, ale nie osiągnąłem jeszcze niesamowitych rezultatów (w niektórych przypadkach nawet gorzej)
adivasile 27.10.11
To znak dobrej próby;) Zobacz implementację w silniku pocisku. W każdym razie powodzenia w twoich projektach.
Coyote
7

Zgadzam się, że tak naprawdę nie ma znaczenia, którego API się uczysz. Ważne jest, aby znać podstawowe pojęcia.

Jeśli chodzi o tworzenie gier, Windows nie jest jedyną platformą docelową. Jak słyszałem, Apple rozwija się jako platforma docelowa, ale konsole są również bardzo ważne. Konsole zwykle mają własne wyspecjalizowane API graficzne (myślę, że robią to po to, by nam przeszkadzać). Chociaż interfejsy API konsoli mają zwykle więcej wspólnego z OpenGL niż z DirectX, nadal nie jest to duża różnica.

Idź z tym, co Ci odpowiada.

mrbinary
źródło
1
XBox prawdopodobnie działa w sposób DirectX ...?
Macke
Tak, PS3 używa PSGL. Ale X360 używał DirectX tak, jak na PC, choć nie jestem tego pewien, to tylko przypuszczenie.
Quazi Irfan
Nie mam doświadczenia na Xboksie, ale według Wikipedii jego API opiera się na DirectX. Na PS3 PSGL jest tylko jednym z dostępnych interfejsów API.
mrbinary
X360 korzysta z API zbliżonego do DX9, z kilkoma dziwactwami, aby uwzględnić fakt, że ma stosunkowo niewielką ilość stosunkowo szybkiej pamięci.
drxzcl
6

A co z perspektywą profesora gier?

Jeśli masz podstawy OpenGL, to WSZYSTKO oznacza zapuszczenie się w świat DirectX (uwaga w DX), że Dx9 jest nadal używany w rozwoju ze względu na kompatybilność, ponieważ starsze platformy (szczególnie XP) nie obsługują nowszej grafiki potok w Dx10 i Dx11. (należy to przeczytać jako zalecenie rozpoczęcia w Dx9, a następnie zauważenia różnic w Dx10, a następnie 11 w miarę postępu). To również sprawi, że będziesz bardziej zaokrąglony.

Najlepiej będzie spędzić trochę czasu w HLSL i CG (zauważ, że te dwa pozornie różne języki modułu cieniującego są w rzeczywistości tym samym językiem (jeden jest oznaczony marką Microsoft, a drugi przez Nvidię), rozumiejąc, jak działają moduły cieniujące wierzchołki i fragmenty (piksele) bądź ogromnym atutem dla ciebie i każdej firmy, dla której idziesz do pracy (zakładając, że pracujesz nad renderowaniem systemów lub podsystemów, a nie kodem AI. ;-)

Ogre3D to silnik renderujący typu open source, który obsługuje oba podsystemy graficzne (OpenGL / DirectX) i jest używany w wielu grach ... ponieważ źródło jest dostępne za darmo, możesz go przeglądać i porównywać, w jaki sposób wywołania OpenGL różnią się od wywołań DirectX.

Poleciłbym to również, ponieważ spędziłeś już trochę czasu w OpenGL, że zaczepiasz się o WebGL, który wygląda na to, że wkrótce wybuchnie.

Mam nadzieję, że to pomoże!

Robert French
źródło
Nie powiedziałbym, że WebGL wybuchnie w przyszłości, a przynajmniej nie w najbliższej przyszłości. To tylko kolejny sposób renderowania 3d w przeglądarkach bez żadnych wtyczek.
Quazi Irfan
Biorąc pod uwagę, że główni dostawcy dodają obsługę HTML5 i JS do swoich produktów (Visual Studio), a firmy takie jak Adobe wdrażają Edge (zabójca JS Flash HTML5?), Myślę, że zobaczą o wiele więcej treści internetowych, które wykorzystują przyspieszenie sprzętowe.
Robert French
4

Niedawno przeczytałem, że John Carmack zaleca DirectX ze względu na prosty fakt, że Microsoft przez jakiś czas grał nadrabiając zaległości w openGL i robiąc to, stworzyli konkurencyjny produkt i przesunęli kopertę, podczas gdy ludzie openGL spędzili czas na kłótni i tworzeniu projektu przez komitet, pozwalając DirectX zostać dopracowanym i, jak sądzę, łatwiejszym w obsłudze, ale pozostającym przy OpenGL.

http://www.tomshardware.com/news/john-Carmack-DirectX-OpenGL-API-Doom,12372.html

Być może inną opcją do rozważenia, jeśli lubisz grafikę w ogóle, a do tego, co się martwi, dzieje się w przestrzeni osadzonej.

Pracuję w przestrzeni osadzonej, używając zarówno Linuksa, jak i WinCE. Byłem byłym architektem Ford SYNC (byłem tam przez 6 lat), a teraz pracuję nad GM CUE (odpowiedź GM na Ford SYNC). Ford SYNC nie korzysta z OpenGL ani DirectX. Zamiast tego Ford wybrał skrypt Flash & Action; co Flash robi pod maską Nie jestem pewien, ale jest powolny jak diabli; JD Powers dał jej słabą ocenę. GM CUE to wszystko Linux i openGL ES i chociaż GM CUE ma nowszy procesor iMX, wydajność animacji w openGL na Linuksie jest oszałamiająca. CUE / openGL jest znacznie szybszy. Ponownie Ford uszkodził swój system za pomocą Adobe Flash.

Tak więc, jeśli chcesz zrobić to w grach, ale martwisz się konkurencyjnym charakterem, ale nadal lubisz tego rodzaju pracę, może spójrz na opcje, które poszerzą twoje CV. Z mojego doświadczenia wynika, że ​​przynajmniej w świecie osadzonym WinCE nie używa aż tak dużo DirectX. (WinCE ma nieco inny interfejs API niż NT może być częścią tego powodu). OpenGL jest wszędzie we wbudowanym świecie, a ludzie robią więcej rzeczy, takich jak tablety, samochodowe systemy informacyjno-rozrywkowe są teraz gorące i oczywiście smartfony ...

Eric
źródło
+1 za wzmiankę o osadzonej przestrzeni. Nie myślałem o grafice dla systemów wbudowanych (z wyjątkiem platform mobilnych), ale po przeprowadzeniu drobnych badań uznałem, że warto rozważyć ten wybór. Kilka lat temu interesowałem się platformami wbudowanymi, ale przeszkodziły mi inne rzeczy, więc zrezygnowałem z tego dość wcześnie.
adivasile
2

Powiedziałbym, że prawdopodobnie w twoim życiorysie dobrze jest powiedzieć, że pracowałeś z oboma, bez względu na to, w czym się specjalizowałeś.

Mówię to, ponieważ, podobnie jak w przypadku innych elementów, chodzi bardziej o ogólne techniki niż znajomość interfejsu API / składni. Musisz być w stanie robić różne rzeczy i znać swoją drogę, ale nie musisz implementować ogromnych rzeczy w obu API: s. (To O (n * m), które nie jest skalowane ...). Trochę znajomość interfejsów API i znajomość różnych technik (tj. O (n + m)) działa i będzie pomocna.

Oczywiście, zdobędziesz bonusy za zrobienie czegoś „zaawansowanego” również w DX, ponieważ pokazuje to, że masz głębszą wiedzę na temat API, ale potrzebujesz pewnych zaawansowanych technik, aby udowodnić, że wiesz, jak należy połączyć te skrzynki (ignorowanie konkretne magiczne słowa, które musisz powiedzieć, aby to zrobić).

Tak samo jest z dowolnym interfejsem API (3d lub innym) lub dowolnym językiem programowania.

Macke
źródło
1

Przekonałem się, że DirectX jest trudniejszy do nauczenia się i dlatego jest lepszą umiejętnością. Directx zwykle ma lepsze wsparcie od producentów płyt, jednak Microsoft nie wydaje wielu aktualizacji, aby skorzystać z tych ulepszeń (i tylko wybrana subpopulacja graczy naprawdę korzysta z tych płyt). Jeśli chodzi o tworzenie gier, wszystkie główne platformy gier używają własnych, zastrzeżonych silników graficznych ... xbox -> DirectX Box :) Znajomość koncepcji 3D, siatek, oświetlenia, transformacji itp. To umiejętność, która jest taka sama dla nich wszystkich.

MartyTPS
źródło
Znalazłem bardzo małą konceptualną różnicę między DX9-ish a „nowoczesnym” openGl (bez użycia glBegin). Byłbym wdzięczny za twoje przemyślenia, dlaczego jeden z nich jest „łatwiejszy” lub „trudniejszy” niż drugi.
drxzcl
1
Właściwie uważam, że OpenGL jest łatwiejszy do zrozumienia naprawdę podstawowych podstaw, ale jak tylko przejdziesz do VBO i shaderów, D3D staje się znacznie łatwiejszy (brak rozszerzeń sprawia, że ​​jest on bardziej spójny na szerszej bazie sprzętowej).
Maximus Minimus
To też jest moje doświadczenie, stąd pytanie.
drxzcl
1

Jeśli znasz jeden, możesz łatwo podnieść drugi.

Jeśli znasz OpenGL, możesz łatwo programować na smartfony (Android i iPhone) oraz Win / Linux / Mac.

DirectX to tylko Win / Xbox. Więc jeśli nie chcesz atakować Xboxa, powiedziałbym, że zostań przy OpenGL, ponieważ może on kierować reklamy na więcej platform.

użytkownik697111
źródło
-4

Wolę OPENGL. Rozważmy na przykład Androida, system operacyjny dla urządzeń mobilnych korzysta z OPENGL. Jest tak wiele silników gier, które zostały opracowane w oparciu o platformę OPENGL.

użytkownik907629
źródło