Czy nowi programiści graficzni powinni uczyć się Vulkan zamiast OpenGL?


53

Z wiki : „Interfejs API Vulkan był początkowo określany przez Khrono jako„ inicjatywa OpenGL nowej generacji ” i że jest to „ gruntowna próba przeprojektowania w celu ujednolicenia OpenGL i OpenGL ES w jednym wspólnym interfejsie API, który nie będzie wsteczny kompatybilny z istniejącymi wersjami OpenGL ”.

Czy więc tym, którzy teraz zaczynają programować grafikę, lepiej służyć naukę Vulkan zamiast OpenGL? Wygląda na to, że będą służyć temu samemu celowi.


1
Jeśli możesz zrobić coś w jednym interfejsie API, możesz to zrobić w dowolnym innym interfejsie API, tylko sposób zrobienia tego zależy od interfejsu API.
A --- B

Odpowiedzi:


33

Ledwie!

To wydaje się bardzo podobne do pytania „Czy nowi programiści uczą się C ++ zamiast C” lub „Czy nowi artyści powinni uczyć się malarstwa cyfrowego zamiast malowania fizycznego”.

Zwłaszcza, że ​​NIE jest on kompatybilny z poprzednimi wersjami, programiści graficzni byliby głupi, aby wykluczyć najpopularniejszy interfejs graficzny API w branży, po prostu dlatego, że jest nowy. Ponadto OpenGL robi różne rzeczy inaczej. Jest całkiem możliwe, że firma wybrałaby OpenGL zamiast Vulkan, szczególnie na początku gry, i ta firma nie byłaby zainteresowana kimś, kto nie zna OpenGL, niezależnie od tego, czy zna Vulkan, czy nie.

Specjalizacja rzadko jest umiejętnością rynkową.

Dla tych, którzy nie muszą sprzedawać swoich umiejętności, takich jak niezależni programiści, byłoby jeszcze WIĘCEJ głupotą usunąć narzędzie ze swojego zestawu narzędzi. Niezależny twórca jest jeszcze bardziej zależny od elastyczności i możliwości wyboru tego, co działa, a nie tego, co zostanie sfinansowane. Specjalizacja w Vulkan ogranicza tylko twoje opcje.

Specjalizacja rzadko jest skutecznym paradygmatem.


2
Dobra odpowiedź, przypomniała mi o tym: elise.com/quotes/heinlein_-_specialization_is_for_insects
Czy

7
Ta analogia C ++ jest nieodpowiednia. Vulkan to nowy interfejs API nowej generacji opracowany przez twórców OpenGL. C ++ jest uznanym, w większości kompatybilnym wstecz, konkurentem dla C.
Moby Disk

Te szczegóły są nieistotne z punktu widzenia analogii.
mHurley,

6
Twierdzenie, że specjalizacja jest nieefektywne lub nie do zniesienia, jest niezwykle naiwne. Tłumacz, który zna wszystkie pięć słów w każdym mówionym języku, jest bezużyteczny, ludzie będą zatrudniać tłumaczy, którzy opanowali (lub też specjalizują się) niewielką liczbę języków. Teraz ponad -specializing jest problematyczne. Tłumacz, który całkowicie opanował jeden język i wie tylko, że ten język również nie jest przydatnym tłumaczem. A deweloperzy (niezależni lub inni) muszą uważać, aby nie poświęcać całego czasu na naukę nowych narzędzi. W końcu muszą zrobić coś do sprzedania, żeby nie zbankrutować
8bittree,

Żeby było jasne, niekoniecznie nie zgadzam się z tobą w odniesieniu do OpenGL i Vulkan. Jest to prawdopodobnie przypadek, w którym nauka obu zamiast tylko Vulkan jest lepszym wyborem.
8bittree,

40

Jeśli zaczynasz już teraz i chcesz pracować na GPU (w przeciwieństwie do zawsze używania silnika gry, takiego jak Unity), zdecydowanie powinieneś zacząć od nauki Vulkan. Być może powinieneś także nauczyć się GL później, ale jest kilka powodów, aby sądzić, że Vulkan-first.

  1. GL i GLES zostały zaprojektowane wiele lat temu, kiedy procesory graficzne działały zupełnie inaczej. (Najbardziej oczywistą różnicą są wywołania w trybie natychmiastowym w porównaniu z kolejkami sąsiadującymi i kolejkami poleceń). GL zachęca do myślenia w trybie natychmiastowym i ma wiele starszych wątków. Vulkan oferuje modele programowania, które są znacznie bliższe temu, jak działają współczesne układy GPU, więc jeśli nauczysz się Vulkan, lepiej zrozumiesz, jak technologia naprawdę działa, a co jest wydajne, a co nieefektywne. Widzę wielu ludzi, którzy zaczynali od GL lub GLES i od razu wpadają w złe nawyki, takie jak wydawanie osobnych wywołań losowania na obiekt zamiast korzystania z VBO lub, co gorsza, przy użyciu list wyświetlania. Programiści GL mają trudności z ustaleniem, czego już się nie zachęca.

  2. O wiele łatwiej jest przejść z Vulkan do GL lub GLES niż odwrotnie. Vulkan wyjaśnia wiele rzeczy, które były ukryte lub nieprzewidywalne w GL, takich jak kontrola współbieżności, współdzielenie i stan renderowania. Sprawia, że ​​sterownik staje się bardziej skomplikowany, ale dzięki temu daje kontrolę nad aplikacją i ułatwia uzyskanie przewidywalnej wydajności i kompatybilności między różnymi dostawcami GPU. Jeśli masz jakiś kod, który działa w Vulkan, dość łatwo można go przenieść do GL lub GLES, a kończy się na czymś, co wykorzystuje dobre nawyki GL / GLES. Jeśli masz kod, który działa w GL lub GLES, prawie musisz zacząć od nowa, aby działał wydajnie w Vulkan: szczególnie, jeśli został napisany w starszym stylu (patrz punkt 1).

