Yeni grafik programcıları OpenGL yerine Vulkan'ı mı öğrenmeli?


53

Wiki Gönderen : "Vulkan API başlangıçta Khrono tarafından 'yeni nesil OpenGL girişimi' olarak sevk edildi", o olduğuna ve "geriye olmayacak bir ortak API içine OpenGL ve OpenGL ES birleştirme konusundaki zemin-up yeniden tasarımı çaba Mevcut OpenGL sürümleriyle uyumlu ".

Öyleyse, şimdi grafik programlamaya girenlere OpenGL yerine Vulkan'ı öğrenmek için daha iyi hizmet edilmeli mi? Görünüşe göre aynı amaca hizmet edecekler.


1
Bir API'de bir şey yapabilirseniz, herhangi bir API'yi yapabilirsiniz, bunu yapmanın yolu API'ye bağlıdır.
A --- B

Yanıtlar:


33

Zorlukla!

Bu, "Yeni programlayıcılar C yerine C ++ öğrenmeli mi" veya "Yeni sanatçılar fiziksel resim yerine dijital resim öğrenmeli mi?"

Özellikle geriye dönük olarak uyumlu OLMADIĞINDAN, grafik programcıları sektördeki en yaygın grafik API'sini dışlamak için aptalca olurlar, çünkü yeni bir tane var. Ek olarak, OpenGL farklı şeyler yapar. Bir şirketin Vulkan üzerinden, özellikle oyunun başlarında OpenGL'yi seçmesi ve Vulkan'ı bilmesi veya bilmemesine bakılmaksızın, o şirket OpenGL'yi tanımayan bir kimseyle ilgilenmezdi.

Uzmanlaşma nadiren pazarlanabilir bir beceridir.

Yeteneklerini bu şekilde pazarlamak zorunda olmayanlar için, bağımsız geliştiriciler gibi, bir aleti araç kutusundan çıkarmak daha da aptalca olurdu. Bir bağımsız dev daha esnekliğe ve neyin fonlanacağına göre neyin işe yarayacağını seçebilme yeteneğine bağlıdır. Vulkan'da uzmanlaşmak yalnızca seçeneklerinizi sınırlar.

Uzmanlaşma nadiren etkili bir paradigmadır.



7
Bu C ++ benzetmesi uygun değil. Vulkan, OpenGL'in yaratıcıları tarafından geliştirilen yeni nesil bir API'dir. C ++, C'ye karşı kurulmuş, çoğunlukla geriye dönük uyumlu bir rakiptir.
Moby Disk

Bu özellikler analoji noktası ile alakasız.
mHurley

6
İhtisas talep etmek yetersizdir veya pazarlanamaz ise inanılmaz derecede saftır. Her konuşulan dilde beş kelimenin hepsini bilen bir tercüman kullanışsızdır, insanlar az sayıda dile hükmeden (aka uzmanlaşan) tercüman işe alırlar. Şimdi üzerinde -specializing olan sorunlu. Bir dile tamamen hakim olan ve yalnızca o dilin de yararlı bir tercüman olmadığını bildiği bir tercüman. Ve devs'in (bağımsız ya da başka şekilde) tüm zamanlarını yeni araçlar öğrenmeye harcamamaya özen göstermeleri gerekir. Kendilerini iflas bulmak diye Sonunda, aslında bir şey satmak için yapmak gerekir
8bittree

Sadece açık olmak gerekirse, OpenGL ve Vulkan ile ilgili olarak size kesinlikle katılmıyorum, Bu muhtemelen Vulkan yerine her ikisini de öğrenmenin daha iyi bir seçim olduğu durumudur.
8bittree

40

Eğer şimdi başlıyorsanız ve GPU çalışması yapmak istiyorsanız (her zaman Unity gibi bir oyun motoru kullanmak yerine) kesinlikle Vulkan'ı öğrenerek başlamalısınız. Belki daha sonra GL'yi de öğrenmelisin, ama Vulkan-ilk düşünmenin birkaç nedeni var.

  1. GL ve GLES, GPU'ların oldukça farklı çalıştığı yıllar önce tasarlandı. (Anında mod çekme arasındaki en belirgin fark, döşemeye ve komut kuyruklarına karşı çağrılardır.) GL, anında mod tarzında düşünmenizi teşvik eder ve çok fazla eski zorlama vardır. Vulkan, çağdaş GPU'ların çalışma biçimine çok daha yakın programlama modelleri sunar, böylece Vulkan'ı öğrenirseniz, teknolojinin gerçekte nasıl çalıştığını ve neyin verimli olduğunu ve neyin yetersiz olduğunu daha iyi anlayabilirsiniz. GL veya GLES ile başlayan ve VBO'lar kullanmak yerine nesne başına ayrı beraberlik çağrıları yapma ve hatta daha da kötüsü ekran listeleri kullanarak hemen kötü alışkanlıklara maruz kalan birçok insan görüyorum. GL programcılarının artık teşvik edilemeyen şeyleri bulması zor.

  2. Vulkan'dan GL veya GLES'e geçiş yapmak, tersi yönde çok daha kolaydır. Vulkan, eşzamanlılık kontrolü, paylaşma ve görüntü oluşturma durumu gibi GL’de gizlenmiş veya öngörülemeyen birçok şeyi açıkça ortaya koyar. Sürücüden uygulamaya kadar birçok karmaşıklığı zorlar: ancak bunu yaparak uygulamanın kontrolünü sağlar ve farklı GPU satıcıları arasında öngörülebilir performans ve uyumluluk elde etmeyi kolaylaştırır. Vulkan'da çalışan bir kodunuz varsa, bunun yerine bunu GL ya da GLES'e aktarmak oldukça kolaydır ve iyi GL / GLES alışkanlıkları kullanan bir şeyle bitirdiniz. GL veya GLES'te çalışan kodunuz varsa, Vulkan'da verimli çalışmasını sağlamak için neredeyse yeniden başlamak zorundasınız: özellikle eski bir tarzda yazılmışsa (bkz. Nokta 1).

