Doomエンジン(ID Tech 1)とは|仕組み・歴史・代表ソースポート解説

Doomエンジン(ID Tech 1)の仕組み・歴史・代表ソースポートを初心者向けに図解と実例で徹底解説。

著者: Leandro Alegsa

DoomエンジンはID Tech 1と呼ばれることもありますが、ビデオゲーム「Doom」の背後にあるコンピュータコード(ゲームエンジン)です。オリジナルのDoomに加え、Doom 2 を含むいくつかの作品や、内部的に大幅に拡張された互換エンジンを使うタイトル(Heretic、Hexen、Strifeなど)で採用されました(ただし独自エンジンを持つ Doom 3 では使用されていません)。1990年代前半のハードウェア制約のもとで、高速にファーストパーソン視点のアクションを実現した点が評価されています。

仕組み(内部表現とデータ)

Doomエンジンは、ゲーム空間をポリゴンではなく、2Dの平面(セクター)と壁(linedef・sidedef)、頂点(verticies、)とオブジェクト(things)で表現します。レベルやテクスチャ、サウンドなどのデータはWADファイルというパッケージ形式に格納され、エンジンはこれを読み込んでゲーム世界を構築します。

  • セクター:床と天井の高さ、光度、フロア/天井のテクスチャなどを持つ平面領域。
  • linedefs と sidedefs:壁の定義と、壁の両側に貼られるテクスチャ情報(linedefs、sidedefs)。
  • things:モンスター、アイテム、弾、装飾など、ゲーム内で動く/相互作用する要素。

レンダリングと最適化

当時(1993年)のほとんどのビデオカードには3Dアクセラレーションが搭載されていなかったため、ドゥームエンジンはビデオカードではなく、すべてのレベルをCPUでレンダリングしました。このため、当時の遅いコンピュータでゲームを動作させるには、非常に効率的なアルゴリズムが必要でした。主なテクニックは次の通りです。

  • BSP(Binary Space Partitioning):マップを再帰的に分割することで、可視性判定(どの部分を描画すべきか)と描画順を高速化。これにより不要なオブジェクト描画を削減します。
  • サブセクタとポルタルベースの描画:BSPの葉(subsector)ごとに壁を列単位(垂直スライス)で描画し、スプライト(モンスターやアイテム)は2Dスプライトをスクリーンスペースに投影して描きます。
  • visplane(ビジュアルプレーン):同じ高さとテクスチャを持つ床・天井領域をまとめて描画する仕組み。これによりフロア/天井の描画効率が向上します。
  • 固定小数点演算、テーブル参照:浮動小数点ではなく固定小数点や事前計算テーブルを多用し、計算コストを下げています。

制約とその影響

オリジナルのDoomエンジンにはいくつかの設計上の制約がありました。代表的なものは以下の通りです。

  • 真の「部屋の上に部屋(room-over-room)」構造が表現できない:セクターは垂直に重なり合うことができず、同じXY位置で異なる高さの通り道を持つ表現は工夫(セクタートリック)で実現されました。
  • 床・天井は平面(スロープ無し):初期版では傾斜した面がなく、フロアと天井は常に平坦でした(後のソースポートで擬似的なスロープが実装されました)。
  • 光源はセクター単位の固定明るさ:動的光源(移動する光)やリアルタイムシャドウは元々無く、後の拡張で追加されました。

歴史とソースコードの公開

id SoftwareはDoomのソースコードを公開し、その後コミュニティによって多数の改良版が作られました。ソースコードはGNU General Public Licenseの下でフリーでリリースされており、それがソースポートと呼ばれる改造や移植の基盤になっています。ソースの公開により、様々なプラットフォーム(古いPCから組み込み機器、携帯機や最新のOSまで)に移植され、教育的な参照にもなりました。C言語で書かれているため、プログラマーが新しいタイプのコンピュータで動作させるのが比較的容易でした。

コミュニティとモッディング

