Bilgisayar Oyunlarında Matematik

Bilgisayar ve Oyunlarda Matematik
Bilgisayar ve Oyunlarda Matematik

İlkokulda, hatta eğitim hayatımızın çoğu kısmında, matematik derslerinde muhtemelen “Bu öğrendiklerimizi nerede kullanacağız?” ya da “Bu formüller nerede işime yarayacak?” gibi şikayetleri sık sık dile getirenlerimiz olmuştur. Fakat bu şikayetler, genelde sorunlara tek taraflı bakmak olarak yorumlanabilir. Çünkü perde arkasında “Matematik her yerde!” desem size, bana ne dersiniz?

Matematik, aslında formül ve sayılardan çok daha fazlasıdır. Geometri ve lineer cebir gibi çok sayıda farklı alanı bünyesinde bulunduran matematiğin kullanım alanları da oldukça geniştir. Türev, integral, limit gibi özellikle daha ileri düzey matematik kullanıldığında aslında bu formüllerin problemlere çözüm olarak üretildiğini, yani aslında kendilerinin tek başına birer algoritma olduğunu anlıyoruz. Bu nedenle aslında matematiğin kendi başına bir algoritma olduğunu belirtmek doğru olur. O meşhur havuz ve yaş problemleri de aslında algoritmayla çözülür. İki bilinmeyenli ya da daha fazla bilinmeyene sahip bir denklem oluşturursunuz ve bu denkleme çözüm ararken de aslında farkında olmadan bir algoritma ya da daha farklı bir deyişle “sözde kod” yazmış olursunuz.

Bilgisayar Oyunlarında Matematiğin Önemi

Bilgisayar grafiklerinde de matematik yoğun bir şekilde kullanılmakta. Bu alanla ilgili çalışmalar yapıyorsanız, örnek olarak 1920×1080 ekran çözünürlüğüne ve 21.5 inç ekrana her inç başına kaç pixel düştüğünü hesaplamanız gerekebilir. Sadece bilgisayar olarak düşünmeyin, mobil ekranlar için de bu hesaplamalar yapılmakta. Aynı şekilde siz Blender gibi yazılımlarda bir küp oluşturduğunuzda o küpün nasıl oluştuğu ve ne ölçülerle şekil aldığı da yine matematiktir. Bilgisayarınızın sahip olduğu çözünürlüğe göre o ekran şekilleniyor ve ona göre bir küp oluşturuluyor. Sizin bu objeyi dilediğiniz gibi manipüle edebilmeniz, arka planda hazırlanan kodlar sayesinde mümkün oluyor. Yine aynı şekilde ekranınızın sahip olduğu çözünürlüğe göre oynadığınız oyunun ekranınızda belirmesi de aslında işin matematiği denebilir.

Unity oyun motorunu kullandığım için o oyun motoru üzerinden bir örnek vereyim. 2 boyutlu bir projede x ve y eksenleri üzerinden hesaplamalarımızı yaparız. Bir karaktere yürüme özelliği eklediğimizde aslında y ekseninde ona belli bir hızda ilerlemesini söylemiş oluyoruz. Y eksenini manipüle edebildiğimiz için karakterin o eksende hareket ederek gerçek hayattaki gibi insanlardaki yürüme mekaniğini kazanmasını sağlıyoruz. Aynı şekilde bir karakterin zıplamasını sağlarken de X eksenini manipüle ediyoruz ve karakterimizin bu eksende hareket etmesini sağlayarak gerçek hayattaki zıplama etkisini oyuna yansıtmış oluyoruz. Matematiğin günümüzde kullanıldığı pek çok örnek var, bunlardan bazılarını da hep beraber inceleyelim:

1-) Angry Birds

Çıktığı dönemde çok ses getiren Angry Birds ile başlayalım. Angry Birds oyununda, fırlattığınız kuşun havada nasıl yol aldığı ile ilgili formül kısa olarak şu şekilde:

Angry Birds Matematiği

Formül kısmı size yabancı geliyorsa merak etmeyin. Fırlattığınız kuşun aldığı yol, aslında “parabol” dediğimiz bir terime karşılık geliyor. “Parabol nedir?” diye sorarsanız da açıklaması şu şekilde: Parabol, uzayda herhangi bir F noktasından başlayarak bir varlığın ziyaret ettiği noktaların birleşmesi sonucu oluşan doğrudur. Genelde y=ax²+bx+c şeklinde bir formül ile ifade edilir fakat bu formatta olmasına rağmen farklı varyasyonları da vardır(formülde değişkenlerin yanına farklı sabitlerin gelmesi gibi) ve yukarıdaki resimde gördüğünüz gibi dağı andıran bir görüntü alır. Attığınız açıya göre parabol şekillenir. Açının kosinüs ve sinüs değerleri sayesinde attığınız kuşun nereye varacağı belli olur çünkü söz konusu parabol bu açılarla şekillenir. Hatta size ufak bir ipucu da vereyim, 45 derecelik açıyla kuşu atmayı başarırsanız kuşu o seviyede gidebileceği en uzak seviyeye atmış olursunuz. 45 derecenin bu etkiyi sağlamasının sebebi de sabit hızla hareket eden bir maddenin hızını hesaplamada kullanılan ikinci derece parabol formülünün sadeleştirilmesi sonucu en uzak sonucu veren değerin 45 derece olarak bulunması. Yani oyunda bazı durumlarda bu bilgiyi kullanarak farklı şekillerde oyunu manipüle edebilir ve seviyeleri geçmeyi kolaylaştırabilirsiniz.

