バージョン

menu_open
Wwise SDK 2024.1.1
アーリーリフレクションのシミュレーションにおける、Geometry APIの使用

イントロダクション

Geometry APIはエミッタやリスナーのポジションと、ゲームの(簡素化されることが多い)ジオメトリの三角を使って、ダイナミックアーリーリフレクションをシミュレーションするためのイメージソースを計算しますが、これはReflectプラグインと連結して行います。サウンドデザイナーは、距離やマテリアルに基づいてReflectのプロパティを調整することで、イメージソースポジションのトランスレーションを直接コントロールします。

Refer to the Reflect Diffraction demo and its code in the Integration Demoサンプル (in SDK/samples/IntegrationDemo) for an example of using the geometry API to simulate Early Reflections in conjuction with with the Reflect plug-in. Look for Spatial Audio Demos > Reflect Demo.

ジオメトリによって変化するアーリーリフレクション(ER)の概要について、掲載中のブログ Image Source Approach to Dynamic Early Reflectionsや、Creating compelling reverberations for virtual realityなども参考にしてください。

注釈: 反射の「次数」は、波面がリスナーに到達する前に、いくつの面に反射したのかを表します。例えば直方体の形をした部屋には6つの壁面がありますが、この部屋の一次反射をシミュレーションすると、1つのエミッタに対し、6×1のアーリーリフレクション、別名イメージソースが、発生します。その結果、反射の数は合計6です。さらに、2次反射のシミュレーションをすると、1次反射が6つあり、それぞれに残りの壁面の数、つまり5をかけるので、6×5の2次反射が追加されます。その結果、1つのエミッタに対し反射の数は合計36となります。このように、反射の数は次数とともに指数関数的に増加します。

現在、Wwise Spatial Audioは4次反射までシミュレーションできます。反射の次数はグローバル設定で、 AkSpatialAudioInitSettings::uMaxReflectionOrder initで設定します。また、ダイナミックに変化させるには、 AK::SpatialAudio::SetReflectionsOrder を使ってください。

Wwiseプロジェクトセットアップ

サウンドがダイナミックなアーリーリフレクションに対応できるようにするには、 Reflect プラグインのホストであるAuxiliary Busを示すために、Wwise AuthoringツールのGeneral settingsタブで、Early reflectionsバスをアサインする必要があります。Spatial Audioが、このバスと特別なAux send接続を確立させます。また、Sendボリュームを設定できます。

環境リバーブの場合は、リスナーゲームオブジェクト上にAuxiliary Busを作成し、同じバスやエフェクトインスタンスを、複数のエミッタが共有できるようにするのが一般的です。これは、Spatial Audioのレイトリバーブに使うRoomでも同じですが、アーリーリフレクションでは異なり、その場合は各エミッタに、そのエミッタ独自のポジションで決まるリフレクションが一式あります。代わりにERバスインスタンスがエミッタのゲームオブジェクト上で作成され、各エミッタはそれぞれ、Auxiliary Busの違うインスタンスに対して送信します。This is illustrated in the image of the Voices Graph in the 後期反響に送信する初期反射 section below.

Wwiseプロジェクトの動的環境効果を効果的に処理するためには、バス構造設計の次の点を理解する必要があります。

Attenuationの設計

Spatial Audioを使うサウンドでAttenuation(減衰)カーブを設計する際に、効率的な計算を行うために注意すべき重要な点が1つあります。アーリーリフレクションのAuxiliary Busをアサインしたサウンドや、AuthoringツールでEnable Diffraction and Transmissionを有効にしたサウンドは、Attenuationをアサインするときに半径(Radius)を有限にして、パス(path)計算を制限する必要があります。

Spatial Audioではリフレクションとディフラクションの両方のパス計算において、伝播可能な最大距離を、音の減衰に基づいて判断するので、Maximum attenuation distanceが、理にかなった値であることが重要です。また、減衰がプラットフォームの指定ボリューム閾値よりも低くならない場合は、その音のRadiusが実質的に無限となります。その場合、リスナーがワールド内のどこに配置されていても、Spatial Audioはリフレクションやディフラクションを計算しようとします。Both the distance-driven volume and Auxiliary send volume curves must have their final point on the far right side of the curve below the volume threshold to ensure that Spatial Audio calculations are limited to a finite radius around the emitter Game Object. なお、Volume threshold(ボリューム閾値)はAuthoringツールのProjectメニューにある、Project settingsダイアログで定義します。

注釈: あるGame Objectで複数のアクティブサウンドを再生中で、それぞれに異なるAttenuationがアサインされている場合は、最大のAttenuation半径を採用してパス処理を制限します。パス処理は1つのGame Objectに対し1度だけ行われ、そのパスを、複数のサウンドで必要に応じて再利用します。

If you want the early reflections to have an attenuation design similar to the emitter's, you can set the Reflect effect curves to Use Attenuation. We call this Reflect's simplified mode. Make sure that the Early Reflections Auxiliary Bus input bus configuration is set to Audio Objects for the sound engine to be able to retrieve the corresponding attenuation curves.

Auxiliary Busデザイン

