T: tema · Z: kodu büyüt · S: konuşmacı notları · F: tam ekran · Esc: genel bakış · ⌂ ders haritası
OYUNLARDA YAPAY ZEKÂ · HAFTA 15
Prosedürel İçerik Üretimi
Gürültü, zindanlar, dalga fonksiyonu çöküşü, L-sistemleri — dünyayı elle değil, kuralla yapmak
PRESS ▶ TO START

Bu derste oyunun haritası 🗺️

  1. PCG nedir? Tohumlar — Elite’in 22 KB’lik evreni, River Raid, Minecraft’ın pack.png tohumu
  2. Gürültü ve arazi — Perlin’in Oscar’lı fikri, oktavlar, No Man’s Sky’ın 18 kentilyon gezegeni
  3. Zindanlar ve mağaralar — hücresel otomat, BSP, sarhoş yürüyüşü, Spelunky’nin 4×4 odası
  4. Kısıt tabanlı üretim — dalga fonksiyonu çöküşü: Bad North, Townscaper
  5. Dilbilgileri ve L-sistemleri — bitkiler, metinler, görevler
  6. Tasarım ve değerlendirme — “10.000 kase yulaf lapası”, ifade aralığı, oynanabilirlik testi, PCGML
  7. Kod — gürültü, mağara, L-sistemi + dört laboratuvar
  8. Kütüphaneler — FastNoiseLite, Unreal PCG, Godot, DeBroglie, Houdini
🎮 Bu dersin sonunda…

…bir tohumdan her seferinde aynı dünyayı üretebilecek, gürültüyle arazi, otomatla mağara, Spelunky yöntemiyle oynanabilir seviye, WFC ile kurallara uyan harita ve L-sistemiyle bitki yapabilecek; üretilen içeriğin oynanabilir ve ilginç olduğunu ölçmeyi bileceksiniz.

🤔 ISINMA: MİNECRAFT DÜNYASI NASIL DİSKİNİZE SIĞIYOR?

Bir Minecraft dünyası pratikte sonsuz büyüklükte. Ama yeni bir dünyaya girdiğinizde oyun gigabaytlarca harita indirmiyor. Nasıl?

  • Dünya kaydedilmiyor, hesaplanıyor: tek bir sayı (tohum) + bir algoritma = her seferinde aynı dağlar, aynı mağaralar.
  • Sadece sizin değiştirdiğiniz parçalar diske yazılıyor.
  • Bu fikir, 1980’lerde belleğin kilobaytla ölçüldüğü bir zorunluluktan doğdu; bugün çeşitlilik, tekrar oynanabilirlik ve üretim maliyeti için kullanılıyor.
  • Ve yeni bir soru doğurdu: Rastgele üretilen bir dünya ilginç olabilir mi? Bu dersin ikinci yarısı bu soruya ayrıldı.

🎯 Bu konu için bilmeniz gerekenler

Yeşil = gerekli · kesikli = faydalı ama şart değil. Tıklayınca ilgili sunuma gider.

Neden?Bu hafta iki eski tanıdık tekrar sahnede: ızgara ve graf. Mağaranın bağlı olup olmadığını flood fill ile, seviyenin oynanabilir olup olmadığını A* ile test edeceğiz.
🧰 Kodlamadan korkuyorsanızGürültü fonksiyonları motorlarda hazır (Unity: Mathf.PerlinNoise, Godot: FastNoiseLite, p5.js: noise()). Bu derste içlerini açacağız, ama kullanmak için sadece parametrelerin anlamını bilmek yeter.

Mini sözlük

PCG (procedural content generation)prosedürel içerik üretimiOyun içeriğinin algoritmayla, sınırlı ya da dolaylı insan girdisiyle üretilmesi
seed · PRNGtohum · sözde rastgele sayı üreteciÜretecin başlangıç sayısı · aynı tohumdan hep aynı diziyi veren algoritma
noise · octave · fBmgürültü · oktav · kesirli Brown hareketiYumuşak rastgele fonksiyon · farklı ölçekteki katman · oktavların toplamı
cellular automatonhücresel otomatHer hücrenin komşularına bakarak güncellendiği ızgara kuralı
BSP · drunkard’s walkikili alan bölme · sarhoş yürüyüşüAlanı yinelemeli bölme · rastgele yürüyerek tünel kazma
WFC · entropy · propagationdalga fonksiyonu çöküşü · entropi · yayılımKısıt çözen üretim · bir hücrenin kalan seçenek sayısı · kısıtın komşulara aktarılması
L-system · grammar · axiomL-sistemi · dilbilgisi · aksiyomYeniden yazma kurallarıyla büyüyen dize · kurallar kümesi · başlangıç dizesi
expressive range · playabilityifade aralığı · oynanabilirlikÜretecin ne tür içerik ürettiğinin dağılımı · içeriğin bitirilebilir olması
LEVEL 0
PCG nedir? Tohumlar
kilobaytlık evrenler
  • PCG nedir? Tohumlar
  • gürültü ve arazi
  • zindanlar ve mağaralar
  • kısıt tabanlı üretim (WFC)
  • dilbilgileri ve L-sistemleri
  • tasarım ve değerlendirme
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

PCG nedir, neden var?

Shaker, Togelius ve Nelson’ın tanımı: oyun içeriğinin algoritmayla, sınırlı ya da dolaylı kullanıcı girdisiyle üretilmesi. İçerik = seviyeler, haritalar, zindanlar, bitkiler, silahlar, görevler, isimler, dokular, müzik… (yapay zekâlı NPC’ler genelde “içerik” sayılmaz).

neden?örnek
bellek / boyutElite (1984), River Raid (1982)
tekrar oynanabilirlikRogue, Diablo, Spelunky, Hades’in oda sırası
ölçekMinecraft, No Man’s Sky
üretim maliyetiSpeedTree ağaçları, Unreal PCG ile orman serpme
oyuncuya uyumoyuncunun becerisine göre seviye (Y17)
PCG’yi sınıflandırmak
  • Çevrimiçi / çevrimdışı: oyun sırasında mı (Minecraft), geliştirmede mi (bir tasarımcının kullandığı orman aracı)?
  • Zorunlu / isteğe bağlı: bitirmek için geçilmesi gereken seviye mi, süs bitkisi mi? Zorunlu içerik her zaman oynanabilir olmalı.
  • Kurucu / üret ve sına: tek seferde doğru kuran (Spelunky) mı, üretip test eden, beğenmezse yeniden üreten mi?
  • Rastgele / deterministik: tohumla belirlenen mi?

Hikâye: kilobaytlara sığan evrenler

Elite (1984): 8 galaksi, 2048 gezegenDavid Braben ve Ian Bell’in uzay ticaret oyunu BBC Micro’da çalışıyordu. Her gezegenin konumu, adı, ekonomisi, fiyatları ve “etoburluğuyla ünlü sanat mezunları” gibi tuhaf tanıtım cümleleri saklanmıyordu: tek bir tohum sayısı sabit bir algoritmadan geçirilip her şey yeniden hesaplanıyordu. Oyun yaklaşık 22 KB’ye sığdı. Yazarlar başta 2⁴⁸ galaksi düşünmüştü; yayıncı Acornsoft, evrenin matematiksel kökeni fark edilmesin diye bunu 8’e indirtti.
River Raid (1982): 4 KB’de bitmeyen nehirCarol Shaw’un Atari 2600 için tasarladığı Activision oyunu: dikey kayan bir nehirde uçak. Nehrin kıyıları, adalar, düşmanlar saklanmıyordu; sabit bir tohumla başlayan bir doğrusal geri beslemeli kaydırma yazmacı (LFSR, en basit sözde rastgele üreteçlerden biri) oyun sırasında üretiyordu. Tohum sabit olduğu için nehir herkes için aynıydı: ezberlenebilir, ama 4 KB’lik bir kartuştan beklenmeyecek kadar uzun. Shaw, oyun tasarlayan ilk kadınlardan biri olarak anılır.

Ortak fikir: “rastgele” ama tekrarlanabilir. Bir sonraki slayttaki tohum kavramı bunun anahtarı.

Tohum: rastgeleliğin kumandası

  • Bilgisayardaki “rastgele” sayılar aslında bir formülden gelir: sözde rastgele sayı üreteci (PRNG). Aynı başlangıç sayısı (tohum) → aynı dizi.
  • En basiti doğrusal eşlik üreteci: x ← (a·x + c) mod m. Laboratuvarda yazacaksınız.
  • Tohum sayesinde: oyuncular dünyalarını paylaşır (Minecraft tohumları), günlük meydan okuma herkese aynı seviyeyi verir (Spelunky), hatalar yeniden üretilir (“tohum 4817’de düşman duvara gömülüyor”), ağ oyununda bütün harita yerine tek bir sayı gönderilir.
  • Dikkat: aynı tohum, ancak aynı sırayla aynı sayıda çağrı yapılırsa aynı sonucu verir. Bir sistemin fazladan bir rastgele sayı çekmesi, bütün dünyayı değiştirir. Çözüm: her sistem için ayrı üreteç (arazi, düşman, ganimet).
pack.png: bir resmin tohumunu bulmakMinecraft’ın eski varsayılan doku paketi simgesi küçük (128 × 128) bir dünya manzarasıydı; tohumunu kimse bilmiyordu. YouTuber SalC1’in başlattığı proje, resmi blok blok yeniden kurdu, bulutlar ve şelale gibi ayrıntılardan ipuçları çıkardı ve BOINC dağıtık hesaplama ağıyla (Minecraft@Home) yüz trilyonlarca olası değeri tarayıp adayları azalttı. 8 ay sonra, 5 Eylül 2020’de tohum bulundu: 3257840388504953787. Bir tohum, bir dünyanın parmak izidir.
Quiz 1 · PCG
Çok oyunculu bir oyunda iki oyuncu aynı tohumla başlıyor, ama birinin haritası diğerinden farklı çıkıyor. En olası sebep?
Tohum ancak aynı çağrı dizisi için aynı sonucu garanti eder. Grafik ayarına göre parçacık sayısı değişen bir sistem aynı üreteci kullanırsa diziler kayar. Çözüm: harita üretimi için ayrı, sadece haritanın kullandığı bir üreteç. (Kayan noktalı sayıların farklı işlemcilerde küçük farklar vermesi de nadir ama gerçek bir sorundur.)
LEVEL 1
Gürültü ve arazi
Perlin’in Oscar’ı
  • PCG nedir? Tohumlar
  • gürültü ve arazi
  • zindanlar ve mağaralar
  • kısıt tabanlı üretim (WFC)
  • dilbilgileri ve L-sistemleri
  • tasarım ve değerlendirme
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

Önce elle: rastgele sayılardan dağa ⛰️

Bilgisayar araziyi nasıl “uyduruyor”? Dört adımda kuralım. Soldan sağa düğmelere basın: her adım bir öncekinin kusurunu gideriyor. Sonra tohumu değiştirin; aynı tohuma dönünce aynı dağların geri geldiğini görün.

Hikâye: Tron’dan Oscar’a, Perlin gürültüsü

  • Ken Perlin, Disney’in Tron (1982) filminin bilgisayar grafiklerini yapan MAGI şirketinde çalışmıştı. Dönemin bilgisayar görüntüleri pürüzsüz, “makine gibi” görünüyordu.
  • Çözümü: tamamen rastgele değil, yumuşak rastgele bir fonksiyon. Yakın noktalar benzer değer alır, uzak noktalar bağımsızdır. 1985’te SIGGRAPH’ta “An Image Synthesizer” makalesiyle yayımladı.
  • Mermer, ateş, bulut, dalga… Film endüstrisi bu fonksiyonu her yerde kullanmaya başladı. Perlin, 1997’de Sinema Akademisi’nden Teknik Başarı Ödülü aldı: “bilgisayarla üretilmiş yüzeylerde doğal görünümlü dokular” için.
  • Bugün aynı fikir Minecraft’ın dağlarında, No Man’s Sky’ın gezegenlerinde ve neredeyse her açık dünya oyununun arazisinde.
Nasıl çalışır? (kısaca)
  1. Tam sayı ızgara noktalarına rastgele eğim vektörleri koy (tohumla).
  2. Bir nokta için, çevresindeki 4 köşenin eğimleriyle nokta çarpımını al.
  3. Bu 4 değeri, yumuşatılmış ağırlıklarla (6t⁵ − 15t⁴ + 10t³) karıştır.
Daha basit kardeşi değer gürültüsü: köşelere doğrudan rastgele sayılar koyup yumuşakça karıştırmak (laboratuvarda yazacaksınız).

Canlı: gürültüden arazi 🏔️

  1. Oktavı 1 yapın: yumuşak, “şişirilmiş” tepeler. 8 yapın: kıyılar girintili, dağlar pürüzlü. Her oktav bir öncekinin iki katı sıklıkta, yarısı yükseklikte ayrıntı ekler (doğadaki kıyı şeritleri de böyle: fraktal).
  2. Kalıcılığı 0,8’e çıkarın: küçük ayrıntılar büyükler kadar güçlü, arazi “gürültülü” görünür.
  3. Deniz seviyesini kaydırın: aynı yükseklik haritası adalar dünyasına ya da kıtaya dönüşür. Biyom eşikleri = tasarımcının düğmeleri.
  4. Tohumu yazın, değiştirin, geri yazın: harita birebir geri geliyor mu? Gri görünümde ham yükseklik haritasını görün.
🔎 DEMODA DENEYİN
  1. Oktavı 1 yapın: yumuşak, “şişirilmiş” tepeler. 8 yapın: kıyılar girintili, dağlar pürüzlü. Her oktav bir öncekinin iki katı sıklıkta, yarısı yükseklikte ayrıntı ekler (doğadaki kıyı şeritleri de böyle: fraktal).
  2. Kalıcılığı 0,8’e çıkarın: küçük ayrıntılar büyükler kadar güçlü, arazi “gürültülü” görünür.
  3. Deniz seviyesini kaydırın: aynı yükseklik haritası adalar dünyasına ya da kıtaya dönüşür. Biyom eşikleri = tasarımcının düğmeleri.
  4. Tohumu yazın, değiştirin, geri yazın: harita birebir geri geliyor mu? Gri görünümde ham yükseklik haritasını görün.

🔗 Başka gözle: etkileşimli anlatımlar ve yazılar

Aynı konuyu başka bir anlatımla, kendi elinizle oynayarak görmek çok işe yarar. Kartlar yeni sekmede açılır; çoğu İngilizce ama görsel ve etkileşimli.

Hikâye: No Man’s Sky’ın 18 kentilyon gezegeni

  • Hello Games’in oyunu 64 bitlik bir tohum uzayı kullanır: 2⁶⁴ ≈ 18 kentilyon gezegen. Gezegenler, yaratıklar, bitkiler, gemiler formüllerle üretilir; GDC konuşmalarında arazinin gürültü katmanlarıyla nasıl kesintisiz üretildiği anlatıldı.
  • Ağustos 2016’daki çıkışı büyük bir hayal kırıklığıydı: tanıtımlarda görülen bazı özellikler yoktu, gezegenler bir süre sonra birbirine benziyordu. İngiltere’nin reklam denetim kurumu (ASA), şikâyetler üzerine mağaza sayfasını inceledi.
  • Kasım 2016’daki karar ilginçti: ASA, görüntülerin oyunu “büyük ölçüde temsil ettiğine” karar verdi. Gerekçenin bir kısmı PCG’ydi: tüketici, görüntülerin karşılaşacağı içeriğin türünü gösterdiğini anlar, ama o belirli yaratıkları ve manzaraları görmeyi beklemez.
  • Sonraki yıllarda ücretsiz güncellemelerle (üs kurma, çok oyunculu, gemiler, yeni biyomlar) oyun itibarını büyük ölçüde geri kazandı ve oyun tarihinin en ünlü “geri dönüş” hikâyelerinden biri oldu.
“10.000 kase yulaf lapası” sorunuKate Compton’ın ünlü benzetmesi: 10.000 kase yulaf lapasını her seferinde farklı yulaf tanesi dizilimiyle üretebilirsiniz; her biri matematiksel olarak eşsizdir, ama oyuncu için hepsi aynı yulaf lapasıdır. Önemli olan, oyuncunun fark edeceği farklılıklardır. Gürültüyle üretilen sonsuz arazi tek başına ilginç değildir; ilginçliği el yapımı parçalar, hedefler ve sürprizler katar.
LEVEL 2
Zindanlar ve mağaralar
Rogue’dan Spelunky’ye
  • PCG nedir? Tohumlar
  • gürültü ve arazi
  • zindanlar ve mağaralar
  • kısıt tabanlı üretim (WFC)
  • dilbilgileri ve L-sistemleri
  • tasarım ve değerlendirme
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

Üç klasik zindan üreteci

Hücresel otomatIzgarayı %45 duvarla rastgele doldur. Sonra birkaç tur: “8 komşudan en az 5’i duvarsa duvar ol”. Gürültü birkaç adımda organik mağaraya dönüşür. Sorun: kopuk cepler kalabilir → flood fill ile bul, sil ya da bağla.
BSP (ikili alan bölme)Alanı ikiye böl, parçaları yine ikiye böl… Her yaprağa bir oda, kardeş odaları koridorla bağla. Sonuç: bağlı, mimari, Rogue tarzı zindan. Kökeni: Rogue (1980), “roguelike” türüne adını veren oyun.
Sarhoş yürüyüşüBir noktadan başla, rastgele yürü, geçtiğin yeri kaz. Hedef oran açılınca dur. Tek yürüyüş olduğu için hep bağlı; dolambaçlı, doğal tüneller. Birden çok yürüyüşçü ya da yöne eğilim ekleyerek çeşitlenir.

Üçü de birkaç satırlık kod; fark, ürettikleri karakterde: organik mağara, mimari zindan, dolambaçlı tünel. Gerçek oyunlar çoğu zaman bunları karıştırır (BSP ile odalar + otomatla mağara bölümleri).

Canlı: zindan üreteçleri ⛏️

  1. Hücresel otomatta “otomat adımı”nı 0’dan 5’e tek tek artırın: gürültü nasıl mağaraya dönüşüyor? 2–3 adımdan sonra pek bir şey değişmiyor (kararlı hâl).
  2. İlk duvar oranını 0,52’ye çıkarın: mağara parçalanır, kırmızı (kopuk) bölgeler çoğalır. 0,40: tek büyük açık alan. Oyuncunun ulaşamadığı bölgeler = boşa giden içerik ya da oyunu bitirilemez yapan hata.
  3. BSP’de sarı kesikli çizgiler bölme ağacının yapraklarını gösteriyor. Neden hiç kırmızı bölge yok?
  4. Sarhoş yürüyüşünü %10 ile %60 arasında deneyin. Tohumu değiştirdikçe karakter aynı kalıyor mu?
🔎 DEMODA DENEYİN
  1. Hücresel otomatta “otomat adımı”nı 0’dan 5’e tek tek artırın: gürültü nasıl mağaraya dönüşüyor? 2–3 adımdan sonra pek bir şey değişmiyor (kararlı hâl).
  2. İlk duvar oranını 0,52’ye çıkarın: mağara parçalanır, kırmızı (kopuk) bölgeler çoğalır. 0,40: tek büyük açık alan. Oyuncunun ulaşamadığı bölgeler = boşa giden içerik ya da oyunu bitirilemez yapan hata.
  3. BSP’de sarı kesikli çizgiler bölme ağacının yapraklarını gösteriyor. Neden hiç kırmızı bölge yok?
  4. Sarhoş yürüyüşünü %10 ile %60 arasında deneyin. Tohumu değiştirdikçe karakter aynı kalıyor mu?

📸 Oyundan bir kare: Spelunky (2008 / 2012)

Spelunky (2008 / 2012) ekran görüntüsü
Her oyunda başka bir mağara. Seviyeler, tasarımcının elle çizdiği küçük oda şablonlarının rastgele ama kurallı bir ızgaraya dizilmesiyle üretiliyor; sonraki demoda aynı yöntemi kendiniz çalıştıracaksınız.
Görsel: Spelunky 2008 ve 2012 sürümleri, Mossmouth, Wikipedia (eğitim amaçlı adil kullanım)

Derin hikâye: Spelunky, rastgelelik ile el yapımı arasında

  • Derek Yu’nun 2008 platform oyunu (2012’de HD sürümü): her ölümde yeni seviye. Ama platform oyunu, rastgele bir mağara gibi kabaca üretilemez: zıplama mesafeleri, merdivenler, tuzaklar milimetrik olmalı.
  • Çözüm: seviye 4 × 4 = 16 odaya bölünür. Önce çözüm yolu: üst sıradan rastgele bir odadan başlanır, rastgele sola, sağa ya da aşağı gidilir; en alt sırada çıkış.
  • Yol üstündeki her oda, gereken açıklıklara göre (sol–sağ, alta açık, üste açık) el yapımı şablonlardan birini alır. Şablonların içindeki bazı bloklar da rastgeledir. Yol dışındaki odalar kapalı olabilir: hazine, gizli geçit.
  • Sonuç: halat ya da bomba kullanmadan bitirilebilen garantili bir yol, ama her seferinde farklı bir seviye. Rastgele ve elle tasarlanmışın en iyi dengelerinden biri.
Ders: önce yapı, sonra ayrıntıİyi PCG genelde katmanlıdır: önce oynanabilirliği garanti eden yapı (yol, odaların bağlantısı), sonra el yapımı parçalar, en son rastgele süs. Hades’in oda sırası, Dead Cells’in el yapımı odaları birleştiren “seviye iskeleti”, Diablo’nun zindanları da bu ailedendir.
🎬How (and Why) Spelunky Makes its Own Levels (Game Maker’s Toolkit)

Canlı: Spelunky tarzı seviye 🧗

  1. Ekranı okuyun: 16 kutu = 16 oda. Kutunun köşesindeki sayı ve çerçeve rengi odanın tipini gösterir (sağdaki açıklama). Yeşil çizgi, giriş odasından çıkış odasına garantili yol.
  2. “🎲 yeni seviye”ye 10 kez basın. Yol hiç yukarı çıkıyor mu? Neden çıkmıyor? (Algoritma yalnızca sola, sağa ve aşağı gider: geri dönmeyen yol asla kendini kilitlemez.)
  3. Bir 2 odasının hemen altındaki odanın tipi ne? Hep 3 ya da 4: üstü açık olmak zorunda. Oda tipi = “hangi kapılar açık olmalı?” sözleşmesi.
  4. Gri (0) odalara bakın: kapalı olabilirler, yol onlardan geçmez. Gerçek Spelunky’de hazine ve gizli geçitler buraya konur: bomba harcayan oyuncuya ödül.
  5. Aynı tohumu iki kez yazın: seviye birebir aynı. Spelunky’nin “günlük meydan okuma”sı böyle çalışır: o gün herkes aynı tohumu oynar.
🔎 DEMODA DENEYİN
  1. Ekranı okuyun: 16 kutu = 16 oda. Kutunun köşesindeki sayı ve çerçeve rengi odanın tipini gösterir (sağdaki açıklama). Yeşil çizgi, giriş odasından çıkış odasına garantili yol.
  2. “🎲 yeni seviye”ye 10 kez basın. Yol hiç yukarı çıkıyor mu? Neden çıkmıyor? (Algoritma yalnızca sola, sağa ve aşağı gider: geri dönmeyen yol asla kendini kilitlemez.)
  3. Bir 2 odasının hemen altındaki odanın tipi ne? Hep 3 ya da 4: üstü açık olmak zorunda. Oda tipi = “hangi kapılar açık olmalı?” sözleşmesi.
  4. Gri (0) odalara bakın: kapalı olabilirler, yol onlardan geçmez. Gerçek Spelunky’de hazine ve gizli geçitler buraya konur: bomba harcayan oyuncuya ödül.
  5. Aynı tohumu iki kez yazın: seviye birebir aynı. Spelunky’nin “günlük meydan okuma”sı böyle çalışır: o gün herkes aynı tohumu oynar.

🎬 Ara: Spelunky kendi seviyelerini nasıl yapar?

How (and Why) Spelunky Makes its Own Levels
Game Maker’s Toolkit (Mark Brown) · 7 dk 13 sn · YouTube’da aç

Demodaki 4 × 4 oda ızgarası, garantili ana yol ve odaların içindeki şablonlar, oyunun kendi tasarımcısının anlattığı mantıkla. Rastgelelik ile tasarımın nasıl bir arada tutulduğunun en iyi örneği.

🤔 İzlerkenAna yol neden önce kuruluyor? Odaların içindeki rastgelelik seviyenin çözülebilirliğini nasıl bozmuyor? Videodaki yöntemle bizim demodaki adımlar arasında bir fark var mı?
Quiz 2 · zindan
Hücresel otomatla ürettiğiniz mağarada oyuncunun başlangıcı ile çıkış bazen farklı (kopuk) bölgelerde kalıyor. En sağlam çözüm?
Rastgele bir yöntem garantisi olmayan bir sonuç verir; garanti, sonradan test ederek sağlanır. Flood fill (Yönsüz Graflar sunumu) ya da A* ile başlangıçtan çıkışa yol aranır; yoksa en yakın iki bölge arasına tünel kazılır ya da yeniden üretilir. Kazma aleti (C) Spelunky’nin bombası gibi bir tasarım cevabı olabilir, ama zorunlu yolu ona bırakmak riskli.
LEVEL 3
Kısıt tabanlı üretim
dalga fonksiyonu çöküşü
  • PCG nedir? Tohumlar
  • gürültü ve arazi
  • zindanlar ve mağaralar
  • kısıt tabanlı üretim (WFC)
  • dilbilgileri ve L-sistemleri
  • tasarım ve değerlendirme
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

Dalga fonksiyonu çöküşü (WFC)

  • Maxim Gumin, 2016’da GitHub’da yayımladı; adı kuantum fiziğinden ödünç, ama algoritma aslında bir kısıt çözücü (daha eski “model sentezi” fikrinin bir çeşidi).
  • Her hücre başta “her karo olabilir” durumunda (süperpozisyon). Kurallar: hangi karo hangisinin yanına gelebilir.
  • Döngü: (1) en az seçeneği kalan (en düşük entropili) hücreyi seç, (2) seçeneklerinden birini (ağırlıklı) rastgele seç: çöktür, (3) bu seçimin sonuçlarını komşulara yay: artık mümkün olmayan karoları sil, değişen komşunun komşularına devam et.
  • Bir hücrenin seçeneği kalmazsa çelişki: baştan başla ya da geri al (backtracking).
  • Sudoku çözerken yaptığınızın aynısı: en kısıtlı kareden başlarsınız, her yazdığınız rakam satır, sütun ve kutudaki seçenekleri azaltır.
Oyunlarda WFCBad North (2018) ve Townscaper (2021): Oskar Stålberg’in WFC çeşitleri; Townscaper’da tıkladığınız her noktada kasaba parçaları kurallara uyacak şekilde kendini “çözer”. Caves of Qud da bazı haritalarında WFC kullanır. Tasarımcı karoları ve kuralları çizer; algoritma sonsuz tutarlı düzen üretir.

Canlı: kurallara uyan harita ⚛️

  1. “1 adım”a birkaç kez basın: çöken hücrenin komşularındaki sayılar (kalan seçenek) nasıl düşüyor? Derin suyun yanında asla çimen yok: kural bunu imkânsız kılıyor.
  2. “▶ çalıştır” ile izleyin: hep en az seçenekli hücre çöküyor, bu yüzden harita “dalga” gibi yayılıyor.
  3. Çimen ağırlığını 5’e çıkarıp “yeni”: geniş ovalar. Su ağırlığını 5’e: göller ve deniz. Ağırlık = tasarımcının istatistik düğmesi.
  4. Kural çok sıkı olursa çelişki sayacı artar. Bu küçük kural kümesinde nadirdir; karmaşık karo setlerinde (Townscaper gibi) geri alma ve akıllı başlangıç şarttır.
🔎 DEMODA DENEYİN
  1. “1 adım”a birkaç kez basın: çöken hücrenin komşularındaki sayılar (kalan seçenek) nasıl düşüyor? Derin suyun yanında asla çimen yok: kural bunu imkânsız kılıyor.
  2. “▶ çalıştır” ile izleyin: hep en az seçenekli hücre çöküyor, bu yüzden harita “dalga” gibi yayılıyor.
  3. Çimen ağırlığını 5’e çıkarıp “yeni”: geniş ovalar. Su ağırlığını 5’e: göller ve deniz. Ağırlık = tasarımcının istatistik düğmesi.
  4. Kural çok sıkı olursa çelişki sayacı artar. Bu küçük kural kümesinde nadirdir; karmaşık karo setlerinde (Townscaper gibi) geri alma ve akıllı başlangıç şarttır.
LEVEL 4
Dilbilgileri ve L-sistemleri
yeniden yazma ile büyümek
  • PCG nedir? Tohumlar
  • gürültü ve arazi
  • zindanlar ve mağaralar
  • kısıt tabanlı üretim (WFC)
  • dilbilgileri ve L-sistemleri
  • tasarım ve değerlendirme
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

L-sistemleri: kurallarla büyüyen bitkiler

  • Biyolog Aristid Lindenmayer, 1968’de alg hücrelerinin büyümesini modellemek için tanımladı. Bir aksiyom (başlangıç dizesi) ve yeniden yazma kuralları: her adımda dizedeki bütün semboller aynı anda kurallarına göre değişir.
  • Alg örneği: A → AB, B → A. A, AB, ABA, ABAAB, ABAABABA… Uzunluklar Fibonacci dizisi!
  • Dizeyi bir “kaplumbağa” çizer: F ileri, + − dön, [ ] konumu kaydet/geri yükle (dallanma).
  • Prusinkiewicz ve Lindenmayer’in The Algorithmic Beauty of Plants (1990) kitabı bu alanın klasiği ve ücretsiz. Oyun ve filmlerde yaygın ağaç aracı SpeedTree da kural tabanlı üretimin ticari örneği.
Metin için dilbilgisi: TraceryKate Compton’ın Tracery kütüphanesi aynı fikri metne uygular:
{ "baslangic": ["#kahraman#, #yer#da #canavar# ile karşılaştı."],
  "kahraman": ["Yaşlı demirci", "Genç büyücü", "Hancının kızı"],
  "yer": ["mağara", "orman", "kale"],
  "canavar": ["bir kurt sürüsü", "uyuyan bir ejderha"] }
Görev açıklamaları, eşya adları, NPC söylentileri… 3 × 3 × 2 = 18 cümle; her yeni kelime çarpımı büyütür. (Türkçede ek uyumu için daha akıllı kurallar gerekir: “mağarada” ama “kalede”.)

Canlı: L-sistemi bahçesi 🌿

  1. Yinelemeyi 1’den başlatıp tek tek artırın: her adımda bütün F’ler aynı anda uzar ve dallanır. Alttaki “dize uzunluğu” nasıl büyüyor? (Üstel: bu yüzden demo belli bir uzunlukta durur.)
  2. Açıyı 25°’den 60°’ye, sonra 90°’ye çekin: aynı kural, bambaşka bitki. Kural = iskelet, açı = tasarımcının düğmesi.
  3. Rastgeleliği 15 yapıp “🎲 başka ağaç”a basın: aynı türden ama hiçbiri aynı olmayan ağaçlar. Bir ormandaki ağaçlar böyle üretilir.
  4. Sistem menüsünden Koch ve ejderha eğrilerini seçin: köşeli parantez (dal) yok, yalnızca dönüş var; yine de fraktal desen çıkıyor.
  5. Düşünün: [ ve ] hangi veri yapısını kullanıyor? (Yığın: “konumu it, dalı çiz, konumu geri çek”.)
🔎 DEMODA DENEYİN
  1. Yinelemeyi 1’den başlatıp tek tek artırın: her adımda bütün F’ler aynı anda uzar ve dallanır. Alttaki “dize uzunluğu” nasıl büyüyor? (Üstel: bu yüzden demo belli bir uzunlukta durur.)
  2. Açıyı 25°’den 60°’ye, sonra 90°’ye çekin: aynı kural, bambaşka bitki. Kural = iskelet, açı = tasarımcının düğmesi.
  3. Rastgeleliği 15 yapıp “🎲 başka ağaç”a basın: aynı türden ama hiçbiri aynı olmayan ağaçlar. Bir ormandaki ağaçlar böyle üretilir.
  4. Sistem menüsünden Koch ve ejderha eğrilerini seçin: köşeli parantez (dal) yok, yalnızca dönüş var; yine de fraktal desen çıkıyor.
  5. Düşünün: [ ve ] hangi veri yapısını kullanıyor? (Yığın: “konumu it, dalı çiz, konumu geri çek”.)
LEVEL 5
Tasarım ve değerlendirme
iyi bir üreteci nasıl anlarız?
  • PCG nedir? Tohumlar
  • gürültü ve arazi
  • zindanlar ve mağaralar
  • kısıt tabanlı üretim (WFC)
  • dilbilgileri ve L-sistemleri
  • tasarım ve değerlendirme
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

Bir üreteci değerlendirmek

  1. Oynanabilirlik: her içerik bitirilebilir mi? Bir yol bulma ajanıyla (A*, Y8) otomatik test: başlangıçtan çıkışa yol var mı, zıplama mesafeleri yetiyor mu?
  2. İfade aralığı (Smith ve Whitehead, 2010): üreteci 1000 kez çalıştır, her çıktıyı birkaç ölçüye göre (zorluk, doğrusallık, açık alan oranı) puanla ve 2B bir ısı haritasına koy. Üreteç hep aynı köşede mi kümeleniyor?
  3. Çeşitlilik ve “yulaf lapası”: oyuncu farkı hissediyor mu? Oyuncu testleri ve “bu ikisini ayırt edebilir misin?” soruları.
  4. Kontrol: tasarımcı istediğini alabiliyor mu? Parametreler anlaşılır mı?
Arama tabanlı PCGTogelius ve arkadaşları (2011): içeriği bir arama problemi olarak görün. Rastgele aday üret, bir uygunluk fonksiyonuyla puanla (oynanabilir mi, ne kadar zor, ne kadar çeşitli?), en iyileri evrimleştir (Y13’teki nöroevrimin aynısı, ama ağ yerine harita). Starcraft haritaları, kart oyunu sunumları, bulmacalar bu yolla üretildi.
Karma girişimli tasarımTasarımcı çizer, üreteç önerir, tasarımcı seçer ya da düzeltir. Unreal’ın PCG çerçevesi ve Houdini bu fikrin endüstrideki karşılığı: tasarımcı bir çizgi çizer, sistem kenarına orman ve kayalar serper.

🚀 Öncü yöntemler: öğrenerek üretmek

PCGMLSummerville ve arkadaşları (2018): mevcut el yapımı seviyelerden öğrenen üreteçler. Super Mario seviyelerini dizi olarak öğrenen modeller, Zelda zindanlarının yapısını öğrenen graf modelleri. Az veri en büyük sorun: bir oyunun sadece birkaç düzine seviyesi vardır.
Dil modelleriyle seviyeSeviyeyi metin olarak yazıp (karolar = karakterler) bir dil modeline ürettirmek: MarioGPT (2023) “çok borulu, az düşmanlı bir seviye” gibi komutlarla Mario seviyesi üretti. Y14’teki uyarılar burada da geçerli: üretilen seviyeyi bir ajanla oynayarak doğrulamak şart.
Endüstride bugün
  • Unreal Engine 5.7 (Kasım 2025): PCG çerçevesi “üretime hazır” oldu; yeni prosedürel bitki editörü deneysel olarak geldi.
  • Houdini: film ve oyunlarda prosedürel modelleme ve dünya inşası standardı.
  • Roguelike’lar (Hades II, Balatro’nun sunumları, Dead Cells) PCG’yi tasarımın merkezine koymaya devam ediyor.
  • Y16’da üretken YZ: görüntü, ses, 3B model ve “oynanabilir dünya modelleri”.
Quiz 3 · değerlendirme
Bir zindan üretecinin “hep çok benzer seviyeler ürettiğinden” şüpheleniyorsunuz. Bunu nasıl ölçersiniz?
İfade aralığı analizi, üretecin ne üretebildiğinin haritasıdır. Dağılım dar bir bölgede toplanıyorsa parametreler ya da algoritma çeşitlilik vermiyordur. Bu nicel analiz, oyuncu testinin (oyuncu farkı hissediyor mu?) yerini tutmaz; ikisi birlikte kullanılır.
LEVEL 6
Kod ve laboratuvarlar
gürültü, otomat, L-sistemi
  • PCG nedir? Tohumlar
  • gürültü ve arazi
  • zindanlar ve mağaralar
  • kısıt tabanlı üretim (WFC)
  • dilbilgileri ve L-sistemleri
  • tasarım ve değerlendirme
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

Gürültüyle arazi

Mağara otomatı ve bağlantı testi (1/3)

Mağara otomatı ve bağlantı testi (2/3)

Mağara otomatı ve bağlantı testi (3/3)

🎒 Kod sözlüğü

System.Random(seed) · random.Random(seed)tohumlu üreteçKendine ait, tohumlanmış bir üreteç nesnesi (paylaşılan global üreteç yerine)
noiseSeed · noiseDetail (p5.js)gürültü ayarıGürültünün tohumu · oktav sayısı ve kalıcılık
Mathf.PerlinNoise(x, y)Unity gürültüsü0–1 arası 2B Perlin değeri; tohum yok, koordinatı kaydırarak çeşitlenir
np.mgrid · astype(int)NumPy ızgarası · tam sayıya çevirmeBütün piksellerin koordinatları · ondalığı atma
deque · popleftçift uçlu kuyrukBFS için hızlı kuyruk (Kuyruklar sunumu)
bool[,] · GetLength(0)2B diziC# ızgarası; 0 = satır, 1 = sütun
Tilemap.SetTilekaro yerleştirmeUnity 2D’de ızgaraya karo koymak

🌱 Isınma kodu: yükseklikten biyoma

Demodaki renkli harita tam olarak bunu yapıyor: gürültü bir sayı verir, onu anlamlı bir şeye (su, kum, çimen, dağ) çeviren birkaç if’tir. Eşikleri değiştirmek = dünyayı değiştirmek. İpucu: if’leri küçükten büyüğe sıralarsanız her birinde tek karşılaştırma yeter.

🌱 Isınma kodu: kaç komşum duvar?

Mağara otomatının kalbi bu sayı: bir sonraki laboratuvardaki walls parametresi buradan geliyor. Başlangıç kodu hücrenin kendisini de sayıyor ve kenarda çöküyor (grid[-1] yok). Harita genişliği grid[0].length, yüksekliği grid.length.

🧪 Canlı laboratuvar: mağara kuralı

Başlangıç kodunda gürültü hiç değişmez. Kuralı yazın: sağda her yarım saniyede bir otomat adımı çalışıyor. Sonra kuralı değiştirip deneyin: “≥ 6” ne yapar? “≥ 3”?

🐍 Laboratuvar: kendi rastgele sayı üretecin

Aynı tohum → aynı liste: “rastgele” dünyaların tekrarlanabilir olmasının sırrı. Sonucu 2³²’ye bölerseniz 0–1 arası sayılar elde edersiniz. (Gerçek oyunlarda daha kaliteli üreteçler kullanılır: PCG32, xorshift, mulberry32.) Meraklısına: birkaç çıktıdan üretecin iç durumunu geri çözmek mümkün; How hackers reverse Math.random() videosu bunu adım adım gösteriyor. Ders: oyun rastgeleliği şifreleme için güvenli değildir (çevrimiçi kumar, ganimet kutusu, eşleştirme için sunucuda güvenli üreteç gerekir).

🐍 Laboratuvar: L-sistemi açılımı

Testlerden biri Lindenmayer’in alg sistemi (A → AB, B → A): uzunluklar 1, 2, 3, 5, 8, 13… Demo bahçesindeki bitkiler tam olarak bu fonksiyonun çıktısını çiziyor.

🐍 Laboratuvar: 1B değer gürültüsü

Bu, gürültünün en sade hâli. Farklı ölçeklerde birkaç tanesini toplarsanız (oktav) demo arazisindeki kesit çizgisini elde edersiniz. Perlin bunun bir adım ötesi: köşelere sayı yerine eğim koyar.
LEVEL 7
Kütüphaneler ve entegrasyon
motorlar ve oyununuz
  • PCG nedir? Tohumlar
  • gürültü ve arazi
  • zindanlar ve mağaralar
  • kısıt tabanlı üretim (WFC)
  • dilbilgileri ve L-sistemleri
  • tasarım ve değerlendirme
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

🧰 Kütüphaneler ve araçlar