Z początku martwiłem się, że programowanie w Vulkan jest o wiele trudniejsze i że dla doświadczonych programistów w większych firmach byłoby to w porządku, ale stanowiłoby to ogromną barierę dla indies i hobbystów. Zadałem to pytanie niektórym członkom grupy roboczej, którzy powiedzieli, że mają pewne punkty danych od osób, z którymi rozmawiały, które już przeprowadziły się do Vulkan. Ci ludzie to zarówno twórcy oprogramowania Epic pracujący nad integracją UE4, jak i hobbystyczni twórcy gier. Ich doświadczenie polegało na tym, że rozpoczęcie (tj. Uzyskanie jednego trójkąta na ekranie) wymagało poznania większej liczby pojęć i posiadania dłuższego kodu, ale nie było to zbyt skomplikowane, nawet dla indies. Ale po przejściu do tego etapu znacznie łatwiej było zbudować prawdziwą aplikację, którą można wysłać, ponieważ (a) zachowanie jest znacznie bardziej przewidywalne między implementacjami różnych dostawców, oraz (b) osiągnięcie czegoś, co działało dobrze przy wszystkich włączonych efektach, nie wymagało tyle prób i błędów. Dzięki tym doświadczeniom od prawdziwych programistów przekonali mnie, że programowanie przeciwko Vulkanowi jest wykonalne nawet dla początkujących grafików i że ogólna złożoność jest mniejsza, gdy przejdziesz samouczek i zaczniesz budować wersje demonstracyjne lub aplikacje, które możesz przekazać innym osobom.

Jak powiedzieli inni: GL jest dostępny na wielu platformach, WebGL to przyjemny mechanizm dostarczania, istnieje wiele istniejących programów, które używają GL, i wielu pracodawców zatrudnia tę umiejętność. Będzie on dostępny przez kilka następnych lat, podczas gdy Vulkan rozwija się i rozwija ekosystem. Z tych powodów głupotą byłoby całkowite wykluczenie uczenia się GL. Mimo to będziesz miał o wiele łatwiejszy czas i staniesz się lepszym programistą GL (i ogólnie lepszym programatorem GPU), jeśli zaczniesz od czegoś, co pomaga zrozumieć GPU, zamiast rozumieć, jak działały 20 lat temu.

Oczywiście jest jeszcze jedna opcja. Nie wiem, czy dotyczy to w szczególności Ciebie, ale i tak powinienem to powiedzieć innym odwiedzającym.

Aby być niezależnym twórcą gier lub projektantem gier lub tworzyć doświadczenia VR, nie musisz uczyć się Vulkan ani GL. Wiele osób zaczyna pracę z silnikiem gier (obecnie popularne są Unity lub UE4). Korzystanie z takiego silnika pozwoli Ci skupić się na wrażeniach, które chcesz stworzyć, zamiast na technologii, która za tym stoi. Ukryje przed Tobą różnice między GL i Vulkan i nie musisz się martwić, które z nich jest obsługiwane na Twojej platformie. Pozwoli Ci dowiedzieć się o współrzędnych 3D, transformacjach, oświetleniu i animacji bez konieczności zajmowania się wszystkimi drobiazgowymi szczegółami naraz. Niektóre studia gier lub VR działają tylko w silniku i nie mają w ogóle pełnoetatowego eksperta GL. Nawet w większych studiach, które piszą własne silniki, osoby zajmujące się programowaniem graficznym stanowią mniejszość,

Poznanie szczegółów interakcji z GPU to z pewnością przydatna umiejętność, którą doceni wielu pracodawców, ale nie powinieneś się czuć, jakbyś musiał nauczyć się tego, aby dostać się do programowania 3D; i nawet jeśli o tym wiesz, niekoniecznie będzie to coś, czego używasz na co dzień.


2
Nieco się nie zgadzam. Vulkan (i DX12) okazał się bardzo trudny do wdrożenia dla doświadczonych deweloperów. Dzięki całej mocy, jaką daje Vulkan, bardzo łatwo jest strzelić sobie w stopę. Ponadto Vulkan wymaga o wiele więcej kodu z szablonami. Dla kogoś, kto dopiero uczy się programowania GPU, myślę, że Vulkan będzie bardzo przytłaczający.
RichieSams,

2
@RichieSams Nie sądzę, że miałeś na myśli „implement”. Tylko dostawca GPU musi wdrożyć Vulkan i jest to o wiele łatwiejsze niż wdrożenie OpenGL. (Uwierz mi, zrobiłem to!) Ale zakładając, że miałeś trudności z integracją lub programowaniem, dodałem akapit z pewnymi informacjami, których nauczyłem się od Vulkan WG.
Dan Hulme

Poprawny. Implement to być może zły wybór słów. Miałem na myśli „używać” w twoim programie. Ale podoba mi się twoja edycja. Dobrze powiedziane
RichieSams,

@ DanHulme - Jestem zaskoczony twoim komentarzem „GL zachęca cię do myślenia w trybie natychmiastowym”. Myślałem, że dotyczy to tylko wczesnych wersji OpenGL?
ToolmakerSteve,

1
@ToolmakerSteve OpenG WG włożyło wiele pracy w dodanie współbieżności i zapisów wsadowych, dzięki czemu możesz wyrazić swój program w sposób odpowiedni dla kafelków / odroczonych implementacji. Ale wciąż jest to fundament, który został ustanowiony w erze trybu natychmiastowego, dlatego ludzie ci uznali, że potrzebny jest nowy początek w Vulkan. Nadal widzę wielu nowych użytkowników zaczynających od GL i tworzących model mentalny trybu natychmiastowego działania implementacji.
Dan Hulme

26

Nauka programowania grafiki to coś więcej niż tylko nauka interfejsów API. Chodzi o nauczenie się, jak działa grafika. Transformacje wierzchołków, modele oświetlenia, techniki cieni, mapowanie tekstur, odroczone renderowanie i tak dalej. Nie mają one absolutnie nic wspólnego z interfejsem API używanym do ich implementacji.

Pytanie brzmi: czy chcesz nauczyć się korzystać z interfejsu API? A może chcesz nauczyć się grafiki ?

Aby robić rzeczy z grafiką przyspieszaną sprzętowo, musisz nauczyć się korzystać z interfejsu API, aby uzyskać dostęp do tego sprzętu. Ale kiedy masz już możliwość komunikowania się z systemem, nauka grafiki przestaje koncentrować się na tym, co robi interfejs API, a zamiast tego skupia się na koncepcjach graficznych. Oświetlenie, cienie, mapy wypukłości itp.

Jeśli Twoim celem jest poznanie koncepcji graficznych, czas spędzany z interfejsem API to czas, który nie poświęcasz na naukę koncepcji graficznych . Jak skompilować shadery, nie ma to nic wspólnego z grafiką. Nie dotyczy to również wysyłania mundurów, przesyłania danych wierzchołków do buforów itp. Są to narzędzia i ważne narzędzia do wykonywania zadań graficznych.

Ale tak naprawdę nie są to koncepcje graficzne. Są środkiem do celu.

Vulkan wymaga dużo pracy i nauki, zanim osiągniesz punkt, w którym możesz zacząć uczyć się koncepcji graficznych. Przekazywanie danych do shaderów wymaga jawnego zarządzania pamięcią i jawnej synchronizacji dostępu. I tak dalej.

Natomiast dotarcie do tego punktu za pomocą OpenGL wymaga mniej pracy. Tak, mówię o nowoczesnym, opartym na shaderze rdzeniowym OpenGL.

Po prostu porównaj, co trzeba zrobić, aby zrobić coś tak prostego, jak wyczyszczenie ekranu. W Vulkan wymaga to przynajmniej zrozumienia dużej liczby pojęć: buforów poleceń, kolejek urządzeń, obiektów pamięci, obrazów i różnych konstrukcji WSI.

W OpenGL ... to trzy funkcje: glClearColor, glClear, a swap platforma specyficzne buforuje połączenia. Jeśli używasz bardziej nowoczesnego OpenGL, możesz zmniejszyć go do dwóch: glClearBufferuivi zmienić bufory. Nie musisz wiedzieć, co to jest bufor ramki i skąd pochodzi jego obraz. Czyścisz go i zamieniasz bufory.

Ponieważ OpenGL dużo przed tobą ukrywa, przejście do punktu, w którym faktycznie uczysz się grafiki, zajmuje o wiele mniej wysiłku niż uczenia się interfejsu do sprzętu graficznego.

Ponadto OpenGL jest (względnie) bezpiecznym API. Zwykle będzie powodować błędy, gdy zrobisz coś złego. Vulkan nie jest. Chociaż istnieją warstwy debugujące, których można użyć do pomocy, podstawowy interfejs API Vulkan nie powie prawie nic, chyba że wystąpi awaria sprzętowa. Jeśli zrobisz coś złego, możesz uzyskać wyrzucanie elementów bezużytecznych lub awarię GPU.

W połączeniu ze złożonością Vulkan, bardzo łatwo jest przypadkowo zrobić coś złego. Zapominanie o ustawieniu tekstury we właściwym układzie może działać w ramach jednej implementacji, ale nie w innej. Zapomnienie punktu syronizacji może czasem działać, ale nagle kończy się niepowodzeniem z pozoru bez powodu. I tak dalej.


Mimo to, nauka grafiki to coś więcej niż nauka technik graficznych. W szczególności jest jeden obszar, w którym wygrywa Vulkan.

Wydajność graficzna .

Bycie programistą grafiki 3D zazwyczaj wymaga pomysłu na optymalizację kodu. I to tutaj ukrywanie informacji przez OpenGL i robienie rzeczy za twoimi plecami staje się problemem.