通常、様々なAuxiliary Busが異なる環境を表すために使用され、これらのバスは、これらの環境のリバーブ特性をエミュレートする異なるリバーブShareSetsをホストすることができます。SpatialAudioで Reflect よって処理されるような動的ERを使用する場合、後期リバーブは補助バスのリバーブを使用して設計することができます。ただし、これらのリバーブ(該当する場合)のERセクションを無効にしたい場合があります。これはReflectで処理する必要があるためです。

一方、Reflectは後半の残響に使用されるAUXバスと並行して実行する必要があります。下の図は、EarlyReflectionsバスの下にある3つの補助バスに、それぞれReflectのShareSet が異なる一般的なバス構造を示しています。この設計では、初期反射を生成するために、わずかなShareSetsしか使用しないことに注意してください。これは、このEffect の「空間的要素」がランタイムにゲームジオメトリによって駆動されるという事実によって動機づけられます。ここでは、他のオブジェクトが発する音よりも、プレーヤー(リスナー)が発する音に対して異なる減衰カーブが必要なので、異なるShareSetを使用します。Using Reflect's simplified mode can also reduce the number of Reflect ShareSets needed. You can read more about it in the Intended Reflect Workflow.

バス インスタンス

ERバス( Reflect をホストするバス)は、ERバスをアサインしたサウンドを再生中のゲームオブジェクトの数と、同じだけの数のインスタンスとして、存在します。これは重要で、なぜなら、イメージソースの位置がエミッタのポジションに基づいているからです。ERバスのルーティングを正しく設定するには、下図のとおり、Listener Relative Routingというチェックボックスを有効にしておく必要があります。これを行うことにより、ERバスの様々なインスタンスによって生成された信号は、下流の次のミキシングバスの単一インスタンスに適切にミックスされます。この単一のインスタンスは、プレーヤー(またはカメラ)に対応する、通常は最終的なリスナーであるこのエミッターを聴いているゲームオブジェクト(AK::SoundEngine::SetListeners 経由で設定)に対応します。

同じゲームオブジェクトで再生中の複数のサウンドに、それぞれ異なるアーリーリフレクションのAuxiliary busがアサインされている場合は、そのバスの複数のインスタンスが、同じエミッタゲームオブジェクト上で作成されます。Spatial Audioで実行するリフレクション計算は、依然としてゲームオブジェクト1つに対して1回だけですが、結果は Reflect プラグインの、2つの別々のインスタンスに送られます。こうすることで、ユーザーはサウンドごとに、このプラグインの異なるシェアセットを使い、リフレクションカーブをカスタマイズできます。

警告: ERバスのListener Relative Routingを有効にし、すべてのエミッターインスタンスをリスナー側のバスに確実に合流させる必要がありますが、Wwiseで3Dスペーシャリゼーションを二重に行ってしまうのを避けるために、3D SpatializationモードはNoneに設定します。同様にAttenuationは、Reflectのイメージソースカーブの上にさらに減衰を追加したい場合を除き、適用しないようにします。

後期反響に送信する初期反射

また、遅れた残響を処理するために使用された補助バスにゲームオブジェクト(エミッター)が送信されるため、ERバスと後期リバーブバスとの間にも接続が確立されます。これは、生成されたERが後期リバーブを色づけして「緻密化」するために利用されるため、通常望ましいことです。In order to enable this, you need to make sure you enable the Use game-defined auxiliary sends check box in the General Settings tab of the ER bus editor. You can then use the Volume slider below to balance the amount of early reflections you want to send to the late reverb against the direct sound.

次の図は、前の説明の実行時イラストです。以下が図中で確認できます:

  • Weapon Fire SWは、Early Reflectionセンドのため、FirstPerson (アーリーリフレクション)バスへ送られます。
  • このFirstPersonバスは、FirstPersonCharacterゲームオブジェクトのスコープ内にあります。よって、ほかのゲームオブジェクトは、予定どおり、このFirstPersonバスの別のインスタンスへと送られます。
  • FirstPersonバスから、Mezzanine2 Auxバスへ、センド接続があり、その理由は、 Use game-defined auxiliary sends が有効になっているからです。
  • FirstPersonのアウトプットバスであるBinauralは、リスナーのスコープ内にある、つまりPlayerCameraManagerであり、その理由は、FirstPersonバスで Listener Relative Routing オプションを有効にしてあるからです。すべてのアーリーリフレクションバスのインスタンスで、このオプションを有効にしておくべきで、そうすれば、どれもが、リスナーの1つのBinauralバスインスタンスに返します。この設定を怠ると、エミッタゲームオブジェクトで、Binauralバスの別のインスタンスが誤ってインスタンス化されてしまいます。
  • FirstPersonバスと、Binauralの各バスの間で、距離による減衰はなく、その理由は、ERの減衰が、すでに Reflect 内で設定されて適用されているからです。

Acoustic Textureを使用する

各反射三角形について、ゲームはマテリアルのIDを渡します。これらのマテリアルは、Virtual Acoustics ShareSetsのAcoustic Texture の形式でWwiseプロジェクトで編集されています。ここで、各マテリアルの吸収特性を定義することができます。


このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう