Unity ile 2.5D izometrik oyun-geliştirme yapay zekâ akışı
Motora temiz ulaşan bir yapay zekâ oyun asset hattı kurmak
Yapay zekâ oyun asset hattı, çizilmiş çizimleri motora hazır asset'lere çeviren zincirdir: sprite üretimi, animasyon etiketleme, atlas paketleme, adlandırma ve pivot disiplini. Yapay zekâ kareleri çoğaltır; hattın asıl işi ise motoru referansları sessizce kaybetmekten alıkoyan export sözleşmesidir.
Yapay zekâ oyun asset hattı nedir?
Bir asset’in insan eliyle çizilmiş bir referanstan, motorun dilimlediği, animasyonladığı ve doğru sırada çizdiği bir sprite’a kadar geçtiği sıralı adımlar bütünüdür. 2.5D izometrik bir proje için o zincir şudur: çizilmiş referans çizim, yapay zekâ-destekli varyasyonlar ve kareler, animasyon etiketleme, tutarlı padding ile atlas paketleme ve sabit pivot ile pixels-per-unit kullanan import. “Yapay zekâ” bu zincirin bir aşamasını tanımlar, karelerin ve varyantların çoğaltılmasını, zincirin tamamını değil. Bir yığın üretilmiş görsel bir hat değildir; hat, o görselleri motora temiz ve tekrarlanabilir biçimde sokan disiplindir.
Ayrım, asıl bir proje ölçeklenince önem kazanır. Dört animasyonlu tek bir karakter, adımlar gevşek olsa bile elle çekip çevirebileceğin bir şeydir; her biri sekiz yönlü idle, yürüme ve saldırı setine sahip altmış karakter ise binlerce sayfalık bir hacimdir, ve o hacimde adımlar her seferinde aynı olmak zorundadır yoksa iş kendi tutarsızlığının altında çöker. Bir hat, yüzüncü sprite’ın birincisiyle aynı biçimde, aynı pivot, aynı padding, aynı adlandırma ile gelmesini sağlayan şeydir, böylece kimse gece yarısı elle import düzeltmez. Asıl kurmaya değer olan, herhangi bir üretilmiş karenin zekâsı değil, işte bu tekrarlanabilirliktir.
Yapay zekâ asset hattında nereye oturur?
Ortaya, çizim ile paketleme arasına oturur. Sanatçı baz sprite’ı çizer ve paleti kilitler; yapay zekâ sekiz yönlü seti, yürüme döngüsü tween’lerini ve renk değişimlerini doldurur, böylece her kareyi elle çizmezsin. Üretilen her kare çizilmiş kaynağa karşı kontrol edilir, çünkü kontrolsüz bırakılırsa model partiler arasında tonda ve kenar stilinde savrulur. Çizilmiş sprite tek doğru kaynak olarak kalır, ve yapay zekâ tek bir iyi sprite’ı tam bir sete çeviren emektir, asla görünümün kaynağı değil.
Başka bir deyişle hacim modelin, görünüm insanındır. Bu ayrım bulanıklaştığı an, yani çoğaltmak yerine baz tasarımı yapay zekâya kurdurduğun an, tüm set modelin uzandığı jenerik ortalama neyse onu miras alır, ve hiçbir sonraki temizlik miktarı belirgin bir karakteri geri getirmez. Tuttuğumuz pratik kural şudur: insan emeğini stili tanımlayan o tek sprite’a ve üretilen her kareyi ona sadık tutan inceleme geçişine harca, yapay zekâyı ise aradaki onlarca neredeyse aynı kareye harca. Bu, emeği ucuz olduğu yerde, yargıyı ise yeri doldurulamaz olduğu yerde tutar.
Adlandırma ve pivot disiplini neden asıl iştir?
Çünkü motor, çizimini bulamıyor veya hizalayamıyorsa ne kadar iyi olduğunu umursamaz. Tutarlı bir adlandırma kuralı, importer’ın bir sayfayı elle düzeltmeden dilimlemesini sağlar; sabit bir pivot (yere basan karakterlerde alt orta) karakterin ayaklarını yere basılı tutar, havada süzülmek veya zemine gömülmek yerine. Fizik-temelli yerleşim kuralları bunun yanında durur, nesneler yere değer, yaslanan şeyler inandırıcı açılarda durur, üst üste konanlar kütle merkezine saygı gösterir, böylece kurulmuş sahne çıkartma kolajından değil bir dünyadan okunur. Çoğu hattın sessizce başarısız olduğu yer bu gösterişsiz disiplindir.
Bu başarısızlık nadiren gürültülüdür, tam da bu yüzden tehlikelidir. Yarım piksel kaymış bir pivot bir hata fırlatmaz; ayakları her sahnede karenin bir kıl üstünde süzülen bir karakter yayınlar, ve bunu ancak bir oyuncu ekran görüntüsü aldığında fark edersin. “hero_walk_01” ile “Hero-Walk-1” arasında savrulan bir adlandırma şeması build’i kırmaz; projenin geri kalanında bir insanı sayfaları elle yeniden dilimlemeye sessizce zorlar. Adlandırma ve pivot disiplininin asıl iş olmasının nedeni, hattın sessizce başarısız olan ve katlanarak büyüyen tek kısmı olmasıdır, dolayısıyla baştaki birkaç dakikalık kural, takip edilecek hiçbir hata mesajı olmayan türden bir hata ayıklamadan seni kurtarır.
Hat referans kaymasını nasıl durdurur?
Export sınırını, her seferinde elle yeniden yaptığın bir adım değil, bir sözleşme olarak ele alarak. Klasik başarısızlık: bir atlas yeniden paketlemesi sprite’ları yeniden dizer, ve alt taraftaki referanslar, bir prefab’da, bir AnimationClip’te, bir state machine’de, seni uyaracak hiçbir hata olmadan sessizce kırılır. Çözüm, adlandırmayı ve pivot’u bir kez kilitlemek, tutarlı ayarlarla paketlemek ve kare sürelerini sayfanın yanında kayıtlı tutmaktır, böylece animasyonlar senin çizdiğin hızda oynar. Export adımı motorun güvenebileceği bir sözleşme olduğunda, bir yeniden paketleme güvenlidir ve asset’ler motorun tam beklediği biçimde gelir.
Bir sözleşmeyi güvenilir kılan disiplin, referansları konumdan bağımsız olarak sabit tutmaktır. Bir prefab bir sprite’a, importer’ın her zaman onayladığı bir adla işaret ediyorsa, bellek kazanmak için atlas’ı yeniden paketlemek proje çapında bir kırılma değil sıradan bir optimizasyon hâline gelir. Sözleşme ayrıca yalnızca görsel sayfanın taşıyamayacağı veriyi de taşımak zorundadır: metadata olarak kayıtlı kare süreleri, dilim sınırları ve pivot ofsetleri, böylece saniyede on iki kare oynaması için ayarladığın bir animasyon yeniden import’ta sessizce Unity’nin varsayılanına sıçramaz. Export’u bir sözleşme olarak ele almanın amacı, ucuz şeyleri, paketleme, bellek düzeni, batch’leme, pahalı şeye, yani o referansların tutmasına dayanan kurulmuş oyuna asla dokunmadan değiştirebilmektir.
Bu hat, 2.5D izometrik Unity yapay zekâ akışının bir aşamasıdır; onu besleyen araç seçimleri Unity yapay zekâ araçlarında ele alınır. Bu kit yayınlanmadan önce özgünleştiriliyor, pipeline hazırlık aşamasında, dolayısıyla henüz bir kanıt galerisi yok; durumunu katalog üzerinden takip et.