|
Wwise SDK 2021.1.14
|
あなたのマップやレベルのジオメトリをもとに、ルームやポータルを AK::SpatialAudio::SetRoom や AK::SpatialAudio::SetPortal を使用して作成する必要があります。ルームやポータルの設定をランタイムに変更することが可能で、ランタイムに同じIDで関数をもう一度コールします。続いてゲームが各エミッタやリスナー用に AK::SpatialAudio::SetGameObjectInRoom をコールして、それらがどのルームにいるのかをSpatial Audioに伝えます。Spatial Audioはルームに決まった位置や形や大きさがあるとは、とらえていません。このため形状に制限はありませんが、オブジェクトがどのルームにあるのかを判断するコンテインメントテストの実行は、ゲーム側の責任です。
![]() |
警告: ルームIDに注意してください。ゲームオブジェクトとスコープが同じなので、絶対にゲームオブジェクトで使われているIDを使用しないでください。 |
![]() |
警告: 裏の仕組みとして、Spatial AudioはそれぞれのルームをゲームオブジェクトとしてWwiseに登録しています。ユーザーは、アンビエンスやルームのトーンサウンドのために、このゲームオブジェクトに対しイベントをポストすることができますが、 AK::SoundEngine へのコールの中で、オブジェクトのポジションやGame-defined sendsを修正しようとしないでください。 |
最も重要なルーム設定が AkRoomParams::ReverbAuxBus で、エミッタがそのルームにいるときにどのAuxバスにセンドするべきかを、Spatial Audioに知らせます。ほかの設定について、以下のセクションで説明します( WwiseでルームのAuxバスを設定する 、 Transmission(透過) を参照)。
ポータルは、2つのルームの間の開口部を表します。ルームと違いポータルには位置や大きさがあるので、Spatial Audioが独自にコンテインメントテストを実行できます。ポータルの大きさは、ポータルの設定である AkPortalParams::Extentで決まります。WidthとHeight(XとY)はSpatial Audioで回折とスプレッドを計算するのに使われ、Depth(Z)はSpatial Audioで2つの隣接するRoomにおいて、Auxiliary sendレベル、Room Objectの配置、Spread(3D Spatializationで使用)を細かく調整してスムーズにトランジションを行う範囲を、定義します。詳細は、以下のセクション WwiseでルームのAuxバスを設定する 、 音の伝播機能の概要 を参照してください。また、ポータルを有効にしたり(開いたり)、無効にしたり(閉じたり)するのに、 AkPortalParams::bEnabled ポータルの設定を使用します。
ルームゲームオブジェクトに対してイベントをポストして、そのスペーシャリゼーション特性を活用することも可能です。 AK::SoundEngine::PostEvent をコールして、ルームIDをAkGameObjectIDとして渡せばいいだけです。 AkRoomID::AsGameObjectID をコールすれば、ルームIDを安全に AkGameObjectID にキャストできます。もしイベントをポストするためにルームを使うのであれば、このルームゲームオブジェクトを、使用中でないときも登録解除しないように、Spatial Audioに伝える必要があります。そのためには AkRoomParams::RoomGameObj_KeepRegistered をTrueに設定します。
また、ルームトーンを使う場合は、ゲームオブジェクトが自分自身のルームAuxバスにセンドするようにしておけば便利です。そのためには、ゼロより大きい値を AkRoomParams::RoomGameObj_AuxSendLevelToSelf に渡します。
ジオメトリセットをルームに関連付けることで、2つの目的を果たすことができます:
ルームのジオメトリの設定は必須ではありません。ルームにジオメトリがないと、ルームをGame Object 3D Viewerで見ることができず、Spatial Audioはルームの範囲を(ルームの透過用に)推定できるように、ルームに付随する全てのポータルが入るようなバウンディングボックスを算出します。ルームの透過に関する詳細は、 ルームトランスミッション を参照してください。
ジオメトリセットをルームに関連付けるには、 AK::SpatialAudio::SetRoom をコールするときに、 AkRoomParams::GeometryID フィールドにルームを表すジオメトリのIDを入れるだけです。そうするとSpatial Audioは、ジオメトリ自体を定義するために AK::SpatialAudio::SetGeometry に該当するコールが出されたか、これから出されるとみなします。なお、どの順番で AK::SpatialAudio::SetRoom と AK::SpatialAudio::SetGeometry をコールするかは、関係ありません。
Spatial Audioでジオメトリを定義する方法については、 Geometry を参照してください。
![]() |
注釈: Spatial Audioは、ジオメトリセットを使ったコンテインメントテストを行いません。それを行い、コンテインメントテストの結果をもってゲームオブジェクトの現在のルームを定義するために AK::SpatialAudio::SetGameObjectInRoom をコールする責任は、ゲーム側にあります。 |
![]() |
注釈: ジオメトリセットを、ルームの概要を示すためだけに使い、反射や回折の計算に利用しないのであれば、必ず AkGeometryParams::EnableTriangles をFalseとしてください。 |
![]() |
警告: AkRoomParams::GeometryID を、 AkGeometryParams::RoomID と混乱しないように気を付けてください。AkRoomParams::GeometryID は、前述の通り、透過のスプレッドを計算したり、Game Object 3D Viewerで描写したりできるように、ルームのバウンディングボックスを定義するために使います。AkGeometryParams::RoomID は、Spatial Audio内でレイトレイシングを実行するときに、そのジオメトリが見える範囲やアクセスできる範囲を制限して最適化するためだけに使います。 |
Spatial Audioは AK::SoundEngine::SetMultiplePositions を使うときに、APIに渡されるサウンドポジション1つ1つに関して、反射、回折、透過などの様々な計算を行います。
ゲームオブジェクトは、一度に1つのルームにしかアサインできないので( AK::SpatialAudio::SetGameObjectInRoom を使用)、ルームセンドを使うゲームオブジェクトに、 AK::SoundEngine::SetMultiplePositions を使用するときは、重要な注意事項がいくつかあります。全てのサウンドポジションが、サウンドエンジンの中で同じAuxセンドコンフィギュレーションにする必要があるために、このような制限事項があります。
あるエミッタのポジションを基に計算されるサウンドパスは、全てがリクエストされた(1つの)ルームに関して計算されます。このため、サウンドのポジションが AK::SpatialAudio::SetGameObjectInRoom で定義されたルームの(ゲームが定義する)境界線の外にある場合は、出されるサウンドパスがエラーとなる可能性が高くなります。
さらに、もしこのゲームオブジェクトがポータルを通って移動しているのであれば、Spatial Audioは AK::SoundEngine::SetMultiplePositions に渡される全てのサウンドポジションの平均を、2つのルームの間のクロスフェードの計算に使います。
このため、ゲーム側も平均サウンドポジションを使ってルームコンテインメントを引き出し、結果として出されるルームIDを AK::SpatialAudio::SetGameObjectInRoom に渡すことが、推奨されます。
このAPIの使い方を説明するデモページが、Integration Demoサンプル(場所はSDK/samples/IntegrationDemo)にあります。場所は、Demo Positioning > Spatial Audio: Portalsです。