- Doom kaynak kodundaki yanlış pi değerini çıkış noktası alarak, matematiksel sabitler kasıtlı olarak daha da saptırıldığında bir birinci şahıs nişancı oyununun render’ının ve mekân algısının nasıl değiştiğini inceliyor
- Oyun grafikleri yalnızca pi’ye değil, trigonometriye ve çeşitli matematiksel tekniklere de dayandığı için, küçük matematiksel değişiklikler bile dünyayı görme ve içinde hareket etme biçimini etkileyebilir
- Doom, kaynak kodu 1999’da GPL ile yayımlanmış klasik bir FPS olduğu için, pi ile trigonometrik fonksiyonları ve sabitleri değiştirmeyi denemek için kullanılabildi
- Deney, Doom’un dönemin donanımlarında iyi çalışmasını sağlayan optimizasyon tekniklerine de değiniyor ve hatalı matematik sürümünü doğrudan derlemek için yönergeler sunuyor
- Öklid dışı geometrinin oyun içinde yeni mekânsal deneyimler yaratıp yaratamayacağını ele alıyor; ayrıca yanlış pi değeri kullanan başka oyunlara ve açık kaynak depolarına da bağlantı veriyor
Doom’un matematiğini kasıtlı olarak saptırmak
- Pi, sabit bir değere sahip bir sabit olarak bilinse de Doom kaynak kodunda yanlış bir pi değeri kullanılıyor
- Grafik render’ı yalnızca pi’ye değil, trigonometriye ve çeşitli matematiksel tekniklere dayanıyor
- Deney, Doom’un kaynak kodunda pi değeri daha da hatalı bir değere değiştirildiğinde oyunun nasıl farklılaştığını inceliyor
- Diğer trigonometrik fonksiyonları ve sabitleri de değiştirerek, tanıdık bir sanal dünyayı anlama ve içinde hareket etme hissinin nasıl sarsıldığını ele alıyor
Doom kaynağı ve deneyin kapsamı
- Doom, iyi bilinen klasik bir birinci şahıs nişancı oyunudur
- Doom kaynak kodu 1999’da GPL ile yayımlandı
- Deney kapsamı şunları içeriyor
- Pi değerini daha hatalı bir değerle değiştirmek
- Diğer trigonometrik fonksiyonları hatalı değerlerle değiştirmek
- İlgili matematiksel sabitleri hatalı biçimde değiştirmek
Öklid dışı oyun olasılığı
- Matematiği değiştirmek, oyuncunun bildiği sanal mekânın yapısını ve hareket hissini de değiştirebilir
- Bu değişimlerin Öklid dışı geometri tabanlı ilginç oyun olasılıklarına yol açıp açamayacağını inceliyor
Performans optimizasyonu ve doğrudan çalıştırma
- Doom’un dönemin donanımlarında iyi çalışmasını sağlayan optimizasyon tekniklerine de kısaca değiniyor
- Sunumun sonunda, hatalı matematik sürümündeki Doom’u doğrudan derlemek için yönergeler sağlanıyor
İlgili kaynaklar
- Yanlış pi değeri kullanan başka oyunlara ve açık kaynak kod depolarına bağlantılar da sağlanıyor
- Sunum videosu, media.ccc.de üzerinde MCH2022 içeriği olarak sunuluyor
1 yorum
Hacker News yorumları
Klasik Duke Nukem 3D’de de bunun bir örneği vardı. Richard “Levelord” Gray’in yaptığı “Lunatic Fringe” bölümüydü.
https://dukenukem.fandom.com/wiki/Lunatic_Fringe
Bu bölümün dış tarafında dairesel bir koridor vardı; birbirini kesmeden tam iki tur atan bir yapıdaydı ve dönemine göre çığır açıcı Build motorunun oda bağlantılarına dayalı alan ayırma yeteneğini kullanıyordu. Bu özellik “odanın üstünde oda” tekniğinde de kullanılmıştı.
Çok oyunculuda eğlenceliydi ve yanılsama da oldukça iyi korunuyordu. Doğru hatırlıyorsam merkez odada 4 giriş vardı, ama dışarıda her tam tur attığınızda bunlardan yalnızca 2’siyle karşılaşıyordunuz.
Motorla denemeler yaparken bu teknikle “çizgiler kesişmeden 3 evi 3 kamu hizmetine bağlama” bulmacasını çözen oyuncak bir bölüm de yapmıştım.
Duke, Öklid dışı geometri gibi bir şey olabilir; ama Doom’da pi’yi değiştirmek geometriyle pek ilgili değil ve daha çok “çöp girerse çöp çıkar” durumuna benziyor.
Örtüşen sektörlerde bozulan oyun fiilen yalnızca Doom’du.
[1] https://www.lhowon.org/level/marathon/30
Bir dışbükey şeklin içini rasterleştirebiliyorsanız, belirli bir yüzeyi portal olarak işaretleyip o yüzeyin görüneceği konumu kırpma alanı ya da stencil buffer olarak ayarlayarak, ardından portal verisindeki uygun dönüşüm ve karşı taraftaki sektör ID’siyle arkadaki sektörü render ederek sektör-portal dünyasını da rasterleştirebilirsiniz.
Portallardan geçerken çarpışma işleme, portal ötesini render etmekten çok daha zordur.
Lunatic Fringe, Build’de imkânsız geometriyi doğrudan gösteren bir örnektir; ama Duke3D haritalarında kesişen geometri çok daha fazla bulunur. Doom’da böyle bir yapıyla BSP ağacı oluşturamazsınız; ayrıca oyuncu ve canavarlar yalnızca X/Y koordinatlarını takip ettiği için doğal olarak imkânsızdır.
Tam da Poul Anderson’ın klasik Operation Chaos eserini okuyordum.
https://en.wikipedia.org/wiki/Operation_Chaos_(novel)
Büyünün gerçek olduğu ve bilimle birlikte hızla geliştiği paralel bir dünyada geçiyor. Örneğin Edwin Land, polarizasyondan yararlanarak kurt adamları ay ışığı olmadan dönüştüren bir cihaz icat ediyor.
Ana karakterlerin çocuğu kaçırılıp cehenneme götürülüyor; ordunun 20 yıl önce cehennemi araştırmaya çalıştığını ama hepsinin delirdiğini öğreniyorlar. Düşman, cehennemin uzay-zaman geometrisinin bizimkinden farklı olduğu için çocuğun vardığı ana geri dönüp onu getirebileceklerine dair bir ipucu veriyor.
Bilim insanları yalnızca bu ipucundan cehennemin geometrisinin Öklid dışı geometri olduğunu anlıyor ve güvenle içeri girip dayanıp geri dönmelerini sağlayacak büyüleri hesaplıyor. Yollarını bulmak için 19. yüzyıldan iki geometricinin, bunlardan biri bir azizin, yardımını almak üzere dua ediyorlar.
Okuduğum Poul Anderson eserlerinde, örneğin mükemmel High Crusade’de de olduğu gibi, bilimsel kabuğu pek önemsemeden kaba kuvvetle ilerlemeyi seviyor.
Öklid dışı geometriyi ele alan başka bir eser olarak Christopher Priest’in Inverted World’ü aklımda iyi bir yer edinmişti.
John Carmack pi’nin 10. basamağını yanlış hatırlamış olabilir, ama herkesin kod tabanında 84,600 araması yapıp günün saniye sayısını yanlış yazan biri var mı diye bakması iyi olur.
Şaşırtıcı derecede yaygın; ayrıca sabitleri programa doğrudan mı girmeli, yoksa programlama dili standart kütüphanesinde zaten bulunan değerleri mi kullanmalı konusunda ders niteliğinde.
https://github.com/search?type=code&auto_enroll=true&q=84600
https://github.com/mysql/mysql-server/blob/824e2b4064053f7da...
https://github.com/textmate/textmate/blob/346b52b108b387462d...
15 * 60 * 60olarak tanımladığımı fark ettim.Gerçekte grafikler ve hareket tuhaflaşır, sonunda da oynanamaz hâle gelir. Buna Öklid dışı Doom demektense “evrenin sabitleriyle oynamanın sonucu” demek daha doğru görünüyor.
Gerçek Öklid dışı Doom’un şöyle görünmesini beklerdim: https://youtu.be/kEB11PQ9Eo8?si=0HNlpGFBii2AIK1n
https://youtu.be/yqUv2JO2BCs?si=AutaqS5unvT7cDjw
Doom videosunda ileri giderken nesneler yana kayıyormuş gibi görünen tuhaf geometri efektlerine bakınca, bu Doom’a Öklid dışı demek bir ölçüde makul görünüyor.
Normal geometriyi temsil edebilirlerdi, ama geometrinin herhangi bir şekilde anlamlı olması gerekmiyordu; odalar arasında keyfî bağlantılara da izin veriyorlardı. Lafı didiklemek istemem ama bu yaygın bir yanlış anlama.
Gerçek Öklid dışı taraf için ZenoRogue’un çalışmalarını öneririm. Örneğin Nil geometrisi kullanan basit bir oyun[1], Öklid dışı dünya roguelike’ında devasa bir boss savaşı[2], genel geometri tuhaflıkları[3] vb. var. Çalışmalarından herhangi birine bakmanız yeter.
[1] https://m.youtube.com/watch?v=gejRg_q70EA&pp=ygUJemVub3JvZ3V...
[2] https://m.youtube.com/watch?v=jcnXI8IArRI&pp=ygUJemVub3JvZ3V...
[3] https://m.youtube.com/watch?v=yqUv2JO2BCs&pp=ygUJemVub3JvZ3V...
Düşününce, aradan yeterince zaman geçti; tekrar oynamak eğlenceli olabilir.
Normal geometriyi temsil etmekte sorun yoktu, ama geometrinin mutlaka mantıklı olması gibi bir şart yoktu ve odalar arasında keyfî bağlantılar kurulabiliyordu.
https://www.youtube.com/watch?v=tl40xidKF-4
Doom bir simülasyon olmadığı için tek bir sabiti değiştirmek bir şey için iyi bir örnek sayılmaz.
Daha çok bazı rutinleri bozmak gibi; bu yüzden değişikliklerin çoğu oynanamaz sonuçlar doğuruyor.
Sevdiğiniz konsol emülatörünün kaynak kodunu alıp rastgele kayan nokta hataları ekleyebilir veya bazı dallanma komutlarının anlamını tersine çevirebilirsiniz. Oyun ne kadar eskiyse hâlâ çalışmaya devam etme olasılığı da, kötü bir halüsinasyon yolculuğu gibi görünme olasılığı da o kadar artar.
Ünlü görsel ve video dosyalarının belirli bölümlerini bozarak yeni bir şeyler yapan glitch art projeleri de vardı. İkisini de tekrar bulmak istiyorum ama bulamıyorum.
Marathon 1 (1994), Öklid dışı uzayı destekliyordu ama bu özellik çok nadir kullanılmıştı. Haritası olan birçok seviyeden oluşan oyunun tamamını oynarken, yalnızca bir iki seviyede imkânsız uzaylarla karşılaşıyorsunuz; oyun ise bunun mümkün olduğuna dair herhangi bir uyarı ya da bilgi vermiyor
Bu yüzden oyunda bulunabilecek en iyi easter egg konumu belki de buydu
Bir gösterim videosu da buldum: https://www.reddit.com/r/Marathon/comments/vclu55/probably_n...
Son soru şu: “Oynanabilir olan ve çökmeyen pi’nin en büyük değeri nedir?” Pi 4 olduğunda segmentation fault oluşmasının nedeni, arama tablosuna yapılan bazı erişimlerin tablonun sonunu aşması gibi görünüyor; öyleyse oynanabilir en büyük değerin pi’nin kendisinden yalnızca çok az büyük olması muhtemel
Bu videonun oyun mekaniklerini ve Pi’yi değiştirmenin neden bu şekilde sorunlara yol açtığını daha derinlemesine ele almasını isterdim
Atıfta bulunulan ray tracing Doom’da bu deneyin daha ilginç olup olmayacağını merak ediyorum. Rasterleştirme tekniğinde bir sabiti hack’lemenin sonuçları aşağı yukarı beklendiği gibiydi. Ama ray tracing ile daha ilginç sonuçlar ortaya çıkabilir