Model pamięci OpenGL jest synchroniczny. Implementacja może wydawać polecenia asynchronicznie, o ile użytkownik nie będzie w stanie odróżnić. Jeśli więc renderujesz obraz, a następnie spróbuj go odczytać, implementacja musi wydać jawne zdarzenie synchronizacji między tymi dwoma zadaniami.

Ale aby osiągnąć wydajność w OpenGL, musisz wiedzieć, że implementacje to robią, abyś mógł tego uniknąć . Musisz zdać sobie sprawę, gdzie implementacja potajemnie generuje zdarzenia synchronizacji, a następnie przepisać kod, aby uniknąć ich w jak największym stopniu. Ale sam interfejs API nie czyni tego oczywistym; skądś musiałaś zdobyć tę wiedzę.

Dzięki Vulkan ... to ty musisz wydać te zdarzenia synchronizacji. Dlatego musisz zdawać sobie sprawę z faktu, że sprzęt nie wykonuje poleceń synchronicznie. Musisz wiedzieć, kiedy musisz wydać te zdarzenia, dlatego musisz mieć świadomość, że prawdopodobnie spowolnią Twój program. Robisz więc wszystko, aby ich uniknąć.

Wyraźny interfejs API, taki jak Vulkan, zmusza do podejmowania tego rodzaju decyzji dotyczących wydajności. A zatem, jeśli nauczysz się Vulkan API, masz już dobry pomysł na to, jakie rzeczy będą wolne i jakie będą szybkie.

Jeśli musisz wykonać trochę buforowania klatek, który zmusi cię do utworzenia nowego passpassu ... szanse są dobre, że będzie on wolniejszy niż gdybyś mógł zmieścić go w osobnym subpassu renderpassu. Nie oznacza to, że nie możesz tego zrobić, ale interfejs API mówi z góry, że może to powodować problemy z wydajnością.

W OpenGL interfejs API zasadniczo zachęca do zmiany załączników bufora ramki. Nie ma wskazówek, które zmiany będą szybkie lub powolne.

W takim przypadku nauka Vulkan może pomóc ci lepiej dowiedzieć się, jak przyspieszyć grafikę. I z pewnością pomoże ci zmniejszyć obciążenie procesora.

Nadal zajmie to znacznie więcej czasu, zanim przejdziesz do etapu, w którym możesz nauczyć się technik renderowania graficznego.


1
Cieszę się, że to opublikowałeś, ponieważ bardzo wyraźnie wyjaśnia kilka pomysłów, które wahałem się wyrazić w mojej odpowiedzi: że nauka pojęć jest najważniejsza. Myślę, że różnią się między sobą, ponieważ zachęcasz GL, ponieważ łatwiej jest zacząć, podczas gdy uważam, że łatwość rozpoczęcia wiąże się z ryzykiem robienia rzeczy w tradycyjny sposób. W GL trudno jest wiedzieć, czym jest „nowoczesny idiom GL” w porównaniu z programowaniem w starszym stylu. Jeśli nikt nie mówi ci, abyś używał VAO zamiast osobnego wywołania losowania dla prymitywów, o wiele trudniej jest później oduczyć się tego błędu.
Dan Hulme

1
@DanHulme: Wszystko zależy od zastosowania odpowiednich materiałów do nauki. Istnieje wiele takich materiałów online, które wykorzystują nowoczesne idiomy. Nikt nigdy nie powinien próbować uczyć się grafiki po przeczytaniu podręcznika lub specyfikacji.
Nicol Bolas,

Sprawiasz, że brzmi to naprawdę łatwo! Mimo to wciąż widzę, jak programiści zaczynają pracę w grafice - niektórzy z nich są bardzo kompetentni w innych dziedzinach - i używają starszych funkcji i nie dowiadują się nic o charakterystyce wydajności. Naprawdę trudno jest źle to zrobić, ponieważ sprawia, że ​​drogie rzeczy wyglądają na drogie. W każdym razie nie musimy się kłócić. Zgadzam się z twoim głównym punktem: nauka pojęć jest najważniejsza i możesz to zrobić bez Vulkanu i GL.
Dan Hulme

@DanHulme: „ Naprawdę trudno jest popełnić błąd w Vulkan ” Ponieważ jesteś zbyt zajęty robieniem wszystkiego innego ;) Ponadto bardzo łatwo jest popsuć błędy w Vulkan. Niepotrzebna synchronizacja. Używanie tylko „ogólnego” układu obrazu. Nieużywanie pod-przejść. Częste zmiany rurociągów. I tak dalej. Nie wspominając, że różni dostawcy nawet nie zgadzają się, jak najlepiej korzystać z Vulkan.
Nicol Bolas,

2
@DanHulme: chodzi o to, jak łatwo jest użycie nowoczesnych OpenGL, ja robię mój najlepszy do ułatwiają . Jeśli ludzie nalegają na uczenie się na śmieciach, takich jak NeHe, lub przez czytanie przypadkowej dokumentacji, to nie jest coś, co może pomóc. Możesz doprowadzić konie do wody, ale nie możesz ich zmusić do picia.
Nicol Bolas,

7

