Tanshaydar'ın Mekânı
Başka bir şey yok
Kategori: Oyun Geliştirme, Yazılım

Oyun Geliştirme – Senin Derdin Değil!

Feragatname: Çok farklı platformlarda oyun geliştirmeye / programlamaya yeni başlayan kişilerin sorduğu abuk sorulara cevap niteliğinde gönderilen bir yazı var. How to Make an RPG isimli sitede (ki belli bir tecrübeden sonra da çok faydalı bilgiler içerir) Not Your Problem isimli, Daniel Schuller tarafından yazılmış bir makale bu. Bir süredir çevirisini yapmak ve kendi yorumumu da katarak yeni bir kaynak oluşturma isteğine yenik düşerek işbu yazıyı yazmış bulunuyorum. Bir önceki yazım olan Yazılım Geliştirmek Zordur ile benzer minvalde, salt çeviri değil de kendi yorumumu katarak da yazıyor olacağım.
[bd_separator]

[bd_dropcap]O[/bd_dropcap]yun Geliştirici olmak istiyorsunuz. Harika bir oyun yapıp bunu tüm dünyaya sunmak istiyorsunuz. Çok güzel bir hayaliniz var; ama bu iş biraz zor. Sözgelimi bir kitap yazmaktan daha zor. Bu iş sanat, kişisel zevk, ağır matematik, lojistik, ve mühendisliğin karışımıdır. Az ekip bir oyunu bitirebilir, daha da az kişi bir oyunu tek başına yapabilir. Bu süreçte motivasyonu kaybetmek çok, çok kolaydır. Ama sizi işi bitirmekten menedecek, ilerlemenizi engelleyecek, motivasyonunuzu bitirecek en sıkıntılı kısım ise, sizin derdiniz olmayan işler üzerinde çalışmaktır. Sizin derdiniz olmayan işlerle uğraşmak size kendinizi iyi hissettirir, çok şey öğrenirsiniz, hatta bazı işler tamamlanır; ama oyununuz tamamlanma yolunda arpa boyu kadar yol almazsınız ve unutmayın ki sizin amacınız da oyunu tamamlamaktır.

Uzmanlar

Uzmanların dertleri sizin dertleriniz değildir…

Twitter üzerinden John Carmack’ı (@ID_AA_Carmack), Markus Persson’u (@notch) ya da Ron Gilbert’i (@grumpygamer) mi takip ediyorsunuz? İyi o zaman! Kim olduklarını bilmiyor musunuz? O da güzel, o zaman Survivor izlemeye devam. Bu basit bir liste olsa da, çok başarılı oyun geliştiriciler olarak oyun geliştirme ile ilgilenen herkesin takip etmesi, ağzının içine bakması gerekir, bunda bir problem yok.

Ama ya siz? Siz bir oyunu yapmayı bitirdiniz mi? Bir oyunu piyasaya sürdünüz mü? Hayır, di mi? O zaman bu adamların dertleri ile sizin dertleriniz bir değildir. Sizin dikkatinizi çok daha farklı bir probleme vermeniz gerekiyor, o da bir oyunu bitirmek ve yayınlamak. O kadar.

Uzmanların dertleri ile sizin dertlerinizin kesiştiği yerler olacak elbette; ama bunlar çok nadiren olacaktır.

Uzmanların Dertleri

Bi dakka ya, ben Game Maker kullanıyorum! O zaman gerçek bir programcı değilim! Şimdi bu elimdeki projeyi geri dönüşüm kutusuna atıp bana hiçbir şey öğretmeyecek on tane C++ kitabı almam lazım!

Orada bekle biraz. Akıllı işaretçiler (smart pointers) kullanmak senin derdin değil. İlk oyununu yaparken de işaretçilerle ilgileniyor olmaman lazım zaten. Oyunu nasıl dağıtıma sokacaksın? Başkalarının bilgisayarında çalışacağından nasıl emin olacaksın? Devasa oyun stüdyoları bile bunu güç bela başarıyor ve genellikle de onlarca kişiden oluşan büyük ekipleri oluyor sırf bu iş için. Bunlar senin derdin değil.

Uzmanların birçok derdi vardır; internetteki ‘hater’lar ile uğraşmak, yaratıcı olma konusundaki sosyal baskı ile başa çıkmak, tekrar benzer bir oyun çıkarmak konusundaki sosyal baskıyı göğüslemek, çok büyük ekipleri idare etmek, büyük ekiplerle gelen bürokrasi, büyük yazılım ekipleri ile gelen daha sıkıntılı bir bürokrasi (agile development, scrum, işçileri kaynak olarak görmek ve resource deyip adam/gün hesapları yapmak), vb gibi uzman ve profesyonel seviyede problemleri vardır.

