Oyun

SQL veritabanında Doom çalıştıran geliştirici Lukas Vogel

SQL veritabanında Doom çalıştıran geliştirici Lukas Vogel
Malta Mavi Lagün'de İngilizce

Lukas Vogel uzun bir blog yazısında SQL veritabanı kullanarak Doom’u nasıl çalıştırdığını anlatıyor. Yazıda “Veritabanında Doom render etmek açıkça kötü bir fikir” diyor.

O kadar da doğru değil. SQLDoom projesi giriş-çıkışı yönetmek, oyunun zamanlamasını sağlamak ve her kareyi ekrana göndermek için küçük bir Python istemcisi kullanıyor. Arkasında oyun geometrisi ve durumunu takip eden bir dizi CedarDB tablosu var. Oyun mantığını uygulayan ve saniyede 35 bitmap arabellek üreten yaklaşık 1.300 satırlık SQL sorgusu, 89 ortak tablo ifadesine yayılmış durumda.

Bu açıdan SQLDoom, Vogel’in geçen yıl “tamamen SQL’de çok oyunculu Doom benzeri bir nişancı” yapmayı amaçladığı DoomQL projesine göre büyük bir ilerleme. O girişim, Wolfenstein 3D’deki basit 90 derecelik haritalara benzeyen, ışın izlemeli, gri tonlamalı ASCII grafiklerle sonuçlanmıştı. Yeni SQLDoom ise orijinal Doom yürütülebilir dosyasından çıkmış gibi görünen tam renkli 640×480 kareler üretiyor.

Hepsi sadece veri

Vogel’e göre Doom’un klasik WAD dosyalarını ilişkisel bir veritabanına dönüştürmek nispeten basit ve doğrudan oldu. Bunun nedeni, orijinal oyunun seviyeleri köşe noktaları, çizgiler, sektörler gibi parçalara ayırması. Hatta Doom’un ünlü ikili uzay bölme ağaçları bile yükleme anında her konum için önceden hesaplanan bir sort_key kullanılarak SQL’e indirgenebiliyor. Tablo bu şekilde hazır olduğunda basit bir “ORDER BY” ifadesi her karede hangi duvar parçalarının gösterileceğini ve hangilerinin görmezden gelineceğini belirliyor; bu da performansı ciddi şekilde iyileştiriyor.

SQL tablosundan birinci şahıs karelere geçişte birkaç komplikasyon çıktı. En büyüğü zemin ve tavanları render etmek için gereken algoritmaydı; bu, orijinal oyunda sütun bazında çalışan zarif “visplanes” ve durum mutasyonlarının kullanılmasına izin vermiyor. SQLDoom için Vogel, sıralı paneller listesi üzerinden yineleme yapan “oldukça kaba” bir çözüm kullanıyor.

Her şey için SQL tablolarını okuyup yazmanın getirdiği ek yüke rağmen Vogel, DoomSQL’i Ryzen 7’li bir dizüstü bilgisayarda yaklaşık 60 fps’de çalıştırabildiğini, yoğun sahnelerde ara sıra 35 fps’ye düştüğünü söyledi. Doom’u SQL’e çevirmenin zorluklarına rağmen veritabanının oyun durumunun kararlı “referans anlık görüntüsü” sunması ve doğal eşzamanlılık ile erişim yönetimi özelliklerinin çok oyunculu sunucu için önemli avantajlar sağladığını vurguluyor. Veritabanıyla “kısmen uygulanmış güncellemeler, fizik hataları ya da roketin gerçekten isabet edip etmediği konusunda anlaşmazlıklar” olmuyor.

Kendi yerel makinenizde bir Doomtabase çalıştırmak isterseniz GitHub’daki kodu, bir CedarDB kopyasını ve bir Doom WAD dosyasını kullanmanız yeterli. Ya da tüm kurulumla uğraşmadan ücretsiz çevrimiçi barındırılan bir demo maçına katılabilirsiniz; bu seçenekte performansın oldukça düşük olduğunu belirtiyor. Bunun ardından Ars’ın yıllar içinde ele aldığı pek çok sıra dışı Doom portuna göz atabilirsiniz.

Üniversite Destekli Dil Okulu

Kaynak: Ars Technica