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

Oyun Yapımcısı / Programcısı Olmak?

Bir iki hafta önce oyun yapımcısı olmak isteyen birisi tarafından mail almış, yol göstermem istenmişti. Kısa bir süre sonra, oyun programcısı olmak isteyen başka birisi de mail gönderdi. Tam “acaba bir blog yazısı yazıp merak edilenleri cevaplasam mı?” diye düşünürken, benzer sorular soran mail’lerin sayısı 14’e çıktı. Finallerimin bittiği şu dönemde, hazır PangPang‘i de bitirmiş ve kodunu yayınlamışken, en azından kısaca bu olayı açıklayayım istedim.
Öncelikle bu soruları cevaplayacak bilgi birikimine ne kadar sahip olduğumu belirteyim. Bilkent Üniversitesi’nde Bilgisayar Mühendisliği okuyorum. Bilgisayar Mühendisliği’nin bir yan dalı olan Yazılım konusunda oldukça birikim ve yeteneğe sahibim. Dolayısıyla “programlama” denilen işin içerisindeyim, bir çok farklı yönünü de görmüş durumdayım.

Tabi tüm bunlar oyun programlama teriminin içerisinde bulunmama yeterli değil. Ama yazdığım 3 adet 2D Java oyununun yanı sıra White Night‘ı da ele alırsak (hepsini tek başıma yaptım), oyun programlama konusunda bilgi sahibi olduğum söylenebilir. Tekrardan söyleyeyim, bu konuda söz sahibi olacak bir kişi değilim; ama soruyu soran sizlere söz sahibi olacak insanlardan daha yakın olduğum için bildiklerimi paylaşmayı da görev addediyorum kendime.

Oyun Yapımcısı ≠ Oyun Programcısı

Öncelikle şu yanlış anlaşılmayı ortadan kaldıralım. Oyun Yapımcısı ile Oyun Programcısı hiçbir şekilde aynı şey değildir. Adları zaten üzerlerinde, biri yapımcı, diğeri programcı. İkisi farklı şeyler olmakla beraber, bir kişi ikisini de aynı anda yapabilir.
Bunu şöyle bir örnekle açıklayalım. Steven Spielberg bir yönetmendir, oyuncu değildir. Film yapımını yönetir; ama oynamaz (oyuncu değildir, oyunculuk bilgisi yoktur vs); ama Clint Eastwood hem yönetmen, hem de oyuncudur. Gran Torino filmini yönetmiş, aynı zamanda başrol oyunculuğunu yapmıştır. Bu, Clint Eastwood’un kendi yeteneği ve becerisidir; yani hem oyunculuk, hem de yönetmenlik yeteneği vardır. Aynı şekilde bir Oyun Yapımcısı iyi bir programcı olarak Oyun Programcısı da olabilir. Tersinin geçerli olduğu yerler de yok değil elbette.

Bir oyun yapabilmek için gerekli olan yetenekleri ‘kısaca’ sıralayacak olursak:

  • Programlama
  • 3 Boyutlu Modelleme
  • Müzik/Ambiyans besteleyicisi
  • Ses efektleri uzmanı
  • Senarist
  • Seviye Tasarlayıcısı
  • Oynanış Tasarlayıcı
  • Konsept Sanatçısı
  • Seslendirmenler
  • … ve kendi alanlarında uzman daha fazlası…

Dolayısıyla tek bir kişinin bütün hepsini yapabiliyor olması imkânsıza yakın, hepsini iyi yapabiliyor olması ise imkânsızdır. Birkaç tanesini iyi yapan bir kişi ise tek başına bir oyun yapabilir (bkz. White Night).

Oyun Yapımcısı Olmak

Baştan söyleyeyim, kimse öyle elinde bir şey olmadan çıkıp da oyun yapımcısı olamaz. Oyun yapımcısı, takım lideri olmanın yanı sıra, yukarıdaki listeden en az birini çok iyi yapabilecek bir kişi olmak zorundadır. İnternet üzerinde sürekli görüyorum, bir kişinin aklına fikir geliyor, çeşitli forumlarda veya resmî yerlerde “şöyle şöyle bir fikrim var, oyun böyle böyle olacak, işin özü programcı, modellemeci, seviye tasarlayıcı vs vs arıyorum.” Yani arkadaş diyor ki, benim bir fikrim var, siz toplanıp bu fikri hayata geçirecek, tüm işleri benim yerime yapacaksınız, ben de bu oyunu ben yaptım diye gezeceğim.