Sadede Gelelim mi?

İşte sizin için problemlerin bir sıralaması:

  1. Yapabileceğiniz bir oyun düşünün ve
    • Başka insanların da seveceği (ve hatta satın alacağı!)
    • Bir aydan daha kısa sürede yapabileceğiniz. Aynen öyle.
  2. Var olan bir oyun motorunda karar verin
    • İnsanların piyasaya sürdükleri bir oyunu yapmakta kullandığı
    • Oyun geliştirmeyi hızlı kılabilen
    • Farklı platformlara çıktı alabileceğiniz
    • Mümkünse aşina olduğunuz
  3. Oyunu yapın
  4. Satın veya ücretsiz dağıtın
  5. Reklamını yapın
  6. Geri bildirim toplayın
  7. Madde 1’e geri dönün

Kullanmaya karar verdiğiniz oyun motoru ile bir günde Pong oyunu yapamıyorsanız, hele hele insanların ilk açışta hemen oynayabileceği bir oyun yapamıyorsanuz, yanlış seçim yapmışsınız demektir.

Şimdi, sizin dertlerinizi sıraladığımıza göre, sizin olmayan dertleri de sıralamanın vakti geldi:

  1. C++ kullanarak bir oyun motoru yazmak
    • Hayır
    • Hayır
    • Hayır
  2. C++’ın STL kütüphanesini yeniden yazarak daha az bellek tüketmesini sağlamak
    • Oturup ağlasanız daha iyi
  3. Birden fazla platforma nasıl çıktı alabileceğinizi öğrenmek
    • Önce make öğreneceksiniz
    • Sonra cmake öğreneceksiniz çünkü make ezikler için
    • Ondan sonra premake öğreneceksiniz çünkü cmake de ezikler için
    • Ondan sonra da Jam öğreneceksiniz çünkü artık premake’in de ezikler için olduğunu öğrendiniz
    • Ve böylece derine, derine, daha da derine, adını kazı de… pardon, okyanusun dibine doğru inecek ve bir daha asla gün ışığı göremeyecek bir oyun projeniz oldu, tebrikler
  4. Vector sınıflarını sıfırdan yazmak
    • Hmmm, en iyisi SIMD operatörlerine bir bakayım
    • Sonra da matriksler, quaternion’lar (dördeyler), OpenGL güzelliklerini 6 farklı platforma entegre etmek, ki genel bir soyutlama katmanı ile DirectX de destekleyebilirsiniz. Ve Metal, onu da unutmamak lazım. Ha bir de bir shader yazma dili gerekiyor!
    • Acı yok
    • Gözyaşı yok
    • Merhamet yok
    • Umut yok
  5. İnternette aptalca tartışmalara girmek
    • X dili Y dilinden daha iyidir
    • X kütüphanesi Y kütüphanesinden daha iyidir
    • Platform (PC master race)
    • Programlama metodolojisi
    • 60 FPS’yi yakalamanız gerekir mi (bunu Ubisoft’a sorsana delikanlı)
  6. Shader programlamayı öğrenmek
    • Bunu öğrenmekte bir amacınız var mı? Muhtemelen hayır. O zaman derdinizi sevdirmeden durun ve oyun yapımına geri dönün.
    • Aklınızda yeni bir teknik mi var?
    • O zaman dikkatlice devam, ama ilk oyununuzsa bu da derdiniz değil
  7. Otomatik dokümantasyon sistemleri
  8. Yerelleştirme
    • Hayır
    • No
    • Nein
    • Non
    • не
    • ヤダー
    • Herkes gibi oyun bittikten sonra buna yoğunlaşın
  9. Optimizasyon
    • Oyunlar deneysel programlama kısmına girer
    • Yazdığınız kodun çoğunu zaten çöpe atacaksınız, geri kalan kısmını da yeniden yazacaksınız
    • Kodların çöp kutusunun dibinde ne kadar hızlı çalıştığının bir önemi yok
  10. Hız sizin için ilerlemenin zorlaştığı kadar yavaşladığı yerde önemli olur
  11. Sayfalar dolusu tasarım dokümanı yazmak
    • Ya da UML diagramları çizmek
    • Test First Development yapmak
  12. Bir Level Editörü yazmak
    • Yapmadan durmanın en zor olduğu alanlardan biri
    • Size zaman kazandıracağına eminseniz mümkün olan en basit ve en temiz editörü yazın. Gelecekte nelere ihtiyacınız olacağını tahmin ederek vakit kaybetmeyin. Şunu da eklesem, bunu da eklesem demeyin. İlk oyununuzu modlamaya açacağınızı hayal etmeyin.
    • Microsoft Foundation Class (şu noktada kendinizi jiletlemeye başlasanız aynı şey)
    • Qt (oldu canım)
    • .Net (oldu canım x2)
    • Editörde dinamik olarak yeniden yükleme yapılabilen text dosyaları olabilir ama, buna dikkat etmek lazım.
  13. XML
    • Hayır
    • Kendi XML parser’ınızı yazmak? Hayır
    • SOAP (artık oyun geliştirici değilsiniz)
    • JASON, YAML, MessagePack (karanlık tarafa hoş geldiniz)
  14. Boost!
    • Camdan atlayın ve kurtulun. Pokemon Ferhat olun.

