3 ポイント 投稿者 GN⁺ 2024-05-18 | 1件のコメント | WhatsAppで共有
  • Doomのソースコードにある誤ったπの値を出発点に、数学定数を意図的にさらにずらしたとき、一人称シューティングゲームのレンダリングと空間感覚がどう変わるかを探る
  • ゲームグラフィックスはπだけでなく三角法やさまざまな数学的手法に依存しているため、小さな数学的変更でも世界の見え方や移動の仕方に影響を与えうる
  • Doomは1999年にGPLでソースコードが公開された古典的なFPSであり、πや三角関数・定数を変更してみる実験対象として使うことができた
  • 実験では、当時のハードウェアでDoomがうまく動作するようにした最適化手法にも触れつつ、誤った数学バージョンを自分でコンパイルできる案内を提供する
  • 非ユークリッド幾何学がゲーム内で新しい空間体験を生み出せるかを見ながら、誤ったπの値を使う他のゲームや公開ソースリポジトリにもリンクしている

Doomの数学を意図的にずらす

  • π(pi)は固定値を持つ定数として知られているが、Doomのソースコードでは誤ったπの値が使われている
  • グラフィックスレンダリングはπだけでなく三角法やさまざまな数学的手法に依存している
  • 実験では、Doomのソース内のπの値をさらに不正確に変えるとゲームがどう変化するかを確認する
  • 他の三角関数や定数まで変更し、見慣れた仮想世界を理解して移動する感覚がどう揺らぐのかを見ていく

Doomソースと実験範囲

  • Doomはよく知られた古典的な一人称シューティングゲームである
  • Doomのソースコードは1999年にGPLで公開された
  • 実験対象は次を含む
    • πの値をさらに誤った値に変更
    • 他の三角関数を誤った値に変更
    • 関連する数学定数を不正確に変更

非ユークリッドゲームの可能性

  • 数学を変えると、プレイヤーが知っていた仮想空間の構造や移動感覚も変わりうる
  • こうした変化が非ユークリッド幾何学にもとづく興味深いゲームの可能性につながるかを見ていく

性能最適化と直接実行

  • 当時のハードウェアでDoomがよく動くようにした最適化手法にも短く触れる
  • 発表の終盤には、誤った数学バージョンのDoomを自分でコンパイルできる案内が提供される

関連資料

  • 誤ったπの値を使う他のゲームと公開ソースコードリポジトリへのリンクも提供される
  • 発表動画はmedia.ccc.deのMCH2022コンテンツとして提供されている

