- 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
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”
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”
Praktis hanya Doom yang rusak pada sektor yang tumpang tindih
[1] https://www.lhowon.org/level/marathon/30
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
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
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
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
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
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 * 60Dalam 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
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
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...
Dipikir-pikir, sudah cukup lama berlalu, jadi sepertinya akan seru kalau dimainkan lagi
Tidak ada masalah untuk merepresentasikan geometri normal, tetapi tidak ada syarat bahwa geometri itu harus masuk akal, dan ruangan-ruangan bisa dihubungkan secara arbitrer
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
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
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