Oyun için Uygun Model Hazırlanması

XNA’da kullanılan modeller Autodesk firmasına ait olan “.fbx” uzantılı dosyalardır. Ayrıca kullanılan modellerdeki polygon yüzey sayısına da dikkat edilmelidir. Örneğin, Batman Arkham Asylum (Kasım,2011) oyunundaki zırhlı Batman karakteri 21304, Far Cry 3 (Kasım,2012) oyunundaki Jason Brody karakterinin gövdesi 29932, kafası ise 17179 poligondan oluşmakadır. (kaynak: beyond3d.com)

Tercihen Autodesk firmasının 3 boyutlu tasarım programı olan 3D Studio Max kullanılarak oyunlarımız için modeller hazırlayabiliriz. Bu program ile sıfırdan kendi modellerimizi yapabileceğimiz gibi, internetten bulduğumuz ve oyun için uygun modelleri de kullanabiliriz. İlk oyunumuz için kullanacağımız araba modelini (39679 poligon) aşağıdaki resme tıklayarak indirebilirsiniz.

XNA 3D Programlama için Model Araba

Eğer 3D Max programınız varsa modeli açıp, oyuna hazır hale getirmek için birkaç ufak düzenleme yapmamız gerekecek. Bu düzenlemeler modelimizin ileriki bölümlerde göreceğimiz çizdirme işlemleri sırasında oluşan bazı hataları (“TextureCoordinate0 is missing.” hatası) gidermektedir. Modeli açıp incelediğinizde, her parçasının ayrı ayrı çizilmiş olduğunu fark edeceksiniz. Buradan sonra yapacağımız işlemler şöyle:

  • “Ctrl-A” kısayolu veya “Edit” menüsü altındaki “Select All” komutu ile herşeyi seçip,
  • “Group” menüsü altından “Group” komutu ile grup haline getirelim. Grup ismi olarak “Skyline” verebiliriz.
  • Daha sonra “Modifiers” menüsündeki “UV Coordinates” başlığı altından “UVM Map” modifier’ini seçiyoruz.
  • Aşağıdaki resimde gösterildiği gibi, sağ taraftaki “Modify” menüsü altından “UVM map” seçili iken “Parameters” kısmından “Face” seçiyoruz.
  • Daha sonra sol üst kısımdaki Autodesk logosu olan yeşil butona tıklayıp, “Export” ve tekrar “Export” diyerek, bir dosya ismi yazıp “Autodesk (*.FBX)” uzantısıyla kaydediyoruz.

3D Studio Max UVM Map Parametreleri 3D Studio Max XNA FBX Export Menüsü

Aslında bu yaptığımız işlem hızlı fakat sağlıklı olmayan bir işlemdir. Normalde “UVM Map” modifier’i aracın her bir parçasına tek tek alınıp ayarlanmalıdır (Grup yapmadan tümünü seçip modifier uygulamak ile grup yaparak modifier uygulamak aslında aynı şeydir çünkü her objeye ayrı ayrı modifierler değil, her bir objeye tek modifier uygulanır.). UVM Map modifier’i objemizin yüzeyini 0 ila 1 arasında değişen değerlere sahip iki boyutlu UV uzayına göre yeniden hesaplar (detaylı bilgi için: UV mapping). Böylece aracın renkleri (kaplamaları) düzgün bir şekilde görüntülenir. Bu işlem yapılmayan modeller ya gri renkte görüntülenmekte, ya da hiç görüntülenemeyip hataya sebep olmaktadır.

FBX dosyası kaydedilirken çeşitli ayarlama opsiyonları sunulmaktadır. Paylaşmış olduğum model için bu ayarlamalara gerek yoktur ancak başka bir model ile çalışırken bu ayarlara da dikkat etmekte fayda vardır. Örneğin kaydedilecek FBX dosyasına sahnedeki kameraların ve ışıkların kaydolmasını istemediğimiz için ilgili bölümlere girip kaydetme seçeneğini kaldırmalıyız. Dikkat edilirse FBX dosyası animasyon özelliğini desteklemektedir. Bu özellik örneğin kollarını sallayarak yürüyen bir karakter yaparken karşımıza çıkmaktadır.

XNA FBX Model Ayarları

Ayarlar kısmının ardından karşımıza “Uyarılar ve Hatalar” penceresi gelmektedir. Paylaşmış olduğum modelde aynalarda bulunan yansıma özellikleri ve yine yansıma özelliğine sahip beyaz metal materyalinin desteklenmediği konusunda uyarı vermektedir. Dikkat edilirse aracın camları ile ilgili uyarı verilmemektedir ancak saydamlık özelliği de kaybolmaktadır.

XNA FBX Export Hataları

Bu işlemler modelimizin çizdirilirken karşılaşabileceğimiz “The current vertex declaration does not include all the elements required by the current vertex shader. TextureCoordinate0 is missing.” hatasına çözüm olmaktadır. Hazırlanan modelin FBX dosyası buradan indirilebilir.

XNA 3D Programlama için Hazır Model

Paylaşmış olduğum model dışında başka model ile çalışmak isteyenlerin dikkat etmesi gereken birkaç nokta daha vardır.

  • Hazırlanan modelin taban merkezinin orijine (0,0,0) gelecek şekilde ayarlanması oyunu yazarken işlerimizi önemli ölçüde kolaylaştırmaktadır. Düzgün ayarlanmamış modeller zeminin içine girme, istenen noktanın dışında kontrolsüz hareket etme gibi sorunlara yol açabilir.
  • Modelin dönme miktarları da (0,0,0) olarak ayarlandığında oyun için daha kolay kontrol edilebilir hale gelmektedir. Ancak bu değerler modele göre değişebilir.
  • Modelin ölçeği oyundaki ölçeğine eşittir. Oyun içinde yeniden ölçekleme mümkündür ancak programda ölçekli çizimler hazırlamayı tavsiye ederim.