Oyun endüstrisinde daha iyi bir işe girme şansı vermek için OpenGL'ye devam etmeli miyim yoksa DirectX'e geçmeli miyim? [kapalı]


29

Bir süredir OpenGL ve Linux kullanarak grafik programlamayı öğreniyorum. Kavramların çoğuna aşinayım, ancak bilgilerimi geliştirmek ve sonunda oyun geliştirme alanında, özellikle de oyun motoru gelişiminde kariyer yapmak istiyorum.

Şimdiye kadar bana öyle geliyor ki, oyun stüdyolarının çoğu, DirectX kullanarak Windows için oyunlar yapıyor.

Düzenleme: OpenGL vs DirectX sorusunun daha önce burada sorulduğunu biliyorum, ancak istediğim perspektifte bir cevap bulamadım.

Düzenleme 2: Tüm cevapları / yorumları okuduktan sonra OpenGL / GLSL ile daha derin grafiklere dalmaya devam etmeye karar verdim, ancak API hakkında basit bir anlayışa sahip olmak için DX ile de oynamaya çalışacağım. Bana verdiğiniz cevaplar ve içgörü için herkese teşekkür ederim.


Bu sorunun genel bir sürümü programmers.stackexchange.com adresinde bazı iyi cevaplar verebilir ...
Macke

1
Temelde DX gölgelendiricilerin daha ince noktalarını, hiç HLSL yapmayan bir OpenGL adamı tarafından öğrendim. "Parçalı gölgelendirici" nin "piksel gölgelendirici" anlamına geldiğini bildiğiniz sürece, kavramlar hemen hemen aynıdır; P
drxzcl

IIRC, DirectX, sürüm 8 veya 9'da biraz daha OpenGL benzeri hale getirildi. Ondan önce, DirectX bazen gereksiz yere kullanımı zor olduğu için eleştirildi. API'ler hala farklıdır, ancak genel yaklaşımlar oldukça benzer olmalıdır. Yasal Uyarı - Ben de bir uzman değilim.
Steve314

@Macke - Kariyer tavsiyesi konu dışı @ Programcılar. Bu muhtemelen çok özeldir ama genel kariyer soruları @ konu üzerinde olacaktır (Halen bölgede 51 önerilen) Meslek Sorunları gidip bu GD destekleyeceğini taahhüt Lütfen
Çad

Büyük olasılıklar, sektöre girseniz bile, bir grafik programcısı olmayacaksınız ve bir API'yi, diğerini veya her ikisini de tanımanız en azından önemli olmayacaktır. Bunun ötesinde, şirkete ve projeye bağlı. D3D, PC alanında çok daha yaygın şekilde kullanılır, GL | ES mobil alanda tamamen baskındır ve konsolların hepsi gerçekten kendi başınıza öğrenemediğiniz özel API'ler kullanır.
Sean Middleditch

Yanıtlar:


28

Gerçekten önemli değil. Temel kavramlar her ikisinde de aynıdır, özellikle şimdi piksel gölgelendiricileri normdur. Ve çoğu oyun çok platformlu olduğu için muhtemelen her iki dilde de benzer özelliklerin bir alt kümesini kullanacaklar. Gölgelendiricileri glsl veya hlsl içine yazabildiğiniz sürece, iyi olacaksınız.

Olduğu söyleniyor, "oyun motoru geliştirme" sayısı orada çok azdır. Çoğu şirket raftan bir şeyler kullanır. Var olan pozisyonlar için, bunlardan daha azı giriş seviyesidir. Çoğu giriş seviyesi oyun programcısı grafikle ilgili herhangi bir kod yazmaz (gölgelendiriciler hariç), çünkü hepsi soyutlanmıştır.


1
En giriş seviyesi programcıları ne yapar? Büyük, orta veya küçük stüdyolarda?
Quazi Irfan


1
Sadece daha genel bir cevap eklemek için, deneyimime göre genç programcılar oyun oynamaya, kullanıcı arayüzüne, hud'a ve oradan çalışmaya başlama eğilimindedir, oyun popüler bir giriş noktasıdır.
JuniorDeveloper1208

Varlık entegrasyon menüleri ve UI, deneyimimden daha yaygın giriş noktaları.
Coyote

Beyler, buradaki yorumda bu soru hakkında uzunca bir konu almayalım. Bunlar, bağlantılı olduğum soruya mükemmel cevaplar.
Tetrad

