Oyun Motorlarına Hızlı Bir Bakış

two gray engines with filters

Evet arkadaşlar, hazır oyun geliştirme ile ilgili yazılara devam ederken geçenlerde denk geldiğim oyun motorları ile ilgili güzel bir iki videoyu sizler ile paylaşmak istemiştim. Hazır bu video’lara denk gelmişken oyun motorları ile ilgili de bir iki kelam etmek istedim 🙂

Öncelikle, videolar. İlgili kanal sahibi, oyun geliştirme ile ilgili gerçekten güzel videolar yayınlıyor, bu denk geldiğim videolar da bunlardan bir kaçı. Bu videolarda, farklı programlama/betik dillerine ilişkin oyun motorlarını aktarıyor. Burada elemanın farklı programlama dillerine göre tasnif ettiği video listesini paylaşıyorum, beni takip edenlerin, özellikle C++ ve LUA ile ilgili olanları izlemelerini öneriyorum:

Yukarıdaki video’da her bir programlama ve betik diline göre listelenmiş oyun motorlarından haberdar olmuş oldunuz.

Şimdi gelelim oyun motorları ile ilgili edeceğim bir iki kelama.
Öncelikle oyun geliştirmeye başlayan her heyecanlı insan (ben dahil), kendini oyun motoruna geliştirme yoluna girer ama bu yol gerçekten çetin ve iyi değerlendirilmesi gereken bir tercihtir.

Çoğunun sonu da hüsran ile sonuçlanır. Size bu yola girmeyin diyemem ama eğer salt amacınız oyun geliştirmek ise hazır oyun motorlarını kullanmanızı tavsiye ederim. Peki bu yol bize hiç bir şey katmaz mı? Elbette katar, özellikle arka planda dönen dolapları öğrenmek, işin perde arkasına da göz atmak ve tecrübe etmek için iyi bir tercih olacaktır. Tabi, her şeyde olduğu gibi bunu da kararında yapmakta fayda var. Bu anlamda basit bir 2B oyun motoru geliştirmek ile elbette AAA ayarında bir FPS için oyun motoru geliştirmek arasında fark var ve inanın bana ilkini bile geliştirirken bir çok şey öğreneceksiniz. Bu arada herhangi bir oyun motoru kullanmadan oyun geliştirirken zaten sizler de nelere ihtiyaç duyduğunuzu az çok göreceksiniz. O sebeple oyun motoru geliştirmekten önce, oyun geliştirmeye girişmenizi tavsiye ediyorum.

Bu konuda bilgi sahibi olmak isteyenlere Kitap Önerileri yazımda bahsettiğim ve benim de beğenerek bir çırpıda okudum Game Engine Architecture kitabına bir göz atmasını tavsiye ediyorum. Bu yazımdaki içerik için de ona sıklıkla başvuracağım.

Gelelim aklımızdaki deli sorulara? Oyun motoru nedir? Şu ya da bu oyun motoru mudur? Ve en önemlisi oyun motorunun bileşenleri nelerdir?
Oyun motorunun genel tanımına bakacak olursak, kısaca:

Oyun geliştirmek için tasarlanmış olan yazılım parçası veya aracı

olarak tanımlayabiliriz. Burada artık çoğu motor, geliştiricilere, geliştirme araçları yanında, grafik, animasyon ve benzeri araçların da içerisinde olduğu entegre geliştirme ortamları sunuyorlar. Aşağıda Unreal Engine geliştirme ortamından bir ekran görüntüsü görebilirsiniz.

Image result for unreal engine IDE