Bunu kimse yemez, kimse de katılımcı olmaz. Öncelikle elinizde bir şeyler olması gerekmekte. İyi bir programcı, seviye tasarlayıcı veya modellemeci olabilirsiniz; ama bunun yanısıra liderlik yeteneğine de sahip olmanız gerekmektedir. Oyun yapımcısı bir takım lideridir, takımın geri kalanını takip eder, iş bölümü yapar, fikirleri ölçüp biçer, işleyişi gözler ve tüm bunların yanında kendi üzerine düşen işi yapar ki, bu da genellikle en ağır iş olur.

Ben White Night’ı yaparken, programlama, senaryo, seviye tasarımı, oynanış tasarımı ve konsept çizimlerini kendi başıma yaptım. İki seviye tasarımında Ünal kardeşim yardımcı oldu. Müzikleri Broken Notes gurubunun albümlerinden, kendilerinden izin isteyerk kullandım, ses efektleri için internetteki ücretsiz kütüphanelerden faydalandım. Son olarak, modelleme konusunda, Yaşar isimli bir arkadaşım birkaç modelde yardımcı olduktan sonra, doku giydirme, UV Mapping vs gibi konuları da yine kendi başıma hallettim.
Son olarak da, birkaç kişiye seslendirmenlik teklifi götürdüm, ve onlar da kabul ettiler.

White Night yılın en iyi tek oyunculu modu seçildi. Birçok yerden övgü topladı ve onlarca kaliteli moddan çok daha popüler hale geldi. Dolayısıyla oyun yapımı ile ilgilenen başka kişiler tarafından kabul gördüm, çünkü elimde bir şeyler vardı, kendimi kanıtlamıştım. Şimdi, bir sonraki mod çalışmam için teklif götürdüğüm insanlar kabul ediyor, hatta dışarıdan takıma girmek isteyenler bile oluyor.

Ama ben White Night’ı yapmadan önce böyle teklifler götürseydim, kimsenin beni sallamayacağı aşikârdır. Adı sanı duyulmamış, elinde bir portfolyösü bulunmayan bir kişiye nasıl güvenip de iş verebilirsiniz? Kaldı ki, bu sadece var olan bir takıma girmek. Bir takım oluşturmak için, size güvenecek ve sizi takip edecek insanlara ihtiyacınız var, bu da ancak kendinizi bir şekilde ispatlayarak olabilir ancak. Türkiye’de bu konuda verilebilecek örnekler çok, biliyorsunuz. Olay sırf John Carmack’tan, Gabe Newell’dan ibaret değil bazılarının sandığı gibi.

Dolayısıyla, oyun yapımcısı olmak istiyorsanız, önce iyi olduğunuz bir alanın yanı sıra, oyun yapmanın hemen her aşamasını bilmeniz, diğer yapılacak işlerde de bir fikir sahibi olmanız gerekiyor. Bunun en iyi yolu ise, önce tek başınıza bir oyun yapmaya çalışmak olacaktır. Bu, size hem genel işleyiş hakkında çok büyük tecrübe katacak, hem konu hakkında bilgi sahibi olacaksınız, hem de neyi iyi yaptığınızı ve ne konuda yardıma ihtiyaç duyduğunuzu göreceksiniz.

Oyun Programcısı Olmak

Oyun programcısı, yapımcısı olmaktan çoğu zaman daha zordur; çünkü oyun programlama bir sürü alt dal içerir. Yapay Zekâ (Artificial Intelligence), fizik etkileşim (Physics Interaction), ışıklandırma & gölgelendirme (Lightning & Shadows), çarpışma belirleme (Collision Detection) vs bu dalların içindedir, ve genellikle her biri kendi alanında uzmak kişiler tarafından yürütülür. Eğer ki bir oyun motoru kullanıyorsanız (Unity, UDK, Source vs…), oyun motorunun limitlerini, kullandığı programlama dillerini, soyutlandırmasını, ön tanımlı kütüphanelerini bilmek, öğrenmek durumundasınız.

Eğer oyun programlamaya yeni başlayan birisiyseniz, öncelikle bir Game Loop (oyun döngüsü) kavramını anlamalısınız. Kısaca Game Loop, bir oyun döngüsünün içerisinde olan her şeyi kaplar. Bu, nesneleri ekrana çizme, çarpışmaları belirleme gibi oyunun içinde bulunduğu durumu (game state) kontrol edip gerekli işlemleri yaptıran ana işlemdir. Oyun programlamaya 2 boyutlu bir oyun yazarak başlamak, oyun programlama mantığını kavramak için en iyi yöntemdir. Var olan 2D motorları kullanmanın yanısıra, kendi 2D motorunuzu da yazabilirsiniz.