Bunları biliyor, bunlarla ilgileniyor, bu konularda tecrübe sahibi olabilirsiniz. Bunlarda bir sakınca yok, hatta daha bile iyi. Ama şunu bilin ki, bunlarla zaman kaybetmeye başladıysanız oyunu asla bitiremeyeceksiniz. Yıllarca bunlarla uğraşacaksınız ve ciddi bir oyun yapamayacağınız kendi küçük sevimli oyun motorunuz olacak, ve sonra tekrar başa döneceksiniz.

Öneriler

Peki kendi problemleriniz üzerine nasıl yoğunlaşacaksınız o zaman? Deneyebileceğiniz birkaç şey şöyle:

改善 – Kaizen

Otakular siz seversiniz, işte Japon bir şeysi.
Kaizen, Toyota tarafından popüler hâle getirilmiş bir metodoloji. Sürekli iyileştirme gibi bir şey. Geliştirme sürecinizde iyileştirebileceğiniz alanları arayın; ama bunlar küçük, belki %1’lik iyileştirmeler, devrimsel yaklaşımlar değil.

Sürecinizi iyileştiren ve sizi amacınıza yakınlaştıran mümkün olan en küçük adım nedir.

Şimdi bunu Toyota’nın gözünden değil de, oyun geliştirici gözünden açıklayacak olursak, beni oyunu bitirmeye yaklaştıracak mümkün olan en küçük adım nedir? diye düşünmek olabilir. Bu da, yeni bir level yaratmak, gerekli olan seslerin bir listesini çıkarmak olaiblir. Burada önemli olan ilerleme sağlamaktır.

Tasarım dokümanına bir sayfa daha eklemek maalesef süreci ileri götürmeyecektir, sonucu olmayan bir toplantı da aynı şekilde. Asıl önem arz eden şeyler yazdığınız kodlar ve oyun için kullanacağınız asset’lerdir. Süreci ileri taşıyan tek şey bunlardır. Bunların yanında daha birçok işi götürmeniz gerekir; ama sürekli küçük de olsa süreci ileri taşıyan adımlar atmalısınız.

Küçük Başlayın

Yapmakta olduğunuz ilk oyun mu? Şahane problemlerle karşılaşacaksınız.

Küçük başlayın! Gerçekten küçük. Pong kadar küçük. Yapabileceğiniz en küçük oyunu yapıp süreci baştan sona yaşayın. Bu süreci yaşarken çekeceğiniz sıkıntılar size başka kimsenin veremeyeceği bir tecrübe ve bilgelik verecek, daha da ilginci, ilk oyununa yıllar akıtan insanlar bu tecrübeyi elde edemeyecek.

Elbette ki bu sadece bir tavsiye, ama aynı zamanda tarafsız bir gerçek, ömrü boyunca hiçbir şey yapmamış tüm insanlardan daha üstün olacaksınız. Onlar her gün Rus ırgatlar gibi Sibiryada kürek sallamaya devam edecekler, sizse Rasputin gibi bilke ve eğlenceli hayatınıza devam edeceksiniz. (İğne çuvaldız olayına girmek istemiyorum; ama tek başıma yapıp bitirdiğim iki ve üç boyutlu oyunlar mevcutken, daha profesyonel anlamda çeşitli oyunlarda programcı olarak da çalıştım. Yani tam anlamıyla bir Rasputin you crazy love machine olmasam da, en azından ırgatlık konusunda kalfa konumunda sayılırım.)