İlk başta Vulkan'ın programlanmamasının çok zor olduğunu ve büyük şirketlerdeki deneyimli geliştiriciler için sorun olmazsa, endekslere ve hobilere karşı büyük bir engel olacağı konusunda endişeliydim. Bu soruyu Çalışma Grubunun bazı üyelerine gönderdim ve daha önce Vulkan'a taşınmış olan kişilerden bazı veri noktaları olduğunu söylediler. Bu insanlar Epic'teki geliştiricilerin UE4 entegrasyonunda çalışan hobi oyun geliştiricileri arasında değişiyor. Onların deneyimleri, başlamak (yani ekranda bir üçgene sahip olmak) ile daha fazla kavram öğrenmeyi ve daha uzun boylu bir kod koduna sahip olmayı içeriyordu, ancak endeksler için bile çok karmaşık değildi. Fakat o aşamaya geldikten sonra, gerçek, aktarılabilir bir uygulama oluşturmak için çok daha kolay buldular, çünkü (a) davranış, farklı üreticilerin uygulamaları arasında çok daha öngörülebilirdir ve (b) açık bırakılan tüm etkilerle iyi sonuç veren bir şeye ulaşmak, deneme yanılma kadar bir şey içermiyordu. Gerçek geliştiricilerden edindiğim bu deneyimlerle beni Vulkan'a karşı programlamanın grafiklerde yeni başlayanlar için bile uygun olduğuna ve öğreticiyi geçip diğer insanlara verebileceğiniz demoları veya uygulamaları oluşturmaya başladığınızda genel karmaşıklığın daha az olduğu konusunda ikna ettiler.

Diğerlerinin de söylediği gibi: GL birçok platformda mevcuttur, WebGL hoş bir dağıtım mekanizmasıdır, GL'yi kullanan birçok yazılım vardır ve bu beceri için çalışan birçok işveren vardır. Önümüzdeki birkaç yıl civarında olacak, Vulkan rampalar ve bir ekosistem geliştiriyor. Bu nedenlerden dolayı, tamamen GL öğrenmesini ekarte etmek için aptal olursun. Yine de, nasıl çalıştığını anlamak yerine, GPU'yu anlamanıza yardımcı olacak bir şeyle başlarsanız daha iyi bir GL programcısı (ve genel olarak daha iyi bir GPU programcısı) olacaksınız. 20 yıl önce.

Elbette, bir seçenek daha var. Bunun sizin için özellikle önemli olup olmadığını bilmiyorum, ama yine de diğer ziyaretçiler için söylemem gerektiğini düşünüyorum.

Bir indie oyun geliştiricisi veya bir oyun tasarımcısı olmak veya VR deneyimi yaşamak için Vulkan veya GL'yi öğrenmenize gerek yok. Birçok kişi oyun motoruyla çalışmaya başlar (şu anda Unity veya UE4 popülerdir). Bunun gibi bir motor kullanmak, arkasındaki teknoloji yerine, yaratmak istediğiniz deneyime odaklanmanızı sağlar. GL ve Vulkan arasındaki farkları sizden gizleyecektir ve hangisinin platformunuzda destekleneceği konusunda endişelenmenize gerek yok. Tüm cesaret detaylarıyla aynı anda uğraşmadan 3D koordinatlarını, dönüşümleri, aydınlatmayı ve animasyonu öğrenmenize izin verir. Bazı oyun veya VR stüdyoları yalnızca bir motorda çalışır ve tam zamanlı bir GL uzmanına sahip değillerdir. Kendi motorlarını yazan daha büyük stüdyolarda bile, grafik programlamayı yapan insanlar azınlıktır.

Bir GPU ile etkileşime girmenin ayrıntılarını öğrenmek kesinlikle faydalı bir beceridir ve birçok işverenin değer vereceği bir şeydir, ancak 3D programlamaya girmek için bunu öğrenmek zorunda hissetmemelisiniz; ve bilseniz bile, mutlaka her gün kullandığınız bir şey olmayacak.


2
Biraz katılmıyorum. Vulkan (ve DX12) için, uygulanması çok zor olduğu kanıtlanmıştır deneyimli devs. Vulkan'ın sana verdiği tüm güçle, kendini ayağından vurmak çok kolaydır. Buna ek olarak, Vulkan çok daha fazla kazan plakası kodu gerektirir. Sadece GPU programlamayı öğrenen biri için Vulkan'ın çok ezici olacağını düşünüyorum.
RichieSams,

2
@RichieSams "Uygula" demek istediğini sanmıyorum. Yalnızca GPU satıcısının Vulkan'ı uygulaması gerekir ve OpenGL'yi uygulamaktan çok daha kolaydır. (İnanın bana, yaptım!) Ama bununla bütünleşmenin veya programa katılmanın zor olduğunu varsaydığınızı varsayarak, Vulkan WG'den öğrendiğim bazı bilgileri içeren bir paragraf ekledim.
Dan Hulme

Doğru. Uygulama belki de kötü bir kelime seçimidir. Programında 'kullanmak' demek istedim. Ama düzenlemelerini beğendim. Pekala,
RichieSams 16.06'da

@DanHulme - "GL anında modda düşünmeni önerir" yorumuna şaşırdım. Bunun sadece ilk OpenGL versiyonları için geçerli olduğunu düşündüm ?
ToolmakerSteve

1
@ToolmakerSteve OpenGL WG, eşzamanlılık ve toplu yazmalar ekleme konusunda çok fazla çalışma yürüttü, böylece programınızı döşeme / erteleme uygulamaları için uygun bir şekilde ifade edebilirsiniz. Ancak bu, hemen moda olan çağda kurulmuş bir temeldir, bu yüzden Vulkan'da yeni bir başlangıç ​​gerektiğine karar verdiler. Ve yine de, GL ile başlayan ve uygulamaların nasıl çalıştığını gösteren anında bir zihinsel model oluşturan birçok yeni kullanıcı görüyorum.
Dan Hulme

26

Grafik programlamayı öğrenmek, yalnızca API öğrenmekten ibaret değildir. Grafiklerin nasıl çalıştığını öğrenmekle ilgili. Vertex dönüşümleri, aydınlatma modelleri, gölge teknikleri, doku haritalama, ertelenmiş görüntü oluşturma vb. Bunları uygulamak için kullandığınız API ile hiçbir ilgisi yoktur.

Yani soru şudur: Bir API'nin nasıl kullanılacağını öğrenmek ister misiniz? Yoksa grafik mi öğrenmek istiyorsun ?

Donanım hızlandırmalı grafiklerle bir şeyler yapmak için, bu donanıma erişmek için bir API'nin nasıl kullanılacağını öğrenmelisiniz. Ancak bir kez sistemle etkileşime geçme yeteneğine sahip olduğunuzda, grafik öğreniminiz, API'nın sizin için ne yaptığına odaklanmayı bırakmaz ve bunun yerine grafik kavramlarına odaklanır. Aydınlatma, gölgeler, kabartma eşleme vb.

Amacınız grafik kavramlarını öğrenmesi ise, API ile harcadığımız zaman zaman harcadığımız değil ise grafik kavramlarını öğrenme . Gölgelendiricilerin nasıl derleneceği grafiklerle ilgisi yoktur. Onlara nasıl üniforma gönderileceği, köşe verilerinin arabelleklere nasıl yükleneceği vb. De yoktur. Bunlar araçlar ve grafik çalışması için önemli araçlardır.

Ama aslında grafik kavramları değiller. Onlar bir sonun aracı.

Bir sürer sürü işin ve size grafik kavramlarını öğrenmeye başlamak için hazırsınız noktaya ulaşamadan Vulkan ile öğrenme. Verileri gölgelendiricilere aktarmak, açık bellek yönetimi ve açık erişim senkronizasyonu gerektirir. Ve bunun gibi.

Buna karşılık, OpenGL ile o noktaya gelmek daha az iş gerektiriyor. Ve evet, modern, gölgelendirici temelli açık profilli OpenGL'den bahsediyorum.

Sadece ekranı temizlemek kadar basit bir şey yapmak için gerekenleri karşılaştırın. Vulkan'da bu, en azından çok sayıda kavramın anlaşılmasını gerektirir: komut tamponları, aygıt kuyrukları, bellek nesneleri, görüntüler ve çeşitli WSI yapıları.

OpenGL'de ... üç işlevleri var: glClearColor, glClearve platforma özel takas görüşmesi tamponlar. Daha modern OpenGL kullanıyorsanız, ikiye indirebilirsiniz: glClearBufferuivve arabellekleri değiştirin. Bir çerçevenin ne olduğunu veya görüntüsünün nereden geldiğini bilmenize gerek yok. Sen temizle ve tampon takas et.

OpenGL sizden çok şey sakladığından, grafik donanımı arayüzünü öğrenmek yerine, aslında grafikleri öğrendiğiniz noktaya gelmek için çok daha az çaba harcar.

Ayrıca, OpenGL (nispeten) güvenli bir API'dir. Genellikle yanlış bir şey yaptığınızda hatalar ortaya çıkar. Vulkan değil. Yardımcı olmak için kullanabileceğiniz hata ayıklama katmanları varken, çekirdek Vulkan API, bir donanım hatası olmadıkça size hemen hemen hiçbir şey söylemez. Yanlış bir şey yaparsanız, çöp işleme alabilirsiniz veya GPU’yu çökertebilirsiniz.

Vulkan'ın karmaşıklığı ile birleştiğinde, yanlışlıkla yanlış olanı yapmak çok kolaydır. Bir dokuyu doğru düzene yerleştirmeyi unutmak bir uygulamada işe yarar, başka bir uygulamada olmayabilir. Bir senkronizasyon noktasını unutmak bazen işe yarayabilir, ancak daha sonra bir sebeple görünmez bir şekilde başarısız olur. Ve bunun gibi.


Tüm söylenenler, grafik tekniklerini öğrenmekten çok grafik öğrenmeye daha çok şey var. Özellikle Vulkan'ın kazandığı bir alan var.

Grafiksel performans .

3B grafik programcısı olmak genellikle kodunuzu nasıl optimize edeceğiniz konusunda bazı fikirler gerektirir. İşte burası OpenGL'in bilgiyi sakladığı ve arkanızdaki şeyleri yapmasının bir problem olduğu yerdir.

OpenGL bellek modeli senkronizedir. Uygulamanın, kullanıcı farkı söyleyemediği sürece, zaman uyumsuz olarak komutlar vermesine izin verilir. Bu nedenle, bazı görüntülere yer veriyorsanız, bundan okumaya çalışın, uygulama bu iki görev arasında açık bir senkronizasyon olayı yayınlamalıdır.

Ancak OpenGL'de performans elde etmek için uygulamaların bunu yaptığını bilmeniz gerekir, böylece bunu önleyebilirsiniz . Uygulamanın gizlice senkronizasyon etkinlikleri yayınladığı yeri fark etmeniz ve ardından mümkün olduğunca bunları önlemek için kodunuzu yeniden yazmanız gerekir. Ancak API'nin kendisi bunu açıkça ifade etmiyor; bu bilgiyi bir yerden edinmiş olmalısın.

Vulkan ile ... bu senkronizasyon olaylarını yayınlayacak olan sizsiniz . Bu nedenle, donanımın komutları eşzamanlı olarak çalıştırmadığının farkında olmalısınız . Bu olayları ne zaman yayınlamanız gerektiğini bilmelisiniz ve bu nedenle programınızı yavaşlatacaklarının farkında olmalısınız. Yani onlardan kaçınmak için elinden geleni yapıyorsun.

Vulkan gibi açık bir API sizi bu tür performans kararları almaya zorlar. Bu nedenle, eğer Vulkan API'sini öğrenirseniz, hangi şeylerin yavaş olacağı ve hangi şeylerin hızlı olacağı konusunda zaten iyi bir fikriniz vardır.

Sizi yeni bir renderleme oluşturmaya zorlayan bazı framebuffer çalışmaları yapmak zorunda kalırsanız ... olasılıklar, bunu bir render geçişinin ayrı bir alt geçişine sığdırabileceğinizden daha yavaş olması iyi olacaktır. Bu, yapamayacağınız anlamına gelmez, ancak API size performans sorununa yol açabileceğini söyler.

OpenGL’de, API temel olarak sizi çerçevesiz eklerinizi willy-nilly olarak değiştirmeye davet ediyor. Hangi değişikliklerin hızlı ya da yavaş olacağına dair hiçbir kılavuz yoktur.

Bu durumda, Vulkan'ı öğrenmek, grafikleri nasıl daha hızlı hale getireceğinizi daha iyi öğrenmenize yardımcı olabilir. Ve kesinlikle CPU ek yükünü azaltmanıza yardımcı olacaktır.

Grafik oluşturma tekniklerini öğrenebileceğiniz noktaya gelmeden önce bu işlem daha uzun sürecektir.


1
Bunu gönderdiğinize sevindim, çünkü cevabımda ifade etmekte tereddüt ettiğim bazı fikirleri açıkça ortaya koyuyor: kavramları öğrenmenin en önemli olduğu. Bence farklı olduğumuz yer GL'yi teşvik etmenizdir, çünkü başlamak daha kolaydır, sanırım başlama kolaylığının bir şeyleri eski yollarla yapma riski taşıdığını düşünüyorum. GL'de, "modern GL deyiminin" ne olduğunu eski bir tarzda programlamaya kıyasla bilmek oldukça zor. Hiç kimse size ilkel başına ayrı bir arama çağrısı yerine VAO'ları kullanmanızı söylemezse, bu hatayı daha sonra öğrenmek çok daha zordur.
Dan Hulme

1
@DanHulme: Hepsi doğru öğrenme materyallerini kullanmakla ilgili. Modern deyimler kullanan çevrimiçi birçok materyal var. Hiç kimse sadece bir referans kılavuzu veya teknik özellikleri okuyarak grafik öğrenmeyi denememelidir.
Nicol Bolas,

Sesi gerçekten kolay hale getiriyorsun! Buna rağmen, programcıların grafiklerde çalışmaya başladığını görüyorum - bazıları diğer alanlarda çok yetkin - eski özellikleri kullanıyor ve performans özellikleri hakkında hiçbir şey öğrenmiyor. Pahalı şeyler yapar, çünkü Vulkan o yanlış gerçekten zor bakmak pahalı. Neyse, tartışmamız gerekmiyor. Asıl amacınıza katılıyorum: kavramları öğrenmek çok önemlidir ve bunu Vulkan veya GL olmadan da yapabilirsiniz.
Dan Hulme

@DanHulme: "Vulkan'da yanlış yapmak gerçekten zor " çünkü her şeyi yanlış yapmakla çok meşgulsün ;) Ayrıca, Vulkan'da performansı yanlış yapmak oldukça kolaydır. Gereksiz senkronizasyon. Yalnızca "genel" resim düzenini kullanarak. Alt geçitlerden faydalanmamak. Sık boru hattı değişiklikleri. Ve bunun gibi. Bahsetmiyorum bile, farklı satıcılar Vulkan'ı en iyi nasıl kullanacakları konusunda aynı fikirde değiller.
Nicol Bolas,

2
@DanHulme: Modern OpenGL'i kullanmanın ne kadar kolay olduğu konusunda, onu kolaylaştırmak için elimden geleni yapıyorum . Eğer insanlar NeHe gibi çöp sitelerinden ya da rastgele dökümanları okuyarak öğrenmekte ısrar ediyorlarsa, bu yardımcı olabilecek bir şey değil. Atları suya götürebilirsin ama içmelerini sağlayamazsın.
Nicol Bolas