Bu konuda, yazılmış oyunları ve kodları incelemek ayrıca fayda sağlayacaktır. Örneğin, PangPang için kaynak kodunu yayınladım. Sıfırdan yazdığım 2D motoru kullanarak bambaşka oyunlar yapmanız mümkün. Mesela biraz değişiklik ile bir Bomberman, Snake, Galaxian ve hatta Süper Mario bile yapabilirsiniz. Benim kişisel tercihim Java, çünkü sanılanın aksine yavaş çalışmıyor ve nesne yönelimi konusunda mükemmel. Python’un pygame modülü de oldukça başarılıdır. C++ için SDL, C# içinse zaten XNA kullanabilirsiniz; ama önemli olan, Game Loop mantığını kavramanızdır, sonrası tamamen sizin hayal gücünüze kalmış.

3 Boyutlu oyun programlamaya gelince işler değişiyor. Burada düzlemden uzaya geçiş söz konusu ve yüksek matematik işin içine giriyor. Her ne kadar DirectX ve OpenGL gibi grafik kütüphaneleri bir çok şeyi sizin yerinize yapsa da, işleyiş mantığına hakim olmanız gerekmekte. Ayrıca fizik motoru için farklı kütüphaneler de kullanabilirsiniz. Mesela Source Havoc, HPL2 ise Newton Game Dynamics kullanıyor. Ben White Night’ı yaparken, Bilgisayar Mühendisliği okuyor olmanın avantajlarından ziyade, AngelScript kullanan HPL2, C++’a çok benzediği için kendi kişisel merakımla öğrendiklerim sayesinde çok güzel sistemler, bulmacalar ve ara videolar kodlayabildim. Ama bu konuda oyun motorunun sınırlarında kısılı kaldım. Mesela bir silah sistemi ekleyemedim.

3 Boyutlu oyun programlamanın sıfırdan oyun motoru yazma kısmına girişmek şu zamanlarda akıl kârı değil. Bir CryEngine, bir Source, bir UDK, bir Unity yazmak için yeterli zaman ve parayı bulacak bir ekip, motor yazmak yerine motor lisansı alıp oyunu yapmayı tercih edecektir.

Şahsi görüşüm, var olan bir oyuna mod yapmaya çalışmak olacaktır ki, bu şekilde temel mantık çok rahat şekilde kavranabilir.

İş Bulmak?

Bu konuda yönlendirme yapamayacağım maalesef. ODTÜ ATOM bu konuda bir başlangıç noktası olabilir; ama belirttiğim gibi, iyi ve az da olsa tecrübeli olduğunuz bir alan olmalı. Ben SilentHillTR’yi yönettiğim dönemlerde yaptığım işlerle Orhan Güç‘ün aklında kalmışım, kendisi benimle senaryo yazımı için iletişime geçtiğinde öyle belirtmişti. Yani kimse yetenek avına çıkmıyor, bir şekilde işin bir yerinden başlamanız gerekiyor. Gerisi doğru insanlarla tanışmaktan geçiyor. Son olarak da adanmışlık.


Değineceğim bir başka konu ise, yabancı dil bilgisi. Programlama ve oyun geliştirme üzerine kaynakların çoğu İngilizce’dir. Türkçe kaynak bulmak sıkıntılı olduğu gibi, güvenilir ve profesyonel olmama durumu da karşınıza çıkabiliyor.

En önemli mesele…
Bu iş konsantrasyon ve adanmışlık ister. Hadi yapalım deyince olan bir şey değil. Aklım ermeye başladığından beri takip ettiğim birçok projenin ölüşünü gördüm. Yazar, çizer veya programcı olarak katıldığım başka ekipler de oldu ve hepsinin dağılışını gördüm.
Projenizin ölmesini istemiyorsanız
– Yutamayacağınız lokmayı ısırmayın.
– “Ben yatayım, işi başkası yapsın, üzerine konayım”. I-ıh, işler öyle yürümüyor.
– Egonuzu bir kenara bırakın. Takım çalışmasında egonun yeri yoktur, anca takım dağılır.
– Çok uçuk birisi değilseniz her işi kendiniz yapmaya çalışmayın, yapamazsınız. Bu bir meydan okuma değildir.
– Son olarak da, kararlı olun. White Night 10 ay sürdü. Ama sonuçları ortada.

Kısacası, oyun yapmak da, programlamak da ciddi iştir, ve ciddi emek ister. Umarım bir nebze olsun açıklayıcı olmuştur.

