Schemeファンのための『ゲームエンジン・アーキテクチャ』立ち読みガイド

(本文p292。)
ゲームエンジンアーキテクチャノーティドッグ(NDI)のエンジニアが書いたゲーム開発のかなり広範なトピックを扱った書籍の日本語訳。

NDIにはかなり深刻なLisp文化が有る:

この本はかなりブ厚いので、以下のポイントを書店で確認しようと思っても家に持って帰ってゆっくり読みたくなること間違いなし!

Schemeが出てくるポイント

NDIでは上のプレゼンのようにRacketをScheme処理系として採用している。このため、前置コロンのキーワード記法やnewによるオブジェクト生成記法を採用している。

  • p292. エンジンサポートシステム >> Schemeのデータ定義。deftypeとdefine-exportとdefineだけで2通りの記法が出てくる。C++のソーステンプレートやエンジンにロードされるバイナリの生成に使用している。C++側にもScheme風のシンボルシステムが存在することがわかる。
  • p617. アニメーションシステム >> アクションステートマシン。ここで出てくるのはdefine-state。
    • p618. ここでsyntax-rulesを使ってデータ定義言語を拡張している
  • p811. オーディオ >> セリフを定義する。ここではdefine-dialog-lineとdefine-conversation-segment。『ここで、先頭のシングルクォートはハッシュ化さえた文字列IDを示す』←Scheme的なquoteを一般的に解説した文。
  • p940. ランタイムのゲームプレイ基本システム >> ノーティドッグのDC言語。ここではSchemeコードは一切出てこないが、DC言語はRacketのバリアントでゲームに内蔵されたVMで動作する。

というわけで、代表的なSchemeの言及は上記の4箇所に出てくるが、うち3箇所はデータ記述言語としてSchemeというかS式を使用している(実際にはプログラムとして処理されているので、p618のようにsyntax-rulesを使って拡張もできる - ruby界でよく使われるDSL的な用法と言える)。ゲームロジックの記述に使用されるDC言語はRacketConのプレゼンでずっと詳細に語られている。

強いところにScheme有り?

この本の重要なところは(もともと大学の講義資料なので)網羅性を確保している点で、このようにグラフィックス、アニメーション、物理、オーディオでそれぞれ同じくらいの紙巾を取っている。

(写真取るときにパースついちゃったけど)
彼らはグラフィックスで賞賛を受ける傾向に有るが、アニメーションやオーディオについても深い考察を提供している。実際、(本文中で語られるように)SonySDKはグラフィックス/アニメーション(Edge)/オーディオ(SCREAM)の各分野で彼らのライブラリを含んでいる。
もっとも、彼らのゲームエンジン自体がライセンシに提供されているわけではないので、Schemeによるデータ定義がSDKとして採られていることにはならない。つまり、Schemeは彼らのゲームの"secret sauce"の一部を成しているとも言える。...まぁ汎用性をこの部分で提供するのがいかに難しいかという点でもある。

教科書としての難しさ

このような書籍として纏まった形でゲームエンジンが語られる機会はなかなか無く、この点においてだけでも本書は本当に貴重なものになっているが、読んでみて気になった点はいくつか有る。
古いポイントを片付けていない。第2版でPS2の言及は無くなったが、市場を鑑みるとPS3固有の事情も無くても良いのではないかと思う。もちろん、彼らのエンジンはPS3から直線的にPS4対応に進化しているので思想を理解する上では必要な事情では有るが。。
モバイルに関する考察は殆ど無い。NDIはSonyのfirst partyスタジオであり据え置き機専業のスタジオと言える。このためモバイルをカバーしていない。まぁ現実にはモバイル/携帯機と据え置き機/PCは未だに断絶した世界ではあるが(開発者もほぼ交流が無いように感じる)、依然双方には興味深い相似性が有り、急速に歩み寄っている。(ちなみにWii/WiiUも殆ど触れられていない。)
隅々まで翻訳されている。"高度なLinuxサウンドアーキテクチャ"を読んでALSAの事だと直感的に判る読者は少いように思う。実際問題として日本語の書籍は本当に少いし、特にグラフィックスに関しては役に立たないことも多いので、英語で何と言うかを常に提供して検索性を担保した方が良いのではないかと感じる。
それでも、PC/据置き機のゲームをプレイする人なら依然興味深く読める内容のはず。