Wwise SDK 2024.1.4
|
あなたのマップやレベルのジオメトリをもとに、ルームやポータルを 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 に渡します。
Geometry InstanceをRoomに関連付けることで以下の目的を達成できます:
AK::SpatialAudio::SetGameObjectInRoom
を使用してこの目的を達成できます。AkGeometryInstanceParams::UseForReflectionAndDiffraction
がtrueに設定されている場合、ルームの壁を使用した反射や回折を任意でシミュレーションできます。Roomのジオメトリの設定は任意ですが、推奨されます。Roomのジオメトリがない場合、RoomはGame Object 3D Viewerに表示されず、Spatial AudioはRoomの範囲を推定するために(Roomの透過用)、Roomに接続されたすべてのポータルを含むバウンディングボックスを算出します。Roomの透過の詳細については Transmission of Room Tones and a Room's Diffuse Field をご参照ください。
Spatial Audioは、Roomのジオメトリを使用してコンテインメントテストを実行し、どのRoomに各Game Objectがあるかを判断します。特定の種類のコンテインメントテストが求められる場合、代わりにクライアントが AK::SpatialAudio::SetGameObjectInRoom
を使用し、このタスクを実行することが可能です。ただしReverb Zoneに指定するRoomではジオメトリは必須で、これによりSpatial Audioは、Game ObjectがReverb Zoneのトランジション領域内にあるかを判断できます。spatial_audio_roomsportals_reverbzones_transition_regions をご参照ください。
ジオメトリをRoomに関連付けるには、まず AK::SpatialAudio::SetGeometry を使用してジオメトリをWwiseに渡します。次にジオメトリに位置、規模、回転をアサインするためにGeometry Instanceを作成する必要があります。AK::SpatialAudio::SetGeometryInstance をご参照ください。最後に、 AK::SpatialAudio::SetRoom をコールする時に AkRoomParams::GeometryInstanceID フィールドにルームを表すGeometry InstanceのIDを入力します。Spatial Audioは、該当する AK::SpatialAudio::SetGeometryInstance のコールがあったか、これからあると見なしますが、 AK::SpatialAudio::SetRoom と AK::SpatialAudio::SetGeometryInstance をコールする順番は関係ありません。
![]() | 注釈: Roomがジオメトリインスタンスを上記目的のためにのみ使用し、反射や回折の計算に使用しない場合、 AkGeometryInstanceParams::UseForReflectionAndDiffraction をfalseに設定します。 |
Spatial Audioでジオメトリを定義する方法については Geometry をご参照ください。
![]() | 注釈: ジオメトリセットを、ルームの概要を示すためだけに使い、反射や回折の計算に利用しないのであれば、必ず AkGeometryParams::EnableTriangles をFalseとしてください。 |
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です。