Uzun lafın kısası, kuşu belirli bir açıda fırlattığınızda belirlediğiniz açıya bağlı olarak parabolün şekli belirlenir ve parabol eksi ivme kazandığında, yani aşağıya doğru harekete başladığında, parabolün biteceği yer kuşumuzun aynı zamanda düşeceği yer olur. Aşağıdaki şekil ise aslında özet bir şekilde mantığı göstermekte:

Angry Birds Mantığı

Daha fazla bilgi için kaynaklarıma göz atabilirsiniz, Angry Birds Matematiği

2-) Pathfinding (İz Bulma)

Bir diğer örnek ise pathfinding (iz bulma) adını verdiğimiz yön bulma olayında kullanılan algoritmalardır. Yapay zeka ile ilgilenen veya oyun geliştiren arkadaşlar zaten pathfinding olayına aşinadır ama kısaca açıklamak gerekirse de yine matematik kullanarak gideceğimiz noktaya en kısa hangi yoldan gideceğimizi bulmaya pathfinding diyoruz. Pathfinding konsepti için kullanılan farklı algoritmalar olsa da A* arama algoritması, bu algoritmalar arasında en popüler olanıdır.

Örnek olarak oyunumuzda bir karakterin bizi farkettiğinde bize doğru gelmesini istiyorsak ya da bilgisayar kontrolünde olan bir karakterin bizi takip ederek bize eşlik etmesini istiyorsak pathfinding kullanırız. Örnek olarak Unity oyun motorunda NavMesh aracı bulunur ve A* arama algoritmasını kullanır. Pathfinding için rahat çözümler üretilse de ve günümüzde NavMesh gibi araçlarla daha kolay bir şekilde pathfinding sistemi kurulabilse de arka planda nelerin olduğunu ve bu araçların nasıl çalıştığını bilmek önemli avantajlar sağlayabilir. Özellikle oyun geliştiricilerinin bu konuda daha derin araştırmalar yapması da kendi projelerinde pathfinding özelliğini eklemek için daha özel çözümler üretmeyi kolaylaştırabilir.

Unity oyun motorunda A* algoritmasının örnek bir kullanımına bakacak olursak, önce A isimli bir başlangıç noktasından B noktasına gidilecek mesafe hesaplanırken A noktasından başlayarak komşu noktalar incelenir. Sonrasında A noktasından B noktasına olan, engel farketmeksizin, bütün noktalardan B noktasına çıkan alternatif rotalar belirlenir. Sonrasında da başlangıç noktasından başlayarak belirli bir mesafedeki bir noktaya gitmek için gerekli mesafe hesaplanır. Bu mesafenin hesaplanmasının yöntemi değişkendir çünkü düzlemde eğer bir engel varsa karakterimiz o engelin içinden geçemeyeceği için bu sefer engelin dışında kalan yollar hesaplanmaya başlanır. A noktasından başlayarak komşu noktaların tümünü algoritma inceler. Tüm komşu noktalara bakılır ve en kısa olanı seçilir. Manhattan uzaklığı adı verilen ölçümle pathfinding oluşturulduğunda önce bir sonraki noktaya gidilmesi için çevre noktalardan o noktaya çıkan yol hesaplanır. Aşağıdaki resimde, Manhattan uzaklığı 20 birimdir çünkü hedef noktaya uzanan iki yol vardır ve her birimi 10 birimdir. O noktaya çıkan gerçek uzaklık ise 14 birimdir. Pisagor teoremi olarak da geçen yöntemle ana uzaklık bulunur. Manhattan uzaklığı da hesaplamaya dahil edilerek en kısa yol keşfedilmeye çalışılır.

Hipotenüs

Bu yöntemle en kısa yol bulunmaya çalışılır ve sonunda algoritma, gidilecek yola karar verir ve karakterimizin o yönde ilerlemesini sağlar. Komşulara bakılarak en kısa mesafe hesaplanır ve en kısa mesafeli noktaya varıldıktan sonra aynısı bu sefer yeni varılan nokta için tekrarlanır. Gitmek istediğimiz noktaya gidene kadar bu sürekli tekrarlanır. Fakat her zaman bu yöntem kullanışlı değildir çünkü sezgisel bir algoritma olduğu için her zaman en iyi sonucu bulamaz. Sezgisel algoritmalar, adları üstünde o anki duruma göre bir seçim yaparlar ve o an hangi çözüm daha kısaysa onu seçerler ve buldukları en kısa yoldan ilerler fakat o kısa yoldan sonra uzun bir yol geldiğinde bu sefer oradaki alternatiflere odaklanır ve belki de başka yollarla daha kısa sürede gidilmesi için gereken çözümü bulabilecekken algoritmalar bunu gözden kaçırır. A* arama algoritması da sezgisel bir algoritma olduğu için çoğu zaman kötü bir sonuç çıkarmasa da bazı durumlarda en iyi sonucu veremeyebiliyor.

Matematiğin günümüz hayatında kullanıldığı tabii ki çok örnek var. Oyun sektöründe de yaygın bir şekilde matematik kullanılmakta. Bilgisayar bilimlerinin de önemli yapıtaşlarından biri olan matematik, üzerinde durulduğu zaman size bu alanda hakimiyet sağlayabilecek bir alandır. Belirli bir düzeyde matematik hakimiyetiniz olursa, üzerinde çalıştığınız oyunlara ilginç mekanikler ekleyebilir ve oyunlarınıza daha fazla gerçekçilik katabilirsiniz.

Kaynaklar

Yazar: Caner Özdemir

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir