Makine Öğrenmesine Giriş: Oyun Sektörü Özeli

ÜNOG
ÜNOG
Oct 29 · 6 min read

Machine Learning şöyle önemli, böyle tehlikeli, duyuyoruz… Peki esasında nedir bu Machine Learning? Ve daha da önemlisi oyun yaparken biz nasıl kullanabiliriz?

ÜNOG’a Katıl Bültenimize Abone OlÜNOG’a Destek Ol

Image for post
Image for post

Makine Öğrenmesi [Machine Learning], bir yazılımın, bir ton veriyi kullanarak, karşılaştığı sorunu nasıl çözebileceğini keşfedebilmesidir. Ama makine öğrenmesini daha fazla tartışmadan önce biz programcıların temelde ne yaptığını inceleyelim; kariyerimiz genel olarak fonksiyon yazmakla geçiyor.

Image for post
Image for post

Matematiksel anlamda bakarsak olay f(x) = y’den ibaret. Bu notasyonun anlatmak istediği şey şu: İsmi f olan bir fonksiyonumuz var, bu fonksiyon x verisini alıyor, içeride ne yapıyorsa yapıyor, ve y sonuçuna ulaşıyor. Daha alışık olduğumuz standart bir programlama dilinde yazmak gerekirse:

Image for post
Image for post

Bilgisayara Veri (x), ve veriyi sonuca götüren Fonksiyonu (f) veriyoruz, bilgisayar ise bize Sonucu (y) buluyor. Doğru fonksiyonu yazmak ise programcının görevidir.

Image for post
Image for post

Peki ya doğru fonksiyonu yazmak çok zor ise? Varsayalım ÜNOG konferansında oyununuzun demosunu insanlara sunup, geri bildirimlerini toplamak istiyorsunuz. Ancak o geceden geri kalan tek kaynak oyunu oynayan kişilerle deneyimlerinden hemen sonra birlikte çekildiğiniz fotoğraflar. Bu fotoğraflardan insanların mutlu mu mutsuz mu olduğunu anlamaya çalışıyorsunuz.

Image for post
Image for post

Bu problemi çözmek için nasıl bir fonksiyon yazarsınız? Önce fotoğrafta biri var mı onu bulmak lazım. Sonra fotoğraf içinde kafanın yerini, sonra kafanın içinde dudakları ve kaşları bulmak lazım. Sonra kaşlar çatık mı, dudaklar gülümsüyor mu ona karar vermek lazım… Bu benim aklıma gelen yöntem. Ne iyi çalışır ne de yazması kolay…

Image for post
Image for post
“Benim bu programı yazmam çok zor…”

Bunun gibi durumlarda makine öğrenimi yardımımıza yetişiyor. f(x) = y, şeklinde normalde olduğu gibi f fonksiyonunu bir programcı olarak tanımlamaktansa, bu f fonksiyonunu bilgisayarın keşfetmesini istiyoruz.

Machine Learning sistemlerinde bilgisayara tonla çok Veri(x) ve Sonuç(y) veriyoruz. Bilgisayar ise bizim için verileri sonuca götüren Fonksiyon’u(f) buluyor. Doğru veri-sonuç verisetini bulmak ise programcının görevidir.

Image for post
Image for post

Mutlu-üzgün oyuncu problemimize geri dönelim. Bu problemi makine öğrenimi ile çözebilmek için binlerce mutlu insan fotoğrafına ve binlerce mutsuz insan fotoğrafın ihtiyacımız var. Eğer makine öğrenimi algoritmamıza binlerce mutlu insan fotoğrafını verip bunlar mutlu dersek, ve binlerce mutsuz insan fotoğrafını verip bunlar mutsuz dersek, yeni bir insan fotoğrafı verdiğimizde bize o fotoğraftaki kişinin mutlu mu mutsuz mu olduğunu gösterebilir! Bu durumda fotoğraflar verimiz, her fotoğrafın mutlu veya mutsuz olduğu bilgisi de sonucumuzdur. Bilgisayar bir çok veri-sonuç çiftine bakarak verileri sonunçlara çeviren bir fonksiyon öğrenebilir. Yani fotoğraftaki kişi mutlu mu değil mi onun kararını verebilir.

Özetlemek gerekirse, Machine Learning veri kullanarak fonksiyon yazmak demektir. Eğer yazmak istediğiniz fonksiyon zor ise, ve elinizde büyük bir veriseti varsa kullanabileceğiniz bir yöntemdir.

Şimdi ise oyun sektöründe Machine Learning ile çözülen problemlere veri-sonuç bakış açısını kullanarak göz atalım. Bunlar teoride, gelecekte bir gün kullanılacak araştırma teknikleri değil, bugün oynadığınız oyunların içerisinde bulunan teknikler.

Dijital bir karakter konuştuğunda eğer dudaklarının hareketi söylenilen sözlere uymazsa çok saçma görüntüler ortaya çıkabilir. Ama eğer yeterince büyük bir verisetimiz var ise makine öğrenmesi ile söylenen cümleyi alıp, doğru animasyon sonucunu veren bir program üretebiliriz.

Veri: Karakter replikleri.

Sonuç: O replikler söylenirken insan dudaklarının animasyonu.

Fonksiyon: Yeni bir replik verildiğinde karakterin o repliği okurken yüzünün alacağı animasyonlar.

Özellikle çoklu oyuncu oyunlarda kullanıcılarınızın hile yapmasını istemezsiniz ama hilecileri bulmak her zaman kolay değil. Bu videoda Valve, CS:GO oyununda hileci problemini makine öğrenimi kullanarak nasıl çözdüklerini anlatıyor.

Veri: Bir oyuncunun belli bir maç boyunca yaptığı hareketler, nasıl yürüdüğü, silahını ne hızla çevirdiği vesaire...

Sonuç: O belli maçın içerisinde hile yapılıp yapılmadığı. [Bu ilk başta insanlar tarafından karar veriliyor.]

Fonksiyon: Bir oyuncunun bir maç boyunca yaptığı hareketler verildiğinde o hareketlerin hile ile yapılıp yapılmadığı kararı.

Motion Capture tekniği her ne kadar çok etkileyici sonuçlar verse de aslında uzun ve yorucu bir prosedür. Çünkü kaydedilen animasyon genelde yeterince temiz değildir ve bir animatör tarafından elle temizlenmesi gerekir. Ama bu aşamayı da makine öğrenmesi yardımıyla kolaylaştırmak mümkün.

Veri: Temizlenmemiş, bozuk motion capture verisi.

Sonuç: Elle temizlenmiş motion capture verisi.

Fonksiyon: Yeni temizlenmemiş motion capture verisini geldiğinde otomatik olarak temizlemek.

Çoklu oyuncu oyunlarda hangi kimin kimle oynadığına doğru karar verebilmek çok önemli! Oyuncuların tecrübelerinin ve ping’lerinin birbirine olduğunca yakın olmasını isteriz. Ama akşam saat 7'de oynayan oyuncu sayısı ile sabah saat 7'de oynayan oyuncu sayısı eşit değil, ve bu demektir ki günün saatine göre matchmaking ile ilgili verdiğimiz kararlar farklı olmalı. Peki saat kaçta kimin oynadığını nasıl tahmin edebiliriz? Makine Öğrenmesi ile.

Veri: Günün belli bir saati ve dünyanın üzerindeki belli bir yer.

Sonuç: Günün o saatinde o yerde, kaç kişinin ne tecrübe seviyesinde oynadığı.

Fonksiyon: Yeni bir gün geldiğinde kaç kişinin, hangi tecrübe dağılımında oynayacağını tahmin edebilen bir program.

Fizik etkileşimlerini simüle edebilmek için makine öğrenmesine ihtiyacımız yok, ama ML simülasyonları hızlandırma konusunda bize yardımcı olabilir. Bunun sebebi ise bir çok ML algoritmasının GPU’larda çok verimli bir şekilde paralelize edilebilmesi. Bu projede ML soft-body ve giysi simülasyonunu hızlandırmak için kullanılıyor.

Veri: Belli bir simülasyon objesinin zaman T’deki pozisyonu.

Sonuç: Aynı simulasyon objesinin zaman T+1'deki pozisyonu.

Fonksiyon: Bir obje verildiğinde onun zaman içerisinde nasıl simüle edebilen bir program. Peki neden bunun için ML gerekli? Çünkü normal teknikler ile simüle etmek saniyeler alırken, bu ML fonksiyonu milisaniyeler içerisinde çalışıyor!

Bir programın insanlardan daha başarılı bir şekilde araba kullanması hiç kolay değil. Hızla giden bir arabada ne zaman gaza basıp, direksiyonu ne kadar çevireceğine, ne zaman frenleyip ne zaman vites değiştireceğine karar veren bir programı yazmak her babayiğidin harcı değil. Neyseki ML tekrar yardımımıza yetişiyor.

Veri: Arabanın durumu; hızı, vitesi, haritadaki konumu, diğer arabaların pozisyonu, hızı vesaire.

Sonuç: Arabanın yapacağı aksiyon; fren, gaz, vites değişikliği vesaire.

Fonksiyon: Oyunun herhangi noktasında arabanın maçı kazanmak için hangi hareketi yapacağını söyleyen bir program.

Aslında bu son proje için Veri — Sonuç — Fonksiyon bakış açısını kullanmak yanlış olur, çünkü bu farklı bir Makine Öğrenmesi algoritması. Bu noktaya kadar kullandığımız algoritmaların hepsi Supervised Learning[Denetimli Öğrenme] başlığı altındaydı, ama ilk kez Reinforcement Learning [Pekiştirmeli Öğrenme] algoritmsı ile karşılaştık. Bu algoritmalar arasındaki en büyük fark RL algoritmlarının datasetlerini kendileri üretmeleri! Peki nasıl mı? Bunu da bir sonraki Makine Öğrenmesi Bülteninde tartışıcaz.

Eğer buraya kadar okuduysanız, size bir sorumuz var! Machine Learning tekniklerini daha detaylı öğrenebileceğiniz bir ders serisi ilginizi çeker mi? ÜNOG olarak ML vs RL tekniklerinde çok daha matematiksel ve kodsal detaya gireceğimiz bir derse ilgi duyulur mu bunu görmek istiyoruz. Eğer cevabınız evet ise lütfen Medium’da comment olarak belirtin!

Tekrardan teşekkür ediyoruz ve haftaya görüşmek üzere!

ÜNOG’a Katıl Bültenimize Abone Ol ÜNOG’a Destek Ol

Image for post
Image for post

ÜNOG

Türkiyenin en güzel oyun geliştirme grubu. https://unog.dev

ÜNOG

Written by

ÜNOG

Türkiye’nin en güzel oyun geliştirme topluluğu. https://unog.dev

ÜNOG

ÜNOG

Profesyonel, bağımsız ve hatta öğrenci oyun geliştiricilerinin bir araya geldiği ÜNOG Oyun Geliştirici Topluluğu, bilgi ve tecrübe paylaşımına özendiriyoruz.

ÜNOG

Written by

ÜNOG

Türkiye’nin en güzel oyun geliştirme topluluğu. https://unog.dev

ÜNOG

ÜNOG

Profesyonel, bağımsız ve hatta öğrenci oyun geliştiricilerinin bir araya geldiği ÜNOG Oyun Geliştirici Topluluğu, bilgi ve tecrübe paylaşımına özendiriyoruz.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store