目次

Wwise SDK 2018.1.11
統合の詳細 - 環境とゲーム定義Auxセンド

イントロダクション

Wwiseのゲーム定義Auxセンドは、サウンドのゲーム内での位置に基づいて、1つまたは複数の環境エフェクトを簡単に適用する方法です。"Use game-defined auxiliary sends(ゲーム定義Auxセンドを使用)" オプションが、オブジェクトのプロパティ、または、プロパティの継承元であるオブジェクトで設定されている必要があります。

Wwiseを使用して、サウンドデザイナーはゲーム内で使用する複数の環境を定義することができます。たとえば、以下のような環境が定義可能です:

  • 格納庫(Hangar)
  • トンネル(Tunnel)
  • または、ゲームに有用なその他

各環境は、様々なパラメーターセットにより環境リバーブエフェクトを表すことができます。続いて、各環境は Wwise 内で 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バスへの動的送信

Auxiliary Sends and Listener Game Objects

Wwiseサウンドエンジンのバスのすべてのインスタンスは、ゲームオブジェクトに関連付けられています。AUXセンドを作成するときは、特定のAUXバスをターゲットとして、サウンドエンジンにリスナ ー・ エミッタの関連付けを作成します。エミッタとリスナーのゲームオブジェクトの位置は、サウンドを空間化するためにソースとターゲットのオーディオ・ノードで使用されます(サウンドがオーサリングツールで3Dに設定されている場合)。AUXセンドを定義するとき、ソース・オーディオ・ノードのダイレクト出力に割り当てられているターゲットAuxバスに対して同じリスナーを使用することが望ましい場合があります。これは、 SetListeners() または SetDefaultListeners() を介して割り当てられたリスナーです。 この動作を容易にし、どのゲームオブジェクトがどのリスナーに既に関連付けられているかを覚えておく必要を避けるために、AK_INVALID_GAME_OBJECTlistenerID として渡します。

Note: AkAuxSendValue 構造の listenerID フィールドを書き込むことが重要です。それを初期化しないと、未定義の動作になります。

IDまたは文字列の使用(UnicodeまたはANSI)

SDK では、バンク内のアイテムにアクセスするために、文字列使用またはID使用の 2種類の方法を提供します。文字列を使用すると、コードがより読みやすくなり、開発段階での使用や通常文字列を使用する環境での使用に適しています。ID を使用すると、ランタイム時における Wwise による名前のハッシュ処理を避けることができます。

ID使用の有効化

IDを使用して作業するには、Wwise の Generate SoundBanks ダイアログボックス内 "Generate header file" オプションでバンクを生成する必要があります。Wwise_IDs.h という名前の定義ファイルには、全ての必要なIDが含まれています。この定義ファイルは、バンクが生成されるたびに更新されます。

Wwiseにおけるバンク生成に関する詳細は、Wwise Helpを参照してください。

IDを使用した作業

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版)

次のメソッドは、unicode文字列からIDへの実行時変換を行います。これにより、環境ごとの文字列テーブルのワンタイム ルックアップ、続いてIDの使用が可能になります。

AkAuxBusID AK::SoundEngine::GetIDFromString( const wchar_t * in_pszString );

Auxバスへの動的送信

Auxバスルーティングの動的な駆動は、 AK::SoundEngine::SetGameObjectAuxSendValues() 関数を使用して実行可能です。 関数の最初のパラメータは、ゲーム定義 Aux バスルーティングが適用されるゲームオブジェクトIDです。2番目と3番目のパラメータは、 AkAuxSendValue タイプの構造体配列と送信先 Aux バスの数を表しています。 サウンドの "Use game-defined auxiliary sends" オプションが有効化されていないと、このゲームオブジェクトには環境が適用されません。ゲームオブジェクトの送信先となる各Aux バスに対して、環境適用の割合を表す制御値を設定する必要があります。制御値は、0.0fから1.0fの間の値で、0がセンドなし、1がセンド100を表します。

Note: オブジェクトのauxiliary sendsを変更すると、サウンドエンジンは、グリッチを回避するために環境を補正します。その結果、一部のフレームでオブジェクトが予想以上の個数のAuxiliary Busに接続することがあります。

例:Unicode 文字列使用によるメインキャラクターの環境設定

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 );

例:ID 使用によるメインキャラクターの環境設定

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[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つの環境から別の環境へスムーズに移行するようにできます。

例:Aux センドの設定なし。

const AkGameObjectID GAME_OBJECT_ID_HUMAN = 200;
Tip: Auxセンド値のトータルが、100である必要はありません。たとえば、ゲームオブジェクトに軽い環境エフェクトのみを設定する場合、ゲームオブジェクトを1環境で25に設定することが可能です。
Caution: Wwiseサウンドエンジンは、同時に送信を受ける Aux バス数を制限しません。つまり、同時に多数の環境 FX が処理されるよう要求することが可能です。環境 FX の中には、多くの CPU を占有するものがあるので、同時に多数の環境 FX を実行するとパフォーマンスの低下を引き起こすことがあります。したがって、たとえば、64サウンドが、それぞれ独自の環境と再生されるような状況が起こらないように注意してください。

例:Assigning an Aux Send to an Alternate Listener Game Gbject to Simulate an Acoustic Portal

次の例では、3D空間で音響ポータルをシミュレートするために使用されるゲームオブジェクトを登録しています。ゲームオブジェクトは、サウンドもメインのリスナーも内部にない環境を表します。. listenerID フィールドを有効なゲームオブジェクトIDに設定すると、 SetListeners() と同様の方法でエミッタ・リスナー アソシエーションが作成されます。ただし、オーディオ・ノードの補助出力に適用されますが、 SetListeners() は 直接出力に適用されます。オーディオを送信するオーディオ・ノードは、オーサリングツールで "ゲーム定義の補助送信を使用" フラグを設定することによって制御されます。listenerIDauxBusID で指定されたバスのインスタンスをゲームオブジェクト 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シミュレーションでも音を出すことができます。

メイン出力レベル(ドライレベル)の設定

ゲームオブジェクトが属する複数のAuxiliary Busを変更できるほか、AK::SoundEngine::SetGameObjectOutputBusVolume() 関数を使用して、そのゲームオブジェクトのドライ成分を減らすことができます。この関数は、オブストラクションをシミュレートするために使用することができます。 最初は、(サウンドオブジェクトのプロパティで特に指定のない限り)各ゲームオブジェクトのドライレベルは100% (1.0f)に設定されています。

例:メインキャラクターサウンドのメイン出力レベルを45%に設定

const AkGameObjectID GAME_OBJECT_ID_HUMAN = 200;
// Setting the main character sounds' dry level to 45% on all connected listeners.
Tip: サウンドが遠すぎてリスナーがその反響のみを聞くことができる状況をシミュレートするには、ドライレベルを 0% に設定してください。

Aux バスボリューム設定

Aux バスの出力に適用されるボリュームは、他のバスのボリュームの場合と同様に、オーサリングツールの Volumes スライダー、ステート、RTPCなどを使用して駆動可能です。

参照