Wwiseのゲーム定義Auxセンドは、サウンドのゲーム内での位置に基づいて、1つまたは複数の環境エフェクトを簡単に適用する方法です。"Use game-defined auxiliary sends(ゲーム定義Auxセンドを使用)" オプションが、オブジェクトのプロパティ、または、プロパティの継承元であるオブジェクトで設定されている必要があります。
Wwiseを使用して、サウンドデザイナーはゲーム内で使用する複数の環境を定義することができます。たとえば、以下のような環境が定義可能です:
各環境は、様々なパラメーターセットにより環境リバーブエフェクトを表すことができます。続いて、各環境は Wwise 内で Aux バスにより表されます。
ゲーム内で、各ゲームオブジェクトを 0 からAK_MAX_AUX_PER_OBJ (4) の Aux バスへ同時にルーティングすることができます。各ゲームオブジェクトは、最初は環境として定義されない場所にあることが前提です。 サウンドが環境にない場合 (AUXバスにルートされていない)、通常に再生されます。 つまり、いずれの環境エフェクトなしで再生されます。
同一 Aux バス内のすべてのサウンドは、エフェクト適用の前にミックスされます。 各ゲームオブジェクトに対して、異なるボリュームを設定することができます。
|
Note: API で使用される値は 0 から 1 で、これらはフルボリュームの割合を表しています。0 は 0、1 は 100% となります。ボリュームが1つ以上の場所に適用された場合、結果の値は乗算されます。たとえば、GAME_OBJECT_ID_HUMAN ゲームオブジェクトがAUXバス"Hangar"の 50% で、AUXバス "Hangar" が 90で減衰されている場合、このゲームオブジェウトはエフェクトが 45でサウンドを発します (0.50f * 0.90 )。 |
ゲーム定義Auxセンドの処理は、以下の関数を使用して実行可能です:
ダイナミックAuxバスルーティング: Auxバスへの動的送信
Wwiseサウンドエンジンのバスのすべてのインスタンスは、ゲームオブジェクトに関連付けられています。AUXセンドを作成するときは、特定のAUXバスをターゲットとして、サウンドエンジンにリスナ ー・ エミッタの関連付けを作成します。エミッタとリスナーのゲームオブジェクトの位置は、サウンドを空間化するためにソースとターゲットのオーディオ・ノードで使用されます(サウンドがオーサリングツールで3Dに設定されている場合)。AUXセンドを定義するとき、ソース・オーディオ・ノードのダイレクト出力に割り当てられているターゲットAuxバスに対して同じリスナーを使用することが望ましい場合があります。これは、 SetListeners()
または SetDefaultListeners()
を介して割り当てられたリスナーです。 この動作を容易にし、どのゲームオブジェクトがどのリスナーに既に関連付けられているかを覚えておく必要を避けるために、AK_INVALID_GAME_OBJECT
を listenerID
として渡します。
|
Note: AkAuxSendValue 構造の listenerID フィールドを書き込むことが重要です。それを初期化しないと、未定義の動作になります。 |
SDK では、バンク内のアイテムにアクセスするために、文字列使用またはID使用の 2種類の方法を提供します。文字列を使用すると、コードがより読みやすくなり、開発段階での使用や通常文字列を使用する環境での使用に適しています。ID を使用すると、ランタイム時における Wwise による名前のハッシュ処理を避けることができます。
IDを使用して作業するには、Wwise の Generate SoundBanks ダイアログボックス内 "Generate header file" オプションでバンクを生成する必要があります。Wwise_IDs.h という名前の定義ファイルには、全ての必要なIDが含まれています。この定義ファイルは、バンクが生成されるたびに更新されます。
Wwiseにおけるバンク生成に関する詳細は、Wwise Helpを参照してください。
|
Caution: IDで作業する場合、新しいバンクの生成時に、.h ファイルを最新の状態に保っておくことが大切です。さもなければ、IDの不整合および/またはコンパイルエラーが発生する可能性があります。 |
以下は、Wwise に生成される非常に単純なヘッダファイルの例です:
抜粋コードを修正する必要があります。
///////////////////////////////////////////////////////////////////////////////////////////////////// // // Audiokinetic Wwise generated include file. Do not edit. // ///////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __WWISE_IDS_H__ #define __WWISE_IDS_H__ namespace AK { namespace EVENTS { enum { PLAY_ENGINE = 7, PLAY_FOOTSTEP = 3, PLAY_HELLO = 6, PLAY_MARKERS_TEST = 1007392764, STOP_ENGINE = 8, }; } // namespace EVENTS namespace AUX_BUSSES { static const AkUniqueID HANGAR_ENV = 2112490296U; static const AkUniqueID TUNNEL_ENV = 2112490296U; } // namespace AUX_BUSSES } // namespace AK #endif // __WWISE_IDS_H__
通常、Wwise に生成されるヘッダファイルは、上記のものよりはるかに多くの情報を含んでいます。これは、各イベント、スイッチ、バスなどごとにエントリが追加されるためです。
両方のメソッドを組み合わせて使用することも可能です。たとえば、文字列で作業をし、環境(Environments)にアクセスするためにIDを使用することができます。
次のメソッドは、unicode文字列からIDへの実行時変換を行います。これにより、環境ごとの文字列テーブルのワンタイム ルックアップ、続いてIDの使用が可能になります。
AkAuxBusID AK::SoundEngine::GetIDFromString( const wchar_t * in_pszString );
Auxバスルーティングの動的な駆動は、AKSoundEngine::SetGameObjectAuxSendValues 関数を使用して実行可能です。 関数の最初のパラメータは、ゲーム定義 Aux バスルーティングが適用されるゲームオブジェクトIDです。2番目と3番目のパラメータは、AkAuxSendValue タイプの構造体配列と送信先 Aux バスの番号を表しています。 サウンドの "Use game-defined auxiliary sends" オプションが有効化されていないと、このゲームオブジェクトには環境が適用されません。ゲームオブジェクトがルーティングできる Aux バスの最大数は AK_MAX_AUX_PER_OBJ (4) に設定されています。ゲームオブジェクトが送信されるそれぞれの Aux バスに対して、環境適用の割合を表す制御値を設定する必要があります。制御値は、0.0fから1.0fの間の値で、0がセンドなし、1がセンド100を表します。
|
Note: 特定のゲームオブジェクトの最大環境数が AK_MAX_AUX_PER_OBJ (4) に設定されていても、非常に短い期間 AK_MAX_AUX_PER_OBJ 以上の環境がオブジェクトに適用されることがあります。 これは、1つの環境から別の環境への変化が急速に行われる場合に発生するグリッジを回避するために、サウンドエンジンが環境を補間している時に発生する可能性があります。 AK_MAX_AUX_PER_OBJ は、より小規模なプラットフォームにおいては(4)以下になることがあります。 |
SHangar Auxバスを100に設定。
const AkGameObjectID GAME_OBJECT_ID_HUMAN = 200; #define NUM_ENVIRONMENT 1 AkAuxSendValue aEnv[NUM_ENVIRONMENT]; aEnv[0].listenerID = AK_INVALID_GAME_OBJECT; // SetListeners/SetDefaultListeners APIで割り当てられたリスナーと同じセットを使用します。 aEnv[0].auxBusID = GetIDFromString( L"Hangar" ); aEnv[0].fControlValue = 1.0f; // 1.0f は100%を表し、制御値の範囲は0〜1です。 AK::SoundEngine::SetGameObjectAuxSendValues( GAME_OBJECT_ID_HUMAN, aEnv, NUM_ENVIRONMENT );
Hangar Auxバスを75、Tunnel Auxバスを25に設定。
const AkGameObjectID GAME_OBJECT_ID_HUMAN = 200; #define NUM_ENVIRONMENT 2 AkAuxSendValue aEnv[NUM_ENVIRONMENT]; aEnv[0].listenerID = AK_INVALID_GAME_OBJECT; // SetListeners/SetDefaultListeners APIで割り当てられたリスナーと同じセットを使用します。 aEnv[1].listenerID = AK_INVALID_GAME_OBJECT; aEnv[0].auxBusID = AK::AUX_BUSSES::HANGAR_ENV; aEnv[1].auxBusID = AK::AUX_BUSSES::TUNNEL_ENV; aEnv[0].fControlValue = 0.75f; // 0.75は75%を表し、制御値の範囲は0〜1です。 aEnv[1].fControlValue = 0.25f; // 0.25 stands for 25%, the control value ranges from 0 to 1. AK::SoundEngine::SetGameObjectAuxSendValues( GAME_OBJECT_ID_HUMAN, aEnv, NUM_ENVIRONMENT );
制御値を使用すると、サウンドが1つの環境から別の環境へスムーズに移行するようにできます。
const AkGameObjectID GAME_OBJECT_ID_HUMAN = 200; AK::SoundEngine::SetGameObjectAuxSendValues( GAME_OBJECT_ID_HUMAN, NULL, 0 );
|
Tip: Auxセンド値のトータルが、100である必要はありません。たとえば、ゲームオブジェクトに軽い環境エフェクトのみを設定する場合、ゲームオブジェクトを1環境で25に設定することが可能です。 |
|
Caution: Wwiseサウンドエンジンは、同時に送信を受ける Aux バス数を制限しません。つまり、同時に多数の環境 FX が処理されるよう要求することが可能です。環境 FX の中には、多くの CPU を占有するものがあるので、同時に多数の環境 FX を実行するとパフォーマンスの低下を引き起こすことがあります。したがって、たとえば、64サウンドが、それぞれ独自の環境と再生されるような状況が起こらないように注意してください。 |
次の例では、3D空間で音響ポータルをシミュレートするために使用されるゲームオブジェクトを登録しています。ゲームオブジェクトは、サウンドもメインのリスナーも内部にない環境を表します。. listenerID
フィールドを有効なゲームオブジェクトIDに設定すると、 SetListeners()
と同様の方法でエミッタ・リスナー アソシエーションが作成されます。ただし、オーディオ・ノードの補助出力に適用されますが、 SetListeners()
は 直接出力に適用されます。オーディオを送信するオーディオ・ノードは、オーサリングツールで "ゲーム定義の補助送信を使用" フラグを設定することによって制御されます。listenerID
が auxBusID
で指定されたバスのインスタンスをゲームオブジェクト listenerID
に設定する方法を視覚化するには、Wwiseオーサリングツールの詳細プロファイラの音声グラフタブを参照してください。
const AkGameObjectID GAME_OBJECT_ID_HUMAN = 200; const AkGameObjectID GAME_OBJECT_ID_PORTAL = 201; #define NUM_ENVIRONMENT 1 AkAuxSendValue aEnv[NUM_ENVIRONMENT]; aEnv[0].listenerID = GAME_OBJECT_ID_PORTAL; // Target game object ID for this aux send. aEnv[0].auxBusID = AK::AUX_BUSSES::TUNNEL_ENV_PORTAL; // このAUXセンドのターゲットAUXバスID。 aEnv[0].fControlValue = 1.0f; AK::SoundEngine::SetGameObjectAuxSendValues( GAME_OBJECT_ID_HUMAN, aEnv, NUM_ENVIRONMENT );
In this example, the AK::AUX_BUSSES::TUNNEL_ENV_PORTAL
aux bus should be set to “Enable Positioning” and positioning type 3D in the Wwise authoring tool, so that is can also emit sound in the 3D simulation.
この例では、Wiseオーサリングツールで AK::AUX_BUSSES::TUNNEL_ENV_PORTAL
バスを "Enable Positioning" と位置づけタイプ3Dに設定する必要があります。そして、3Dシミュレーションでも音を出すことができます。
ゲームオブジェクトが属する Aux バスの変更と同様に、AKSoundEngine::SetGameObjectOutputBusVolume() 関数を使用して、ドライ成分を減らすことができます。この関数は、オブストラクションをシミュレートするために使用することができます。 最初は、(サウンドオブジェクトのプロパティで特に指定のない限り)各ゲームオブジェクトのドライレベルは100% (1.0f)に設定されています。
const AkGameObjectID GAME_OBJECT_ID_HUMAN = 200; // Setting the main character sounds dry level to 45% AK::SoundEngine::SetGameObjectOutputBusVolume( GAME_OBJECT_ID_HUMAN, 0.45f );
|
Tip: サウンドが遠すぎてリスナーがその反響のみを聞くことができる状況をシミュレートするには、ドライレベルを 0% に設定してください。 |
Aux バスの出力に適用されるボリュームは、他のバスのボリュームの場合と同様に、オーサリングツールの Volumes スライダー、ステート、RTPCなどを使用して駆動可能です。