7

OpenGL'in en önemli temeli (en azından benim için) birçok platformda işe yaraması. Şu anda Vulkan, OSX üzerinde çalışmıyor ve Apple'ın Metal adında rakip bir API'si var. Apple’ın Vulkan’ı desteklemesinden biraz zaman geçmesi çok olası. Vulkan’ın desteği ancak en yeni donanımlarına gelebilir. OpenGL zaten çoğu donanımı desteklemektedir ve yapmaya devam edecektir.


OSX'in Vulkan'ı desteklemesi durumunda, bunun sadece küçük bir altkümesini destekleyeceği ve web tarayıcıları için Yeni Nesil grafikler api olacağı konusunda, OpenGL'in (tabii ki bir dereceye kadar) kullanımından daha kolay olduğunu iddia ediyorum. Vulkan,
vulkanın

1
@DarioOO OpenGL anında modu, anında olmayan moddan ziyade, kullanımı kolay olmayan bir şey kullanmaktan daha basittir.
user253751

1
@Gavin: OpenGL 4.2 ya da daha üstü sürümlerin de OSX'te desteklenmediğine dikkat edilmelidir. Öyleyse , OSX’te OpenGL’den yeni bir şey kullanmak istiyorsanız, kullanamazsınız. Ayrıca Apple'ın daha sonraki OpenGL sürümlerini benimseme olasılığı düşüktür. Apple platformu hepsi bir arada Metal üzerinde, bu yüzden çapraz platform her iki durumda da bir baskın.
Nicol Bolas

Apple, zorlanmadıkça Vulkan'ı asla desteklemeyecek ve bunun ekonomisi oldukça basit. Hepsi Metal'e girerek, GLES2'nin sunabileceğinden daha fazlasına ihtiyaç duyan mobil oyun geliştiricilere kilitlenmeyi umuyor, ancak hem Vulkan hem de Metal için oyunlarını yazabilecek kaynaklara sahip değiller. Bunun için Mac'in küçük oyun ekosistemini feda etmeye hazırlar, özellikle de iOS geliştiricileri Mac App Store'da yayınlansa da.
Jonathan Baldwin,

Vulkan şimdi macOS üzerinde çalışıyor (önceden OS X): moltengl.com
Alexander

4

Bu ne yapmak istediğinize bağlıdır. Grafik programlamayı sadece kendiniz öğrenmek istiyorsanız, ne seçtiğinizin önemi yok.

Profesyonel çalışma hakkında düşünüyorsanız Vulkan tavsiye ederim. Donanıma daha yakın ve donanım programcıları için hangi donanımın yapılacağı hakkında bilgi sahibi olduğumu düşünüyorum.

Vulkan donanıma daha yakındır, çünkü OpenGL, Vulkan'da manuel olarak yaptığınız, komut kuyruğunu yürütmek gibi pek çok şey yapar. Ayrıca bellek yönetimi sürücüye değil uygulamaya bağlıdır. Belleği ayırmak için uniforms(CPU'dan GPU'ya geçirdiğiniz değişken), onları izlemekten endişe etmeniz gerekir . Endişelenecek daha çok şey var ama aynı zamanda hafıza kullanımı konusunda daha fazla özgürlük veriyor. Korkutucu ve ezici gelebilir ama gerçekten değil. Öğrenmeniz gereken sadece bir sonraki API.

Bu şeyleri anlamak, GPU’nun nasıl çalıştığını anlamada da yardımcı olacaktır. Hem Vulkan hem de OpenGL'de bazı optimizasyonlar yapmanıza izin verecek olan şeydir.

