Doom phi Euclid: Điều gì xảy ra với một trò chơi khi số pi không phải là 3.14159 (2022) [Video]
(media.ccc.de)- Bắt đầu từ giá trị pi sai trong mã nguồn Doom, bài nói khám phá cách việc cố tình làm lệch hơn các hằng số toán học sẽ thay đổi việc dựng hình và cảm nhận không gian trong game bắn súng góc nhìn thứ nhất như thế nào
- Đồ họa game không chỉ dựa vào pi mà còn phụ thuộc vào lượng giác và nhiều kỹ thuật toán học khác, nên chỉ một thay đổi toán học nhỏ cũng có thể ảnh hưởng đến cách nhìn nhận thế giới và di chuyển trong đó
- Doom là một FPS kinh điển có mã nguồn được công bố theo GPL vào năm 1999, vì vậy nó có thể được dùng làm đối tượng thử nghiệm để thay đổi pi, hàm lượng giác và các hằng số khác
- Thí nghiệm cũng điểm qua các kỹ thuật tối ưu hóa giúp Doom chạy tốt trên phần cứng thời đó, đồng thời cung cấp hướng dẫn để tự biên dịch phiên bản với toán học bị làm sai
- Bài nói xem xét liệu hình học phi Euclid có thể tạo ra trải nghiệm không gian mới trong game hay không, đồng thời liên kết tới các game khác dùng giá trị pi sai và các kho mã nguồn mở liên quan
Cố tình làm lệch toán học của Doom
- Pi là một hằng số được biết đến với giá trị cố định, nhưng trong mã nguồn Doom lại dùng một giá trị pi sai
- Việc dựng hình đồ họa không chỉ phụ thuộc vào pi mà còn dựa vào lượng giác và nhiều kỹ thuật toán học khác
- Thí nghiệm kiểm tra game sẽ thay đổi ra sao nếu giá trị pi trong mã nguồn Doom bị chỉnh thành còn kém chính xác hơn
- Bài nói cũng thay đổi cả các hàm lượng giác và hằng số khác để xem cảm giác hiểu và di chuyển trong một thế giới ảo quen thuộc sẽ bị xáo trộn như thế nào
Mã nguồn Doom và phạm vi thí nghiệm
- Doom là một game bắn súng góc nhìn thứ nhất kinh điển nổi tiếng
- Mã nguồn Doom được công bố theo GPL vào năm 1999
- Đối tượng thí nghiệm bao gồm:
- Thay giá trị pi bằng một giá trị còn sai hơn
- Thay các hàm lượng giác khác bằng giá trị sai
- Chỉnh các hằng số toán học liên quan thành giá trị không chính xác
Khả năng của game phi Euclid
- Khi toán học thay đổi, cấu trúc không gian ảo và cảm giác di chuyển mà người chơi vốn quen thuộc cũng có thể thay đổi theo
- Bài nói xem xét liệu những thay đổi này có thể dẫn tới các khả năng thú vị cho game dựa trên hình học phi Euclid hay không
Tối ưu hiệu năng và tự chạy thử
- Bài nói cũng đề cập ngắn gọn đến các kỹ thuật tối ưu hóa giúp Doom chạy tốt trên phần cứng thời đó
- Ở cuối phần trình bày có hướng dẫn để tự biên dịch phiên bản Doom với toán học bị làm sai
Tài liệu liên quan
- Cũng có cung cấp liên kết đến các game khác sử dụng giá trị pi sai và các kho mã nguồn mở liên quan
- Video bài nói được cung cấp như nội dung MCH2022 trên media.ccc.de
1 bình luận
Ý kiến Hacker News
Ngay cả Duke Nukem 3D kinh điển cũng từng có một ví dụ như thế. Đó là màn ‘Lunatic Fringe’ do Richard “Levelord” Gray tạo ra
https://dukenukem.fandom.com/wiki/Lunatic_Fringe
Màn này có một hành lang hình tròn ở phía ngoài, được cấu trúc để có thể đi trọn hai vòng mà không tự cắt nhau, tận dụng khả năng tách vùng dựa trên kết nối phòng của engine Build, vốn rất đột phá vào thời đó. Tính năng đó cũng được dùng cho kỹ thuật ‘room over room’
Nó rất vui trong chế độ nhiều người chơi và ảo giác cũng được giữ khá tốt. Nếu nhớ không nhầm thì căn phòng trung tâm có 4 lối vào, nhưng mỗi lần đi một vòng bên ngoài chỉ gặp 2 trong số đó
Khi thử nghiệm engine, tôi cũng từng làm một màn đồ chơi dùng kỹ thuật này để giải câu đố “nối 3 ngôi nhà với 3 tiện ích công cộng sao cho các đường không cắt nhau”
Duke có thể là thứ gì đó giống hình học phi Euclid, nhưng việc đổi pi trong Doom này chẳng liên quan mấy đến hình học mà giống kiểu “rác vào thì rác ra” hơn
Việc hỏng khi sector chồng lên nhau về cơ bản chỉ là vấn đề của Doom
[1] https://www.lhowon.org/level/marathon/30
Nếu bạn có thể raster hóa phần bên trong một hình lồi, thì cũng có thể raster hóa thế giới sector-portal bằng cách đánh dấu một mặt cụ thể là portal, đặt vị trí mà mặt đó hiện ra làm vùng clipping hoặc stencil buffer, rồi dựng sector phía sau bằng phép biến đổi thích hợp và ID sector ở phía bên kia có trong dữ liệu portal
Xử lý va chạm khi đi qua portal khó hơn rất nhiều so với việc render qua portal
Lunatic Fringe là ví dụ trực diện về hình học bất khả trong Build, nhưng map Duke3D còn có nhiều hình học giao cắt hơn thế nữa. Trong Doom thì không thể tạo cây BSP cho cấu trúc như vậy, mà người chơi hay quái vật cũng chỉ theo dõi tọa độ X/Y nên đương nhiên là không làm được
Tình cờ tôi đang đọc tác phẩm kinh điển Operation Chaos của Poul Anderson
https://en.wikipedia.org/wiki/Operation_Chaos_(novel)
Bối cảnh là một thế giới song song nơi phép thuật là có thật và phát triển nhanh chóng cùng với khoa học. Ví dụ, Edwin Land phát minh ra một thiết bị dùng phân cực để khiến người sói biến hình mà không cần ánh trăng
Con của các nhân vật chính bị bắt cóc và lôi xuống địa ngục, rồi họ biết rằng quân đội từng cố thăm dò địa ngục 20 năm trước nhưng tất cả đều phát điên. Kẻ đối địch buột miệng để lộ một đầu mối rằng vì hình học không-thời gian của địa ngục khác với chúng ta, họ có thể quay về đúng thời điểm đứa trẻ đến nơi để đưa nó trở lại
Chỉ từ đầu mối đó, các nhà khoa học đã suy ra rằng hình học của địa ngục là hình học phi Euclid, rồi tính ra các câu thần chú để đi vào an toàn, trụ vững và quay về. Để tìm đường, họ nhờ đến hai nhà hình học thế kỷ 19, trong đó một người cầu nguyện để nhận được sự trợ giúp của các vị thánh
Những tác phẩm Poul Anderson tôi từng đọc, như High Crusade rất tuyệt chẳng hạn, cho thấy ông không quá bận tâm đến lớp vỏ khoa học mà thích cứ thế đẩy mạnh ý tưởng. Một tác phẩm khác về hình học phi Euclid mà tôi còn nhớ tốt là Inverted World của Christopher Priest
Có thể John Carmack đã nhớ sai chữ số thứ 10 của pi, nhưng mọi người nên thử tìm 84,600 trong codebase của mình để xem có ai gõ nhầm số giây trong một ngày không
Điều này phổ biến hơn tưởng tượng, và là một bài học về việc liệu có nên tự ghi trực tiếp hằng số vào chương trình hay dùng giá trị đã có sẵn trong thư viện chuẩn của ngôn ngữ lập trình
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 * 60Trên thực tế, đồ họa và chuyển động bắt đầu trở nên kỳ quái rồi cuối cùng game không còn chơi được nữa. Gọi nó là Doom phi Euclid có lẽ không đúng bằng gọi đây là “kết quả của việc đụng vào các hằng số của vũ trụ”
Nếu là Doom phi Euclid thật sự thì tôi đã kỳ vọng nó sẽ như thế này: https://youtu.be/kEB11PQ9Eo8?si=0HNlpGFBii2AIK1n
https://youtu.be/yqUv2JO2BCs?si=AutaqS5unvT7cDjw
Khi nhìn các hiệu ứng hình học kỳ lạ trong video Doom, như lúc di chuyển về phía trước mà vật thể trông như trượt ngang, thì việc gọi bản Doom này là phi Euclid cũng có phần hợp lý
Chúng có thể biểu diễn hình học bình thường, nhưng không cần thiết hình học đó phải hợp lý theo cách nào đó, và cũng cho phép nối tùy ý giữa các phòng. Không phải tôi muốn bắt bẻ, nhưng đây là một hiểu lầm khá phổ biến
Nếu muốn xem phi Euclid thật sự thì tôi khuyên xem các tác phẩm của ZenoRogue. Ví dụ như một game đơn giản dùng hình học Nil[1], một trận boss khổng lồ trong roguelike thế giới phi Euclid[2], hay các kiểu quái dị hình học nói chung[3]. Xem bất cứ thứ gì của họ cũng được
[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...
Nghĩ lại thì có lẽ đã đủ lâu để chơi lại vẫn thấy vui
Không có vấn đề gì trong việc biểu diễn hình học bình thường, nhưng cũng không có điều kiện bắt buộc hình học phải hợp lý, và có thể nối tùy ý giữa các phòng
https://www.youtube.com/watch?v=tl40xidKF-4
Doom không phải là một mô phỏng, nên việc thay đổi một hằng số không thực sự là ví dụ hay cho điều gì cả
Nó gần như chỉ là làm hỏng một vài routine, và vì vậy kết quả của hầu hết các thay đổi là game không thể chơi được
Chỉ cần lấy mã nguồn của một trình giả lập console mà bạn thích rồi chèn vào vài lỗi dấu phẩy động ngẫu nhiên, hoặc đảo ngược ý nghĩa của một số lệnh rẽ nhánh. Game càng cũ thì khả năng vẫn chạy được càng cao, và cũng càng dễ trông giống một chuyến trip ảo giác tồi tệ
Cũng từng có các dự án glitch art tạo ra thứ gì đó mới bằng cách phá hỏng những đoạn cụ thể trong các tệp hình ảnh và video nổi tiếng. Tôi muốn tìm lại cả hai nhưng không thấy nữa
Marathon 1 (1994) hỗ trợ không gian phi Euclid, nhưng chỉ hiếm khi được sử dụng. Trong lúc chơi toàn bộ game gồm nhiều màn có bản đồ, chỉ một hai màn mới xuất hiện không gian bất khả thi, và game không hề cảnh báo hay cho biết rằng điều đó là có thể
Vì vậy có lẽ đây từng là vị trí Easter egg hay nhất từng được tìm ra trong game
Tôi cũng đã tìm được video minh họa: https://www.reddit.com/r/Marathon/comments/vclu55/probably_n...
Câu hỏi cuối cùng là: giá trị lớn nhất của pi vẫn có thể chơi được mà không bị crash là bao nhiêu. Có vẻ lý do xảy ra segmentation fault khi pi bằng 4 là vì một số lần truy cập bảng tra cứu vượt quá cuối bảng, và nếu vậy thì giá trị tối đa vẫn có thể chơi được có lẽ chỉ lớn hơn pi thật một chút
Tôi ước video này đi sâu hơn vào cơ chế của game và lý do vì sao việc thay đổi Pi lại gây ra những vấn đề như vậy
Tôi tự hỏi trong bản Doom ray tracing được nhắc đến thì thí nghiệm này có thú vị hơn không. Kết quả của việc hack hằng số trong kỹ thuật rasterization gần như đúng như dự đoán. Nhưng với ray tracing thì có thể sẽ cho ra kết quả thú vị hơn