バージョン

menu_open
Wwise SDK 2024.1.4
ルームやポータルのAPIコンフィギュレーション

ルームやポータルを作成する

あなたのマップやレベルのジオメトリをもとに、ルームやポータルを AK::SpatialAudio::SetRoomAK::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に関連付けることで以下の目的を達成できます:

  • Roomのバウンディングボックスを計算できるため、それを使用してRoomの透過パスの位置とスプレッドを計算できます。
  • Spatial Audioが、どのGame ObjectがどのRoomにあるかを判断できます。別の方法として、必要に応じて、クライアントは AK::SpatialAudio::SetGameObjectInRoom を使用してこの目的を達成できます。
  • 個別の面の透過損失係数に応じた正確な透過損失値の仕様を利用できます。
  • Game Object 3D Viewer内にルームを表示できます。
  • 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::SetRoomAK::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です。


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

サポートは必要ですか?

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

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

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

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

Wwiseからはじめよう