DoomはオリジナルWADに加え、コミュニティ製のPWAD(追加WAD)やMODが非常に豊富です。マップエディタ(Doom Builderなど)、テクスチャ編集ツール、DeHackEdのようなゲーム挙動を変更するツールが多数存在し、マルチプレイヤー用のデモや新しいゲームルールを作る文化が発展しました。これらはソースポートの機能拡張と相まって、Doomを長く遊ばれ続けるタイトルにしています。

代表的なソースポートと特徴

  • Boom:マップ構造やエンジン挙動に拡張を加え、より複雑なマップやスクリプト的な表現を可能にした初期の有名な拡張。多くの後続ポートの互換ターゲットになりました。
  • PrBoom / PrBoom+:Boom互換性を重視したポート。PrBoom+はデモ再生の正確性、ネットプレイの改善、バグ修正、追加機能を備え、競技的なタイムアタックやマルチプレイヤーで広く使われました。
  • ZDoom(および後継のGZDoom):スクリプト(ACS)、3Dフロア、スロープ、動的ライティング、OpenGLベースのハードウェアレンダリングなど、非常に多くの拡張機能を導入。モッダーにとって強力なプラットフォームになりました。
  • Chocolate Doom:オリジナルのDoomの挙動を忠実に再現することを目的としたポート。現代のOS上で古典的な挙動(バグや動作の細部まで)を再現したい場合に使われます。

現代での利用と影響

Doomエンジンの設計思想(効率的なソフトウェアレンダリング、データ駆動のマップ表現、コミュニティによる拡張)は、その後のゲームエンジン開発やインディーゲーム文化に大きな影響を与えました。ソースコード公開によって教育用途やリバースエンジニアリングの対象となり、多数の移植、解析、学習プロジェクトが生まれています。加えて、今日でも新しいソースポートやMODが作られ続け、Doomは"いつまでも遊ばれる"タイトルの代表例になっています。

参考:エンジンを理解するためのキーワード

  • BSP(Binary Space Partitioning)
  • visplane(床・天井描画のためのスパン集約)
  • WAD / PWAD(ゲーム資産の格納形式)
  • linedef / sidedef / sector / verticies、things(マップ構造要素)
  • ソースポート(Boom、PrBoom、PrBoom+、ZDoom、Chocolate Doom など)

Doomエンジンは、当時の制約を逆手に取った工夫と、コミュニティによる継続的な改良によって長く支持されている技術遺産です。興味があれば、実際にWADやソースポート、マップエディタを触ってみると、設計の妙や制約に対するさまざまなトリックがよく分かります。

質問と回答

Q:ドゥームエンジンとは何ですか?


A:ドゥームエンジンはビデオゲーム「ドゥーム」を支えるコンピュータコードです。Doom 2を含む他のゲームでも使用されています(独自のエンジンを持つDoom 3は含まれません)。ヘレティック、ヘクセン、ストライフでは、ドゥームエンジンの大幅な改良版が使用されています。

Q:Doomエンジンはどのように3Dレベルを表現するのですか?


A:『Doom』エンジンは、バイナリー・スペース・パーティショニングという技術を使って、コンピュータが高速に処理できる方法で3Dレベルを表現しています。

Q:Doomエンジンはどのような言語で書かれているのですか?


A:ドゥームエンジンは主にC言語で書かれています。

Q:『Doom Engine』のオープンソースバージョンはありますか?


A: はい、ドゥームエンジンのソースコードはGNU General Public Licenseの下で無償で公開されています。また、多くのファンがソースポートという独自の修正版を作っています。

Q:オリジナルDoom Engineのソースポートにはどのようなものがありますか?


A: Boom、PrBoom、PrBoom+、Zdoom、Chocolate Doomなどのソースポートが有名です。

Q:ドゥームエンジンは内部でどのような構造でレベルを表現しているのですか?


A: ドゥームエンジンは内部でlinedefs、sidedefs、sector、verticies、things(モンスター、アイテム装飾などの意味)と呼ばれる構造体を使用してレベルを表現します。

Q:ファイルからのデータ読み込みはどのように行われるのですか?


A:ドゥームエンジンはWADと呼ばれるファイルからレベルなどのデータを読み取ります。


百科事典を検索する
AlegsaOnline.com - 2020 / 2025 - License CC3