3 puan yazan GN⁺ 2024-05-18 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2024-05-18
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 Nukem’in hangi anlamda “bunun örneği” olduğunu bilmiyorum. Duke tarafında içeride tutarlı bir program davranışı var; bu ise kaynak kodunda keyfi bir değişiklikten doğmuş rastgele hatalara daha yakın.
      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.
    • “O dönem çığır açıcı olan ‘odanın üstünde oda’ tekniği” deniyorsa, Bungie’nin 1994 tarihli Marathon’u da bunu zaten yapabiliyordu ve deathmatch haritası 5-D Space[1]’te göstermişti.
      Örtüşen sektörlerde bozulan oyun fiilen yalnızca Doom’du.
      [1] https://www.lhowon.org/level/marathon/30
    • Uzun zaman önce böyle bir özelliği olan küçük bir motor yapmıştım. O sırada Build motorunu bilmiyordum; dünyayı dışbükey sektörlere ayırmış, BSP ağacını izlemek yerine rastgele bağlantılara, yani portallara izin vermiştim. Render işlemi önden arkaya ilerliyor ve portal sınırlarında kırpma yapıyordu.
      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.
    • Daha sonraki Build oyunlarının uyguladığı odanın üstünde oda genellikle sektörlerin bu şekilde örtüşmesini gerektirmez. Yüzülebilir suyu uygulama yönteminin bir uzantısıdır; motorun zemin ya da tavan yerine başka bir sektörü render ettiği bir yapıdır.
      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.
    • Tea For God adlı ilginç bir VR oyunu var. Gerçek oyun alanı içinde her köşeyi döndüğünüzde veya bir asansöre bindiğinizde yeni koridorlar ve odaları ustalıkla oluşturuyor; böylece aynı odadan çıkmasanız bile devasa bir yerdeymişsiniz hissi veren bir yanılsama yaratıyor. Joystick ya da ışınlanma olmadan yapılıyor.
  • 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.

    • Bizim dünyamızın uzay-zaman geometrisi de Öklidçi değil, hatta Riemann geometrisi bile değil. Operation Chaos bilimsel olmaktan çok daha kaotik görünüyor.
      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.
    • Klişe gelebilir ve gerçekten de öyle olabilir, ama bugünlerde neden bu kadar yaratıcı roman pek çıkmıyor, bilmiyorum.
    • Jack Vance’in harika kısa öykü derlemesi Tales of the Dying Earth de görülmeye değer. Büyü/bilim ve şeytani boyutlar birlikte yer alıyor.
    • Operation Chaos’u sevmiştim, ama çok daha sonra çıkan devam kitabı hayal kırıklığıydı.
  • 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.

  • 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

    • Biraz ince eleyip sık dokursak, o video da Öklid dışı terimini yanlış kullanıyor. HyperRogue tarafındaki insanlar gerçek Öklid dışı geometriyi gösteren birkaç video hazırladı.
      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.
    • Bu da Öklid dışının ne anlama geldiği değil. Sadece portal içeren sıradan bir 3D dünya. O dönemin birinci şahıs nişancı oyun motorları genelde odaları kapı aralıklarıyla, yani portallarla, birbirine bağlar ve bunu görünmeyen kısımları elemek için kullanırdı.
      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...
    • Antichamber’ın hâlâ anılmamış olması şaşırtıcı. Benzer bir kavramdan gerçek bulmacalar çıkarmış harika bir oyundu.
      Düşününce, aradan yeterince zaman geçti; tekrar oynamak eğlenceli olabilir.
    • Bu portal gibi görünüyor. O dönemin birinci şahıs nişancı oyunları temelde odaları kapı aralıklarıyla, yani portallarla, birbirine bağlayarak görünmeyen kısımları eliyordu.
      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.
    • Ben de tam olarak böyle bir şey bekliyordum. İşte içine birkaç başka yeni fikir de katılmış başka bir Öklid dışı uygulama:
      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.

    • Bunun neden ilginç olduğunu pek anlamıyorum. Bir sabiti yanlış bir sayıyla değiştirirseniz elbette tuhaf davranışlar veya hatalar oluşur. Başka ne olacaktı? Tuhaf davranış da özel görünmüyor; neyi kaçırıyorum bilmiyorum.
  • 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.

    • Uzun zaman önce N64 emülatörü için bunu yapan bir araç vardı. Kullanınca bir süre eğlenceliydi ama beklendiği gibi sık sık çöküyordu.
      Ü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