Bu Blogda Ara

14 Nisan 2011 Perşembe

IREM Oyun Motoru Çalışması - Rapor 1

Herkese merhaba,

bu yazımda bitirme projesi olarak yaptığımız IREM Oyun Motoru projesinden bahsetmek istiyorum. Bu projeyi üniversite lisans bitirme projesi olarak toplam 4 kişilik bir ekip ile yapıyoruz. Profesyonel düzeyde bir proje olduğunu söyleyemem, fakat elimizden geldiğince gelişime açık bir tasarım ve esnek bir kodlama yapmaya çalışıyoruz. Proje henüz sonuçlanmadı fakat dönem sonuna doğru yaklaştıkça zaman kısıtı yüzünden projeyi bir noktada sınırlayıp nihayete erdirmek zorundayız. Gelin şuan ki aşamaya kadar neler yaptığımıza bir göz atalım.

Teknik Alt Yapı ve Sınırlar
C++ programlama dili üzerinden kodlamayı gerçekleştirdik. Grafik arayüzü olarak Microsoft DirectX API kullandık. Proje dahilinde singleton, façade, strategy, abstract factory vb. tasarım desenleri uygulandı. Networking, AI (yapay zeka), 3d sound, shader effects (HLSL) gibi modüllerin yalnızca tanımlaması yapıldı gerçeklenmedi. İleriki aşamalarda mevcut kod değiştirilmeden rahatlıkla bu modüller gerçeklenebilir. Fiziksel etkileşim yalnızca çarpışma testi ve parçacık dinamiği üzerinden gerçeklendi.

Teknik Üst Yapı ve Tasarım
Geliştirdiğimiz oyun motorunun temel fikri; yaklaşık olarak %90 seviyesinde nesne yönelimli, kolay programlanabilir, anlaşılır ve çevik (agile) geliştirmeye açık bir tasarım sağlamaktır. Bu yüzden inceledeğim bir çok modern oyun motorlarından da esinlenerek birbiriyle alakası olmayan tüm işlemleri ayırarak kendi aralarında bir yönetici sınıf atadım. Bu yönetici sınıflar singleton tasarım şablonu ile yalnız ve tek bir adet üretilerek çok başlılık sorununa mahal vermeden işlem yapmaktadır. Bu noktada sizlerle daha projenin ilk aşamalarında şekillendirmek adına çıkarttığım sınıf tasarımını paylaşmak istiyorum. İsterseniz tasarıma bir göz atalım, böylelikle kurgu kafamızda biraz daha somutlaşacaktır, daha sonra detaylı incelemeye devam edelim.



Buradaki bazı sınıfın yapısı değişmiş ve yine burada belirtmediğim bir çok yeni sınıf eklenmiş olsa da sistemin genel mantığını ifade ettiğini düşünüyorum.

Çekirdek uygulamanın yanında ek olarak pencere yöneticisi (window manager) ve arazi üreticisi (terrain generator) gibi araçlar geliştirdik. Bunlar programcıya hız kazandıracak araçlardır.

Son Durum & Karşılaştığımız Sorunlar
Gelelim şuanda projenin ne aşamada olduğu ve ne gibi sorunlarla karşılaştığımız kısmına. Projede şu anda çekirdek sınıf vasıtasıyla bir oyun işlemi başlatıp, sahne yöneticisi sınıfı vasıtasıyla istediğimiz sayıda birbirinden bağımsız sahneler üretebiliyoruz. Bu sahneler arasında gecikme olmaksızın anlık geçişler yapabiliyoruz. Çizdirilebilir nesne sayısı çok fazla olduğundan yavaşlayan bir sahne diğer bir sahneyi etkilememektedir. Sahneye eklediğimiz nesneleri kök düğüme ya da alt düğümlerine bağlayabiliyoruz. Böylelikle nesneleri grup olarak hareket ettirebiliyoruz. Kamera, ışık, model ve sabit nesneler sahneye eklebilmektedir. Uygulama başlatılmadan önce ayar penceresi gösterilerek seçilen ayarlar bir akış üzerinden kaydedilip okunabilmektedir.

Bir kaç model ile oyun motorunun işlevsel sınamalarından bir kare.




Karşılaştığımız başlıca teknik sorun kurduğumuz yapıyı sürekli yeniden değiştirme gereği duymamızdır. Daha önce tecrübe edinmediğimiz için modern yapıları inceledikçe yeni yöntemler keşfedip, kendi projemizdeki eski yapıları atma ihtiyacı duyuyoruz. Sosyal açıdan en büyük sorun ekip çalışmasının getirdiği zorluklar olarak tarif edebilirim.


Geleceğe Dair Planlar
Projeye ileriki aşamalarda yapmak istediğim eklemeleri şu şekilde sıralayabilirim:

- OpenGL desteği ile platform bağımsız tasarıma geçerek MacOS X, Linux, BSD, iPhone OS, PlayStation 3 gibi sistemlerde çalışmasını sağlamak.
- Çok kanallı programlama desteği sağlamak
- Shader desteği
- Gerçek zamanlı 3D model ve sahne düzenleme aracı
vs..


Bir sonraki yazımda da projemizdeki yenilikleri ve gelişmeleri sizlerle paylaşmaya devam edeceğim. Esen kalın efendim...