Çıplak OpenGL, küçük geliştiricilere çerçeveler / motorlar üzerinde ne gibi avantajlar sağlar? [kapalı]


16

Bağımsız geliştiricilerin çerçevelerden ve motorlardan uzaklaşıp çıplak OpenGL kullanmaya veya SDL / SFML2 ile birlikte kullanmaya doğru bir eğilim gördüm. Bir bağımsız geliştirici olarak, düşük seviyeli OpenGL'nin ayrı motorlar veya çerçeveler üzerinde neler sunabileceğini göremiyorum.

Çoğu iyi motor ve çerçeve, ihtiyacınız olan işlevselliği sağlar ve asla yolunuza çıkmaz. Ayrıca doğrudan OpenGL ile başa çıkma seçeneğini de açabilirler. Hatta bazıları çapraz platform derleme işlevselliği sunar!

Davlumbazın altında neler olduğunu öğrenme arzusunu anlıyorum, ancak OpenGL'nin geliştiricilere motorlar veya çerçeveler üzerinden indie'yi sunabileceği hiçbir artış göremiyorum .

OpenGL kullanarak oyun kurmanın ardındaki mantığı sıfırdan açıklayabilir misiniz?


Oyun ve grafik programcılığında lisansüstü bir öğrenci olarak, OpenGL öğrenmenin karmaşıklığını sıfırdan kanıtlayabilirim. Bugün bir indy oyunu yapsaydım, kesinlikle SDL veya başka bir kütüphane kullanırdım. Ama aynı zamanda bugün grafikler hakkında çalışmalara başladığımdan çok daha fazla şey anlıyorum, bir API öğrenmek bana GPU'ların genel olarak nasıl çalıştığını ve donanım ve yazılımın nasıl etkileşime girdiğini anlamamda biraz yardımcı oldu. Ama ticari bir ürün yapmak için, bu noktada kesinlikle bir 3. taraf kütüphanesi kullanırım.
Philip

Yanıtlar:


23

Bu büyük ölçüde fikir tabanlı bir soru / cevaptır, bu yüzden aslında bu platform için ideal değil, yine de:

Neden bir indie olarak çerçeve / motor yok? İşte iki sentim:

  • Bütçe eksikliği: Bu muhtemelen çoğu küçük / bağımsız geliştirici için en büyük noktadır. Birçok çerçeve veya motor, daha pahalı bir sürüm satın almadan (ucuz veya ücretsiz bir sürüm olduğu varsayılarak) ve / veya telif ücreti ödemeden, her zaman küçük projeler için göz önünde bulundurmanız gereken bir şey olmadan ürününüzü yayınlamanıza izin vermez. Bazen platform başına bir kez bile ödeme yapmanız gerekir.
  • Karmaşıklık: Çoğu motor veya çerçeve iki kategoriden birine girer:
    • Özel bir tür için çok sınırlıdırlar ( RPG Maker tipik bir örnektir).
    • Ya da 'zaten kullanamayacağınız pek çok şeyle çok geneldir ( Birlik gibi ).
  • Özel kod: Çoğu motor açık kaynak değildir ve gerçek kaynağı elde etmek için daha da fazla ödemeniz gerekir (varsa). Diğer platformlara gerçek kaynak kodu olmadan zor ve hatta imkansız olabilir (yine, RPG Maker mükemmel bir örnek olacaktır).
  • Clunkyness: Bu benim kişisel görüşüm, ama en azından bana göre bu, özellikle küçük bir oyun inşa ederken, önceden yapılmış motorlar ve çerçeveler göz önüne alındığında oldukça büyük bir hayal kırıklığı. Kim 200 KB büyüklüğünde ancak 50 MB'lık bir çalışma zamanı getiren küçük bir mola oyunu oynamak ister?
  • Dil seçimi: Bazı motorlar ve çerçeveler kendi kodunuzda kullanmak için kütüphane sağlamaz. Bunun yerine, kendi komut dosyası dilini veya ayarlanan dili (Javascript veya C # gibi) kullanacak bir çerçeve veya çalışma zamanı sağlarlar. Kendi özel motorunuzu yazıyorsanız, seçtiğiniz dili kullanmakta özgürsünüz.
  • Çalışmanızın korunması: Önceden hazırlanmış bir motor veya şasi kullanıyorsanız, şansınız yüksektir, başkalarının kodunuzu veya varlıklarınızı değiştirmek veya koda etmek için çok daha kolay bir zamanı olabilir, kaçınmak isteyebileceğiniz bir şey (sadece yüksek puanınızı korumak için bile olsa) temiz). Özel kod ve varlık işleme, özellikle yerel koda derlendiğinde çok daha büyük bir engel oluşturur.
  • Marka bilinci oluşturma: Bu birçok kişi için küçük olabilir, ancak bazı motorlar ve çerçeveler sizi logolarını veya hatta reklamlarını göstermeye zorlar, temelde kimi / neyi tanıtacağınızı seçme özgürlüğünüzü alır. Tabii ki, bu genellikle gerçek lisansa, lisans ücretlerine vb.
  • Lisanslarla uyumsuzluk: Bu, birçok kişinin bir motor seçerken bile dikkate almadığı bir şeydir, ancak ne yapmak istediğinize bağlı olarak, bu önemli bir faktör olabilir. Motor satın alsanız bile, herhangi bir kaynağı veya ilgili materyali açıklamanız kısıtlanmış olabilir. Böyle bir şey, kullanıcıların yapmasını isteseniz bile modifikasyonu imkansız hale getirebilir. Valve'in Kaynak motorunu ( Half-Life 2 , Team Fortress 2 , vb.) Örnek olarak alın: Modellerin motorlarını kendi projeleri için kullanmalarına izin veriyorlar. Bu oyunlar (örneğin) Unreal Engine'e dayanacaksa, lisanslama şartlarının ima ettiği sınırlamalar nedeniyle bu mümkün olmazdı.

