自分のための備忘録です。
Visual Programming やら状態遷移モデル関連やら、
モデル検査の話やら、ゲーム系のさまざまやら。
似たようなことを研究していらっしゃる所の一覧です
筑波大学大学院ビジネス科学研究科の西森さんの研究です。2003年度未踏ソフトウェア事業に採択されています。相互リンク状態になっていますね(^^;
こちらのリンク情報を踏まえた上でまとめられているので、ゲームとスクリプト言語に関する情報では西森さんのページのリンク集のほうがご覧のこのページよりお役に立つかと思います。
神戸大学の瀧研究室で開発されている、3Dアニメーション用のシナリオ記述用のシステムです。座標指定でムービーの各フレームを作っていくのではなく、各オブジェクトに抽象的な行動指示(Bのいる所まで行け、など)を行うことにより、最終的に各オブジェクトが協調して一つのムービーを作成することができます。Future Work でインタラクティブ性について触れていますので、ゲームと関係ある形に発展していく可能性を秘めています。
対話型アドベンチャーゲームを正規文法で記述するという話だそうです。正規文法と言っていますが、ただのオートマトンのような。もっとも、両者は等価ではありますが。
この一連の行動を「(A,B)→C」と記述します 例:(家の中,扉を開ける)→外の通り この記述を正規文法の(遷移)規則と呼びます
……ええっと? C->A B という文法を作っていくと、最終的に開始状態+コマンド列という文が受理されるということでしょうか。むむ。難しいです。
実際のシナリオはフラットな(複数の状態変数を持たない)状態遷移系として記述するようです。Excel の表形式で (遷移元, 入力記号, 遷移先, 遷移時のアクション) の組をたくさん記述するという方式です。
CPSL という3Dモデルのサイバーガールたちを演技させる言語と、CTSL という童話記述用スクリプト言語を研究しています。
どちらかというと、3Dモデルを動かすためのアノテーションをいかに埋め込むかという話のように見えます。
NTTソフトウェア研究所の柴崎さんがIPSJ「マルチメディア通信と分散処理」の研究報告に書いている論文です。90年ですから、かれこれ十年以上も前ですか。アドベンチャーゲームのシナリオの検証を通信プロトコルの検証手法で行えるという話です。アプローチとしては完全に先行研究になります。
多人数ゲームと書いているので、近年のオンラインゲームかと思いきや、多人数で遊ぶゲームブックだったりするというオチがあります(^^;紙に書いたメモをプレイヤー間で受け渡すのだとか。
自分の研究との差異ですが、この論文ではあまり複雑な状態遷移が考えられていないことや、シナリオ記述方式があまりにも保守性に劣っていることなどが挙げられます。
StateChart とは何かの解説。要は階層構造のある状態遷移モデルです。並列に遷移する状態も記述できます。
ヒストリー機構とかが面白いかもしれません。
階層構造周りの遷移の優先順序などの話や、イベントの発生、step の概念などがここの説明からは抜けていますので要注意。
ちょっと前の論文ですが、StateChart を SMV に載せて検証するという話があります。ステートチャートと SMV の日本語による簡単な説明もあってとっかかりとしてはいいかもしれません。
StateChart から C++, Java, C#, J# などのソースコードを生成する商用ソフトです。メールアドレスを登録することにより体験版が使用できます。また、登録しなくてもダウンロードできるパッケージの中に AnyStates を使用したサンプルのソースと実行ファイルが入っていますのでそれを実行するだけで雰囲気は充分に味わえます。値段が分からないのですが、安ければ買ってもいいかな、と思える感じのソフトでした。
(追記:AnyStates の日本代理店の方からメールがありました。アカデミックで \98000- だそうです……。)
MDA (モデル駆動型アーキテクチャ) という開発手法があるそうで、要は UML みたいなモデル記述手法に実際の動作の詳細を記述するアクション言語を埋め込むことにより、実際のプログラムのかなりの部分までをターゲットのプラットフォームや言語に依存せずに記述しよう、という話のようです。変換先は Java だったり .NET だったりするようですね。そんな UML の状態遷移図のアクション言語のリファレンス実装(?)の一つがこちらの xUML のようです。
リファレンス実装(?)その2、だそうです。こちらは日本代理店のページ。
こちらも MDA のメジャーなツールらしいんですが、状態遷移「図」ではなく、「表」命なんだとかなんとか。使ってみないと分かりません・・・
プロセス代数の範囲をいまいち理解していないのですが、CCS からπ計算まで全部プロセス代数ということでいいんでしょうか。
相互に通信する並行プロセスの定式化や証明が必要な場合にはπ計算が必要なのは良く分かるのですが、(理解や思考に必要な脳内エネルギーが)かなりの大事になる印象が強いので、できれば応用の場面では避けて通りたいところ。
まだ CCS くらいなら応用の場面でも自然な encoding と感じる表記に収まるのですが、π計算まで行くと「確かに encoding が可能である」という世界に突入してしまう気がします。チャネルをチャネルに乗せて渡せるというところで、話が一気にややこしくなっているんでしょうね。ただ、π計算を理論的ベースにした言語もいくつか設計されていますので、使い方次第、ということなのかもしれません。
ネット上に落ちていた jaist の学生さんのマスター論文です。BPP (Basic Parallel Process) に繰り返し演算子を導入して公理化しているようなのですが、前半には BPA (Basic Process Algebra) , BPP といったプロセス代数の説明が丁寧に載っております。他にプロセス代数を分かりやすく説明した講義資料がネット上に転がっていればそれと差し替えるんですが……。
CCS (Calculus of Communicating Systems) とπ計算について、構文と操作的意味論を一通り記述している講義資料です。
せっかくなので、π計算に関するリンクを。住井さんの手によると思われるπ計算の超入門。一つ前の慶応の講義資料と見比べると表記がいろいろあるのがよく分かります。「(以下作成中)」となっているので続きが気になりますが……。
Hoare 先生による CSP の本の PDF。英語。260 ページの本の PDF がネット上に置いてありましたので、感動してリンクを張ってしまいました。
信州大学のインターネット大学院の情報工学専攻授業科目「セキュリティ社会システム特論(リアル学生)」のページ。BLA (Basic-LOTOS oriented Algebra) という並行プロセスの表記法の説明と、その表記上の検証を行う CADP (Caesar/Aldebaran Development Package) というツールを使ったプロトコル検証の実例があります。解説が定義投げっぱなしの部分もありますが、例が豊富ですので、この手の話に慣れていれば十分分かりやすいかと思います。最近は大学の講義資料などが充実してきて、日本語でもインターネット上でいろいろ専門的なことを学べるようになって嬉しい限りですね。
モデル検査の有名なツールその1です。どうも SPIN 上に載せる Promela という言語はえせ C 言語という感じで好かないのですが。LTL で記述された性質の検証が可能です。
SPIN の本家ページです。
萩谷先生がいつかどこかで使用した SPIN に関する講義資料です。
モデル検査の有名なツールその2です。こちらは CTL の検証がメインです。LTL も CTL もどちらが勝っているというわけではないのでどっちもどっちなのですが。
SMV の本家本元です。Symbolic Model Checking や BDD など関連する理論に関する論文も多数置いてあります。
SMV を中をいじりやすいように書きなおしたものです。Bounded Model Checking による LTL の検証機能も付加されました。
Java コードを SPIN や SMV に変換し、Model Checking を行うツール。
Microsoft Research が Windows のデバイスドライバの検証などを行うために、Model Checking 等の技術を用いた検証ツールを作成しています。当然、C言語で書かれた物をそのまま食べさせるようですね。その筋には有名だそうで。
最近、Static Driver Verifier (SDV) という名前で実用ステージに移行している模様?Windows 業界をよく追っていないので詳しくは知らないのですが……。
VPL 研究者の Burnett 先生がメンテナンスしている鬼のような分量の bibliography です。情報がありすぎて追い切れないという話もあり。
VPL 関係では一番有名なページのようです。どうもいまいちとっちらかっていて情報をすくいにくいのですが……。
実用的なアプリも作成可能な商用 VPL という呼び方をよく耳にする Prograph です。体験版が落とせますので興味があればお試しあれ。
dataflow 型の言語としてしっかり作られていると思います。VPL の授業の実習とかではこれを使うことが多いようですね。
昔は Mac 用の開発環境もあったとか。
いかにも Visual な Programming Language という感じの言語です。ただ、背景には prolog 的な論理型言語のバックグラウンドがあるそうで、計算能力も充分に高いとのことでした。数字と数字をハンマーで叩くと合計されるとか、いらなくなった作業スペースは爆弾で破壊してしまうとか、どうも本質じゃないところにばかり気が取られてしまいがちでした……。
( 日本語解説サイトその1・その2 )
Smalltalk の実装の一つである Squeak 上で動くプログラミング環境です。eToys が他社の商標に引っかかったので SqueakToys になったとかなんとか伺ったような……。まだ eToys の方が通りがよいようですが。
あまりにも eToys がインパクトがあるため、Squeak そのものが eToys であるとの誤解も多いようですが、本来は eToys は Squeak 上のただのアプリケーションでしかないので、本来の Squeak の機能を使うことにより非常に強力なプログラミング開発を行うことも可能です。
eToys 本体ははパネルを並べて命令列を作成するタイプの VPL です。VPL 独特の凄いことが成されているわけではありません。
NTT の原田さんが開発された VPL です。見た目が Squeak に似ていると言われることが多いみたいですが、全然違います。2D フィールド上のオブジェクトの配置・回転に対して、ルールベースのマッチング&書き換えで動かしていく、というものです。シンプルなルールでいかに複雑な動きを作れるのかが研究として面白いようです。ゲームの開発には使えませんね(^^;このアイデアをゲームデザインの方に用いるのは面白いかもしれません。
ゲーム用に作られたスクリプト言語+そのエンジンの目立ったところを集めてみました。
画面画像を見てもらえば分かるように、チャート型と呼ばれるシナリオのフローチャートをグラフィカルに編集するタイプのノベルエンジンです。
ただ、状態がフラットにしか存在しないため、大規模なシナリオになった場合は混乱が起こること必定かと思われます。運用で乗り切れないこともないかもしれませんが。
また、他のシナリオエンジンに比べると柔軟性が低いようです。
パソコン用の商用アドベンチャーゲームではかなりよく使われているフリーのシナリオエンジンです。いわゆる「if と goto しかないスクリプト言語」の典型例のようなものなのですが、デファクトスタンダードなのでしょうか、やはり。
TJS2 という JavaScript ライクなスクリプト言語を用いたマルチメディアタイトル用のシステムです。TJS2 は TJS2 VM という仮想マシンのバイナリコードにコンパイルしてから実行するそうです。ノベルゲームを作成する場合には TJS2 の上で動く KAG というマクロ集を用います。アイデアとしては TeX に近いものがあり、KAG のみを使用してゲームを作成することも可能ですが、生で TJS2 を呼べばより細かい制御が可能となります。
ゲーム作成にはこれのように2層構造になったスクリプト言語が適していると僕も考えています。大多数の定型的な部分が問題なく書けて、一部の特殊な部分もやろうと思えば対応可能であるという形は基本ですね。
しかし、難解すぎるのか、ライセンスが GPL だからか、いまいち商用でばりばりと使われているという話を聞きません。が、Fate で利用実績が、どんと積まれました。
上記2つはかなり一つ一つの命令がプリミティブなものであったため、柔軟な反面、煩雑であったという問題がありました。ADVRUN ではエンジン側が高度な命令をできるだけたくさんのバリエーションで持つことによって、シナリオスクリプトの入力を平易にしようという試みです。
なんだか RISC と CISC の争いを思い出してしまったりするわけですが、今回は命令列を作るのが人間様であるため、やっぱりシナリオファイルの総命令ステップ数が少ない方が楽は楽のようで。
統合開発環境という話もあるようですが、チャート式に到達するまでにはまだ時間がかかりそうです。
こちらにアーキテクチャ概説 (archive.org 内)がありますが、マルチスレッドを実装したシナリオ記述言語です。ざっとしかまだ見ていませんが、かなり筋のいいシステムだと思います。ちゃんといろんな言語をご存じの作者さんなのでしょう。
yield でスレッド切り替えを明示させる non-preemptive なマルチスレッドモデルを採用していますが、煩雑な同期処理などを考えると、アドベンチャーゲーム用の手続き型のスクリプト言語なら yield を使ったもので十分だと僕も思います。
なんだか AgentSheets を彷彿とさせる "Windows上でアクションゲームを簡単に作る ことができる統合開発環境" のフリーウェアです。AgentSheets では各マスの大きさが固定でしたが、可変サイズにするとこうなるかな、という雰囲気が漂っています。
作者の長さんに直接話を伺ったところ、中高生あたりの支持を熱く集めている模様。
オランダの大学の先生が作ったらしい、一行もプログラムを書かずにゲームが作れるという触れ込みのゲーム開発環境です。無料のフリー版と有料のフル版があるようです。AgentSheets に良く似ているような気がしますが、画面上にオブジェクトを配置して、それぞれのオブジェクトにイベントごとにどう処理するかをタイルで指定するタイプのようです。なお、Game Maker Language という言語で記述することも可能です。byte-code にコンパイルされて実行されるとのこと。
下で紹介している Alchemy や CryEngine で使用されているスクリプト言語です。TeX のドキュメント があるのでなんだか良さそうに見えますが、ざっと一通り目を通した限りでは普通のスクリプト言語に比べてのとても凄い利点というのは見えませんでした。キーワードとしては、エンジンのサイズがコンパクトである、ということと、エンジンが全て ANSI C で書かれている、という2点があるようです。そのため、いかなるプラットフォームにおいても容易に利用可能ということです。python と言語的に大きく異なる点としては co-routine をサポートしているということでしょうか。ruby を使えば実現できるのですが、ゲームのスクリプトにおいてサブルーチンの実行を yield で中断し、再呼び出しでそこから再開できるという機能は有用です。それ以外は、データ型に関してもユーザ型(void*相当)が明確に定義されているという以外は真新しいことはなく、言語仕様も特筆すべき点はないと感じました。
しかし、あとで改めて考えてみると、やはり ANSI C で書かれた(=移植性の極めて高い)コンパクトなスクリプト言語というだけで、十分に価値はあるんですよね……。実際、ゲーム組み込み言語に必要な機能は何か、と考えて仕様を切っていくと、できあがる言語仕様は Lua になること請け合いです。あとは文法さえ自分の好みに合えば言うことはなかったんですが。そんな人には Squirrel ということなのでしょうか。ただ、Squirrel は Lua にあった、必要十分にぴったりというスリム感がないんですよね……。難しい。
Small is a simple, C-like, language. だそうです。初心者にも優しい言語ということで設計されたようですね。中間コードに1回コンパイルしてから実行するので高速、ということだそうです。ただ、いろいろな feature を見る限りでは組み込み python で十分では、という感触が。特定業界では日本でも一気にメジャーになりつつありそうな感触も得つつ。表には全く出てきませんが(^^;
最近名前が↓に変わりました。
もともと SMALL と呼ばれていたスクリプト言語です。Where is PAWN used? を見ると、PS2, Xbox, GC のゲーム中に組み込まれていたり、iPod の中に組み込まれていたりしているようです。実績があるというのはすばらしいことです。
3Dキャラクターのオーサリングシステムのようです。すみません。初耳でした。これも初心者用の環境、ということなのでしょうか。Squeak で書かれているという噂も耳にするのですが、alice.org をざっと見渡しても情報がない気がします……。
は、なんとなく好きません。
Game Oriented Assembly Lisp. クラッシュバンディグーのオブジェクト制御用として使用。ここで少しだけ触れられている。複数の筋から、開発者本人の生産性は向上したものの周りが付いていけなかったという噂を聞いてみたり。Gamastra にそういう記事があったのかも。
追記(2007/05/21): Wikipedia に GOAL の項目 がありました。日本語記事では GOOL と書かれていますが、正しくは GOAL だったのですね。なお、資料によっては Game Object Assemply Lisp と書かれていることもあります。Gamastra に 2003 年の Naughty Dog の開発者のスライド資料がありまして、資料の最後に GOAL に触れています。柔軟なオブジェクトの作成が出来た反面、メンテナが1人しかいない専用コンパイラのバグに悩まされたり、Lisp の学習曲線が高すぎたりとなかなか苦労したようです。
第16章に「ノベル系ゲームの作りかた」という記事が載っています。Excel でフラグ管理とかしているものなのですね……。ここで記述されているエンジン部分がまるで状態遷移モデルでありました。
やねうらお氏は yaneuraoGameScript2000 なるスクリプトエンジンも発表しています。が、いまいちマイナー?妙に C 言語っぽいスクリプトで、どうにもスクリプトであるありがたさがないような。自由度が高いので、ノベルゲームに限らずなんでもゲームは作れるようです。もっとも yaneGameSDK というゲーム用ライブラリを素直に使って C++ で直接プログラムを組んだ方が早そうです。
RPG のシナリオ用スクリプト言語の設計について詳細が書いてある珍しいページです。キャラクターへの会話や特定の場所への移動などのイベントをハンドラで受け取るというモデルで作られています。
シナリオスクリプトは細かいブロックからなり、各ブロックには状態変数が割り当てられます。状態遷移系がたくさんあるような形です。そういった意味では自分の研究とも近いといえるのですが……。全てをブロックとしてしまったために非常に混沌としたシステムになっており、いろいろすごいことに・・・
風林火山というプログラマー集団が、XML にて記述するアドベンチャーゲーム用エンジン月山を Java で作っているはずなのですが、ホームページがずっとみれなくなっております……。ただ、XML で書くと言っても、実行モデルは普通の手続き型だったと記憶しています。
基本的に、ゲーム開発の世界での統合開発環境というか、ツールが整備されたミドルウェアというか、そういったものは、グラフィックに関する機能にフォーカスを当てた物がメインです。
CEDEC2003 でシリコンスタジオのセッションにて説明を受けてきました。柔軟に拡張可能なマルチプラットフォーム(PS2, XBox, GC, Windows, Linux)のグラフィックエンジンです。メモリ管理機能も含まれているそうですね。Lua であらゆるゲーム内オブジェクトを操作可能なようで、そういった意味でも柔軟な処理ができそうです。説明を受けた限りでは、柔軟性も高く、非常に使いやすそうに見えました。ただ、シナリオスクリプトをどうこう、というツールは含まれておりません。スクリプト言語としては Lua が組み込まれていたと記憶しています。
もともと Epic Games 社が Unreal Tournament シリーズ用に開発しているゲームエンジンとツール群をあわせた統合ミドルウェアですが、その完成度の高さから他社にもライセンスされています。日本での有名どころでは Lineage2 にも採用されていますね。先日は PlayStation3 の SDK と共に提供される というニュースでも話題になりました。
2005年のGDCの Unreal Engine 3 の記事によると、UE3 には KISMET という GUI のスクリプトエディタが存在しているようです。画面写真を見る限りでは、データフローモデルかペトリネットか、といった雰囲気ですね。全体的な完成度からも要注目の一品です。スクリプト言語としては Unreal Script という Java-style の言語が含まれています。
Valve 社が HalfLife2 のために作成したエンジンです。当然、配布物にはツール一式も含まれます。有志の努力で日本語の公式 Wiki があるのはありがたいことですね。
こちらは MOD という形でユーザが自由にデータを作成できるようになっており、HalfLife や Counter-Strike といった Source Engine を使用した公式ゲームを買うと Engine の利用権もついてくる、という仕組みになっているようです。日本の同人活動のようなノリで MOD の制作は行われているようですね。
ただ、こちらには UE3 の KISMET のようなスクリプトエディタはついてこないようです。基本的には C++ で記述していくことになりますが、スクリプト言語として Lua が使用可能になるように実装した MOD があるようです。
id Software 社によるゲームエンジン。後継として C++ で書き直された Doom 3 Engine もあります。Quake III Engine は現在 GPL でリリースされており、id 社の ftp サイト からダウンロードが可能です。
Crytec 社の FarCry というゲームで使われている内製エンジンです。MOD 作成用に CryENGINE MOD SDK for FarCry なるものも公開されているようです。
スクリプティングシステムとしては Lua が使われています。
Xbox360 や PS3 のサポートも明らかにしているゲームエンジンです。ページを見る限りでは、グラフィックのみでスクリプティングなどのサポートはなさそうな気がします。
ゲーム用ミドルウェアとツールのセット。goal-based な management system があるそうですが、詳細は調べていません。ツールの中の Command Editor というのが気になってはいるのですが……。
商用の 3D エンジンです。C-Script というスクリプト言語を持っているらしいです。C++ を簡単にしたもので、 JavaScript を知っていれば十分、ということでした。
ウクライナのゲームスタジオ GSC Game World による内製エンジン。S.T.A.L.K.E.R. というタイトルで使用される予定。物理に強いらしい。
AI の項目に Data driven design (pattern based evaluation functions are automatically generated and optimized on training examples - supervised learning) などと書いてあり、夢は膨らむばかり。
LGPL のオープンソースの 3D エンジンです。C++ で書かれ、Unix, Windows, MacOS/X などのプラットフォームで OpenGL, SDL, X11 などを使用して実行できるとのこと。スクリプト言語としては、Python, Perl, Java などが使用可能になる plugin があるそうです。PC ならではですね。家庭用ゲーム機ではメモリが足りないことでしょう……。
上記のリンクはノースウェスタン大学の講義資料のようです。The Sims で Sim の AI を制御するスクリプト作成用エディタの解説です。一般公開はされていないのですが、産学連携している相手には公開しているらしいという話を聞きました。
昔は Keel と呼ばれていた OpenGL や Network を含んだゲーム用のフレームワーク for Java です。商用ですが、CyberStep は自分でアプリを作って成功しているので、ミドルウェア業としてはあまり力はいれていないのかもしれません。
要は、JDK だけではクロスプラットフォームになりきれていないジョイパット類とか、パフォーマンスがあまり出ていない 3D 関係に関して、パフォーマンスの高くクロスプラットフォームなライブラリを作り、Network 周りでも抽象度の高いライブラリを作った、ということのようです。描画周りさえネイティブの OpenGL などを使えば、インターネット対戦(格闘?)アクションゲームであったとしても Java で書け、商業的にも成功する、と韓国で実証したのがこの会社です。150ms のレイテンシもうまく隠蔽すれば対戦アクションとして成立する物だということを見せて頂きました。
ただ、僕の研究対象である、シナリオ記述言語という観点では全く関係ありません、はい。
Sorceforge で開発が進められている "The Scrolling Game Development Kit" だそうです。2D ゲーム用。Windows9x + DirectX 用。おそらくフリーでしょう。バリバリの統合開発環境ですがマップエディタとか動きパターンの編集とかが多いんでしょうか。