1件のコメント

 
GN⁺ 2024-05-18
Hacker Newsのコメント
  • 古典的な Duke Nukem 3D にもこうした例があった。Richard “Levelord” Gray が作った「Lunatic Fringe」レベルだ
    https://dukenukem.fandom.com/wiki/Lunatic_Fringe
    このレベルには外側に円形の回廊があり、互いに交差することなく二周を完全に回れる構造になっていて、当時画期的だった Build エンジン の、部屋の接続に基づく領域分離能力を利用していた。これは「room over room」技術にも使われていた
    マルチプレイでは面白く、錯視もかなりよく保たれていた。記憶が正しければ中央の部屋には出入口が4つあったが、外側を一周するたびにそのうち2つしか出会わなかった
    エンジンを実験していたとき、この手法で「線を交差させずに家3軒と公共設備3つを結ぶ」パズルを解くおもちゃのようなレベルも作ったことがある

    • Duke Nukem 側がどういう意味で「これの例」なのか分からない。Duke の方は内部的に一貫したプログラム動作で、これはソースコードを恣意的に変更したことで生じた ランダムな不具合 に近い
      Duke は非ユークリッド幾何学のようなものかもしれないが、この Doom の pi 変更は幾何学とはほとんど関係なく、「garbage in, garbage out」に近いように見える
    • 「当時画期的だった『room over room』技術」なら、1994年の Bungie の Marathon でもすでに可能で、デスマッチマップ 5-D Space[1] で示されていた
      重なったセクターで壊れるのは実質的に Doom だけだった
      [1] https://www.lhowon.org/level/marathon/30
    • ずっと昔に、こういう機能を持つ小さなエンジンを作ったことがある。当時は Build エンジンを知らず、ワールドを 凸セクター に分けたうえで BSP ツリーに従う代わりに任意のリンク、つまりポータルを許していた。レンダリングは front-to-back で行い、ポータル境界で切り詰めていた
      凸図形の内部をラスタライズできるなら、特定の面をポータルとしてマークし、その面が見える位置をクリッピング領域またはステンシルバッファとして設定したうえで、ポータルデータに入っている適切な変換と反対側セクターの ID を使って奥のセクターをレンダリングすれば、セクター・ポータル型ワールドもラスタライズできる
      ポータルを通過する 衝突判定 は、ポータル越しのレンダリングよりずっと難しい
    • 後年の Build 系ゲームが実装した room over room は、たいていこのようにセクターを重ねる必要がない。泳げる水を実装した方式の拡張で、エンジンが床や天井の代わりに別のセクターをレンダリングする仕組みだ
      Lunatic Fringe は Build で不可能図形を真正面から見せる例だが、Duke3D のマップには交差するジオメトリがもっと多く含まれている。Doom ではそうした構造で BSP ツリーを作れず、プレイヤーやモンスターも X/Y 座標しか追跡しないので、当然不可能だ
    • Tea For God という興味深い VR ゲームがある。実際のプレイスペースの中で、角を曲がったりリフトに乗ったりするたびに新しい廊下や部屋を巧みに作り出し、同じ部屋から出ていないのに巨大な場所にいるような錯覚を与える。ジョイスティックやテレポートなしで実現している
  • ちょうど Poul Anderson の古典 Operation Chaos を読んでいた
    https://en.wikipedia.org/wiki/Operation_Chaos_(novel)
    魔法が実在し、科学とともに急速に発展している並行世界が舞台だ。たとえば Edwin Land は偏光を利用して、月明かりなしで狼男を変身させる装置を発明する
    主人公たちの子どもが誘拐されて地獄へ連れ去られ、軍が20年前に地獄を調査しようとしたが全員が狂ってしまったと知らされる。敵対者は、地獄の時空間幾何がこちらと異なるため、子どもが到着する瞬間まで遡って連れ戻せるという手がかりを漏らす
    科学者たちはその手がかりだけで、地獄の幾何が 非ユークリッド幾何学 であると見抜き、安全に入り、持ちこたえ、戻ってくるための呪文を計算する。道を見つけるために19世紀の幾何学者2人が同行し、そのうち1人は聖人の助けを得られるよう祈る

    • 私たちの世界の時空間幾何もユークリッド的ではなく、しかも リーマン幾何 ですらない。Operation Chaos は科学的というより、もっと混沌としているように見える
      私が読んだ Poul Anderson の作品、たとえば素晴らしい High Crusade もそうだが、彼は科学的な外観をあまり気にせず、勢いで押し切るのが好きだった
      非ユークリッド幾何学を扱った別作品としては、Christopher Priest の Inverted World が良かった記憶がある
    • 陳腐に聞こえるかもしれないし実際そうなのかもしれないが、最近はどうしてこんな 創造的な小説 があまり出てこないのか分からない
    • Jack Vance の優れた短編集 Tales of the Dying Earth も一読の価値がある。魔法/科学と悪魔の次元が同居している
    • Operation Chaos は好きだったが、ずっと後に出た続編は期待外れだった
  • John Carmackはpiの10桁目を間違って覚えていたのかもしれないが、みんなもコードベースで 84,600 を検索して、1日の秒数をタイプミスした人がいないか確認してみるといい
    意外とよくあり、定数をプログラムに直接入力すべきか、それともプログラミング言語の標準ライブラリにすでにある値を使うべきかについての教訓がある

  • 実際にはグラフィックと移動がおかしくなり、最終的にはプレイ不能になる。これを 非ユークリッドDoom と呼ぶよりは、「宇宙定数をいじった結果」と呼ぶほうが適切に思える
    本当の非ユークリッドDoomなら、こういうものを期待していた: https://youtu.be/kEB11PQ9Eo8?si=0HNlpGFBii2AIK1n

    • 細かく言えば、その動画も 非ユークリッド という用語を誤用している。HyperRogueの人たちが、本当の非ユークリッド幾何を見せる動画をいくつか作っていた
      https://youtu.be/yqUv2JO2BCs?si=AutaqS5unvT7cDjw
      Doomの動画で前進すると物体が横に滑るように見える奇妙な幾何効果を見ると、このDoomを非ユークリッドと呼ぶのもある程度は妥当に思える
    • これも非ユークリッドの意味するものではない。単に ポータル のある普通の3Dワールドだ。当時の一人称シューティングゲームエンジンは、普通は部屋を戸口、つまりポータルでつないで、オクルージョンカリングに使っていた
      通常の幾何を表現することはできたが、幾何が何らかの形で筋が通っている必要はなく、部屋同士を任意につなぐことも許されていた。揚げ足を取りたいわけではないが、よくある誤解だ
      本当の非ユークリッド方面ならZenoRogueの仕事を勧める。たとえばNil幾何を使ったシンプルなゲーム[1]、非ユークリッド世界ローグライクの巨大ボス戦[2]、全体的な幾何の奇妙さ[3] などがある。彼らの作品は何を見てもいい
      [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 が出ていないのが意外だ。似た概念で実際のパズルを作り上げた素晴らしいゲームだった
      よく考えたら、もう十分時間もたったし、また遊んでも面白そうだ
    • これはポータルのように見える。当時の一人称シューティングゲームは基本的に部屋を戸口、つまり ポータル でつないでオクルージョンカリングをしていた
      通常の幾何を表現するのには問題なかったが、幾何が必ずしも筋が通っている必要はなく、部屋同士を任意につなぐことができた
    • 自分もまさにそういうものを期待していた。ここに別の新しいアイデアもいくつか入った、もう1つの非ユークリッド実装がある
      https://www.youtube.com/watch?v=tl40xidKF-4
  • Doomはシミュレーションではないので、定数を1つ変えることが何かの良い例になるわけではない
    単にいくつかのルーチンを壊すのに近く、そのため変更の結果の大半はプレイ不能になる

    • これの何が面白いのかよく分からない。定数を間違った数字に変えれば、当然おかしな動作やエラーが出る。ほかにどうなるというのか? おかしな動作も特別には見えないし、自分が何を見落としているのか分からない
  • 好きなコンソールエミュレータのソースコードを取ってきて、適当な 浮動小数点エラー を入れたり、一部の分岐命令の意味を反転させたりすればいい。古いゲームほどまだ動く可能性が高く、悪い幻覚旅行のように見える可能性も高い

    • ずっと昔、N64エミュレータ向けにこういうことをしてくれるツールがあった。使ってみるとしばらくは面白かったが、予想通り頻繁にクラッシュした
      有名な画像や動画ファイルの特定部分を壊して新しいものを作る グリッチアート のプロジェクトもあった。どちらもまた見つけたいのに見つからない
  • Marathon 1(1994)は非ユークリッド空間をサポートしていたが、使われるのはまれだった。マップのある複数レベルで構成されたゲーム全体をプレイしていて、1〜2レベルでだけ不可能空間が現れるのに、ゲームはそうしたことが可能だとは警告も案内もしない。
    そのため、ゲーム内で見つけた最高のイースターエッグの場所だったのかもしれない。
    実演動画も見つけた: https://www.reddit.com/r/Marathon/comments/vclu55/probably_n...

  • 最後の問いは「プレイ可能でクラッシュしないpiの最大値はいくつか」というもの。piが4のときにセグメンテーション違反が起きる理由は、ルックアップテーブルへのアクセスの一部がテーブル終端を越えているためだと思われ、そうだとすればプレイ可能な最大値はpiそのものよりほんのわずかに大きい程度である可能性が高い。

  • この動画がゲームメカニクスや、なぜPiの変更がそのような形で問題を引き起こしたのかを、もっと深く扱ってくれていればよかった。

  • 参照されていたレイトレーシング Doomでは、この実験がさらに興味深くなるのか気になる。ラスタライズ手法で定数をハックした結果は、ほぼ予想どおりだった。だが、レイトレーシングならもっと面白い結果になるかもしれない。