Bądź: Wyszukaj na stronie z użyciem Google
reklama:

poniedziałek, 11 stycznia 2010

Dlaczego powinieneś używać OpenGL a nie DirectX

Autor: , 09:00, poniedziałek, 11 stycznia 2010


Jak to się stało, że OpenGL pomimo dostępności na wszystkie popularne platformy przegrywa z DirectX działającym jedynie na wyrobach Microsoftu? Co Microsoft zrobił aby zniszczyć OpenGL? Jakie zalety mają otwarte rozwiązania programistyczne i wreszcie - co zrobić by uleczyć rynek gier. O tym wszystkim w poniższym wpisie mówią sami producenci gier.

Tłumaczenie z blog.wolfire.com za zgodą autora: Adrian Nowak.

Często gdy spotykamy się z twórcami gier i mówimy, że używamy OpenGL dla naszej gry Overgrowth, spotykamy się z olbrzymim niedowierzaniem - po co ktoś miałby używać OpenGL? DirectX to przyszłość. Kiedy oznajmiamy przedstawicielom firm tworzących karty graficzne, że używamy OpenGL, temperatura w pokoju spada o dziesięć stopni.

To nas odosabnia. Jest znaną filozofią geeków, że bazujące na standardach witryny powinny używać bezbłędnego Silverlighta, Flasha albo ActiveX. Programowanie z użyciem wielo-platformowych technologii jest godne pochwały i mądre. Nie mam wewnętrznego szacunku dla geeków pracujących z zamkniętymi dokumentami Worda czy serwerami Exchange. Gdzie się podział ten świat w którym projektanci oprogramowania nie są podnieceni jedynie nowym własnościowym API Microsoftu ale aktywnie wspierają otwarte standardy konkurencji?

Zanim zagłębimy się w opowieść dlaczego wspieramy OpenGL, zacznijmy od odrobiny historii:

Czym jest OpenGL?

W 1982 roku, firma Silicon Graphics rozpoczęła sprzedaż terminali graficznych używających własnościowego API nazwanego Iris GL (GL to skrót od "graphics library").  Przez lata Iris GL "pęczniał" do tego stopnia, iż trudno było nim dalej zarządzać - do czasu gdy Silicon Graphics przedsięwzięło radykalny krok: kompletnie przebudowali Iris GL i uczynili go otwartym standardem. Ich konkurencja mogła używać Open Graphics Library (OpenGL) ale w zamian musieli pomóc im w rozbudowie i utrzymaniu bibliotek aktualnymi.

Dziś OpenGL jest pod kontrolą Khronos Group - organizacji non-profit z reprezentantami wielu firm, którym zależy na tworzeniu wysokiej jakości multimedialnego API. Na niższym poziomie całość jest zarządzana przez OpenGL Architecture Review Board (ARB). OpenGL jest wpierany przez wszystkie platformy gier, włączając w to Mac, Windows, Linux, PS3 (jako nakładka GCM), Wii, iPhone, PSP i DS. Właściwie, wszystkie platformy gier poza XBox - co przenosi nad do kolejnego tematu:

Czym jest DirectX

Zawsze od czasu MS-DOS, Microsoft rozumiał, że uruchamianie gier to ważny aspekt dla użytkowników wybierających system operacyjny. Z tego powodu, w 1995 roku stworzyli zestaw zamkniętych bibliotek aby zachęcić do użytkowania ekskluzywnych gier dla ich nowego systemu operacyjnego Windows 95. Te biblioteki zawierały Direct3D, DirectInput i DirectSound a cała kolekcja została ogłoszona jako DirectX. Kiedy Microsoft otwierał rynek gier w 2001 roku, przedstawił także DirectX Box albo w skrócie XBox. XBox przyniósł ogromne straty (topiąc ponad 4 miliardy dolarów), jednak przygotował grunt do dominacji na rynku gier w przyszłej wersji.

