Choreography Tool
Choreography(振り付け)ツール
はじめに
FacePoserのメインツールはchoreography(振り付け)ツールです。このツールで表情や他の演出を配置して、エンジンでどう再生されるかをプレビューすることができます。シーンは複数のアクターを使うことができるので、ゲームキャラクタ間のとても複雑なインタラクションや、会話も実行することが可能です。 このシーンに関するユーザインタフェースにアクセスするには、まず作業を行うモデルと表情クラスファイルを読み込みます。 以前にシーンファイルを開いていないのなら、choreographyデータファイル(*.VCD )が読み込まれていないという注意を見るでしょう。新しい.VCD ファイルを作成するには、メニューからChoreography | Newを選択します。既にあるファイルを読み込むには、メニューからChoreography | Load…を選択します。新しいchoreographyファイルを作成するには、最低1つのアクターを追加する必要があります。Create Actorダイアログでアクター名を入力してOKをクリックします。ここでキャンセルしても、メニューからChoreography | New Actorを選択することで新しいアクターを追加することができます。 シーンを読み込むか、新しくアクターを作ると、アクターの名前が窓の左に、そしてタイムラインが上に表示されているのを見るでしょう。シーンのそれぞれのアクターにはチャンネルが1つ以上存在し、それぞれのチャンネルにはシーン再生時にトリガーされるイベントが含まれています。チャンネルは主に編集を便利にするためにあるのですが、エンジンでの再生時に2つのイベントが同時にスタートすると、ビューで上側に表示されるチャンネルのイベントが先に適用されます。
アクターにチャンネルを追加するには、アクターの名前を右クリックして"New Channel…"を選択します。チャンネルの名前を入力し、どのアクターに追加するかを選択して、OKをクリックします。これで指定したアクターの名前の下にチャンネルが表示されます。それぞれのアクター名の左には拡張表示を切り替えるボタンがあります。これはアクターのチャンネルの表示・非表示を切り替えます。アクターのチャンネルが隠れている場合、隠れているチャンネルとイベントの数の表示がでます。さらに、チャンネルやアクター名の上をダブルクリックしてプレビュー再生の時にチャンネルを使用可能・不可に切り替えることもできます。チャンネルを使用不可にするのはプレビュー再生のみに影響を与えます。
.WAVイベントを含んでいるチャンネルでは、字幕(close captioning)情報を表示させることができます。チャンネルの左上隅の黒い三角マーカーをクリックすることでこの情報の表示・非表示を切り替えられます。データには言語選択も含まれます(その言語版のゲーム.dllをインストールしてある場合のみ動作)。タイミングの問題のため、ゲームの台詞のなかには複数の.wavファイルに"分割"してあるものもあります。外国語バージョンでは、再生を便利するためにこれらの.wavを1つの.wavに"統合"してあるものとみなしています。そのため、.wavを選択すると右クリックメニューには.wavの結合、分割や字幕のオフを行うオプションがあります。ローカライズされたシングルプレイヤーMODで作業をするのでなければ、これらの設定に注意を払う必要もないかもしれません。
アクター
An actor is an NPC in your scene アクターはシーン(VCD )内でChoreographyイベント を使って演出を行うNPCのことです。シーンには少なくとも一人のアクターが必要で、複数のアクターを持つこともできます。それぞれのアクターには少なくとも1つのチャンネルが必要で、チャンネルには任意の数のChoreographyイベント を追加することができます。どのようにアクターやチャンネルを作成するかについてはここ を参照してください。イベントの作成に関してはここを参照してください。
アクターの名前はとても重要です。というのもマップ内のアクターと同じ名前のエンティティ に対してイベントが適用されるからです。VCD ファイルの中でアクターに"Bob"と名前をつけたなら、マップ内の"Bob"という名前のエンティティにそのアクターのイベントが適用されることになります。別の方法としては、.vcdの中ではアクターに"!Target#"という名前をつけ、 Logic_choreographed_scene でターゲットとなるエンティティの名前を指定することもできます。 通常アクターはマップ内のNPCに対応しています。現在のところ全てのNPCクラスがどのChoreographyイベントも実行できるわけではありません。アクターはプレイヤーの仲間のNPCと推定されています。これについてはリンクを追加予定です。
Choreographyイベント
choreographyシステムでは以下の種類のイベントを配置できます。イベントの作成と編集に関してはここ を参照してください。
Expression(表情)
アクターはイベントの開始時間に指定した表情へのブレンドを行い、イベントの持続時間の間その表情を維持します。アクターは同時に複数の表情を再生することも可能です。(重なっている場合別のチャンネルにすることを考えるべきでしょう。)Rampツールを使うことで表情のウェイト(強さ)を時間によって変化させることができます(後述)。
Gesture(ジェスチャ)
アクターは指定したジェスチャアニメーションを実行します。ジェスチャは特定の合成ルールを持ち、Faceposer 向けの内部タグ情報を持つ特別な種類のアニメーションです。 ジェスチャの作成と使用についての詳細情報はここに追加予定です(リンク追加予定)。
Choreographyビューのジェスチャイベントのタグを動かすだけジェスチャのタイミング再調整ができます。Gesture Toolを使ってタグの時間調整を行うこともできます。
Rampツールを使うことでジェスチャの強さを時間によって変化させることができます。初期状態では同じチャンネルにある複数チャンネルはクロスフェードすると推定され、最初のジェスチャイベントの"end"(終了)タグは2つ目のジェスチャの"apex"(最高点)タグに固定されます。こうしたことを回避するには、2つのジェスチャイベントの間に"NULL Gesture"イベントをおいてください。以下に例を示します。
Sequence(シークエンス)
アクターが特定のアニメーションシークエンスを再生するようにします。
WAV File/Speak event(WAV音声/会話)
様々なgame_sounds.txtファイル内にリストアップされた音声を生成します。(生の.wavファイルを呼ぶこともできますが、そうした使用は推奨されません。)これらの音声はphoneme(音素)エディタ/抽出ツール(PhonemeEditor)で作成された音素(そしてViseme、発音に対する口のパターン)タグを含みます。sounds.txtファイルでCHAN_VOICEと指定された以外の音声を見るには"Show all sounds"ボタンをチェックしてください。Choose File…ボタンを使うかSpeak .WAVコンボボックスに相対パスを入力することで生の.Wavファイルを読み込むこともできます。
Look at actor(アクターを見る)
アクターはマップ内に存在する指定された名前の他のアクターやエンティティを見ます。このLook atでは目、頭、首のみを使います。 Rampツールを使うことでこのイベントの強さを時間によって変化させることができます。強さを0%にすると目だけ(頭、首の回転はなし)でターゲットを追います。強さを100%にすると頭全体を動かしてターゲットに向きます。 もしLook atのターゲットがアクターの後ろにあったり、特定の角度の外(具体的な閾値はわかりません)にあるとアクターはターゲットを見ようとはしません。 Look Atのターゲットに!Self(自分)を指定すると、アクターは何も特定のものを見ないようになり、そのイベントがオンになっている間idle(待機)状態の視線行動をしないようになります(AIが時間経過によってランダムに物に視線を向けるのではなく、ただ前を向くようになります)。 アクターが眠っている、もしくはシーンで少し失神しているといったように待機視線行動が不適切で抑制したいと思う時に役立ちます。
Move to actor(アクターの場所に移動)
指定したターゲットの場所にアクターが移動します。ターゲットは名前があるエンティティなら何でもよく、NPCでもプレイヤーでも構いません。 Move Toイベントではターゲットの移動につかうシークエンスやアクティビティを指定することができます。初期設定はWalk(歩き)ですが、Run(走り)やCrouchRun(しゃがみ走り)の選択が可能です。もしくは特定のシークエンスの名前を指定することもできます。 Move ToイベントではStop Distance(停止距離)を定義することができます。ターゲットから指定した距離のところに到達するとMove Toイベントが完了します。停止距離の初期設定は0ユニット(インチ)です。Move ToのターゲットがプレイヤーかNPCの場合は、アクターがターゲットのキャラクタと衝突しないように停止距離に十分な値を入れるべきでしょう。以下にMove Toイベントのプロパティを図示します。
アクターは実際の移動を行うためにSource EngineのAIシステムを使用することに注意してください。もしプレイヤーや障害物が途中にある場合、移動に予想より長くかかったり、短かったりすることもあります。移動が終了していることがシーンの続行に必須なら、シーンの移動部分に"Pause"ポイントを挿入し、移動を"Resume Condition"(再開条件)としてマークします。アクターがマークに最終的にたどり着くと自動的にシーンが再開するようになります。
Face actor(アクターを向く)
アクターはシーン内の他のアクターに向き合います。
Flex animation(表情アニメーション)
時間経過にしたがって個々のFlex(表情筋肉)スライダーをスプラインにそって動かして表情をアニメーションさせます。Flex animationイベントはFlex Animationツールを使って編集することができます。
Fire Trigger(トリガー発射)
AIトリガーを発射します。
Generic(AI)(一般AI)
ゲーム.dllのコードのCSceneEntityが処理する指令を渡します。
Sub-scene(副シーン)
.VCDには複数の"副シーン"を埋め込んで再生することができます。これらの副シーン自身はその中に追加の副シーンレイヤーを持つことはできません。(現在の制限)
Permit Responses(反応の許可)
.VCD.シーンの中で、アクターが話していない状態で、プレイヤーが何か行動したことでレスポンスシステムからの反応が生成され、そこでPermit Responses(反応の許可)イベントがあるなら、アクターは.VCDの再生を続行しつつ、反応を挿入することができます。
Look at(見る)、Move to(移動)、Face(向き合う)イベントのターゲットとして"!player"を入力することで一人称のプレイヤーを対象にすることもできます。他にも"!self"、"!enemy"、"!friend"という特殊な対象指定があり、さらに"!target#"の場合マップ作成者がlogic_choreographed_scene
エンティティを使ってターゲットエンティティを指定できます。
イベントの作成と編集
イベントを作成するには、イベントを追加したいアクターのチャンネルで右クリックします。マウスをクリックした場所が作成するイベントの開始時間になる(後で変更可能)ことに注意してください。メニューから例えば"New Event | Expression"を選択します。ここで表情を選択し(現在開いている表情クラスから)、名前をつけイベントの、開始、終了時間(ほとんどのイベントには開始と終了がありますが、"発射してそのまま"というものもあります。)を変更します。値を設定し、OKを選んでイベントを作成します。開始時間はSPEAK(会話)イベントといったシーン内の他のイベントと相対的に指定することもできます。このときSPEAKイベントやそのタグを移動すると、相対的に指定したイベントも一緒に移動します。さらに、イベントの種類によってはAdd/Edit event(イベント追加・編集)ダイアログに追加パラメータが表示されることもあります。
これで新しいイベントが現在のアクターのチャンネルに表示されます。上の例では表情を作成したので、イベントの持続時間を示すバーの下に顔のアイコンが表示されています。バーを左クリック、ドラッグで移動することができます。左端、右端をクリックすると開始・終了時間をドラッグで変更することができます。
イベントを削除するには右クリックしてメニューからDelete(削除)を選択するか、キーボードの"Delete"キーを押してください。
イベントを右クリックして"Edit | Event <イベント名>"(イベントの編集)を選択することでイベントのプロパティを編集することもできます。また、Alt-Enterを押すことでも選択したイベントの編集が行えます。
マウスの下にあるイベントの詳細はChoreographyエディタの下に表示されます。
タイムラインの活用
スクリーンの上部にあるタイムラインには追加情報がいくつかあります。まず、(現在のズームレベルでシーンのどの程度が見えているかにもよりますが)シーンの最後のイベントの終了時間を示す青い点線があります。さらに、通常のビデオデッキのような操作ボタン(Play-再生、Pause-一時停止、stop-停止)がツールウィンドウの左上にあります。シーンの再生、停止はスペースバーでも行えます。シーンにイベントがある状態で再生を行うと、3dビューに表示がされます。再生をクリックすると上部に緑の時間スクラバーが表示され、左から右に移動します。現在の再生している時間がビューの中にない場合でも、現在時間は左上に表示されます。
スクラバーを左クリックし、ドラッグすると、現在のスクラバー位置が垂直のバーに表示されます。
Choreographyビューには再生速度を変えるスライダーもあり、プレビューを高速や低速で行うこともできます。
選択しているツールでマウスホイールを動かすと(ホイールにすでに別の機能がわりあてられているケースはShiftを同時に押してください)、ホイールの動きに従ってズームイン、ズームアウトします。 終了時間がないイベント(ただトリガーを開始時間に発射するだけ)はサイズ変更バーでの表示はなく、ドラッグして移動させることしかできません。終了時間を指定するには、イベントを右クリックして、end timeに入力し、その横にあるチェックボックスをオンにします。 (注意:終了時間は開始時間より後である必要があります) 終了時間に-1.0を指定すると"終了時間無し"と指定すると同じになります。
スクラバー
FacePoser内の様々なツールがスクラバーを使います。スクラバーは全て現在再生中の時間と一致します。スクラバーをクリック、ドラッグして手動でシーンを再生したり、逆再生したりできます。もしくはスクラバーがある水平トレイをクリックすると、その場所を目指してスクラバーが自動的に再生を行います。FacePoser内の全てのスクラバーはそれぞれ同期しています。
Global Pauses (中断)
シーンには"global" pause(一時停止)イベントを配置することができます。 一時停止イベントを作成するには、アクターのチャンネル名かチャンネルトレイを右クリックして、 "New Section Pause…"(新しい停止区間)をメニューから選択します。この停止区間に名前をつけ、その間に自動的なアクションを実行するようにも設定できます。停止区間の必要性は、イベント終了時間がわからないイベントをトリガーするところから出てきました。例えば、上で述べたように、"move to"イベントはAIに次の場所に移動するように伝えます。障害物や、移動速度などといったことから、アクターがその場所に到達するのにどのくらい時間がかかるか正確に見積もるのは不可能なのです。ここで一時停止イベントを活用できます。AIシステムは後で"Resume Condition"(再開条件)が満たされるとそのことをシーンに伝えます。(ただし停止ポイントと重なるイベントのプロパティで"Resume condition"チェックボックスをオンにした場合のみ)
言い換えると、これは"move to"イベントに対し、自分は"Resume Condition"(再開条件)としてこのイベントの完了を待っているというタグをつけることになります。イベントを再開条件としてタグ付けをするには、イベントを右クリックしてプロパティ編集に入り、"Event must complete for paused scene to resume"(一時停止したシーンの再開にはこのイベントの完了が必要)チェックボックスをクリックしてください。
これが停止イベントの一番よく使われる方法です。"move to"イベントと共に使うことで、シーンを再開する前にアクターが指示した場所に到着していることを保証します。後続するシーンイベントが場所依存の場合(例:ボタンを押す、キーボードをたたく、マイクにむかって話す、部屋にはいるなど)このテクニックを使ってください。HL2の製作においてはこのテクニックがアクター誘導の強力な方法のひとつとして扱われました。これは効率的にアクターを目標点に到着させることを保証するからです。
停止イベントの目立たなくても強力な一面は再開条件となっているイベントの完了にあわせてシーンの再開をコントロールできるということです。指定した時間でイベントの完了を予期して、実際のイベント完了前にシーンを再開することもできます。これはイベントが自然に重なっているシーンを停止から再開するのに役立ちます。イベント完了の前に先立ってシーンが再開するようにするには、停止イベントよりイベントを長く延長する必要があります。以下にこのテクニックを図示します:
デザイナーがある時間がたったらポーズを解除したいと思う場合、2つの選択肢があります: 1)シーンを何があろうと再開する、もしくは2)残りのシーンの再生をキャンセル。自動的に再開するようにするには、"Section Pause"イベントの青い三角マーカーを右クリックしてメニューから"Edit"(編集)を選択します。プロパティダイアログで、"Automatically"(自動で)というチェックボックスがあることに気づくでしょう。このボックスにチェックをすると、自動的に実行するアクションを選ぶことができます。ドロップダウンリストから"Resume"(再開)と"Cancel"(キャンセル)の行動選択が、テキストボックスで自動行動を起こすまでの時間指定が行えます。
エンジンでのシーン再生中に再開条件に指定されたAIイベントが指定した自動アクションの時間の前に起こった場合、自動アクションは必要がないのでスキップされます。
Loop point(ループ点)
停止区間イベントのように"Loop" point(ループ点)イベントはシーンのグローバルなトリガーとしての類似点があります。しかし、ここでは停止させるかわりに、ループ点は.vcdの内部時計を最初にリセットしたり、指定した時間に戻すことができます。このイベントを.VCDの終わりのあたりに置くとループが作りやすくなります。プロパティを編集することで指定した回数だけ、もしくは永遠にループさせることができます。シーンが永遠にループしている場合、Hammer でlogic_choreographed_scene
にCancelインプットを送ることでループを抜けシーンをキャンセルすることができます。
ループはLoop Pointから「開始」し、プロパティで指定した時間(初期値では0)に「戻る」ことに気をつけるのが重要です。
Fire Completion(シーン完了)
Fire Completionイベントでシーンの完了時間を好きに定義できます。初期状態ではシーンは.VCDファイルの最後のイベントが終わると完了し、暗い青の点線で示されます。Fire Completionイベントはその中で指定した値に完了時間を移動させます。
実用的に言い換えると、Fire Completionイベントはlogic_choreographed_scene
エンティティがOnCompletionアウトプットを出す時間を指定します。そのため、このイベントを使うことでこのアウトプットと他のシーン内イベントとの正確な時間あわせができます。
他のChoreography機能
- 基本的にはイベントを間違ってチャンネル移動させてしまうことのないようになっています。イベントを別のチャンネルに移動させるには、ドラッグするときにShiftキーも押してください。
- 複数のイベントが1つのチャンネル内で重なることもあるので、イベントの右クリックメニューにはこれらを見やすく、選択しやすくするための"Move event <name> to back option"(イベントを背面に移動)オプションがあります。さらに、FacePoserは重なったイベントを配置するためにチャンネルレイアウトを垂直に拡大します。
- 右クリックメニューからクリップボード経由でイベントをコピーしたり貼り付けたりできます。
- イベントは単純なイベントテキストファイルへの出力、入力が可能です。(これも右クリックメニューから行えます)
- 全てのイベントのRampだけを表示するには右クリックメニューから"Ramp only"を選択してください。
- "Check sequences"を使うことでFacePoserに全てのアニメーションシークエンスが有効であるかを確かめさせることができます。 (例えば非ループが必要な場合かどうか、持続時間の正しいか、など)
- メニューオプションの"Process sequences"をオフにすることで、プレビューでのシークエンス処理をオフにできます。(カメラが顔を映し続けるようにできます)
- Because the FacePoserには複数のアクターを配置することができるので、.MDLを読み込んだあと.VCDのアクタースロットへの対応付けを行う必要があります。右クリックメニューか、アプリケーションの右下のmodelタブで行えます。
- .BSPもしくはマップファイルと.VCDの関連付けを行うこともでき、様々なプロパティダイアログでターゲットの相対位置やアクターやエンティティの名前を読み込むことができます。
デバッグ
役立つゲーム内コンソールコマンド 注意: これらのコマンドが動作するにはコンソール変数"developer"を1に設定する必要があります。
scene_flush
|
マップが使用している全てのシーンを再読み込みします。マップを再スタートしても自動的に変更したシーンを再読み込みするとは限りません。エンジンを実行したまま.vcdを編集している場合、scene_flush を使って変更した新しいファイルが読み込まれるようにしてください。
|
scene_print
|
1に設定すると現在再生しているシーンのデバッグ情報を表示します。 |
scene_showfaceto
|
1に設定するとアクターがface_to(顔を向ける)コマンドでどこを向こうとしているのかを示すデバッグ表示がオンになります。 |
scene_showlook
|
1に設定するとアクターがlook-at(見る)コマンドでどこに視線を向けようとしているのかを示すデバッグ表示がオンになります。 |
scene_showmoveto
|
1に設定するとアクターがmove-to(移動)コマンドでどこに移動しようとしているのかを示すデバッグ表示がオンになります。箱が行き先に、そしてその行き先とアクターの間に矢印が表示されます。 |