11
artı bir şey daha: openGL öğrendikten sonra bunu biliyorsunuz. Her dilde yeniden öğrenmeniz veya belirli bir çerçevenin / motorun onu her yeni çerçeve / motor için nasıl uygulamanızı istediğini öğrenmeniz gerekmez. Bu aynı zamanda daha fazla taşınabilirliğe yol açar
wes

En yaygın sorun değil, motorda veya çerçevede fikrin yapılması mümkün değil veya çok karmaşık olması mümkündür (örn: minecraft)
akaltar

@akaltar: Doğru, ama aynı zamanda birisinin amaçlanan hedefe uyan bir motor seçmesini beklerdim. Örneğin bir 2D oyun için bir 3D motoru kullanmayın veya tam tersi.
Mario

9

Çoğu iyi motor ve çerçeve, ihtiyacınız olan işlevselliği sağlar ve asla yolunuza çıkmaz.

Onlar mı? Bu, grafiksel olarak konuşursanız, tam olarak ne yaptığınıza bağlıdır.

Birçok oyun türü için grafik soruların standart cevapları vardır. Ortalama bir 2D oyun, örneğin XNA / MonoGame'in 2D kahramanlığı ile gayet iyi bir şekilde ele alınabilir. Sadece arazi için gruplar halinde gelebilen spritelar döndürülebilir, vb.

Ama oyun ne olur eskiden ortalama 2D oyun, o zaman böyle ekrana derinlik göreli görünüme sahip taklitçi inşa etmek için bir yükseklik haritası kullanarak gibi bazı serin tekniği hakkında okuyun. Ve bunu yapmak istiyorsun.

Şimdi normal haritalama ve hatta paralaks haritalaması kullanıyorsunuz. Hepsi aynı "render sprite" bağlamında, ancak çok daha fazla saf 2D motorlar gerektirebilir. Özellikle, birçok 2D motorun yapabileceği bir şey olmayan, çok katlı "sprite blitting" gerektirir.

Motorunuz sizinle uyum sağlayamazsa ne yaparsınız? Bu, biri renk için diğeri normal harita ile aydınlatma için birden fazla geçiş yapmanız gerektiği anlamına gelir. Ancak bu işe yaramaz, çünkü renk aramasına paralaks eşlemesi uygulamak için normal haritanın yükseklik alanına ihtiyacınız vardır. Peki ... şimdi ne olacak? Şeffaflık için alfaya ihtiyacınız var, bu yüzden alfa çalamazsınız. Ve motor sadece çoklu dokuları desteklemiyor.

Yani aşağıdakilerden birini seçmelisiniz:

  1. Bu fikirden vazgeç. Bu, oyununuzun motorunuz tarafından işlevsel olarak sınırlı olduğu anlamına gelir.
  2. Çok damarlı olması için motoru hackleyin. Kaynak koduna erişiminiz olduğunu varsayarsak, şimdi başkasının kodunu sormak için kendiniz de alıyorsunuz. Bu aynı zamanda onu korumanız ve tökezlemenizle kırmamanız gerektiği anlamına gelir .
  3. Motorun sınırlamaları dahilinde mümkün olan en iyisini yapın. Böylece normal haritalarda paralaks elde edebilirsiniz, ancak renklerde değil. Tam olarak istediğiniz şey olmayabilir, ama hiç yoktan iyidir.

Örnek olarak Geometri Savaşlarını ele alalım. Çoğu 2D motor bu tür görselleri emerdi, çünkü çoğu çizgi değil sprite çiziyordu. Bu çok özel bir tür oluşturucuya ihtiyaç duyan bir oyun.

Günün sonunda, oyununuzun, oyununuzun ihtiyaçları için önemli olan unsurları için sorumluluk almanız gerekir . Oyununuzun görsel görünümü öncelikle belirli efektlerden ziyade kullandığınız resim ve modellerin sanat tarzı tarafından geliştiriliyorsa, önceden paketlenmiş bir çözüm kullanmak iyidir. Ancak oyununuzun görsel stili özel oluşturma kodu ile önemli ölçüde tanımlanmışsa, kutunun dışında bir şey yapmaya karar verirseniz standart bir motorun ciddi bir sınırlama olabileceği ihtimali yüksektir.

Ayrıca, çok pratik bir sorun var: tüm oyun motorları eşit derecede taşınabilir değildir.

Son zamanlarda mobil platformların yükselişiyle, oyun pazarı çok sayıda işletim sistemi ve kullanıcı arabirimi cihazına yayıldı. Tüm motorlar tüm cihazlarda çalışmaz. Motorunun platformda çalışmıyor eğer, kesinlikle için zaman ayırın etmeyeceğiz yapmak o birinde çalışır. Sonuçta, bu yüzden ilk etapta bir motor kullandınız, değil mi?

Oyununuzun belirli bir platformda işlev görmesi sizin için önemliyse, bunun için tekrar sorumluluk almanız gerekir. Ve bununla başarıyı sağlamanın "en kolay" yolu, bunu kendiniz yapmaktır. Birden fazla platformda çalışabilecek bir motor oluşturmak için, belki de bazı düşük seviyeli ayrıntıları işlemek için gerektiğinde platforma özgü daha basit çerçeveler kullanabilirsiniz. Bu şekilde, eğer kırılırsa, kodunuz; düzeltmek için en iyi kişisin.


Cevabınızı seviyorum, ancak örnek olarak XNA'yı seçmeniz çok garip buluyorum. Muhtemelen taşınabilirlik dışında bahsettiğiniz dezavantajlardan muzdarip değildir.
Seth Battin
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.