バージョン
|
Note: Wwise 2012.2 より、Wwise は "ゲーム定義Auxセンド(Game-defined Auxiliary Sends)" という概念を導入しました。 この新機能は、以前 "環境 (Environments)"として設計されていたものの機能性を吸収しています。 同様の機能が、非常に類似した新APIを使用して利用可能ですが、APIのほとんどが改名されています。 ドキュメンテーションの大部分は更新されてはいますが、もしも"環境"に言及している箇所があれば、これを"ゲーム定義Auxセンド"と解釈する必要があります。 |
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 ゲームオブジェクトが、(SetGameObjectAuxSendValues() を使用して) "Hangar" Aux バスで50、(SetAuxBusVolumes() を使用して)"Hangar" Aux バスが90で減衰される場合、このゲームオブジェクトが発するサウンドは45% ( 0.50f * 0.90 )で環境エフェクトが適用されます。 |
ゲーム定義Auxセンドの処理は、以下の関数を使用して実行可能です:
ダイナミックAuxバスルーティング: Auxバスへの動的送信
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].auxBusID = GetIDFromString( L"Hangar" ); aEnv[0].fControlValue = 1.0f; // 1.0f stands for 100%, the control value ranges from 0 to 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].auxBusID = AK::AUX_BUSSES::HANGAR_ENV; aEnv[1].auxBusID = AK::AUX_BUSSES::TUNNEL_ENV; aEnv[0].fControlValue = 0.75f; // 0.75 stands for 75%, the control value ranges from 0 to 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サウンドが、それぞれ独自の環境と再生されるような状況が起こらないように注意してください。 |
ゲームオブジェクトが属する 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などを使用して駆動可能です。