adplatformne yapar / sınırlarınasıl eklenir
FastNoiseLiteC#, C++, JS, GLSL, Rust…Perlin, OpenSimplex2, hücresel (Worley), değer gürültüsü; fBm, “domain warp”. Tek dosya. Godot 4’te yerleşik.Tek dosyayı projeye kopyala
Unity MathematicsUnitynoise.cnoise, noise.snoise: Burst/Jobs ile hızlı gürültü; Mathf.PerlinNoise’dan esnek.Package Manager → Mathematics
Unreal PCG FrameworkUnreal 5.2+ (5.7’de üretime hazır)Düğüm tabanlı prosedürel serpme ve dünya inşası: yüzey örnekleme, filtreler, spline’lar, biyomlar.Plugins → Procedural Content Generation Framework
WaveFunctionCollapse · DeBroglieC# (Unity)Gumin’in özgün WFC’si ve daha esnek DeBroglie (kısıtlar, geri alma, yol kısıtı).GitHub / NuGet
Houdini EngineUnity / UnrealHoudini’de kurulan prosedürel araçları (yol, bina, arazi) motor içinde parametreyle çalıştırma.SideFX eklentisi
TraceryJS (bağlantı noktaları: Python, C#)Metin dilbilgisi: isimler, söylentiler, görev açıklamaları.npm install tracery-grammar
Python: numpy · opensimplex · noisePythonArazi ve doku prototipleri, ifade aralığı analizleri.pip install opensimplex

🧩 Oyununuza PCG eklerken

  1. Neyi üreteceğinize karar verin: zorunlu yol mu, süs mü? Zorunlu içerik için garanti (yapı önce) ya da üret-ve-sına.
  2. Tohum yönetimi: her alt sistem için ayrı üreteç (arazi, düşman, ganimet); tohumu kayıt dosyasına ve hata raporlarına yazın; günlük tohumu tarihten türetin.
  3. Katmanlar: yapı (yol, bölgeler) → el yapımı parçalar (şablon odalar, setler) → rastgele süs.
  4. Doğrulama: bağlantı (flood fill), erişilebilirlik (A*), zorluk ölçüsü; başarısızsa yeniden üret ya da onar.
  5. Performans: büyük dünyalarda parça (chunk) parça, oyuncu yaklaştıkça; ağır işleri iş parçacığına (Unity Jobs) taşıyın.
  6. Tasarımcı kontrolü: parametreler editörde, önizleme düğmesi, “bu tohumu sabitle” seçeneği.
Sık hatalar
  • Global Random’ı her yerde kullanmak (tohum tekrarlanamaz hâle gelir).
  • Gürültüyü hep (0, 0) civarında örneklemek: tohum yerine koordinat kaydırması kullanın.
  • Yalnız rastgeleliğe güvenip “ilginç an” tasarlamamak (yulaf lapası).
  • Oyuncunun ilk dakikasını rastgeleliğe bırakmak: başlangıç alanını el yapımı yapın (Minecraft bile doğma noktasını kontrol eder).
⚙️ Deterministik olmakAğ oyununda ya da tekrar oynatmada aynı sonucu almak için kayan nokta farklarına dikkat: kritik üretimi tam sayılarla yapın ya da sunucuda üretip gönderin.

🤖 Bu konuyu bir YZ kod asistanıyla yazarken

Sık yapılan hatalar — kontrol edin
  • UnityEngine.Random ile System.Random’ı karıştırmak
  • Mathf.PerlinNoise’un tohum almadığını unutmak
  • Tamsayı taşmaları (LCG’de 32 bit)
  • Her karede yeniden üretmek (bir kez üret, sakla)
  • Ölçek parametresini 0 yapıp her şeyi aynı değere çekmek
İyi bir istek (prompt) örneği

“Unity 6, C#, 2D Tilemap. Bir zindan üreteci yaz: (1) DungeonSettings ScriptableObject: genişlik, yükseklik, tohum, ilk duvar oranı, otomat adımı. (2) System.Random(seed) ile hücresel otomat mağarası (kural: ≥5 duvar komşu ya da duvarsa ≥4). (3) Flood fill ile en büyük bölgeyi bul, diğer bölgeleri en yakın noktadan tünelle bağla. (4) Başlangıç ve çıkışı en büyük bölgede birbirinden en uzak iki noktaya koy (BFS ile). (5) Tilemap’e yaz; editörde “Yeniden üret” düğmesi ve OnValidate ile canlı önizleme. (6) Aynı tohumun her zaman aynı haritayı verdiğini test eden bir EditMode testi.”

  • Tohum yönetimini ve alt sistem başına ayrı üreteci açıkça isteyin
  • Doğrulama adımını (bağlantı, A* ile erişim) isteyin
  • Editörde önizleme ve parametre kontrolü (Unity: [ContextMenu], OnValidate) isteyin
  • Algoritmayı adım adım görselleştiren hata ayıklama modu isteyin

🔬 Araştırma ucu

Deneyim odaklı PCGOyuncunun duygusunu (gerilim, merak) hedefleyen üreteçler: oyuncu modeli (Y17) + arama tabanlı PCG. Y&T kitabının 4. ve 7. bölümleri.
Hikâye ve görev üretimiDwarf Fortress’in yüzyıllık dünya tarihi simülasyonu, görev dilbilgileri, LLM ile görev yazımı ve tutarlılık sorunu (Y14).
Kalite–çeşitlilik (QD) aramaMAP-Elites gibi algoritmalar: tek bir “en iyi” içerik değil, farklı özelliklerde birçok iyi içerik bulmak. İfade aralığını bilerek doldurmak.

💬 Tartışma soruları

Yanınızdakiyle 2 dakika konuşun, sonra sınıfça tartışalım
  1. Minecraft’ta en unutamadığınız yer neresiydi? Onu algoritma mı yaptı, siz mi? “Yulaf lapası” sorununu Minecraft nasıl aşıyor?
  2. Spelunky ya da Hades’te her ölümde seviye değişiyor; Dark Souls’ta hiç değişmiyor. İkisinde de “ustalaşma” hissi var. Ustalaşılan şey aynı mı?
  3. Bir yarış oyununa rastgele üretilen pistler eklemek istiyorsunuz. Hangi garantiler şart? Bunları üretirken mi sağlarsınız, ürettikten sonra test ederek mi?
  4. No Man’s Sky’ın tanıtımındaki yaratıkları oyunda kimse birebir bulamadı; denetim kurumu yine de reklamı yanıltıcı saymadı. Katılıyor musunuz? Prosedürel bir oyunun fragmanı nasıl dürüst olur?

🕹️ Tarayıcıda oynayın: üreteçlerle 10 dakika

Dalga fonksiyonu çöküşü
Gürültü ve haritalar
Zindan
Metin
  • Tracery editörü — soldaki dilbilgisini değiştirin, sağda cümleler üresin. Türkçe bir görev üreteci yazmayı deneyin.

Hepsi ücretsiz ve kurulumsuz. Her birinde kendinize sorun: tasarımcı neyi elle yaptı, neyi algoritmaya bıraktı?

🚀 Proje ve araştırma önerileri

  1. [kolay] Ada üreteci — p5.js’te fBm + kenarlara doğru azalan maske ile ada; tohum kutusu ve biyom eşikleri.
  2. [kolay] Görev üreteci — Tracery benzeri bir dilbilgisiyle 100 farklı yan görev açıklaması; tekrarları sayın, “yulaf lapası” mı?
  3. [orta] Spelunky klonu — Unity 2D: 4 × 4 oda yolu + oda tipine göre 3’er el yapımı şablon + rastgele bloklar; her seviyeyi A* ile test edin.
  4. [orta] WFC şehir — Kendi karo setinizle (yol, ev, park, su) WFC; geri alma ekleyip çelişki oranını ölçün.
  5. [zor] Sonsuz dünya — Parça parça yüklenen 3B arazi: gürültü + biyomlar + L-sistemi ağaçları; oyuncu yaklaştıkça üret, uzaklaşınca sil.
  6. [araştırma] İfade aralığı analizi — Üç zindan üretecini (CA, BSP, yürüyüş) 1000’er kez çalıştırın; “açık alan oranı” ve “çıkışa en kısa yol” eksenlerinde ısı haritaları çizip karşılaştırın.

Neler öğrendik? 🎒

  • PCG = içeriği algoritmayla üretmek; bellekten (Elite, River Raid) tekrar oynanabilirliğe.
  • Tohum: aynı tohum, aynı dünya; ayrı alt sistem üreteçleri.
  • Gürültü: Perlin, oktavlar, biyom eşikleri; No Man’s Sky ve yulaf lapası.
  • Zindanlar: hücresel otomat, BSP, sarhoş yürüyüşü; Spelunky’nin önce-yol yaklaşımı.
  • WFC: en az seçenekli hücreyi çöktür, kısıtı yay; Bad North, Townscaper.
  • L-sistemleri ve dilbilgileri: bitkiler, metinler.
  • Değerlendirme: oynanabilirlik, ifade aralığı, arama tabanlı PCG, PCGML.
  • Sonraki: üretken YZ: görüntü, ses, 3B ve oynanabilir dünya modelleri.

🎮 Bu sunumdaki oyunlar (1/3)

Adı geçen oyunu tanımıyorsanız: oyuncuların kullandığı wiki sayfası ve oyunu kısaca gösteren bir video. ▶ video slaydın üstünde açılır (Esc ile kapanır); 🎯 işaretli bağlantılar doğrudan bu sunumdaki konuya gider.

Elite 1984 · uzay ticareti
Tel kafes grafikli, açık uçlu ilk uzay ticaret oyunu; sekiz galaksi tek tohumdan hesaplanır.
River Raid 1982 · dikey shoot ’em up
Atari 2600’de nehir boyunca uçak sürüp yakıt topladığınız klasik; nehir tek bir sayıdan üretilir.
Minecraft 2011 · kum havuzu
Bloklardan oluşan, prosedürel üretilen, neredeyse sonsuz bir dünya.
No Man’s Sky 2016 · uzay keşfi
18 kentilyon prosedürel gezegenli keşif oyunu; kötü çıkıştan yıllarca güncellemeyle döndü.
Spelunky 2008 / 2012 · platform roguelike
Her ölümde yeni bir mağara: tuzaklar, hazineler ve acımasız fizik.
Bad North 2018 · gerçek zamanlı taktik
Vikinglere karşı küçük adaları savunduğunuz sade bir strateji oyunu; adalar WFC ile üretilir.

🎮 Bu sunumdaki oyunlar (2/3)

Adı geçen oyunu tanımıyorsanız: oyuncuların kullandığı wiki sayfası ve oyunu kısaca gösteren bir video. ▶ video slaydın üstünde açılır (Esc ile kapanır); 🎯 işaretli bağlantılar doğrudan bu sunumdaki konuya gider.

Townscaper 2021 · oyuncak / inşa
Denize tıklayarak renkli bir kasaba büyütürsünüz; hedef yok, kurallar dalga fonksiyonu çöküşünden.
Rogue 1980 · zindan keşfi
Harflerle çizilen, her oyunda yeniden üretilen zindan; ölüm kalıcı. “Roguelike” adı buradan.
Diablo 1996 · aksiyon RPG
Rastgele üretilen zindanlarda canavar ve ganimet; ızgaralı envanteriyle de meşhur.
Hades 2020 · aksiyon roguelike
Yeraltı dünyasından kaçmaya çalışan Zagreus; her denemede oda sırası değişir.
Dead Cells 2018 · aksiyon roguelike
Her ölümde yeniden dizilen bir şatoda geçen hızlı platform-dövüş oyunu.
Caves of Qud 2015– · roguelike
Kıyamet sonrası tuhaf bir dünyada geçen, metin ağırlıklı derin bir rol oyunu.

🎮 Bu sunumdaki oyunlar (3/3)

Adı geçen oyunu tanımıyorsanız: oyuncuların kullandığı wiki sayfası ve oyunu kısaca gösteren bir video. ▶ video slaydın üstünde açılır (Esc ile kapanır); 🎯 işaretli bağlantılar doğrudan bu sunumdaki konuya gider.

StarCraft 1998 / 2010 · gerçek zamanlı strateji
Üç ırkın savaştığı, e-sporu başlatan strateji serisi; StarCraft II, DeepMind’ın AlphaStar’ının sahnesi oldu.
Super Mario Bros. 1985 · platform
Nintendo’nun yan kaydırmalı platform klasiği; zıplama hissi bugün hâlâ ölçüt.
The Legend of Zelda 1986– · aksiyon-macera
Nintendo’nun zindan ve bulmaca serisi; anahtar–kapı düzenleri seviye tasarımının klasiği.
Dwarf Fortress 2006– · koloni simülasyonu
Cüce kolonisi yönettiğiniz, efsanevi derinlikte bir simülasyon; oyun başlamadan yüzlerce yıllık tarih üretilir.
Dark Souls II 2014 · aksiyon RPG
Zorluğuyla ünlü serinin ikinci oyunu.

Kaynaklar: videolar 🎬

📄 Akademik okumalar

Shaker, Togelius & Nelson 2016 · Procedural Content Generation in Games (Springer, ücretsiz çevrimiçi)
Alanın ders kitabı.
Perlin 2002 · Improving Noise (SIGGRAPH 2002)
Perlin gürültüsünün geliştirilmiş hâli (fade fonksiyonu).
Togelius ve ark. 2011 · Search-Based Procedural Content Generation: A Taxonomy and Survey (IEEE TCIAIG)
Arama tabanlı PCG.
Summerville ve ark. 2018 · Procedural Content Generation via Machine Learning (PCGML) (IEEE Transactions on Games)
Öğrenerek üretmek.
Prusinkiewicz & Lindenmayer 1990 · The Algorithmic Beauty of Plants (Springer, ücretsiz)
L-sistemlerinin klasiği.
Yannakakis & Togelius 2018 · Artificial Intelligence and Games, 4. bölüm: Generating Content (Springer, ücretsiz)
Dersin referans kitabı.

Kaynaklar: hikâyeler ve rehberler 📰

NEXT LEVEL ▶
Üretken YZ
Görüntü, ses, 3B ve oynanabilir dünya modelleri
SONRAKİ SUNUM ▶