3 poin oleh GN⁺ 2024-05-18 | 1 komentar | Bagikan ke WhatsApp
  • Berangkat dari nilai pi yang salah dalam source code Doom, pembahasan ini mengeksplorasi bagaimana rendering dan persepsi ruang dalam game first-person shooter berubah ketika konstanta matematika sengaja dibuat makin menyimpang
  • Grafik game bergantung bukan hanya pada pi, tetapi juga pada trigonometri dan berbagai teknik matematika, sehingga perubahan matematis kecil pun dapat memengaruhi cara dunia dilihat dan dilalui
  • Doom adalah FPS klasik yang source code-nya dirilis di bawah GPL pada 1999, sehingga bisa digunakan sebagai objek eksperimen untuk mengubah pi, fungsi trigonometri, dan konstanta
  • Eksperimen ini juga menyinggung teknik optimasi yang membuat Doom berjalan baik pada hardware masa itu, serta menyediakan panduan untuk mengompilasi sendiri versi dengan matematika yang salah
  • Membahas apakah geometri non-Euclidean dapat menciptakan pengalaman ruang baru di dalam game, sekaligus menautkan game lain yang memakai nilai pi keliru dan repositori source code terbuka

Sengaja Membuat Matematika Doom Menyimpang

  • Pi dikenal sebagai konstanta dengan nilai tetap, tetapi source code Doom menggunakan nilai pi yang salah
  • Rendering grafis bergantung bukan hanya pada pi, tetapi juga pada trigonometri dan berbagai teknik matematika
  • Eksperimen ini memeriksa bagaimana game berubah jika nilai pi dalam source Doom dibuat lebih tidak akurat
  • Dengan mengubah fungsi trigonometri dan konstanta lain juga, eksperimen ini melihat bagaimana persepsi untuk memahami dan bergerak di dunia virtual yang familier menjadi terguncang

Source Doom dan Cakupan Eksperimen

  • Doom adalah game first-person shooter klasik yang sangat dikenal
  • Source code Doom dirilis di bawah GPL pada 1999
  • Objek eksperimen mencakup hal berikut
    • Mengubah nilai pi menjadi nilai yang lebih salah
    • Mengubah fungsi trigonometri lain menjadi nilai yang salah
    • Mengubah konstanta matematika terkait menjadi tidak akurat

Kemungkinan Game Non-Euclidean

  • Jika matematika diubah, struktur ruang virtual yang dikenal pemain dan sensasi pergerakannya juga dapat berubah
  • Pembahasan ini melihat apakah perubahan semacam itu dapat mengarah pada kemungkinan game menarik berbasis geometri non-Euclidean

Optimasi Performa dan Menjalankannya Sendiri

  • Juga dibahas secara singkat teknik optimasi yang membuat Doom berjalan baik pada hardware masa itu
  • Di bagian akhir presentasi, tersedia panduan untuk mengompilasi sendiri Doom versi matematika yang salah

Materi Terkait

  • Disediakan juga tautan ke game lain yang menggunakan nilai pi keliru dan repositori source code terbuka
  • Video presentasi tersedia sebagai konten MCH2022 di media.ccc.de

