Doom エンジン(id Tech 1)の詳細解説
Doomエンジン、後に「id Tech 1」と改名されたこのゲームエンジンは、id Softwareが開発し、特に1993年の画期的なファーストパーソン・シューティングゲーム『Doom』を動かすために使用されました。その革新的な技術は、後のゲーム開発に大きな影響を与え、数多くのゲームで採用されています。この記事では、Doomエンジンの主要な特徴、技術的な詳細、およびその影響について解説します。
Doomエンジンの概要
Doomエンジンは、ジョン・カーマックを中心に、マイク・アブラッシュ、ジョン・ロメロ、デイブ・テイラー、ポール・ラデックらが開発に携わりました。当初はNeXTコンピュータで開発されましたが、後にDOSに移植され、さらに他のプラットフォームにも展開されました。
1997年には
Linux版のソースコードが公開され、1999年には
GNU General Public Licenseに基づいて再公開されました。これにより、数多くの非公式な移植版が開発され、さまざまな
オペレーティングシステムでDoomをプレイできるようになりました。
Doomエンジンの技術的特徴
3D空間の表現
Doomエンジンは、3D空間をレンダリングするものの、その空間は2次元の平面図から投影されます。この制限により、視点は常に床と平行になり、壁は床に対して垂直である必要がありました。これにより、立体的構造や傾斜したエリアを作成することはできませんでした。しかし、この制約の中でも、エンジンはid Softwareの前作『Wolfenstein 3D』から大きな技術的飛躍を遂げました。
ゲームの世界とフレームレート
Doomエンジンは、グラフィックレンダリングをゲームロジックから分離しています。グラフィックエンジンは可能な限り高速で動作しますが、ゲームの世界は常に35フレーム/秒で動作します。これにより、異なる性能のコンピュータを使用する複数のプレイヤーが、公平な条件で対戦できるようになっています。
ステージ構造
Doomのステージは、上から見ると実際には2次元です。これは、部屋の上に部屋を重ねる(room-over-room)ことができないという、Doomエンジンの大きな制限の一つです。しかし、この制限により、壁とプレイヤーの位置を示す「マップモード」を容易に表示できるという利点も生まれました。
基本オブジェクト
ステージの基本単位は「
頂点」であり、2次元の点を表します。
頂点を結合して「linedefs」と呼ばれる線を作成し、linedefsには「sidedefs」と呼ばれる1つまたは2つの側面があります。sidedefsをグループ化することで「セクター」と呼ばれるポリゴンが形成されます。セクターは、ステージの特定の領域を表します。
セクター
各セクターには、床の高さ、天井の高さ、光のレベル、床のテクスチャ、天井のテクスチャなどのプロパティが含まれています。例えば、異なるライトレベルを使用するには、異なるライトレベルの新しいセクターを作成する必要があります。片側のlinedefは無地の壁を表し、両側のlinedefはセクター間のブリッジラインを表します。
Sidedefs
Sidedefsは、壁のテクスチャを格納するために使用されます。各sidedefは、中央、上部、下部の3つのテクスチャを持つことができます。片側のlinedefでは中央のテクスチャのみが使用され、両側のlinedefでは、隣接するセクターの床と天井の高さが異なる場合に、下部と上部のテクスチャを使用して隙間を埋めます。例えば、下部のテクスチャは階段に使用されます。また、sidedefsは、テクスチャを空中にぶら下げるために中央のテクスチャを使用することもできます。
Doomエンジンは、
バイナリ空間分割(BSP)というシステムを利用しています。これにより、ステージはバイナリツリーに分割されます。各ノードはステージの特定の領域を表し、ツリーの各分岐はノードの領域を2つのサブノードに分割します。葉ノードはサブセクター(Sセクター)と呼ばれ、特定のセクターにバインドされます。サブセクターはレンダリングに適した順序に並べ替えられ、カメラに近い順に描画されます。このシステムにより、表示されていないオブジェクトの描画を避けることができ、パフォーマンスが向上します。
レンダリング
壁の描画
Doomの壁はすべて垂直に描画され、上下を見る機能は、水平線を上下に移動させることで視覚的な錯覚を作り出す「y-shearing」によって実現されています。この技術は、後のDoomのソース移植版や、他のエンジンを使用するゲームでも採用されています。壁は、BSPツリーを横断する際に、カメラからの距離順に描画されます。また、壁の描画時に、見えない部分をクリップすることで、無駄な描画を減らしています。壁のテクスチャは垂直列のセットとして格納され、この形式は、テクスチャの垂直列をたくさん描画することで壁をレンダリングするエンジンにとって効率的です。
床と天井
床と天井(フラット)の描画は、壁の描画よりも複雑です。フラットは、塗りつぶしのようなアルゴリズムで描画されるため、不適切なBSPビルダーを使用すると、床や天井が画面外に流れ出すことがあります。床と天井は「visplanes」として描画され、特定の高さ、光レベル、テクスチャの水平方向の流れを表します。各x位置には、描画されるテクスチャの特定の垂
直線があります。ただし、visplanesの数には制限があり、これを超えるとエラーが発生します。visplaneは垂直のストライプとして構築されますが、実際のレンダリングはテクスチャの水平スパンの形で実行されます。
モノ(スプライト)
ステージ内の各セクターには、そのセクターに格納されているモノ(スプライト)のリンクされたリストがあります。セクターが描画されると、スプライトは描画されるリストに追加され、視野外のスプライトは無視されます。スプライトのエッジは、以前に描画された壁(seg)のリストをチェックすることでクリップされます。スプライトは壁と同じ列ベースのフォーマットで保存されており、壁の描画に使用される関数がスプライトの描画にも使用されます。スプライトは、遠い順に描画されるため、オーバー描画が発生しますが、通常は無視できる程度です。
Doomエンジンを使用したゲーム
Doomエンジンは、その革新的な技術により、多くのゲームで採用されました。その中でも特に重要なのは、以下のゲームです。
Doomエンジンで直接制作されたゲーム
『Doom』 (1993)
『The Ultimate Doom』 (1995)
『Doom II: Hell on Earth』 (1994)
『Master Levels for Doom II』 (1995)
『Final Doom』 (1996)
『Heretic』 (1994)
『Heretic: Shadow of the Serpent Riders』 (1996)
『Hexen: Beyond Heretic』 (1995)
『Hexen: Deathkings of the Dark Citadel』 (1996)
『Strife: Quest for the Sigil』 (1996)
『Chex Quest』 (1996)
『
Chex Quest 2: Flemoids Take Chextropolis』 (1997)
DoomまたはDoom IIのコードを基にしたゲーム
『Doom 64』 (1997)
『Hacx: Twitch 'n Kill』 (1997)
まとめ
Doomエンジン(id Tech 1)は、その革新的な技術と効率的な設計により、ファーストパーソン・シューティングゲームの歴史に大きな足跡を残しました。その特徴的なレンダリング手法や、BSPによる効率的な処理は、後のゲーム開発に大きな影響を与えました。また、ソースコードの公開により、数多くの移植版や派生作品が生まれ、今なお多くのファンに愛され続けています。