Wwise SDK 2022.1.18
|
あなたのマップやレベルのジオメトリをもとに、ルームやポータルを 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 に渡します。
Associating a Geometry Instance with a Room serves two purposes:
ルームのジオメトリの設定は必須ではありません。ルームにジオメトリがないと、ルームをGame Object 3D Viewerで見ることができず、Spatial Audioはルームの範囲を(ルームの透過用に)推定できるように、ルームに付随する全てのポータルが入るようなバウンディングボックスを算出します。ルームの透過に関する詳細は、 ルームトランスミッション を参照してください。
To associate geometry with a Room, first, pass the geometry to Wwise using AK::SpatialAudio::SetGeometry. It is then necessary to create a Geometry Instance to assign a position, scale and rotation to the geometry. Refer to AK::SpatialAudio::SetGeometryInstance. Lastly, populate the AkRoomParams::GeometryInstanceID field when calling AK::SpatialAudio::SetRoom, with the ID of the Geometry Instance representing the room. Spatial Audio assumes that there was, or will be, a corresponding call to AK::SpatialAudio::SetGeometryInstance, however, it does not matter in which order AK::SpatialAudio::SetRoom and AK::SpatialAudio::SetGeometryInstance are called.
Spatial Audioでジオメトリを定義する方法については、 Geometry を参照してください。
注釈: Spatial Audioは、ジオメトリセットを使ったコンテインメントテストを行いません。それを行い、コンテインメントテストの結果をもってゲームオブジェクトの現在のルームを定義するために AK::SpatialAudio::SetGameObjectInRoom をコールする責任は、ゲーム側にあります。 |
注釈: ジオメトリセットを、ルームの概要を示すためだけに使い、反射や回折の計算に利用しないのであれば、必ず AkGeometryParams::EnableTriangles をFalseとしてください。 |
警告: AkRoomParams::GeometryInstanceID should not be confused with AkGeometryInstanceParams::RoomID. AkRoomParams::GeometryInstanceID is used as described above to define a room bounding box for transmission spread calculation and for visualization in the Game Object 3D Viewer. AkGeometryInstanceParams::RoomID is used solely as an optimization to limit the scope in which the geometry is visible/accessible, when performing ray traces inside of 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です。