1 komentar

 
GN⁺ 2024-05-18
Komentar Hacker News
  • Ada contoh seperti ini juga di Duke Nukem 3D klasik. Level ‘Lunatic Fringe’ yang dibuat oleh Richard “Levelord” Gray
    https://dukenukem.fandom.com/wiki/Lunatic_Fringe
    Level ini memiliki koridor melingkar di bagian luar, dengan struktur yang mengitari dua putaran penuh tanpa saling berpotongan, memanfaatkan kemampuan pemisahan area berbasis koneksi ruangan dari Build engine yang saat itu revolusioner. Fitur itu juga dipakai untuk teknik ‘room-over-room’
    Seru di multiplayer, dan ilusinya juga cukup terjaga. Kalau ingatan saya benar, ruangan tengah punya 4 pintu masuk, tetapi setiap kali mengitari bagian luar satu putaran, hanya 2 di antaranya yang ditemui
    Saat bereksperimen dengan engine, saya juga pernah membuat level mainan dengan teknik ini untuk memecahkan teka-teki “menghubungkan 3 rumah dan 3 utilitas publik tanpa garis saling berpotongan”

    • Saya tidak tahu dalam arti apa Duke Nukem adalah “contoh dari ini”. Di Duke, itu adalah perilaku program yang konsisten secara internal, sedangkan ini lebih mirip error acak yang muncul akibat perubahan sembarang pada source code
      Duke mungkin bisa disebut semacam geometri non-Euklides, tetapi perubahan pi di Doom ini tidak terlalu berkaitan dengan geometri dan lebih terasa seperti “garbage in, garbage out”
    • Kalau yang dimaksud “teknik ‘room-over-room’ yang saat itu revolusioner”, Marathon dari Bungie pada 1994 juga sudah bisa melakukannya dan memperlihatkannya di map deathmatch 5-D Space[1]
      Praktis hanya Doom yang rusak pada sektor yang tumpang tindih
      [1] https://www.lhowon.org/level/marathon/30
    • Dulu sekali saya pernah membuat engine kecil yang punya fitur seperti ini. Saat itu saya belum tahu Build engine, dan alih-alih membagi dunia menjadi sektor konveks lalu mengikuti BSP tree, saya mengizinkan tautan arbitrer, yaitu portal. Rendering dilakukan dari depan ke belakang dan dipotong pada batas portal
      Jika bisa merasterisasi bagian dalam bentuk konveks, Anda juga bisa merasterisasi dunia sektor-portal dengan menandai sisi tertentu sebagai portal, mengatur area tempat sisi itu akan terlihat sebagai clipping region atau stencil buffer, lalu merender sektor di belakangnya menggunakan transformasi yang sesuai dan ID sektor sisi lain yang ada dalam data portal
      Penanganan collision saat melewati portal jauh lebih sulit daripada rendering bagian di balik portal
    • Room-over-room yang diimplementasikan game-game Build belakangan biasanya tidak perlu membuat sektor saling tumpang tindih seperti ini. Itu merupakan perluasan dari cara mereka mengimplementasikan air yang bisa direnangi: engine merender sektor lain alih-alih lantai atau langit-langit
      Lunatic Fringe adalah contoh yang secara gamblang menunjukkan geometri yang mustahil di Build, tetapi map Duke3D berisi jauh lebih banyak geometri yang saling berpotongan. Di Doom, struktur seperti itu tidak bisa dibuatkan BSP tree, dan pemain maupun monster juga hanya melacak koordinat X/Y, jadi tentu saja mustahil
    • Ada game VR menarik bernama Tea For God. Di dalam ruang bermain fisik yang nyata, setiap kali Anda berbelok di sudut atau naik lift, game ini dengan cerdik menciptakan koridor dan ruangan baru, sehingga memberi ilusi seolah berada di tempat yang sangat besar meski tidak pernah meninggalkan ruangan yang sama. Diimplementasikan tanpa joystick atau teleportasi
  • Kebetulan saya sedang membaca karya klasik Poul Anderson, Operation Chaos
    https://en.wikipedia.org/wiki/Operation_Chaos_(novel)
    Berlatar dunia paralel tempat sihir benar-benar ada dan berkembang pesat bersama sains. Misalnya, Edwin Land menemukan perangkat yang menggunakan polarisasi untuk mengubah manusia serigala tanpa cahaya bulan
    Anak para tokoh utama diculik dan dibawa ke neraka, lalu mereka mendengar bahwa 20 tahun sebelumnya militer pernah mencoba menyelidiki neraka tetapi semuanya menjadi gila. Antagonis memberi petunjuk bahwa karena geometri ruang-waktu neraka berbeda dari dunia kita, mereka bisa kembali ke momen ketika si anak tiba dan membawanya pulang
    Hanya dari petunjuk itu, para ilmuwan menyadari bahwa geometri neraka adalah geometri non-Euklides, lalu menghitung mantra untuk masuk dengan aman, bertahan, dan kembali. Untuk menemukan jalan, mereka berdoa agar mendapat bantuan dua geometer abad ke-19, salah satunya seorang santo

    • Geometri ruang-waktu di dunia kita juga tidak Euklides, bahkan bukan geometri Riemann. Operation Chaos terasa lebih kacau daripada ilmiah
      Dari karya-karya Poul Anderson yang pernah saya baca, termasuk High Crusade yang luar biasa, ia tampaknya tidak terlalu peduli pada lapisan ilmiah dan suka menerobosnya secara kasar
      Untuk karya lain yang membahas geometri non-Euklides, Inverted World karya Christopher Priest masih saya ingat dengan baik
    • Mungkin terdengar klise, dan mungkin memang begitu, tetapi belakangan ini saya tidak tahu kenapa fiksi yang kreatif seperti ini jarang muncul
    • Kumpulan cerpen bagus Jack Vance, Tales of the Dying Earth, juga layak dibaca. Ada sihir/sains dan dimensi iblis di dalamnya
    • Saya menyukai Operation Chaos, tetapi sekuelnya yang terbit jauh belakangan mengecewakan
  • John Carmack mungkin salah mengingat digit ke-10 dari pi, tetapi sebaiknya semua orang mencari 84.600 di codebase dan memeriksa apakah ada yang salah ketik jumlah detik dalam sehari
    Ini ternyata cukup umum, dan ada pelajaran soal apakah konstanta harus dimasukkan langsung ke program atau memakai nilai yang sudah tersedia di standard library bahasa pemrograman

  • Dalam praktiknya, grafis dan pergerakan menjadi aneh lalu akhirnya tidak bisa dimainkan. Daripada menyebut ini Doom non-Euclidean, rasanya lebih tepat menyebutnya “akibat mengutak-atik konstanta alam semesta”
    Kalau benar-benar Doom non-Euclidean, saya berharap tampilannya seperti ini: https://youtu.be/kEB11PQ9Eo8?si=0HNlpGFBii2AIK1n

    • Kalau mau sedikit rewel, video itu juga memakai istilah non-Euclidean secara keliru. Orang-orang HyperRogue membuat beberapa video yang menunjukkan geometri non-Euclidean sungguhan
      https://youtu.be/yqUv2JO2BCs?si=AutaqS5unvT7cDjw
      Melihat efek geometri aneh di video Doom itu, seperti benda-benda tampak meluncur ke samping saat bergerak maju, menyebut Doom ini non-Euclidean sampai batas tertentu terasa masuk akal juga
    • Itu juga bukan arti dari non-Euclidean. Itu hanya dunia 3D biasa yang punya portal. Engine first-person shooter pada masa itu biasanya menyambungkan ruangan-ruangan lewat ambang pintu, yaitu portal, dan memakainya untuk menghapus bagian yang tertutup
      Mereka bisa merepresentasikan geometri normal, tetapi geometri itu tidak harus masuk akal dengan cara apa pun, dan koneksi arbitrer antar-ruangan juga dimungkinkan. Bukan bermaksud mencari-cari kesalahan, tapi ini kesalahpahaman yang umum
      Untuk non-Euclidean yang sebenarnya, saya merekomendasikan karya ZenoRogue. Misalnya game sederhana yang memakai geometri Nil[1], pertarungan bos raksasa dalam roguelike dunia non-Euclidean[2], dan keanehan geometri secara umum[3]. Sebenarnya lihat saja karya mereka yang mana pun
      [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...
    • Saya heran Antichamber belum disebut. Itu game yang bagus, yang berhasil membuat puzzle sungguhan dari konsep serupa
      Dipikir-pikir, sudah cukup lama berlalu, jadi sepertinya akan seru kalau dimainkan lagi
    • Ini terlihat seperti portal. First-person shooter pada masa itu pada dasarnya menyambungkan ruangan-ruangan lewat ambang pintu, yaitu portal, untuk menghapus bagian yang tertutup
      Tidak ada masalah untuk merepresentasikan geometri normal, tetapi tidak ada syarat bahwa geometri itu harus masuk akal, dan ruangan-ruangan bisa dihubungkan secara arbitrer
    • Saya juga persis mengharapkan hal seperti itu. Berikut implementasi non-Euclidean lain yang juga memasukkan beberapa ide baru lainnya
      https://www.youtube.com/watch?v=tl40xidKF-4
  • Doom bukan simulasi, jadi mengubah satu konstanta bukan contoh yang bagus untuk apa pun
    Ini lebih mirip merusak beberapa routine, sehingga sebagian besar hasil perubahan menjadi tidak bisa dimainkan

    • Saya kurang paham kenapa ini menarik. Kalau sebuah konstanta diganti dengan angka yang salah, tentu saja akan muncul perilaku aneh atau error. Memangnya mau jadi bagaimana lagi? Perilaku anehnya juga tidak terlihat istimewa, jadi saya tidak tahu apa yang saya lewatkan
  • Ambil source code emulator konsol favorit Anda lalu masukkan error floating-point secara acak, atau balikkan makna sebagian instruksi branch. Makin tua gamenya, makin besar kemungkinan masih berjalan, dan makin besar pula kemungkinan tampil seperti perjalanan halusinasi yang buruk

    • Dulu ada tool untuk emulator N64 yang melakukan hal seperti ini. Saat dicoba memang seru untuk sementara, tetapi seperti yang bisa diduga, sering crash
      Ada juga proyek glitch art yang merusak bagian tertentu dari file gambar dan video terkenal untuk membuat sesuatu yang baru. Saya ingin menemukan keduanya lagi, tapi tidak berhasil menemukannya
  • Marathon 1 (1994) mendukung ruang non-Euklides, tetapi hanya jarang digunakan. Saat memainkan keseluruhan game yang terdiri dari beberapa level dengan peta, ruang mustahil hanya muncul di satu atau dua level, dan game tidak memperingatkan atau memberi tahu bahwa hal seperti itu bisa terjadi
    Jadi mungkin itu adalah lokasi easter egg terbaik yang ditemukan dalam game
    Saya juga menemukan video demonstrasinya: https://www.reddit.com/r/Marathon/comments/vclu55/probably_n...

  • Pertanyaan terakhirnya adalah “berapa nilai maksimum pi yang masih bisa dimainkan dan tidak crash”. Alasan terjadinya segmentation fault saat pi bernilai 4 kemungkinan karena sebagian akses ke lookup table melewati akhir tabel, dan kalau begitu nilai maksimum yang bisa dimainkan kemungkinan hanya sedikit lebih besar daripada pi itu sendiri

  • Saya berharap video ini membahas lebih dalam mekanisme game dan mengapa perubahan Pi menyebabkan masalah seperti itu

  • Saya penasaran apakah eksperimen ini akan lebih menarik pada Doom dengan ray tracing yang dirujuk. Hasil dari meretas konstanta dalam teknik rasterisasi kurang lebih sesuai perkiraan. Namun dengan ray tracing, mungkin bisa muncul hasil yang lebih menarik