Ve aklıma gelen bir şey daha, muhtemelen bir iş ararken grafik programlama öğrenmeye başlarsanız, muhtemelen bir Vulkan daha popüler olacak (belki de OpenGL'den daha popüler). Ayrıca, bazı grafik API kullanan şirketlerin çoğunun bildiği kadarıyla etrafına kendi işlevlerini yazıyor, bu nedenle işinizde OpenGL'de veya Vulkan'da yazmamanız, ancak GPU ile ilgili bilgilerin her zaman faydalı olması ihtimali var.


2

Birkaç aydır grafik programcılığına "giriyorum".

Şu an hala Lisedeyim ve neredeyse her zaman çapraz platform uygulamaları geliştirmek istediğimi söyleyebilirim. Aslında bu Vulkan ile bir numaralı problemim - Tüm platformlarda çalışmak için geliştirilmedi. Java'da OpenGL ile çalışıyorum ve 6 aydan fazla süredir.

Vulkan'ın iddialarıyla ilgili bir diğer sorun, daha iyi olduğunu iddia ediyor. OpenGL kesinlikle web sitelerini çok sık güncellemiyor. Sürekli güncellemeler yayınlamaya devam ediyorlar ve ben her zaman daha hızlı çalışan veya yeni donanımlarla daha iyi çalışan yeni güncellemeleri dört gözle bekliyorum.

Söyleniyor, çoğunlukla OpenGL ile çalışırken, DirectX ve Vulkan'ın temel prensiplerini anlıyorum. Onlarla yoğun çalışmama rağmen, özellikle Vulkan'ı öğrenmesi çok zor ve OpenGl ve DirectX gibi programlama için iyi yapılandırılmamış.

Son olarak, Java kullandığım ve OpenGL gibi tek bir alanda uzmanlaşmanın şaşırtıcı şekilde pazarlanabilir bir ürün olmadığını da eklemek isterim. Oyun yapan bir şirkette iş bulmak istersem, çoğunlukla OpenGL yalnızca Linux ve Android geliştirme ve muhtemelen OSX için oyun yapmak için kullanılacaktı. Windows ve Konsollar için DirectX <Bazı durumlarda hangi Vulkan'ın yerini alabilir.

OpenGL güncellemelerini sonsuza dek tutamıyorum ve yapmayacağım. Ama bu benim gelişim için tercihim.


Vulkan'ın iddialarıyla ilgili bir sorunum daha iyi olduğunu iddia ediyor. ” Vulkan hiçbir şey olduğunu iddia etmiyor. Bu sadece bir API; iddiada bulunamaz.
Nicol Bolas

Vulkan ve GL'nin çoğunlukla aynı insanlar tarafından yapıldığının farkında mısın?
Dan Hulme

Evet ediyorum. Ben hala GL
Winter Roberts

2

Size konuyla ilgili grafik acemi perspektifimi vermek istiyorum. Yaptığım şey (uzun yıllar başka bir alanda mühendis olarak çalışmak), temel kavramların en önemli kısım olduğu. Bunları sağlam bir şekilde anladıktan sonra, son parlak yeni API'yi öğrenmek en zor kısımdır. Yeni Skyrim'i programlamaya çalışan genç bir hobi misiniz, yoksa CG alanında bir iş arıyorsanız, bilmiyorum.

Ben o iyi yaklaşım olduğunu düşünüyorum ne diyeceğim Bence "bir profesyonel gibi" bilgisayar grafikleri öğrenmek için.

  1. Lineer Cebir ve bir profesyonel gibi geometri öğrenin. Bu olmadan, fantezi API veya grafikleri unutun
  2. Bilgisayar grafikleri hakkında iyi bir kitap alın (örneğin , bilgisayar grafiğinin temelleri )
  3. Kitabı okurken, bir resim çizmenize ve algoritmaları uygulamanıza izin veren bir şey içeren bir programlama ortamı oluşturun! Java 2D veya C ++ ve SDL veya hatta Python ve Pygame olabilir. Bu aşamada, 10000 FPS almaya çalışmadan önce dönen kameralarınızı birden fazla kamera görüntüsüyle açıp çalıştırmanız gerekir.
  4. Şimdi OpenGL, Vulkan veya DirectX'i ele alın ve süslü örneğinizi tekrarlayın (yukarıya bakın).

Nasıl çizileceğini anlamadan önce performans konusunda endişelenmeye başlamak, ehliyet almadan önce aracınızın aerodinamiği konusunda endişelenmek gibidir.


0

Herhangi bir örgün eğitim olmadan C ++ 'da kendi kendime öğrendim ve son 15 yıl boyunca Modern OpenGL ve DirectX 9c, 10 ve 11 ile hem OpenGL 1.0, hem de DirectX 12'ye girmedim. Elimi Vulkan'da dene. Vulkan ile basit bir üçgen veya basit bir dönen küp çizmek için sadece birkaç temel dersi tamamladım. DirectX 11 ve OpenGL 3.3+ ile olduğu gibi tamamen çalışan 3D Oyun Motorları yazdım ve hatta basit oyunlar oluşturmak için bu motorları kullandım.

Bunun, öğrenen kişinin genel ortamına bağlı olduğunu söylemek zorunda kalacağım. Eğer sadece 3D Grafik Programlamaya giriyorsanız, başlangıçta OpenGL veya DirectX 11'e atlayacağını söyleyebilirim, çünkü çok sayıda ders, kaynak, örnek ve zaten çalışan uygulamalar var. 3D Grafiklerin Öğrenilmesi, hiçbir şekilde kolay bir konu değildir.

Bunun programlama yönünden uzaklaşırsak ve sadece farklı matematik düzeylerini içeren veri türlerine ve veri yapılarına ve algoritmalarına ilişkin ne tür tekniklerin kullanıldığına odaklanırsak; Bir 3D Oyun Motoru kurmayı denemeden ya da var olanı etkili bir şekilde kullanmadan önce bilmeniz ve anlamanız gereken çok şey var.

Şimdi, arkasındaki tüm matematiği ve teoriyi zaten anladıysanız ve bazı programlama deneyimine sahipseniz, Unity veya Unreal Engine gibi mevcut API'leri, Kütüphaneleri ve Uygulamaları kullanabilir ve uygulamanızın çalışmasını sağlamak için ihtiyacınız olan kaynak kodunu ve komut dosyalarını yazabilirsiniz. .

Yani kendi anlayışımdan ve benim görme biçimimden, eğer sadece bir oyun inşa etmek için hızlı bir oyun kurmayı düşünüyorsanız; üretim zamanınızı çok daha küçük yapacak olan mevcut çerçeve çalışmalarına devam edin. Öte yandan, Oyun Motorları / Fizik Motorları / Animasyon Motorları ve Simülatörlerin nasıl tasarlandıklarının içsel çalışmalarını anlamak ve kendiniz nasıl inşa etmek istediğinizi anlamak istiyorsanız, DirectX gibi API'nizi seçmek arasında seçim yapma şansınız var. OpenGL veya Vulkan. Buradaki belirleyici faktörlerden biri de mevcut programlama bilginiz olacaktır. Bununla demek istediğim, çok iş parçacıklı, eşzamanlı vs eşzamansız çağrılar, bellek çitler, veri yarışları, semaforlar ve paralellik (paralel programlama) hakkında hiçbir şey bilmiyorsanız,

Bunu söylüyorum çünkü hafızanızı iş parçacığınız ve erişim zamanınızla birlikte doğru bir şekilde nasıl yöneteceğinizi bilmiyorsanız; Vulkan seni kıçından ısırır! OpenGL ve DirectX'in daha fazla CPU gücü tüketerek elinizi tamamen tutacağı yer.

Şimdi, eğer programlama bilginiz iyi ise ve her seviyede Cebir, Geometri, Trigonometri, Boole Cebri, Olasılık, İstatistik, Vektör - Matris tabanlı Cebir, Matematik I, II, ... Infinty (lol). Vektörel Analiz, Lineer Cebir, Lineer Denklem Sistemleri, Çok Değişkenli Hesaplamalar Vektörel Hesaplamalı Analitik Geometri, Sayı ve Küme Teorisi, Veri Kümeleri ve Yapıları, Hesaplamalı Analiz, Hesaplamalı ve Algoritmik Tasarım. O zaman, gerçek bir oyun motoru yapmak için gerekenlerin konseptlerine girebilirsiniz ve bu, Uygulamalı Matematik veya ihtiyacınız olacak herhangi bir Fizik denklemi olmadan gerçekleşir. Bu altyapıya ve yeterli programlama deneyimine sahip olduktan sonra özellikle hafıza yönetimi ve işaretçi aritmetiği ile Oyun Motorunuzu oluşturmaya başlayabilirsiniz.

Buradaki şey, Gelişmiş Grafik Programlaması yapmak için bir Oyun Motoru yapmak için gerekenlerin tüm yönlerini anlamanız gerektiğidir. Eğer sadece 2D grafikler yapıyorsanız, o zaman hayat yukarıda bahsedilen API'lerin hiçbiri olmadan Python'da yapabildiğiniz kadar zor değil! Ancak ciddi olmak ve birçok özellik setiyle güçlü olan tam teşekküllü bir elektrik santrali Game Engine'i tasarlamak istiyorsanız, buradaki seçim ya C ya da C ++ ve OpenGL, Direct X ya da Vulkan'ı kullanmak olacaktır. Bunlardan herhangi biri sadece iyi olurdu. Şimdi Motoru Sıfırdan inşa ediyorsanız ve en az kaynak ek yüküne sahip en "verimli" çalışan Motoru arıyorsanız o zaman Vulkan'ı seçmek istersiniz. Fakat bu rotaya giderseniz en azından yukarıda bahsettiğim her şeyi ve bazılarını bilmelisiniz!

Gördüğünüz gibi Vulkan bu alanda acemi programcılara yönelik değildir. Tüm matematik, programlama paradigmaları, iş parçacığı, bellek senkronizasyonu, paralel programlama dahil tüm farklı veri kümeleri ve algoritmaları hakkında geniş bir bilgiye sahip olmalısınız. Ve o zaman bile uygulamanın ekrana basit bir 2D üçgen yüklemesi için. OpenGL'de yaklaşık 100 kod satırında veya DirectX'te 250 kod satırında ne yapılabilir, Vulkan'da neredeyse 1.000 satırlık Kod satırı var!

Vulkan, Vulkan'ı uygulamanızda nasıl kullandığınızın tüm yönlerinden sizin sorumluluğunuzda olduğundan her şeyi size bırakır. El tutma yok, yoluna girmiyor, ayağından kendini vurmanı ya da özyinelemeli bir ilçe satın almanı sağlıyor!

Şimdi bu, yeni başlayanların veya bu alanda yeni olanların Vulkan'ı öğrenmemesi gerektiği anlamına gelmiyor, ama onlar için önereceğim şey: İlk olarak OpenGL ve / veya DirectX'in ayaklarınızı ıslatması için ıslanmaları için yeterince bilgi edinin. temel uygulama sadece basit bir üçgen veya dönen bir küp oluşturmak üzere yapılandırılmıştır. API'lerini ve yapılarının tekrar eden modellerini tanıyın. Paralelde Vulkan'ı yan tarafta öğrenebileceğinizi öğrenirken, bu şekilde bu üçünün her birinin aynı görevi nasıl yaptığını görebilirsiniz, ancak bunu farklı şekilde nasıl yaptıklarını bilirsiniz, o zaman farklı API'ler ve sonuçları arasındaki sonuçları karşılaştırabilirsiniz. orada daha sonra sizin için tercih edilen bir seçim yapabilirsiniz. Bu yöntem, araç kutunuzda size başka bir araç da verir ve uygulamanızı 3'ü de destekleyecek şekilde yazabilirsiniz.

Sonunda, hangi rotanın inmek istediğini seçmek tamamen o kişiye bağlıdır ve oradan başarıları; özveri, sürekli çalışma, sıkı çalışma, deneme ve yanılma ve en önemlisi başarısızlıkları ile belirlenecektir. Eğer başarısız olmazsan o zaman başarılı olamazsın! Sadece başarısız olduysanız, hatalarınızı tespit ettiyseniz, düzelttiyseniz, taşındıysanız ve tekrar ayağa kalktıysanız ve her şeyi tekrar yaptınız!


-1

Önce OpenGL'i öğrenmelisiniz, çünkü bu, pek çok platformda Grafikler için standarttır.

Daha yeni bir kütüphane olsa bile, temelleri anlamak ve sektörün her yerinde kullanılan bir dille çalışmak çok önemlidir ... Özellikle Vulkan bir süredir Büyük Şirketler'de kullanılmayacağından beri.

  1. Kimse hemen uyum sağlamak istemez ve kararsız bir Çerçeve / Kütüphane ile kendilerini mahveder.

  2. Mevcut Open-GL programcılarını işe almaları / yeniden eğitmeleri gerekecekti ve buna gerek kalmadı.


Ayrıca, OpenGL ve Vulkan'ın tam olarak aynı olmadığını duydum. Vulkan'ın OpenGL'den daha düşük bir seviye API ve makine koduna daha yakın olduğunu duydum.

Bulduğum bu cevabın bir sürü harika bilgisi var.

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


Dikkate alınması gereken bir diğer şey, OpenGL 1 ile olan sorun.

OpenGL 1'den OpenGL 2'ye MAJOR değişiklikleri oldu ve birçok kişi OpenGL1 kullanıyordu ve donanım destekliydi, bazı uygulamalarda / motorlarda uygulanması gereken geriye dönük uyumluluk vardı ve bu bazen devlerin onu desteklemeye devam etmesi için gerçekten acı vericidi. .

Desteğin yanı sıra, dil o kadar değişti ki, yeni şeyler öğrenmek zorundaydın.

Bu, JavaFX (1.x'ten 2.x'e) ve Play! Gibi çerçevelerle oldu. Çerçeve (ayrıca 1.x ila 2.x). Çerçevede yapılan değişiklikleri tamamlayın, yani yeniden öğrenmemiz gereken her şey ...


Yani esasen yapmanız gereken şey Vulkan''ın KARARLI olmasına kadar beklemek. Bu, muhtemelen 2.0 düzeltme ekine kadar beklemek anlamına gelir. BT, Vulkan'ın temellerini öğrenemeyeceğiniz anlamına gelmez, ancak bunun değişebileceğini bilir. Kronos gibi bir grubun başlangıçtan itibaren çok istikrarlı bir API sağlayacağını tahmin ediyorum, özellikle Vulkan'da çalışan birden fazla Nvidia ve AMD mühendisi olduğu için, görünüşe göre projeyi denetleyen Nvidia'lı bir kişi ve Mantle'nin üssü; ancak, herhangi bir yazılım gibi biz de kodlayıcılar en baştan ne kadar iyi çalıştığını göreceğiz, ancak birçoğu ne olduğunu görmek için dikkatli ve bekliyor.


Vulkan şu anda kararlıdır. GL 1.0 vs 2.0 analojiniz uygun. Şimdi GL ile başlamak, GL 2.0 çıktıktan altı ay sonra GL 1.0'ı öğrenmeye başlamak gibi olacak.
Dan Hulme

1
Vulkan "istikrarlı" olabilir, bu durum değişmeyecek anlamına gelmez, bu son birkaç yıl içinde dillere yapılan 2 son değişikliği sunduğum dillerin doğasıdır, peki bunun Vulkan'a olmayacağını nasıl bilebiliriz? Temel olarak OpenGL öğrenmenin boşa olduğunu söylüyorsunuz ve bu yanlış. OpenGL ölmüş gibi görünmesini sağlamak, daha fazla kullanılmayacak ... Ayrıca yanlış. Ayrıca, Vulkan'ın istikrar sorunları yaşayabileceğine inanan bir tek ben değilim. Olmayabilir, ancak herhangi bir yeni dilde aradığınız şey budur.
XaolingBao

1
Elbette işler değişecek ve çalışma grubu zaten bir sonraki özel sürüm için yeni özelliklere doğru çalışıyor (ssh, bunu benden duymadınız). Kararlı , bu özelliklerin teknik özelliklere ekleneceği ve bugün hakkında öğrendiğiniz şeylerin bundan iki yıl sonra geçerli olacağı anlamına gelir. OTOH, bugün GL hakkında öğrendikleriniz, GPU'ların çalışma şekliyle zaten kötü bir eşleşme: tıpkı programlanabilir bir gölgelendirici dünyasında sabit işlevli boru hatları hakkında bilgi edinmek gibi. Cevabımı okursanız, şimdi GL öğrenmenin bir israf olduğunu düşünmüyorum. Ancak "Vulkan çok yeni" iskonto etmek için iyi bir neden değil.
Dan Hulme

1
@Lasagna: " Bu değişime tabi, pek çok şirket onu kullanmak için hemen adapte olmayacak " Vana. Epik. Birlik. Hepsi motorlarını Vulkan'da çalışacak hale getirmek için yoğun bir şekilde yatırım yapıyorlar. CryTech ve Id de tam olarak görmezden gelmiyorlar. Yani ifadeniz gerçeklerle orantılı değil.
Nicol Bolas

2
@Lasagna: " Sadece 3D Motorlara adapte edildiğinden, şirketlerin projelerini içine yatırdığı anlamına gelmez " ... Yani 3D motorlar "projeler" olarak nitelenmiyor mu? DOTA2 bir "proje" olarak sayılıyor mu? Çünkü şu an Vulkan'ı destekliyor . Samsung'un akıllı telefon ve tablet serisi "proje" olarak sayılıyor mu? Çünkü onu kullanıcı arayüzüne dahil etmeye çalışıyorlar. Gerçek şu ki, birçok insan ihtiyaç duyduklarını elde ederse, “yeni bir platformu test edecek kişi” olmaya isteklidir.
Nicol Bolas
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.