10

Tamamen istediğiniz / alacağınız işe bağlı. Muhtemelen DX'in kral olduğu PC pazarındaki bir işi düşünürsünüz. Sadece AAA şirketlerinin API'lerin oldukça spesifik olduğu konsol piyasasını hedeflediklerini unutmayın.

Örneğin PS3, OpenGL ES uygulamasına özel uzantılara sahip.

OpenGL mobil alanda büyüyor. Artık tüm modern platformlarda ancak Windows Phone 7'de mevcut.

Şu anda sadece OpenGL ES bu alanda mevcut. Ancak OpenGL 4 ve DX11 desteği ile daha güçlü PowerVR çipleri geliyor.

OpenGL becerileriniz altındır. Bunu gerektiren bir işi yapmak için DX'e dönüştürebilirsiniz. Ancak bu arada, OpenGL'nin mümkün olduğu cihaz ve platformların miktarında kral olduğunu unutmayın.


Düzenleme : Ayrıca, giderek daha fazla sayıda şirket mevcut motorları kullanma eğilimindedir ve çoğu zaman çekirdek oyun geliştiricileri bile düşük seviyeli API'lerden daha fazla taranmaktadır. Belirli platformlarda hatalarla ve garip davranışlarla karşılaştığınızda yerel API'leri iyi bir şekilde bilmek her zaman daha iyidir. Fakat her şey kavramlara dayanıyor ve diğerleri de belirtildiği gibi, çekirdekte DX ve OpenGL'nin belirttiği gibi, aynı kavramlar hakkında bilgi gerektirecek.


Düzenleme : Zaten OpenGL'ye ve muhtemelen gölgelendiricilere aşina olduğunuzdan OpenCL'i denemelisiniz ... Bu API, paralel hesaplamada bir sonraki büyük şey olma potansiyeline sahip.

OpenCL çekirdeği, OpenGL ile birlikte çalışabilen ve OpenGL geliştiricileri için anlaşılması kolay veri türlerini kullandığından bahsediyorum. Şuna bir bakın ve harika bir genel bilgi işlem çözümüyle (şu anda mermi fiziğine entegre edilmiş) bir deneyim kazanıp kazanamayacağınıza bakın .


OpenGL bir endüstri standardı olan diğer kütüphanelere ve API'lere ilham verdi. Önemini ihmal etmemelisin. Ancak diğer yandan bir şeyde durmamalısınız ve ben yerinde olsam OpenGL ve DirectX'i soyutlayan daha yüksek seviyeli API'lere ve motorlara bakardım.
Coyote

OpenCL ile tanıştım. Bir yan proje üzerinde çalışıyorum, bir fizik motoru oluşturdum (temel olarak, çoğunlukla öğrenme amaçlı) ve daha hızlı hale getirmek için biraz OpenCL kullandım ancak henüz şaşırtıcı sonuçlar elde etmedim (bazı durumlarda bile yapılan kötü)
adivasile

Bu iyi denemenin bir işaretidir;) Bullet motorundaki uygulamaya bir göz atın. Her neyse, projelerinizde iyi şanslar.
Coyote

7

Hangi API'yi öğreneceğinizin önemi olmadığını kabul ediyorum. Temel kavramları bilmek önemlidir.

Oyun gelişimine bakıldığında, Windows tek hedef platform değil. Duyduğuma göre, Apple bir hedef platform olarak büyüyor, ancak konsollar da gerçekten önemli. Konsolların normalde kendi özel grafik API'leri vardır (bunu sadece bizi rahatsız etmek için yaptıklarını düşünüyorum). Konsol API'leri OpenGL ile DirectX'ten daha fazla ortak olma eğilimindeyken, yine de çok büyük bir fark yok.

Sizin için ne işe yararsa onunla gidin.


1
XBox muhtemelen DirectX yolunda işler ...?
Macke

Evet, PS3 PSGL'yi kullanır. Ancak, X360 DirectX'i PC'de olduğu gibi kullandı, bundan emin olmasa da, sadece bir tahmindi.
Quazi Irfan

Xbox'ta deneyimim yok, ancak Wikipedia'ya göre API'sı DirectX'e dayanıyor. PS3'te, PSGL kullanılabilir API'lerden yalnızca biridir.
mrbinary