Patrząc teraz na rynek gier jest jasne, że ich strategia była odpowiednia. Większość komputerów PC używa do uruchamiania gier DirectX i jest przygotowywanych zarówno dla Windowsa jak i XBox 360. Z kilkoma wyjątkami, nie działają one na konkurencyjnych platformach takich jak Playstation, Mac OS czy Wii. To są zbyt znaczące rynki by je pominąć, zatem pojawia się kolejne wielkie pytanie:

Czemu wszyscy używają DirectX?

Każdy używa DirectX ponieważ wybór API dla gry jest bardzo mocno związany z przeszłością, która została ukształtowana na korzyść DirectX w 2005 roku.

To efekt pętli, gdyż kiedy jedno API stanie się popularne, zyskuje coraz większe i większe wsparcie. Jednym z najważniejszych tego przejawów jest to, że znane API otrzymuje lepsze wsparcie od producentów kart graficznych a także programiści szkolą się chętniej pod kątem popularnych rozwiązań.

API DirectX zostało spopularyzowane w kampaniach promujących Xbox 360 i Windows Vista, włączając w to FUD (rozsiewanie strachu, niepewności i wątpliwości) w stosunku przyszłości OpenGL i przesadzone zasługi dla możliwości DirectX. Cały czas od tamtej pory, niechęć do OpenGL rosła aż do momentu praktycznej jego eliminacji z rynku popularnych gier PC.

1. Efekt sieciowy i błędne koło


Faktem jest, że na Windowsie sterowniki graficzne dla DirectX są częściej dostarczane niż analogiczne OpenGL. Jest to spowodowane błędnym kołem wsparcia ze strony producentów. Deweloperzy gier przenoszą się z OpenGL na DirectX także z innych przyczyn, firmy produkujące karty graficzne (sprzedawcy) dostają mniej raportów z bugami dla ich sterowników OpenGL, rozszerzeń i dokumentacji. Z tego powodu słabnie jakość sterowników OpenGL prowadząc do jeszcze większej ucieczki z OpenGL do DirectX.
Cykl się powtarza.

Podobnie faktem jest, że więcej programistów gier wie jak używać DirectX niż OpenGL, więc jest taniej (wymagane mniej ćwiczeń) stworzyć grę z użyciem DirectX niż OpenGL. To rezultat innego błędnego koła: im więcej projektów gier używa DirectX, tym więcej programistów uczy się jak go używać. Im więcej programistów uczy się jak go używać, tym tańsze staje się tworzenie gier z użyciem DirectX w porównaniu do OpenGL.

2. FUD dotyczący OpenGL i Visty

Microsoft wszczął strach, niepewność i wątpliwości (FUD) przeciwko OpenGL w czasie premiery Windows Vista. W 2003 roku, Microsoft opuścił OpenGL Architecture Review Board - pokazując, że nie mają już żadnych interesów w związku z OpenGL. W 2005 roku, przedstawili prezentację na SIGGRAPH (special interest group for graphics) i WinHEC (Windows Hardware Engineering Conference) podkreślając, że Windows Vista usunie wsparcie dla OpenGL z wyjątkiem wstecznej kompatybilności dla aplikacji z XP. Ta wersja OpenGL będzie warstwą OpenGL jak pokazano tutaj, (z prezentacji HEC) będąc prawdziwym hitem wydajnościowym. Ta kampania zaprowadziła do paniki w społeczności OpenGL, co spowodowało przejście wielu profesjonalnych programistów na DirectX.

Kiedy wydano Vistę, umożliwiono przywrócenie na niej wsparcia dla OpenGL przez stworzenie ICD (installable client drivers). Zespół OpenGL rozesłał wtedy newslettery zapewniające, że OpenGL jest wciąż pierwszorzędnym obywatelem oraz, że wydajność OpenGL na Viście jest wciąż porównywalna z Direct3D. Niestety dla OpenGL, szkody były już nieodwracalne - zaufanie publiczne do OpenGL zostało mocno nadszarpnięte.


3. Mylące kampanie marketingowe