Główną zaletą OpenGL (przynajmniej dla mnie) jest to, że działa na wielu platformach. Obecnie Vulkan nie działa na OSX, a Apple ma konkurencyjny interfejs API o nazwie Metal. Jest bardzo możliwe, że minie trochę czasu, zanim Apple wesprze Vulkan, a kiedy to zrobią, wsparcie Vulkan może przyjść tylko do ich najnowszego sprzętu. OpenGL obsługuje już większość sprzętu i nadal będzie to robić.


Założę się, że jeśli OSX kiedykolwiek wesprze Vulkan, będzie obsługiwał tylko niewielki jego podzbiór, a to stanie się również graficznym interfejsem API następnej generacji dla przeglądarek internetowych, OpenGL jest wciąż o wiele prostszy w użyciu (do pewnego stopnia) niż Vulkan, co vulkan zyskuje na prostocie w porównaniu z renderowaniem rurociągu, traci go w jawnej obsłudze wielu innych rzeczy
GameDeveloper

1
@DarioOO Tryb natychmiastowy OpenGL jest o wiele prostszy w użyciu niż tryb, który nazywamy rzeczą, która nie jest natychmiastowa, ale nie jest to zalecane.
user253751

1
@Gavin: Należy zauważyć, że OpenGL w wersji 4.2 lub nowszej nie są również obsługiwane w OSX. Więc jeśli chcesz używać czegoś nowego z OpenGL na OSX, nie możesz. I Apple raczej nie przyjmie późniejszych wersji OpenGL. Platforma Apple jest w całości zintegrowana z Metalem, więc cross-platform jest przełomem.
Nicol Bolas,

Apple nigdy nie będzie obsługiwać Vulkanu, chyba że będzie do tego zmuszony, a jego ekonomia jest dość prosta. Wchodząc w grę Metal, mają nadzieję zablokować twórców gier mobilnych, którzy potrzebują więcej niż GLES2 może zaoferować, ale nie mają środków na pisanie swoich gier dla Vulkan i Metal. Są gotowi poświęcić w tym celu drobny ekosystem gier Maca, szczególnie jeśli twórcy iOS również wypuszczą na Mac App Store.
Jonathan Baldwin

Vulkan działa teraz na macOS (wcześniej OS X): moltengl.com
Alexander

4

To zależy od tego, co chcesz zrobić. Jeśli chcesz nauczyć się programowania grafiki tylko dla siebie, to naprawdę nie ma znaczenia, co wybierzesz.

Jeśli myślisz o pracy zawodowej, polecam Vulkan. Jest bliżej sprzętu i myślę, że wiedza o tym, co robi sprzęt, jest ważna dla programistów graficznych.

Vulkan jest bliżej sprzętu, ponieważ OpenGL robi wiele rzeczy pod maską, co w Vulkan robisz ręcznie, np. Wykonujesz kolejkę poleceń. Również zarządzanie pamięcią zależy od aplikacji, a nie sterownika. Musisz się martwić o przydzielenie pamięci uniforms(zmienną przekazywaną z procesora na GPU), o ich śledzenie. Masz więcej powodów do zmartwień, ale daje też więcej swobody w korzystaniu z pamięci. Może zabrzmieć przerażająco i przytłaczająco, ale tak naprawdę nie jest. To tylko kolejny interfejs API, którego musisz się nauczyć.

Zrozumienie tego pomoże również zrozumieć, jak działa procesor graficzny. Co pozwoli ci dokonać optymalizacji zarówno na Vulkan, jak i OpenGL.

I jeszcze jedna rzecz, która przychodzi mi na myśl, jeśli zaczynasz uczyć się programowania grafiki, prawdopodobnie kiedy szukasz pracy, ponieważ jeden Vulkan będzie bardziej popularny (być może bardziej popularny niż OpenGL). Ponadto, o ile wiem, większość firm korzystających z niektórych graficznych interfejsów API pisze własne funkcje wokół niego, więc jest szansa, że ​​w pracy nie będziesz pisać w OpenGL ani w Vulkan, ale wiedza o GPU zawsze będzie przydatna.


2

Od kilku miesięcy zajmuję się programowaniem grafiki.

W tej chwili jestem jeszcze w liceum i mogę powiedzieć, że prawie zawsze staram się tworzyć aplikacje na wiele platform. To w rzeczywistości mój numer jeden problemu z Vulkanem - nie jest przeznaczony do pracy na wszystkich platformach. Pracuję z OpenGL w Javie i mam ponad 6 miesięcy.

Innym problemem, jaki mam, jest twierdzenie Vulkanu, jak twierdzi, że jest lepszy. Chociaż OpenGL z pewnością nie aktualizuje często swojej witryny. Ciągle publikują aktualizacje i zawsze czekam na nowe aktualizacje, które działają szybciej lub lepiej działają z nowym sprzętem.

Biorąc to pod uwagę, chociaż głównie pracuję z OpenGL, rozumiem podstawowe zasady DirectX i Vulkan. Chociaż nie pracuję z nimi zbyt intensywnie, szczególnie z Vulkanem, ponieważ jest bardzo trudny do nauczenia się i nie jest tak dobrze skonstruowany do programowania jak OpenGl i DirectX.

