読者です 読者をやめる 読者になる 読者になる

TVprogram Markup Language (TVML)

3D版のアドベンチャーゲーム記述用スクリプトっぽいな、ということでご紹介。

Internet Watch の記事「ユーザーが書いた台本通りにCGキャラが話す動画番組作成サービス」によると、セガサミーメディアは TVML という言語で入力することでテレビ番組風の動画が作成できるサービスの実証実験を行うとのこと。

TVML って NHK の技術展示関連で昔から見かけたような気がするなぁ、と思って調べてみたら、1999年の段階でTVMLで番組を放送してるんですね。なんとも息の長い話です。ちなみに、なぜセガサミーメディアなのかと思ったら、NHK の元研究員の方がセガサミーメディアに転職していたということのようで。

なお、TVML の実行環境は http://www.nhk.or.jp/strl/tvml/japanese/player2/index.html からダウンロードが可能です。言語リファレンスは http://www.nhk.or.jp/strl/tvml/japanese/onlinemanual/spec/index.html から。実行環境には音声合成エンジンがバンドルされていますので、サンプルの素材を使えば、すぐに自分だけの TV 番組を作って動かせるのが魅力です。

ざっと見た限りでは、少数の3Dキャラクターを固定されたステージ上で固定モーションの組み合わせで動かす、というリアルタイムムービーを記述することに特化した言語、と言えるのでしょう。入力待ちはありますが、分岐制御はないようです。

リファレンスに載っていた、BOB と MARY が同時にお辞儀し、お辞儀が終わったら字幕スーパーを表示する、というスクリプトを引用してみます。

character: bow( name=BOB, wait=no )
character: bow( name=MARY )
super: on( type=text, text = "MARY & BOB" )

言語的な特徴は全て名前付き引数で、引き数名を指定しつつ値を省略するとデフォルト値が使用され、引き数名から省略すると「カレントの値」が使用される、というところでしょうか。「カレントの値」が何に属しているかは引数によって異なり、BOB や MARY のようなオブジェクトにひも付いている場合と、コマンドにひも付いている場合があるそうです。

また、3D で TV 番組を作ることに特化していることもあり、命令セットには面白いものもいくつか。character: look で他の人を見る(オプションで視線・顔・上体のどこまで動かすか指定)というコマンドがあったり、camera: twoshot で二つの対象物を適切にとらえられるように自動的にカメラを動かせたりするのが面白いですね。テキストアドベンチャーのグラフィックを3Dで実現しよう、というタイトルを作る場合には参考になるコマンドもあるのではないでしょうか。普通の3Dタイトルにおけるリアルタイムムービーのスクリプト記述にも役立つかもしれませんが、それだと普通はこんな小手先の指定ではなくて、指先の角度まで専門家がびっちりツールでつけますよね……。

歴史が長いだけあって、文法は微妙に据わりが悪く感じますが、商業展開まで持って行くだけのパワーが注がれ続けているのはすごいことですね。今後の展開をそこはかとなく見守っていきたいと思います。