X360, nispeten az miktarda nispeten hızlı belleğe sahip olduğu gerçeğini barındırmak için birkaç tuhaflık ile DX9'a yakın bir API kullanır.
drxzcl

6

Oyun Geliştirme Profesörü perspektifine ne dersiniz?

Eğer OpenGL'nin temelleri aşağıdaysa, TÜM yöntemiyle DirectX dünyasına (DX'e girdiğine dikkat edin) Dx9'un uyumluluk nedenleriyle geliştirme için kullanıldığını, eski platformların (özellikle de XP'nin) yeni grafikleri desteklemediğini gösterir. Dx10 ve Dx11'deki boru hattı. (bu, Dx9'da başlayıp Dx10 ile 11 arasındaki farkları belirterek bir öneri olarak okunmalıdır), ilerledikçe daha da yuvarlaklaşacaktır.

İdeal olarak, HLSL ve CG’de biraz kaliteli zaman geçirmek isteyeceksiniz (Bu iki görünüşte farklı gölgelendirici dilinin aslında aynı dilde olduğuna dikkat edin (biri Microsoft ve diğeri Nvidia’nın markasıdır) ve tepe ve parça (piksel) gölgelendiricilerin nasıl çalışacağını anlayın. Sizin ve çalıştığınız oyun şirketlerinin tümü için büyük bir varlık olmak (render sistemleri veya alt sistemler üzerinde çalıştığınızı ve AI kodu değil.

Ogre3D, her iki grafik alt sistemini de (OpenGL / DirectX) destekleyen ve birçok oyunda kullanılan açık kaynak kodlu bir oluşturma motorudur ... kaynak serbestçe kullanılabilir olduğundan kaynak serbestçe kullanılabilir olduğundan, araştırmaya başlamanın ve OpenGL'e yapılan aramaların aramalardan farklılığa ne kadar farklı olduğunu görebilirsiniz. DirectX.

Ayrıca, çok yakın bir zamanda patlayacak gibi görünen WebGL'de dürttüğünüz OpenGL'de biraz zaman geçirdiğinizden de tavsiye ederim.

Umarım yardımcı olur!


Gelecekte WebGL'nin patlayacağını söyleyemem, en azından yakın bir gelecekte. Herhangi bir eklenti olmadan tarayıcılarda 3d render yapmak için başka bir yol.
Quazi Irfan

Büyük üreticilere, ürünlerinin HTML5 ve JS desteğini eklemesiyle (Visual Studio) ve Adobe gibi şirketlere Edge (HTML5 JS Flash katili mi?) Eklenmesiyle donanım hızlandırmadan yararlanan çok daha fazla web tabanlı içerik göreceğini düşünüyorum.
Robert French,

4

Geçenlerde John Carmack’in DirectX’i, bir süredir Microsoft’un openGL’e yetişmeye başladığı gerçeği için DirectX’i tavsiye ettiğini ve bunu yaparak rekabetçi bir ürün yarattıklarını ve zarfı ittiklerini, openGL’nin DirectX’e izin vererek komite tarafından tasarlayıp tartışırken zaman harcadıklarını söyledim. cilalanmak ve sanırım çalışmak için daha kolay, ama openGL'e bağlı kalmak.

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

Belki genel olarak grafikleri sevip sevmediğinizi düşünmek için başka bir seçenek ve gömülü alanda neler olup bittiğini.

Hem Linux hem de WinCE kullanarak gömülü alanda çalışıyorum. Eski Ford SYNC mimarıydım (6 yıl boyunca oradaydım) ve şimdi GM'in CUE'si (GM'in Ford SYNC'e cevabı) üzerinde çalışıyorum. Ford SYNC, openGL veya DirectX kullanmaz. Ford, bunun yerine Flash & Action komut dosyasını seçti; Flash, kaputun altında ne yaptığından emin değilim ama cehennem kadar yavaş; JD Powers ona zayıf bir puan verdi. GM'in CUE'si tüm Linux ve openGL ES'dir ve GM CUE'nin yeni bir iMX işlemcisi olmasına rağmen, Linux'taki openGL'deki animasyonların performansı şaşırtıcıdır. CUE / openGL çok daha hızlı. Yine Ford, sistemlerini Adobe Flash ile kapattı.

Bu yüzden, oyunlarda oynamak istiyor, ancak rekabetçi doğa ile ilgileniyor ancak yine de bu tür işleri seviyorsanız, özgeçmişinizi genişleten seçeneklere bakın. Benim deneyimim, en azından gömülü dünyada, WinCE'nin DirectX'i bu kadar fazla kullanmadığı görülüyor. (WinCE, NT'nin bu nedenin bir parçası olabileceğinden biraz farklı bir API'ye sahiptir). OpenGL gömülü dünyanın her yerinde ve insanlar tabletler, otomobil bilgi-eğlence sistemleri şu anda sıcak ve elbette akıllı telefonlar gibi daha çok şey yapıyorlar ...


Gömülü alanı belirtmek için +1. Gömülü sistemler için grafiklere girmeyi düşünmemiştim (mobil platformlar hariç), ancak küçük bir araştırma yaptıktan sonra düşünmeye değer bir seçenek buldum. Birkaç yıl önce gömülü platformlara ilgi duyuyordum, ancak başka şeyler de yoluna girdi, ben de onu oldukça erken terk etmek için sarıldım.
adivasile

2

Her ikisinde de çalıştığınızı, hangisinde uzmanlaştığınızı bağımsız olarak söyleyebilmenizin özgeçmişinizde muhtemelen iyi olacağını söyleyebilirim.

Öyle söylüyorum, çünkü her şeyde olduğu gibi, belirli bir noktanın ötesinde API / sözdizimi bilgisinden çok genel tekniklerle ilgili. Bir şeyler yapabilmeniz ve etrafınızdakileri bilmeniz gerekir, ancak her iki API'de de büyük miktarda parça uygulamanız gerekmez. (Bu O (n * m), ki ölçeklenmez ...). API'leri biraz bilmek ve farklı teknikleri bilmek (örneğin, O (n + m)) işe yarar ve yardımcı olacaktır.

Elbette, daha derin bir API bilgisine sahip olduğunuzu gösterdiğinden DX'te de "ileri düzeyde" bir şey yapmak için ikramiye alacaksınız, ancak kutuların nasıl bağlanacağını bildiğinizi kanıtlamak için her durumda ileri tekniklere ihtiyacınız var (görmezden gelinme belirli sihirli sözler bunu yapmak için söylemelisin).

Gerçekten, herhangi bir API (3d veya başka bir şekilde) veya herhangi bir programlama dili ile aynıdır.


1

DirectX'i öğrenmenin daha zor olduğunu ve bu nedenle daha iyi bir yetenek buldum. Directx genellikle anakart üreticilerinden daha iyi destek alıyor, ancak, microsoft bu gelişmelerden yararlanmak için pek çok güncellemenin yayınlanmamasını sağladı (ve yalnızca sert oyuncuların seçkin bir alt popülasyonu bu panoları kullanıyor). Oyun geliştirme ile ilgili olarak, tüm büyük oyun platformları kendi tescilli grafik motorlarını kullanır ... xbox -> DirectX Box :) 3D konseptleri, ağları, aydınlatmayı, dönüştürmeleri vb. Bilmek, hepsi için aynı olan bir beceridir.


DX9-ish ve "modern" openGl arasında çok az kavramsal fark buldum (glBegin kullanmadan). İkisinden birinin neden diğerinden daha "kolay" veya "daha zor" olduğuna ilişkin düşüncelerinizi takdir ediyorum.
drxzcl

1
Aslında OpenGL'nin temel temelleri bulmakta daha kolay olduğunu düşünüyorum, ancak VBO'lara ve gölgelendiricilere geçtiğinizde D3D çok daha kolay hale gelir (uzantıların olmaması onu daha geniş bir donanım tabanında daha tutarlı hale getirir).
Maximus Minimus

Bu benim de deneyimim, dolayısıyla soru.
drxzcl

1

Eğer birini tanıyorsanız, diğerini kolayca alabilirsiniz.

OpenGL'yi biliyorsanız, akıllı telefonlar (android ve iPhone) ile kolayca kazanabilirsiniz / Linux / mac kazanabilirsiniz.

DirectX yalnızca Win / Xbox'tır. Bu yüzden, Xbox'ı hedeflemek istemediğiniz sürece, daha fazla platform hedefleyebildiğinden OpenGL'de kalın diyebilirim.


-4

OPENGL'i tercih ederim. Örneğin, Android işletim sistemi OPENGL'i kullanan Android'i göz önünde bulundurun. OPENGL platformuna dayanarak geliştirilen pek çok oyun motoru var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.