Na koniec chciałbym dodać, że specjalizowanie się w jednym obszarze, jak to, że głównie używam Javy, a OpenGL nie jest niesamowicie samodzielnym rynkiem. Gdybym chciał znaleźć pracę w firmie zajmującej się tworzeniem gier, w przeważającej części OpenGL byłby używany tylko do tworzenia gier dla systemów Linux i Android oraz ewentualnie dla OSX. DirectX dla Windows i konsol <Które Vulkan może zastąpić w niektórych przypadkach.

Nie mogę wiecznie trzymać się aktualizacji OpenGL i nie będę. Ale to moja preferencja dla rozwoju.


Innym problemem, jaki mam z twierdzeniami Vulkan, jest to, jak twierdzi, że jest lepszy. ” Vulkan nie twierdzi, że jest niczym. To tylko interfejs API; nie może wysuwać roszczeń.
Nicol Bolas,

Czy zdajesz sobie sprawę, że Vulkan i GL są tworzone głównie przez te same osoby?
Dan Hulme

Tak. Nadal wolę GL
Winter Roberts,

2

Chciałbym dać wam moją graficzną perspektywę dla początkujących na ten temat. Uświadomiłem sobie (przez wiele lat pracy jako inżynier w innej dziedzinie), że podstawowe pojęcia są najważniejsze. Kiedy już dobrze je zrozumiesz, nauka ostatniego błyszczącego nowego API jest najmniej trudną częścią. Nie wiem, czy jesteś młodym hobbystą próbującym zaprogramować nowego Skyrim, czy też szukasz pracy w branży komputerowej.

Powiem ci, co myślę, że jest to najlepsze podejście , moim zdaniem , aby dowiedzieć się grafiki komputerowej „jak profesjonalista”.

  1. Naucz się algebry liniowej i geometrii jak profesjonalista. Bez tego zapomnij o jakimkolwiek fantazyjnym API lub grafice
  2. Kup dobrą książkę o grafice komputerowej (np. Podstawy grafiki komputerowej )
  3. Podczas studiowania książki skonfiguruj środowisko programistyczne z czymś, co pozwala rysować na obrazie i implementować algorytmy! Może to być Java 2D lub C ++ i SDL, a nawet Python i Pygame. Na tym etapie musisz uzyskać obracające się koła zębate z teksturami i widokami z wielu kamer, zanim spróbujesz uzyskać 10000 FPS
  4. Teraz weź OpenGL, Vulkan lub DirectX i powtórz swój wymyślny przykład (patrz wyżej).

Zrozumienie wydajności przed zrozumieniem, jak narysować linię, jest jak martwienie się o aerodynamikę samochodu przed uzyskaniem prawa jazdy.


0

Jestem samoukiem w C ++ bez formalnego wykształcenia i przez ostatnie 15 lat nauczyłem się zarówno OpenGL 1.0, jak i Modern OpenGL oraz DirectX 9c, 10 i 11. Nie dostałem się do DirectX 12 i chciałem spróbuj swoich sił w Vulkan. Ukończyłem tylko kilka podstawowych samouczków, aby narysować prosty trójkąt lub prostą wirującą kostkę za pomocą Vulkanu. Podobnie jak w przypadku DirectX 11 i OpenGL 3.3+, napisałem w pełni działające silniki gier 3D, a nawet używałem ich do tworzenia prostych gier.

Chciałbym powiedzieć, że zależy to od ogólnego środowiska osoby uczącej się. Jeśli dopiero zaczynasz programować grafikę 3D, powiem, że dla początkujących wskocz do OpenGL lub DirectX 11, ponieważ istnieje wiele samouczków, zasobów, przykładów i już działających aplikacji. Nauka grafiki 3D nie jest łatwym przedmiotem.

Jeśli oderwamy się od jego programowania i skupimy się na pojęciu, jakie techniki są stosowane z uwzględnieniem różnych poziomów matematyki prowadzących do zbiorów danych oraz struktur i algorytmów danych; jest wiele rzeczy, które musisz najpierw zrozumieć i zrozumieć, zanim będziesz mógł spróbować zbudować silnik gry 3D lub efektywnie wykorzystać istniejący.

Teraz, jeśli rozumiesz już całą matematykę i teorię, i masz doświadczenie w programowaniu, możesz użyć już istniejących interfejsów API, bibliotek i aplikacji, takich jak Unity lub Unreal Engine, i po prostu napisać kod źródłowy i skrypty potrzebne do działania aplikacji. .

Tak więc z mojego własnego zrozumienia i tego, co widzę, jest tak, jeśli chcesz zbudować szybką grę tylko ze względu na zbudowanie gry; przejdź do już istniejących prac ramowych, które znacznie skróciłyby Twój czas produkcji. Z drugiej strony, jeśli chcesz zrozumieć wewnętrzne zasady projektowania Silników do gier / Silników fizycznych / Silników animacyjnych i symulatorów i chcesz samodzielnie je zbudować, możesz wybrać między takim interfejsem API, jak DirectX, OpenGL lub Vulkan. Jednym z czynników decydujących w tym przypadku byłaby również twoja wiedza programistyczna. Mam na myśli to, że nie wiesz nic o połączeniach wielowątkowych, połączeniach synchronicznych i asynchronicznych, płotach pamięci, wyścigach danych, semaforach i równoległości (programowanie równoległe),

