|
Wwise SDK 2022.1.19
|
Wwise Spatial Audioに送信したジオメトリを、音の回折や透過のシミュレーションに使うことがあります。つまり、あなたのゲームエンジンでオブストラクションを計算するレイキャスト方式を、完全に置き換えることも可能です。
エミッタが障害物に隠れてリスナーから見えないとき、Spatial Audioが障害物のエッジ(端)にそってパスを計算し、見つかれば、その端を回り込む音によって発生する回折係数を計算します。これに合わせてエミッタの見かけの入射角が調整され、回折値がWwiseに送信されるので、最終的に音にどう影響するかをあなたがWwiseでコントロールできます。回折の結果としてローパスフィルターが適用されるのが一般的です。
さらに、Spatial Audioはジオメトリを通るサウンドパスを計算します。障害物を透過する音には、API経由でジオメトリにアサインされた表面プロパティで決まる透過損失(transmission loss)の係数が適用されます。透過損失は、ローパスフィルタとボリューム減衰でモデル化されるのが一般的です。
下図は、WwiseのGame Object 3D Viewerのスクリーンショットです。ある音の、薄い壁の周りを回折する回折パスと、透過損失100の透過パスが示されています。
![]() | 警告: 障害の計算方法として、あなたのゲームエンジンのレイキャスト方式から、ジオメトリを使った回折と透過に、完全に切り替えることは可能ですが、ジオメトリが複雑になるとパフォーマンスコストが急速に増大します。Spatial Audioに送信するジオメトリは、できるだけシンプルにしてください。また、効率的なRooms and Portalsによる抽象化( RoomとPortal 参照)を、ジオメトリによる回折と合わせて利用した方が、後者の複雑な計算を減らせます。 |
Reflectと組み合わせて使えば、ジオメトリによる回折をエミッタとリスナーの間の直接的な音の伝播のパスだけでなく、その初期反射のパスに対しても適用できます。
Spatial Audioに送信されるジオメトリセットはすべて、回折のパスを計算するときに考慮するべきかどうかを明確に示す必要があります。明示するには、AkGeometryParams::EnableDiffraction フラグを使います。このフラグが回折の計算に必要なエッジデータ生成を可能にし、ダイレクトパスに対するジオメトリによるディフラクションと、リフレクションのディフラクションの、両方で使われます。
また、メッシュの境界エッジでも音が回折するのかどうかを検討します。メッシュの境界エッジとは、1つの三角形だけにつながるエッジのことで、多様体の境界に存在することになります。エッジ数が増えると回折の計算がより複雑になるので、あなたのメッシュの境界エッジで音が回折しないのであれば、このオプションを無効にしておきます。
最後に、エッジ材質はエネルギーを吸収せず、Acoustic Surfaceに設定されているAcoustic Textureは回折に一切影響しません。エッジは、音を単に曲げるだけです。
音の透過のために、ジオメトリのセットアップで特に必要な追加の手順はありませんが、様々なジオメトリタイプに合わせて透過損失(transmission loss)の係数を調整したほうが良いと思われます。例えばコンクリート構造は、ほぼすべての音響透過を妨げる可能性が高いのに対し、ベニヤ板で構成されたジオメトリは、わずかに音を妨げるだけかもしれません。
AkGeometryParams::Triangles アレイの中の各 AkTriangle に、 AkTriangle::surface が入っていますが、これは AkGeometryParams::Surfaces アレイに対するインデックスです。 AkAcousticSurface::transmissionLoss フィールドは、それを参照する三角形を透過する音に対し、どれだけの透過損失を適用すべきかを表します。値は0から1の間で設定されます。The transmission loss is converted to a percentage and then used to evaluate Wwise curves. The final volume attenuation and filter value applied to a sound with a given transmission loss will depend on the curves defined in the project. By default, the project occlusion curve is used. Custom transmission curves can be created in the Attenuation ShareSet added to the sound. 透過損失を組み込みパラメータとして適用したり、RTPCにマッピングしたりすることもできます。
Geometric Diffractionのデモが、Integration Demoサンプルにあるので(SDK/samples/IntegrationDemoの中)、ダイレクトパスのジオメトリによる回折に、ジオメトリを利用する例を、ご覧ください。このデモの場所は、Demo Positioning > Spatial Audio: Geometryです。
Wwise AuthoringツールのPositioningタブで、 Enable Diffraction and Transmission がチェックされていることを確認します。このボックスは、回折や透過に関するSpatial Audio機能を有効にするもので、例えば以下が可能となります。
AkRoomParams::transmissionLoss や、三角形に関連付けられた AkAcousticSurface::TransmissionLoss のうち、必ず最大の透過損失値が、最終的な透過損失係数として用いられます。AkSpatialAudioInitSettings::bCalcEmitterVirtualPosition が設定されていれば、音をレンダリングするために回折パスのバーチャルポジションを生成してSound Engineに送ります。By default, the project obstruction curves are used for diffraction and the project occlusion curves are used for transmission. If the game has also set an obstruction or occlusion value via AK::SoundEngine::SetObjectObstructionAndOcclusion, the values will be added.
Custom curves for diffraction and transmission can be created by adding an Attenuation ShareSet to the sound. Use the Attenuation Editor to create custom curves on Volume, LPF and HPF and fine-tune them while monitoring. For more information, refer to the Applying Attenuation section of the Wwise Help.
回折と透過の様子をGame Object 3D Viewerで観察するには、Profiler Settingsやビュア―のオプションで設定します(下図参照)。
エミッタからリスナーまでのパスで計算された回折係数が、回折エッジごとに表示されます。組み込みゲームパラメータ値はバインドされているゲームパラメータをGame Sync Monitorに追加することでプロファイリングでき、オブストラクションやディフラクションはProfilerのObs/Occタブでプロファイリングできます。
計算した透過損失係数は、Game Object 3D Viewerで、該当する透過パスの隣に表示されます。透過損失の原因がジオメトリであれば、ヒットポイントが、その透過損失率()と共に示されます。一方、透過損失の原因がルームであれば、透過損失率が表示され、その下に文字で"(Room)"と表示されます。
Portalsと同じく、Diffraction値はエミッタがリスナーの視界に入っているときに0で、エミッタがシャドーゾーンを貫通し始めると増加します(Diffraction(回折) 参照)。Also, please refer to Rooms and Portals' Diffraction(回折) for more details on shadow zone diffraction and for a discussion about using curves versus the Built-in Diffraction Game Parameter.
Spatial AudioのRooms and Portals( RoomとPortal )でも、隣接するルームのダイレクトサウンドの回折をPortalsによってモデル化します。これら2つのシステムは補完し合う関係で、リスナーと同じ部屋にないエミッタに対して、ジオメトリに基づく回折パスを見つけようとすることはありません。ジオメトリよりもRooms and Portalsの計算の方がかなり効率的なことを考慮すると、複雑な計算を制限するために、2つのシステムを併用することにメリットがあります。
上記の通りアーリーリフレクションはエッジで回折することがあり、エミッタをReflectにルーティングすると、Spatial Audioがこの現象のモデル化をサポートします。
その方法を説明する前に、ビューゾーン内の回折を定義する必要があります。
下図をご覧ください。エミッタはリスナーの視界に入っていますが、鏡面反射がリスナーに当たっていません。つまり、ビューゾーンに入っているのです。すでに Diffraction(回折) で説明した通り、回折はビューゾーン内でも発生します。ただしWwise Spatial Audioでは、ダイレクトパスのモデル化を行うRooms and Portalsでもジオメトリによる回折でも、ビューゾーン内の回折が実際のダイレクトパスと比較して無視できる程度なので、考慮されません。しかし反射に関しては、ビューゾーンの回折が劇的な影響をもっています。回折がないとアーリーリフレクションが聞こえるのはリフレクションゾーン内だけで、そこでは純粋な鏡面反射となっています。リスナーがビューゾーンに入った途端、反射が聞こえなくなります。回折を有効にしておけば、エッジが作用して反射波が回折されます。そうすると、リスナーがリフレクションゾーン内を歩き回ったり、そこを遠ざかったりしたときに、追加のフィルタリングや減衰が適用されたあとの反射を聞くことができるのです。
リフレクションゾーン内では、鏡面反射でほかが圧倒されるものと予想し、回折パスも、それに伴う回折値も、計算されません。あるエッジにおけるビューゾーンの回折を計算すると、リフレクションゾーンとビューゾーンの境界線において0となり、ビューゾーンとシャドーゾーンの境界線において100となります。
高次のアーリーリフレクションでは、ビューゾーンとシャドーゾーンの両方の回折が作用します。
リフレクションを要するすべてのサウンド用に、Wwise Authoringツールで、Reflectの入ったAuxバスにアーリーリフレクションのセンドを設定します。詳細は Wwiseプロジェクトセットアップ を参照してください。反射の回折を目的とする回折の特別な設定はなく、ジオメトリに対して回折を有効にするだけで充分です。
回折エフェクトを適用した反射は、Reflectでイメージソースとして表示されます。反射の回折のエフェクトをデザインするのに、回折で変化する3つのカーブ、つまりDiffraction Attenuation、Diffraction LPF、Diffraction HPFを使うことができます。詳細は Reflect's documentation を参照してください。
Wwise Spatial Audioのルームやポータルは、ジオメトリAPIと連動して反射や回折を表現します。ルームやポータルのネットワークを、周辺のジオメトリのハイレベルの抽象化(またはLOD(Level of Detail)の低レベルバージョン)としてとらえることができます。ルームやポータルを、レベルのジオメトリと注意深く合わせて使えば、詳細で効率的な音響シミュレーションを達成できます。
エミッタ(ジオメトリ回折用に正しく設定されたサウンドを再生中のエミッタ、 回折(diffraction)と透過(transmission)のために音を準備する 参照)が、リスナーと同じルームにない場合、ジオメトリによるパスを以下のように計算します:
リフレクションはポータルを通過することができ、ポータルの開口部で最大2つの平面が交差していても通過できます。ポータル自体が音響的な開口部なので、音を通過させるために三角形ジオメトリに「穴をあける」必要はなく、三角形の数が大幅に増えるのを回避できます。例えば、箱のようなジオメトリのルームがあり、6つの面を、それぞれ2つの三角形で表すとします。音が箱の外にも伝播するようにしたければ、1つの壁と交差するポータルを追加し、ポータルのZ軸が壁に交差するように配置します。いつも通り、どのゲームオブジェクトがルーム内にあり、どれが外にあるのかは、ゲームが判断し、判断するのに使うのは AK::SpatialAudio::SetGameObjectInRoom です( RoomとPortalの概要 参照)。 エミッタ(リフレクション用に正しく設定されたサウンドを再生中のエミッタ、 Wwiseプロジェクトセットアップ 参照)が、リスナーと同じルームにない場合、音の伝播ネットワークでそのサウンドが伝わる状態であれば、リフレクションをシミュレーションします。反射を、以下のように計算します:
下図は、方向が正しく設定されたポータルの例です。
|
|
|
|
|
|
レイとトライアングルの交差テストや、反射が生じるかもしれない面を、サーチする領域を制限する最適化の1つとして、特定のルームにジオメトリを自分でアサインすることが可能です。まず、そのルームのIDに、 AkGeometryInstanceParams::RoomID を設定します。This indicates to Spatial Audio that the Geometry Instance in that room is only visible from other rooms through portals and not directly. Since a single Geometry Instance can only be associated with one room ID, a room can not have geometry that should be visible in multiple rooms unless AkGeometryInstanceParams::RoomID is left invalid. また、ルームのIDに関連付けられたジオメトリセットがあれば、このルームにあえて関連付けたジオメトリ以外をルームが「見る」ことはできません。After assigning a Geometry Instance to a room, Spatial Audio will only look for geometry that is specifically associated with that room ID when simulating reflection and diffraction in that room.