ゲーム

ゲーム内の円周率が「3.14159……」ではない場合どうなるのか?


円周率は無理数であり、その値が「3.14159……」となることはよく知られています。こうした円周率はグラフィカル・プログラミングやビジュアル・レンダリングの一環としてゲーム内でも用いられることがありますが、あの伝説的なFPSゲーム「Doom」に用いられた円周率の値は間違っているそうです。こうした「誤った円周率」がゲームに用いられた場合どうなるのか、ソフトウェアエンジニアのルーク・ゴツリング氏が解説しました。

Non-Euclidean Doom: what happens to a game when pi is not 3.14159… - media.ccc.de
https://media.ccc.de/v/mch2022-236-non-euclidean-doom-what-happens-to-a-game-when-pi-is-not-3-14159-

円周率とは、円の直径に対する円周の長さの比率のことをいいます。小数点以下10桁までの値は「3.1415926535」で、近似値は「3.141592654」。ところが、Doomに導入された円周率は「3.141592657」でした。これは、開発者のジョン・カーマック氏が「円周率を間違えて覚えていたこと」が原因だそうです。実際、カーマック氏もこの事実を認めています。


この円周率はDoomのルックアップテーブルに用いられていました。1993年当時のハードウェアは当然ながら3Dアクセラレーションのような3D画像処理特化の性能は持っておらず、すべてのクエリーを高速化するためには、あらかじめ計算できるデータは先に計算しておく必要がありました。そのためのデータ構造がルックアップテーブルです。

カーマック氏はそこへ間違った値を入れてしまったわけですが、実際のゲームプレイに支障を来すものではなかったといいます。


そこで、ゴツリング氏はあえて値をいじり、間違った値を入れてしまうことがどのような問題をもたらすかを検証しました。

まず、円周率の値を2倍にしてみます。これでもコンパイルは可能ですが、実際にゲームをプレイすることはできなくなります。円周率の値を「4」にしても同様で、コンパイル可能でゲームプレイは不可という状態になります。


ところが、円周率の値を「3」にするとコンパイルもプレイも可能になります。こうすると、ゲームの値がところどころずれてしまい、普通は死ぬことがないゲーム冒頭のデモシーンで主人公が死んでしまうなどのバグが発生するそうです。


実際にゲームをプレイすると、画面にゆがみが発生したり、壁が予想外の動きをしたりすることがあります。


円周率の値を「e(ネイピア数)」にすると、画面が目に見えてガタガタに。


π/2にすると、テクスチャの乱れが激しくなります。


π=0.00001にすると、タイトル画面に向けて銃を撃つという奇妙なシーンが誕生してしまいます。


ゴツリング氏が試した限りだと、以下の通りいくつかの数字でコンパイルとプレイの両方が可能だったそうです。


なお、こうした「誤った円周率」が存在することを知らずにソースコードをコピーしているプロジェクトがいくつもあり、その数は実に2124個にも上るとのこと。ゴツリング氏は「この人たちは正しい円周率の値だと思ってコピーして使ってしまったのでしょうか?きっと答えはイエスでしょうね」と述べました。

この記事のタイトルとURLをコピーする

・関連記事
スマート芝刈り機で「DOOM」がプレイ可能になるアップデートが配信決定 - GIGAZINE

ついに大腸菌で「DOOM」をプレイする猛者が登場、ただしクリアには600年かかる - GIGAZINE

「Doom」30周年を記念して開発陣2人が再集結、「このゲームを存続させてくれたDoomコミュニティの皆さんに感謝したい」と語る - GIGAZINE

FPSの金字塔「DOOM」の生みの親であるジョン・ロメロ氏が「1990年代におけるインディーゲームの開発はどうだったのか」を語る - GIGAZINE

in ゲーム, Posted by log1p_kr

You can read the machine translated English article here.