89 şey demişler
  1. 14 yaşında lise öğrencisiyim. Bilgisayara ilgin ilk tost makinemi çok küçükken başladı. Bu sene müfredatın değişmesi ile lise 1’den itibaren programlama öğretilmeye başnadı. Biz de phyton öğreniyoruz. Yeteneğim var mı var. Nerden biliyorum diye soracak olursanız milletin 10 dk da yaptığı yada yapamadığı şeyi ben max 1 dk da yapıyorum. İlgim var mı? Kesinlikle evet. Programlama konusunda veya kendimi geliştirme konusunda tavsiye ve önerileriniz nelerdir çok merak ediyorum. Sırf oyun olması gerekmez ama benim bu dünyada mutlu olabileceğim tek iş bilgisayar olacak. Oyun geliştiricisi mi programlamacı mı bilmem ama olacağına eminim. Sizden bu işe nerden başlamalıyım ne yapmalıyım tavsiye istiyorum. Yazacağınız her şey için şimdiden teşekkürler,şükran.

    Osman Altun 12 Ocak '18 tarihinde | Cevapla
    • gardaşım ben üniversite okuyorum bilgisayar mühendisliği benden sana tavsiyem eğer programcı olmak istiyorsan önce proglamlama mantığını anlaman gerekiyor benim tavsiyem C ile başla onu az çok öğrnedikten sonra programcı mantığını az çok kapmış olursun aslında herkes sana bi yol gösterip şunu şunu yap demez ama ben diyeceğim 🙂 öncelikle internete yaz proglamlama dili nedir sonra yaz programcı nasıl olunur falan bilmediğin ne varsa yaz internete oralardan bişeler aklına yatar azda olsa sonra youtube a gir ya volkan kılıç ya da yazlım bilimi kanalından C derslerini dinle ikiside olur birini baştan sona izle (izlerken sende pratik yap ne yaptıklarını anlamaya çalış) sonra bi kütüphanden veya kitapçıdan proglamcılık mantığı anlatan bi kitap oku ben şahsen kerem köseoğlu programcılık mantığı okudum onu tavsiye ederim bunları yaparsan zaten diğer dilleri kolayca öğrenebilrsin çünkü mantığını biliyorsun artık devamındada kendi yolunu çizecek seviyeye gelirisn zaten kardeşim ama bunları yazarken senin meslek lisesi olduğunu varsayarak yazdım eğer anadolu lisesiysen üniversiteye başladıktan sonra düşünürsün bunları şimdilik liseni bitir veya boş zamanlarında yap bunları derslerini aksatma kendine iyi bak umarım başarılı olur kararlarından pişman olmazsın allaha emanet ol

      Ahmet Ali Aşık 6 Şubat '18 tarihinde |
  2. Hayırlı akşamlar e posta adresimden bana ulaşır mısın acaba arkadaşım ben genç bir girişimciyim oyun dünyasında bir çaba içerisine girmek istiyorum . Maddi destek sunarak kendime mesai arkadaşları toplamak istiyorum .Bana ulaşırsan sevinirim .

    Kamil emre 30 Aralık '18 tarihinde | Cevapla
  3. Dijital oyun tasarımı bölümü hakkında bilginiz var mı? Yani yazılım mı okusam bu sektör için daha iyi olur yoksa dijital oyun tasarımı mı?

    Burcu 24 Mayıs '19 tarihinde | Cevapla
    • Yurtdışında oyun geliştirme, oyun tasarımı, dijital oyunlar vb isimler altındaki bölümleri incelemişliğim, oradan mezun olmuş insanlarla konuşmuşluğum var. Açıkçası benim kişisel fikrim şöyle: oyun geliştirmeye başlamak için belli bir bölüm okumaya, hatta okumaya gerek yok.
      Bilgisayar Mühendisliği okuyan birisi de, X Dili Edebiyatı okuyan birisi de oyun yapabilir. Yazılım öğrenmek bugünlerde artık okul okumayı gerektirmiyor. Sadece sabır, sebat, disiplin, ve en önemlisi İngilizce bilgisi gerekiyor. Dolayısıyla sırf oyun geliştirmek için bir bölüm seçmek anlamsız. Üniversitede okuyacağınız bölüm, en kötü seçimde bile, bütün işler ters gittiği durumda hâlen size ekmek parası çıkartması muhtemel bir diploma edinmek için olmalı. Zaten öğrencilik sırasındaki boş vakitler verimli kullanılsa 3 bölümde uzman olarak mezun olur bir insan.

      Tanshaydar 27 Haziran '19 tarihinde |

turgay için bir cevap yazınCevabı iptal et