Kampanie promujące Windows Vista i Windows 7 były obie mocno nastawione na promowanie DirectX, często przedstawiając zrzuty ekranu "przed" i "po" różnych wersji DirectX. Wielu graczy myśli teraz, że przejście z DirectX 9 na DirectX 10 magicznie zmieniło ich grafikę z bardzo słabej na normalną (jak na powyższym porównaniu) albo z Halo 1 na Crysis. Dziennikarze piszący o grach udowodnili, że nie na różnicy między Crysis na DX9 i DX10 a te "funkcje DX10" działają bez problemu z DX9 po edycji pliku konfiguracyjnego. Pomimo oczywistych nieścisłości, zabiegi marketingowe przekonały wielu graczy, że aktualizacje DirectX to jedyny sposób na dostęp do funkcji najnowszych kart graficznych.

Mimo wielkiego udziału Microsoftu w rynku gier, wielu bystrych programistów jak John Carmack odmówiło brania w tej ekspansji udziału. Przedstawił to w ten sposób: "Osobiście, nie przerzucałbym się póki co na coś takiego jak DX10. Trzeba dać rzeczom trochę czasu na ustabilizowanie się i sprawdzić czy rzeczywiście jest naprawdę silna potrzeba zmian.".

Więc czemu używamy OpenGL?

Biorąc pod uwagę fakt, że OpenGL jest mniej wspierany przez producentów, nie jest już używany w grach, jest aktywnie atakowany przez Microsoft i nie ma marketingowego pędu - czemu wciąż powinniśmy go używać? Nie byłoby bardziej zyskowne gdyby korzystać z DirectX jak wszyscy inni? Nie, ponieważ w rzeczywistości OpenGL jest potężniejszy niż DirectX, wspiera więcej platform i ma zasadnicze znaczenie dla przyszłości gier.


1. OpenGL jest potężniejsze niż DirectX

Jest powszechnie wiadomym, że OpenGL rysuje szybciej niż DirectX (zobacz prezentację NVIDIA na przykład tą, jeśli nie chcesz mi wierzyć na słowo) i ma pierwszy dostęp do nowych funkcji GPU poprzez rozszerzenia sprzedawców. OpenGL daje Ci prosty dostęp do wszystkich nowych funkcji graficznych na wszystkich platformach, podczas gdy DirectX dostarcza jedynie okazjonalnie snapshoty na najnowszych wersjach Windows.

Technologia tesselacji, którą Microsoft usilnie promował w DirectX 11, była rozszerzeniem dla OpenGL od trzech lat. Przez ten czas można jej było używać do szybkiego wypełniania przestrzeni trójwymiarowej powtarzającym się motywem. Nie wiem jakie nowe technologie będą przedstawione w kolejnych latach, jednak wiem, że będą wcześniej dostępne w OpenGL.

Microsoft pracował ciężko nad DirectX 10 i 11 i obecnie są prawie tak szybcy jak OpenGL oraz dostarczają prawie tyle samo funkcji. Mimo wszystko jest jeden duży problem: nie działają na Windows XP! Połowa komputerów PC graczy wciąż używa XP, więc korzystanie z DirectX 10 albo 11 jest niewykonalną opcją. Jeśli naprawdę zależy ci na dostarczeniu możliwie najlepszej grafiki do jak największej liczby graczy, nie ma wyjścia poza OpenGL.

2. OpenGL jest multi-platformowe

Ponad połowa użytkowników gry Ligary korzysta z systemów Mac albo Linux i nie będziemy zaskoczeni jeśli tak samo będzie z naszą nową grą Overgrowth. Kiedy rozmawiamy z większością deweloperów gier słyszymy, że wspieranie Maca czy Linuksa to strata czasu. Mimo wszystko, nigdy nie widzieliśmy dowodów tej tezy. Blizzard zawsze udostępnia wydania dla Mac jednocześnie z innymi a są jedną z największych firm produkujących gry na świecie! Jeśli robią coś innego niż wszyscy to prawdopodobnie mają rację.