Sizi heyecanlandıran bir şey seçin

Sizi heyecanlandıran; ama aynı zamanda yeteneğinizin çok fazla dışına çıkmayan veya zorluk seviyesini inanılmaz derecede arttırmayan herhangi bir şey! Herhangi bir oyunu özel kılan şey onu yapan kişidir, onu yapan kişinin oyun tasarımı üzerine olan benzersiz düşünceleridir, dünya görüşü ve bunu oyunun uygun olan yerlerinde nasıl yansıttığıdır. Kendi işaretinizi eklemekten çekinmeyin.

Proje sizi ne kadar heyecanlandırıyorsa, bitirmesi de o kadar kolay olur.

Sonlandırmak bir Beceridir

İnanılmaz gizli, çok az bilinen bir şey bu işte. İşin hilesini bulmak gibi bir şey. Ne kadar çok iş bitirirseniz, o kadar daha çok iş bitirebilirsiniz. (Avrupa Birliği ihalelerinde iş bitirme inanılmaz önemli bir kalemdir).Burada laf kalabalığı yapmıyorum, gerçeğin en yalın hali bu; bir şeyi ne kadar çok yaparsanız onda o kadar iyi hâle gelirsiniz.

İş bitirmek aynı zamanda o iş üzerine olan özgüveninizi de arttıracağı gibi, istekli olmaya devam ederken daha gerçekçi olmanızı da sağlayacaktır. Mesela sıfır kod bilginiz varken CryEngine yazacağım demeyeceksiniz.

Tüketimi Azaltın

Oyun geliştirme üzerine günde 20 makale okumak çalışmak gibi mi geliyor? Öyle zaten! Ama faydarız ve sonuçsuz bir iştir, süreci ileri taşımaz.

Gamasutra, TIGSource, r/gamedev/ (veya havalı çocuklar bugünlerde nerelerde takılıyorlarsa) gibi yerlerde daha az, editör ekranında daha çok zaman harcayın.

Paylaşın

Yaptığınız işleri paylaşın, düşüncelerinizi, hislerinizi paylaşın, karşılaştığınız problemleri paylaşın. Sizinle aynı saflarda yer alan o kadar çok geliştirici bulacaksınız ve onların sizi cesaretlendirmeye ve desteklemeye ne kadar hazır olduğunu göreceksiniz. Ve sizi çok daha ileriye taşıyacak çok değerli eleştirilerini sunacaklar.

Kapatırken

Yazının çok büyük çoğunluğu doğrudna çeviri olduğundan eklemek istediğim birkaç şey daha var.

  • Belli bir tecrübeniz varsa bu yazıdaki çoğu nokta sizi ırgalamıyor.
  • İş yapmak yerine iş yapmak üzerine konuşuyorsanız asla iş yapmayacaksınız demektir.
  • İlk denemede Crysis yapmak gibi bir hayaliniz varsa, ya yeterli bilginiz yok, ya da tahtalarınızda eksiklik vardır.
  • Oyun yapmak ile oyun motoru yapmak arasındaki farkı bir kez daha okuyun.
  • Benim de biraz kendi tecrübelerim üzerine yazı yazmam gerekiyor ki hem içimi dökeyim, hem de başkalarının anlatmadıklarını anlatayım.
biri bir şey demiş
  1. Ben buraları yeni gördüm, gözlerim yaşlı. Yemin ediyorum yazdığım koda, özellikle de oyun çalışır düzeyde dediysek, bi daha açıp bakmaya korkuyorum. Türkiye facebook gruplarına sorayım dedim, daha kaliteli olması için en yapmam gerekli diye dönüp bana “Burda anlatılacak konu değil, hede hüde hebele hübele” dediler. Şimdi buralara geldim bi baktım bi sürü acı çeke çeke öğrendiğim şeyleri benden yıllar önce yaşamış birisi var. Buraya minnak ananas arena (ilk) oyunumuzu koyuyorum berkayla yaptığım, umarım hala buralardasındır da vakit bulup 5 dakika oynarsın (daha uzun ben bile oynamak istemedim :d).

    https://drive.google.com/open?id=0ByxT2NlAASRRSEp0OW53RHNGLWM

    Timuçin Emre Şen 27 Ağustos '17 tarihinde | Cevapla

Söz uçar yazı kalır