バージョン
最近のゲームは、リアルタイムストラテジー系、スポーツ系、アドベンチャー系を含め、何らかのダイナミックなオーディオコンポーネントがあり、ゲーム中に起きるActionに応じてオーディオも変化します。ゲームで発生する条件や結果が多岐に渡れば、スクリプトライターやオーディオデザイナー達は実に特殊な難題に直面します。全ての条件や結果に対応できるように、あらゆる台詞(ダイアログ)の組み合わせを用意するには、数千個ものアセットや、複雑なSwitch Containerの階層が必要になるかもしれません。これは、メモリへの大きな負担となります。In an effort to streamline the development process and reduce the overall memory consumption, Wwise introduces the dynamic dialogue system.
The dynamic dialogue system is a lightweight and efficient method for building and managing dynamic audio in Wwise. デシジョンツリー構造に設定した複数のルールを使用して、ゲーム中の任意の時点に再生するダイアログを決定します。
これだけでも強力なシステムですが、Wwise SDKにある追加機能を利用すれば、ランタイムのダイナミックシーケンスを作成できるので、スポーツゲームの実況中継の台詞などに理想的です。Wwiseでは、ダイアログを単語や短いフレーズに分けて、これらをデシジョンツリー構造の特定パスにアサインします。ゲームプレイ中に、指定された単語がサウンドエンジンに送られ、ダイナミックに継ぎ合わされ、自由に流れるサンプルアキュレートな文章が形成されます。また、単語や短いフレーズが別々に存在するため、多様な組み合わせや再利用も可能です。ゲームにダイナミックシーケンスを取り込む方法については Wwise SDKドキュメンテーション を参照してください。
注釈 | |
---|---|
ダイアログイベントは当初、ゲームダイアログに対応するために作成されましたが、ダイアログの利用に限定されず、異なる種類の地面を歩く足音サウンドなどゲームの様々な目的に使用できます。 |
At the center of Wwise's dynamic dialogue system is the Dialogue Event, which is basically a set of rules or conditions that determines which piece of dialogue to play. ダイアログイベントによって、ゲーム内で存在する様々なシナリオ、条件、結果などを再現します。全ての状況に対応できるように、Wwiseでデフォルト条件、つまりフォールバック条件を作成することも可能です。
これらの条件は全て、複数のState GroupやStateを使って定義されます。さらに、State GroupやStateを組み合わせて作ったパスが、ゲームで起きる特定の条件や結果を決めます。このパスを1つずつ、Wwiseが対応するサウンドオブジェクトに結びつけます。ゲーム中にダイアログイベントが呼び出されると、ゲーム側で現在の条件をダイアログイベントの中にある複数のパスと比較します。ゲームにおける現在の条件にマッチする複数のパス、それぞれのパスのモード、Probability(発生確率)、そしてWeight(ウェイト付け)によって、どのダイアログを再生するのか、または全く再生しないのかを決定します。
例えば、下記のダイアログイベントには、スポーツゲームの選手の名前に関連したState Groupが入っています。各State Groupの値を組み合わせて、可能性のある複数のパスや条件が作られます。この例では、実況アナウンサーが選手の姓(Last)または姓名(Full)のどちらかを使うという設定です。
万が一、ゲームの状況に合うStateがない場合のために、デフォルト、つまりフォールバック用のStateが入ったパスを作ることもできます。フォールバック用のパスには通常、Stateの代わりに1つ以上のState Groupを入れ、汎用性のあるサウンドオブジェクトを設定します。上記の例の場合、フォールバック用のパスに、プレイヤーの名前の代わりに「Them」というサウンドオブジェクトが設定されています。
ダイアログイベントに対して起こりうる全ての条件を設定した後に、ゲームエンジンに実装します。ゲームがダイアログイベントを呼び出すと、サウンドエンジンはダイアログイベントに合うパスに対応するオーディオストラクチャを返して、ダイアログイベントを完結させます。次に、そのオーディオストラクチャを、再生するためにダイナミックシーケンスにインサートするのかどうかを、サウンドエンジンが判断します。オーディオストラクチャを返すことと、それをダイナミックシーケンスにインサートすることの関係は、1:1とは限りません。つまり、完結した1つのダイアログイベントに対し、返ってきたオーディオストラクチャを、必要に応じて何度でもダイナミックシーケンスに追加できるのです。
注釈 | |
---|---|
ダイナミックダイアログを作成する場合は、単語やフレーズを継ぎ合わせて文章にする機能など、多くの機能がWwise SDKだけで提供されるため、オーディオプログラマーと緊密に連携して作業することが重要です。 |
ゲームエンジンはダイアログイベントのイベント名を使うので、イベントを作成してゲームへの実装が済めば、イベントの中に入っているコンテンツの構築や微調整を行っても、再度実装をする必要はありません。この方法を取ることで追加のプログラミング作業をせずにStateの追加や削除ができ、様々なサウンドを柔軟に試せます。
注意 | |
---|---|
ダイアログイベントにあるState Groupを、追加、削除、または移動すると、自動的にパスが変更されます。Wwise上の操作は簡単ですが、この種の変更はコードの更新も必要となるため、プログラマーによる対応を要します。 |
インターフェース上で分かりやすいように、ダイアログイベントは、以下のアイコンで表されます。
アイコン |
内容 | |
---|---|---|
|
Dialogue Event「ダイアログイベント」 |
例えば、実況中継(Play-by-Play)付きのアイスホッケーゲームの場合を考えます。プレイヤーがシュートして得点した時は、プレイヤーのActionに応じた実況中継が流れるべきです。
Wwiseで様々な可能性や結末を設定するために、まず ダイアログイベントとして、「Player(プレイヤー)」、「Action(アクション)」、「Transition(接続詞)」などを作成します。全てのイベントに、それぞれ、このゲーム用に作成した複数のState GroupやStateを設定します。次に、各条件や結末を定義するパスを作り、それぞれのパスに、適切なボイスオブジェクトを割り当てます。ゲームプレイ中に、ゲーム側が現在のStateとWwiseで定義したパスを照会して再生すべきボイスオブジェクトを判断します。
下図は、「Cross shoots and scores(クロスがシュートし、得点した)」という実況中継を、Wwiseのダイアログイベントが生成する様子を示しています。
上図は、ゲームにおけるState Groupやダイアログイベントの使い方を、簡略化したものです。しかし一般的には、より洗練されたダイアログイベントがゲームに必要で、多数のState GroupやStateが含まれます。Wwiseを使えば、さらにリアルなゲームのダイナミックダイアログをつくり出すために、多様の複雑なシナリオを設定できます。
以下の例は、より洗練されたPlayerダイアログイベントです。このダイアログイベントには、複数のState Groupが設定されています。複数のState Groupがある場合、選択された複数のStateによってパスが成立します。State GroupやStateの全ての組み合わせに対して、パスを1つずつ作成して、パスごとにオブジェクトをアサインできます。ゲーム中に、あるパスのStateが発生すると、そのパスにアサインされているボイスオブジェクトが再生されます。