Jak powiedział John Carmack zapytany co gdyby Rage była grą DirectX: "To wciąż OpenGL, pomimo, że oczywiście używa API D2D [na Xbox 360] i CF na PS3. To interesujące jak mało technologię obchodzi z jakiego API korzystasz i z jakiej jesteś generacji. Masz mały poręczny zestaw plików, które biorą to pod uwagę i miliony linii kodu, które są obojętne na jakiej działają platformie." Jeśli można podbić wszystkie platformy używając OpenGL, czemu strzelać sobie w stopę opierając się na DirectX?

Nawet jeśli wszystko czego oczekujesz to użytkownicy Windowsa, pozwól sobie przypomnieć, że nadal połowa komputerów korzysta z Windows XP i zwyczajnie nie obsłuży twojej gry jeśli będziesz wykorzystywał najnowsze wersje DirectX. Jedyną drogą aby dostarczyć najnowsze funkcje graficzne do graczy na Windows XP (największej pojedynczej platformie do gier) jest OpenGL.


3. OpenGL jest lepsze dla przyszłości gier

OpenGL jest standardem non-profit stworzonym by umożliwić użytkownikom wszystkich platform korzystanie z najbardziej zaawansowanych efektów graficznych jakie może dostarczyć ich sprzęt. Jest niszczone przez monopolistę, giganta korporacyjnego próbującego zdominować projekty, które są za młode by się chronić. Po tym jak Direct3D stał się jedynym API dla gier wspieranym przez Windows, Microsoft próbuje uzyskać dominację na rynku gier PC.

Potrzebujemy konkurencji i wolności aby obniżyć ceny i podnieść jakość. Monopol Microsoftu na rynku gier jest bardzo zły jednocześnie dla graczy jak i dla twórców gier.

Czy OpenGL może powrócić do łask?

Cofając się do roku 1997, sytuacja jest podobna do tej obecnie. Microsoft wystartował olbrzymią kampanię marketingową dla Direct3D i już niedługo wszyscy będą "po prostu wiedzieć", że jest szybszy i lepszy od OpenGL. To zaczęło się zmieniać po tym jak Chris Hecker opublikował swój otwarty list krytykujący DirectX. Niedługo po tym John Carmac opublikował swoją słynną deklamację OpenGL i wyłożył swoje pieniądze by przenieść wszystkie gry stworzone przez Id Software na OpenGL, zapewniając raz na zawsze, że DirectX nie jest konieczne dla nowych gier 3D.

Wygląda na to, że ta lekcja została zapomniana przez ostatnie kilka lat. Większość deweloperów gier poddała się marketingowi DirectX bądź efektowi sieciowemu. Czas odrzucić welon reklam oraz pogłosek i zobaczyć co się naprawdę dzieje. Jeśli używasz DirectX, musisz wybierać między słabym opasłym DirectX9 albo poświęcić większość bazy swoich użytkowników (korzystających z XP) i zdecydować się na DirectX 10 bądź 11.

Z drugiej strony jeśli użyjesz OpenGL, otrzymasz szybsze i bardziej efektywne funkcje graficzne niż w DirectX 11 oraz będziesz mógł je wykorzystywać na wszystkich wersjach WIndowsa, Maca, Linuksa a także PS3, Wii, PSP, DS czy iPhone. Możesz je także uzyskać wykorzystując szybko rozwijający się standard WebGL, który może się stać podwaliną pod następną generację przeglądarkowych gier.

Jeśli jesteś deweloperem, wszystko o co proszę to poszukanie szczegółowych informacji, porównania i wreszcie zdecydowania czy OpenGL jest lepszym wyborem. Niektórzy programiści preferują styl API DirectX 11 ponad OpenGL, jednak będziesz go także używał w niskopoziomowej warstwie abstrakcji, więc nie powinna to być decydująca kwestia. Jeśli jest coś co ci się nie podoba w OpenGL, po prostu napisz do ARB żeby to zmienili - są po to by ci służyć!

Jeśli jesteś graczem, który używa Windows XP, Mac albo Linuksa, mam nadzieję, że widzisz, iż DirectX istnieje tylko po to by utrzymać nowe gry z dala od twojej platformy i jedynym sposobem by to zmienić jest wspieranie gier używających OpenGL.
blog comments powered by Disqus

Prześlij komentarz


Popularne posty

Etykiety