Tahmin edebileceğiniz üzere burada her bir oyun için tek bir oyun motorundan bahsetmek mümkün değil ve genelde bu ayrım oyun türlerine göre yapılıyor. Örneğin bir FPS (First Person Shooter) için geliştirilen oyun motoru ve sunduğu kabiliyetler ile RTS (Real Time Strategy) bir oyun motorunun sunduğu kabiliyetler oldukça farklı olabilir (şimdi kalkıp bana gardaşım ikisi de oyun demeyin lütfen 😀 Peki ne tür oyunlarda bu farklılık gösterebilir. Hemen değineyim. Temel olarak sınıflandırma şu şekilde:
– First Person Shooters
– Gerçek Zamanlı Strateji Oyunları
– 2D/3D Platformers
– Dövüş Oyunları
– Araba Yarışı Oyunları
– Massively Multiplayer Online Games (MMOG)

Daha fazla bilgi için https://www.idtech.com/blog/different-types-of-video-game-genres adresine ve belirtiğim kitaba başvurabilirsiniz.

Peki oyun motorları hangi bileşenlerden oluşur. Burada derinlemesine her birini detaylı anlatmayacağım ama sizlere fikir vermesi açısından önemli gördüklerimi listeleyeceğim. İleride bunlardan ilgili olanlarına ilişkin ayrıca belki yazı yazarım. Aşağıdaki görsel temel bileşenleri sizlere göstermekte:

Madde madde bakacak olursak:

  • 2B/3B görselleştirme bileşeni
    • Her ne kadar farklı soyutlamalar olsa da temelde çoğu motor alt tarafa OpenGL ve DirectX’e dayanmakta. Son zamanlarda artık Vulkan da bu listeye dahil oldu,
    • Oyun içi sahne yönetimi
    • Parçacık motoru
  • Oyun içi Grafiksel Kullanıcı Arayüzleri
    • Giriş ve menüler
    • Head-up-display
    • Hata ayıklama arayüzleri
  • İnsan Arayüz Araçları (Human Interface Devices)
    • Klavye, game pad, özelleşmiş kontrolcüler
  • Fizik motoru (Çarpışma ve katı gövde fiziği)
  • Ses bileşeni (Ses ve müzik dosyalarının yönetilmesi ve çalınması)
  • Oyun için konfigürasyon ve benzeri işler için betik dil desteği
  • Oyun içerik/kaynak yönetimi, ortam tanımlanması, sahne yönetimi
  • Animasyon alt sistemi (karakter, vb.)
  • Çoklu oyuncu ve ağ alt kabiliyetleri (indirilebilir içerik, vb.)
  • Yapay zeka bileşeni (yol bulma, NPC, vb.)
  • Motor sağlık takibi, hata ayıklama ve kayıt
  • Üst seviye editör ve içerik hazırlama
  • Oyuna özel alt sistemler
    • Silahlar
    • Kamera sistemleri
    • Oyuncu mekanikleri
    • Oyuna özel görselleştirme kabiliyetleri
  • Alt seviye oyun motoru bileşenleri
    • Bellek yönetimi
    • Oyun döngüleri
    • Multithreaded/Processor desteği
    • Ayıklayıcılar
    • Video oynatıcı
    • Dosya sistemi araçları
    • Yerelleştirme kabiliyetleri
    • Veri yapıları
    • Konteynerler
    • Matematik Kütüphaneleri

Bu bileşenlerin yanında bundan 10-15 sene önce pek mevzu bahis olmayan, fakat artık çok kritik bir husus da birden fazla platformun (PC, konsollar, mobil cihazlar, vs) desteklenmesidir.

Peki gelelim kritik soruya. Yukarıdaki videodaki arkadaşın da arada sorguladığı üzere bir oyun motoruna neye göre karar vereceğiz? Kriterler nelerdir. Tabi burada her ihtiyaca derman olacak veya size hitap edecek bir motor söylemek zor, hatta belki bir çok motoru bir süre kullandıktan sonra bırakabilirsiniz. Sakın yılmayın, yola devam! İşte belli başlı kriterler:

  • Öncelikle bedava mı yoksa paralı mı? Lisans modelleri nasıl?
  • Çoklu platform desteği var mı ve ne seviyede (Ör. Corona SDK halen android için resmi olarak 64 bit desteği sunmuyor ve google yakında bunu zorunlu kılacak),
  • Dokümantasyon (tutorial, kod, örnek uygulama, vb.)
  • Geliştirme dili ve varsa betik dil desteği,
  • Topluluk desteği nasıl? Örnek uygulamaları neler?
  • Yardımcı yazılım/araç desteği (sprite, efekt, vb.)
  • Oyun motoru mu? Yoksa grafik/yapay zeka kütüphanesi mi? Üçüncü parti kütüphanelere ihtiyaç duyuyor mu? Bu husus çok önemli. Örneğin çok basit oyunları OpenGL ya da DirectX kullanarak geliştirebilirsiniz, fakat daha karmaşık oyunlarda iş yükünüz biraz artacaktır. SDL’de bu anlamda OpenGL den sonra biraz daha fazla kabiliyet sunabilir ama yukarıda bahsettiğim oyun motorları yanında cılız kalırlar.

Kaynaklar:

  • https://www.ukessays.com/essays/computer-science/concepts-features-game-engines-6438.php
  • https://www.moddb.com/engines
  • https://instabug.com/blog/game-engines/
    https://www.wikiwand.com/en/List_of_game_engines
  • https://www.idtech.com/blog/different-types-of-video-game-genres
  • Game Engine Architecture kitabına

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.