Wspominam o tym, ponieważ jeśli nie wiesz, jak właściwie zarządzać pamięcią wraz z wątkami i czasem dostępu; Vulkan ugryzie cię w tyłek! Gdzie OpenGL i DirectX utrzymają Twoją rękę przez cały czas, zużywając znacznie więcej mocy procesora.

Teraz, jeśli Twój poziom wiedzy programistycznej jest przyzwoity i masz następujące podstawy matematyczne, które obejmują wszystkie poziomy Algebry, Geometrii, Trygonometrii, Algebry Boolean, Prawdopodobieństwo, Statystyka, Wektor - Algebra oparta na Matrycy, Rachunek I, II, ... Infinty (lol). Rachunek wektorowy, Algebra liniowa, Układy równań liniowych, Geometria analityczna z Rachunkiem wektorowym obliczeń wielozmiennych, Teoria liczb i zbiorów, Zbiory i struktury danych, Analiza obliczeniowa, Obliczanie i projektowanie algorytmiczne. Następnie możesz zapoznać się z koncepcjami potrzebnymi do stworzenia rzeczywistego silnika gry, i to bez żadnych zastosowanych matematyki ani równań fizyki, których potrzebujesz. Gdy zdobędziesz to doświadczenie i wystarczająco dużo doświadczenia programistycznego, zwłaszcza zarządzania pamięcią i arytmetyki wskaźników, możesz zacząć budować silnik gry.

Rzecz w tym, że musisz zrozumieć wszystkie aspekty niezbędne do stworzenia silnika gry, aby wykonać zaawansowane programowanie graficzne. Jeśli robisz tylko grafikę 2D, życie nie jest zbyt trudne, ponieważ możesz to zrobić w Pythonie bez żadnego z wyżej wymienionych interfejsów API! Ale jeśli chcesz być poważny i zaprojektować pełnoprawny, potężny silnik gry, który jest solidny z wieloma zestawami funkcji, wybierz tutaj C lub C ++ i używając OpenGL, Direct X lub Vulkan. Każdy z nich byłby w porządku. Teraz, jeśli budujesz silnik od zera i szukasz najbardziej „wydajnego” działającego silnika z najmniejszym narzutem zasobów, powinieneś wybrać Vulkan. Ale jeśli pójdziesz tą drogą, powinieneś przynajmniej wiedzieć wszystko, o czym wspomniałem powyżej i niektóre!

Jak widać, Vulkan nie jest tak naprawdę nastawiony na początkujących programistów w tej dziedzinie. Musisz mieć rozległą wiedzę na temat całej matematyki, paradygmatów programowania, wszystkich różnych rodzajów zestawów danych i algorytmów, w tym wątków, synchronizacji pamięci, programowania równoległego. I nawet wtedy to wystarczy, aby aplikacja załadowała prosty trójkąt 2D na ekran. Co można zrobić w około 100 liniach kodu w OpenGL lub 250 liniach kodu w DirectX, zajmuje prawie 1000 linii kodu w Vulkan!

Vulkan pozostawia wszystko Tobie, ponieważ jesteś odpowiedzialny za wszystkie aspekty korzystania z Vulkan w swojej aplikacji. Nie ma ręki trzymającej, nie przeszkadza, pozwoli ci zastrzelić się w stopę lub powiesić rekurencyjną pętlę!

Nie oznacza to, że początkujący lub nowicjusze w tej dziedzinie nie powinni uczyć się wulkanu, ale sugeruję im to: Najpierw naucz się OpenGL i DirectX, aby zmoczyć stopy, aby zobaczyć, jak Podstawowa aplikacja jest zbudowana tak, aby renderować prosty trójkąt lub wirujący sześcian. Zapoznaj się z ich interfejsami API i powtarzającymi się wzorcami ich struktur. Ucząc się, że możesz uczyć się wulkanu równolegle w Parallel, w ten sposób możesz zobaczyć, jak każda z tych trzech osób wykonuje to samo zadanie, ale wiedzieć, jak robią to inaczej, możesz również porównać wyniki między różnymi interfejsami API i z tam możesz następnie wybrać, który z nich jest dla ciebie preferowany. Ta metoda dałaby Ci także inne narzędzie w skrzynce z narzędziami. Możesz nawet napisać aplikację obsługującą wszystkie 3 i mieć „

Ostatecznie to osoba decyduje o tym, którą drogą chce zejść, a stamtąd ich sukces będzie zależał od ich poświęcenia, ciągłych studiów, ciężkiej pracy, prób i błędów, a przede wszystkim od ich niepowodzeń. Jeśli nie zawiedziesz, to nie odniesiesz sukcesu! Odnosisz sukces tylko wtedy, gdy poniosłeś porażkę, znalazłeś swój błąd (błędy), naprawiłeś je, przeniosłeś się i wróciłeś i zrobił to wszystko od nowa!


-1

Najpierw powinieneś nauczyć się OpenGL, ponieważ jest to standard grafiki na wielu platformach.

Nawet jeśli istnieje nowsza biblioteka, zrozumienie podstaw i praca z językiem używanym w całej branży jest bardzo ważna ... Zwłaszcza, że ​​od tego czasu Vulkan nie będzie używany w dużych firmach.

  1. Nikt nie chce od razu się przystosować i ostatecznie popsuć się niestabilnym szkieletem / biblioteką.

  2. Musieliby zatrudnić / ponownie przeszkolić swoich obecnych programistów Open-GL i nie ma takiej potrzeby.


Słyszałem też, że OpenGL i Vulkan nie są dokładnie takie same. Słyszałem, że Vulkan jest API niższego poziomu i bliższym kodowi maszynowemu niż OpenGL.

Ta odpowiedź, którą właśnie znalazłem, wydaje się zawierać wiele świetnych informacji

https://gamedev.stackexchange.com/questions/96014/what-is-vulkan-and-how-does-it-differ-from-opengl


Kolejną rzeczą, którą należy rozważyć, jest problem, który wydarzył się z OpenGL 1.

W OpenGL 1 do OpenGL 2 wprowadzono GŁÓWNE zmiany, a ponieważ wiele osób używało OpenGL1, a sprzęt go obsługiwał, w niektórych aplikacjach / silnikach konieczna jest duża kompatybilność wsteczna, co czasami jest bardzo bolesne dla deweloperów .

Oprócz wsparcia język zmienił się tak bardzo, że trzeba było nauczyć się nowych rzeczy.

Stało się tak w przypadku frameworków takich jak JavaFX (od 1.x do 2.x) i Play! Framework (także 1.x do 2.x). Dokonaj zmian we frameworku, co oznacza, że ​​musimy nauczyć się ... wszystkiego ...


Zasadniczo powinieneś poczekać, aż Vulkan będzie STABILNY. Oznacza to, że poczekaj, aż prawdopodobnie łatka 2.0. IT nie oznacza, że ​​nie możesz nauczyć się podstaw Vulkanu, ale wiedz, że to może się zmienić. Zakładam, że grupa taka jak Kronos zapewniłaby bardzo stabilne API od samego początku, zwłaszcza że w Vulkan pracuje wielu inżynierów Nvidii i AMD, w tym najwyraźniej osoba z Nvidii najwyraźniej nadzorująca projekt, a także Baza Mantle; jednak, jak każde oprogramowanie, my, koderzy, zobaczymy, jak to działa od samego początku, ale wielu jest ostrożnych i czeka, aby zobaczyć, co się stanie.


Vulkan jest teraz stabilny. Twoja analogia GL 1.0 do 2.0 jest trafna. Zaczynając od GL, byłoby jak rozpoczęcie nauki GL 1.0 sześć miesięcy po wydaniu GL 2.0.
Dan Hulme

1
Vulkan może być „stabilny”, to nie znaczy, że rzeczy się nie zmienią, taka jest natura języków, które przedstawiłem 2 ostatnie zmiany w językach w ciągu ostatnich kilku lat, więc skąd mamy wiedzieć, że to się nie stanie Vulkanowi? Mówisz w zasadzie, że nauka OpenGL jest marnotrawstwem, a to nieprawda. Sprawiając, że OpenGL jest martwy i nie będzie już używany ... Również fałszywy. Poza tym nie jestem jedynym, który uważa, że ​​Vulkan może mieć problemy ze stabilnością. Może nie, ale z każdym nowym językiem właśnie tego szukasz.
XaolingBao

1
Oczywiście wszystko się zmieni, a grupa robocza już pracuje nad nowymi funkcjami dla kolejnej wersji specyfikacji (ssh, nie słyszałeś tego ode mnie). Stabilny oznacza, że ​​te rzeczy dodadzą się do specyfikacji, a rzeczy, których się o nim dowiesz, będą nadal ważne za dwa lata. OTOH, rzeczy, których dziś dowiadujesz się o GL, są już słabo dopasowane do tego, jak działają procesory graficzne: podobnie jak nauka o potokach o stałej funkcji w świecie programowalnych shaderów. Jeśli przeczytasz moją odpowiedź, zobaczysz, że nie sądzę, aby nauka GL była teraz marnotrawstwem. Ale „Vulkan jest zbyt nowy” nie jest dobrym powodem do dyskontowania go.
Dan Hulme

1
@Lasagna: „ To może ulec zmianie, niewiele firm dostosuje się do korzystania z niego od razu ” Valve. Epicki. Jedność. Wszystkie są mocno zainwestowane w sprawienie, by ich silniki pracowały na Vulkan. CryTech i Id też tego nie ignorują. Więc twoje oświadczenie nie jest współmierne do faktów.
Nicol Bolas,

2
@Lasagna: „ Tylko dlatego, że jest dostosowywany do silników 3D, nie oznacza, że ​​firmy inwestują w niego swoje projekty ”… Czyli silniki 3D nie kwalifikują się jako „projekty”? Czy DOTA2 liczy się jako „projekt”? Ponieważ ma wsparcie dla Vulkan teraz . Czy linia smartfonów i tabletów Samsunga liczy się jako „projekt”? Ponieważ chcą włączyć to do interfejsu użytkownika. W rzeczywistości wiele osób chce „być tym, który przetestuje nową platformę”, jeśli platforma ta dostanie to, czego potrzebują.
Nicol Bolas,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.