menu
バージョン
2021.1.14.8108
2024.1.4.8780
2023.1.12.8706
2022.1.18.8567
2021.1.14.8108
2019.2.15.7667
2019.1.11.7296
2018.1.11.6987
2017.2.10.6745
2017.1.9.6501
2016.2.6.6153
2015.1.9.5624
2024.1.4.8780
2023.1.12.8706
2022.1.18.8567
2021.1.14.8108
2019.2.15.7667
2019.1.11.7296
2018.1.11.6987
2017.2.10.6745
2017.1.9.6501
2016.2.6.6153
2015.1.9.5624
Wwise SDK 2021.1.14
|
Wwise Spatial Audioに送信したジオメトリを、音の回折や透過のシミュレーションに使うことがあります。つまり、あなたのゲームエンジンでオブストラクションを計算するレイキャスト方式を、完全に置き換えることも可能です。
エミッタが障害物に隠れてリスナーから見えないとき、Spatial Audioが障害物のエッジ(端)にそってパスを計算し、見つかれば、その端を回り込む音によって発生する回折係数を計算します。これに合わせてエミッタの見かけの入射角が調整され、回折値がWwiseに送信されるので、最終的に音にどう影響するかをあなたがWwiseでコントロールできます。回折の結果としてローパスフィルターが適用されるのが一般的です。
さらに、Spatial Audioはジオメトリを通るサウンドパスを計算します。障害物を透過する音には、API経由でジオメトリにアサインされた表面プロパティで決まる透過損失(transmission loss)の係数が適用されます。透過損失は、ローパスフィルタとボリューム減衰でモデル化されるのが一般的です。
下図は、WwiseのGame Object 3D Viewerのスクリーンショットです。ある音の、薄い壁の周りを回折する回折パスと、透過損失100の透過パスが示されています。
dangerous | 警告: 障害の計算方法として、あなたのゲームエンジンのレイキャスト方式から、ジオメトリを使った回折と透過に、完全に切り替えることは可能ですが、ジオメトリが複雑になるとパフォーマンスコストが急速に増大します。Spatial Audioに送信するジオメトリは、できるだけシンプルにしてください。また、効率的なRooms and Portalsによる抽象化( RoomとPortal 参照)を、ジオメトリによる回折と合わせて利用した方が、後者の複雑な計算を減らせます。 |
Wwise Reflectと組み合わせて使えば、ジオメトリによる回折をエミッタとリスナーの間の直接的な音の伝播のパスだけでなく、その初期反射のパスに対しても適用できます。
Spatial Audioに送信されるジオメトリセットはすべて、回折のパスを計算するときに考慮するべきかどうかを明確に示す必要があります。明示するには、AkGeometryParams::EnableDiffraction
フラグを使います。このフラグが回折の計算に必要なエッジデータ生成を可能にし、ダイレクトパスに対するジオメトリによるディフラクションと、リフレクションのディフラクションの、両方で使われます。
また、メッシュの境界エッジでも音が回折するのかどうかを検討します。メッシュの境界エッジとは、1つの三角形だけにつながるエッジのことで、多様体の境界に存在することになります。エッジ数が増えると回折の計算がより複雑になるので、あなたのメッシュの境界エッジで音が回折しないのであれば、このオプションを無効にしておきます。
最後に、エッジ材質はエネルギーを吸収せず、Acoustic Surfaceに設定されているAcoustic Textureは回折に一切影響しません。エッジは、音を単に曲げるだけです。
音の透過のために、ジオメトリのセットアップで特に必要な追加の手順はありませんが、様々なジオメトリタイプに合わせて透過損失(transmission loss)の係数を調整したほうが良いと思われます。例えばコンクリート構造は、ほぼすべての音響透過を妨げる可能性が高いのに対し、ベニヤ板で構成されたジオメトリは、わずかに音を妨げるだけかもしれません。
AkGeometryParams::Triangles
アレイの中の各 AkTriangle
に、 AkTriangle::surface
が入っていますが、これは AkGeometryParams::Surfaces
アレイに対するインデックスです。 AkAcousticSurface::transmissionLoss
フィールドは、それを参照する三角形を透過する音に対し、どれだけの透過損失を適用すべきかを表します。値は0から1の間で設定されます。透過損失は損失率に換算され、オクルージョンカーブを評価するために使われます( AkSpatialAudioInitSettings::bUseOcclusion
が有効であることが前提)。ある透過損失の音に適用される最終的なボリューム減衰とフィルター値は、Wwise Project Settingsで定義したオクルージョンカーブによって決まります。透過損失を組み込みパラメータとして適用したり、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に送ります。AkSpatialAudioInitSettings::bUseObstruction
が設定されていれば、回折係数に基づいてオブストラクションカーブを適用します。もしゲーム側も AK::SoundEngine::SetObjectObstructionAndOcclusion
経由でオブストラクション値を設定していれば、両者の値の大きいほうを使います。AkSpatialAudioInitSettings::bUseOcclusion
が設定されていれば、透過損失の係数に基づいてオクルージョンカーブを適用します。もしゲーム側も AK::SoundEngine::SetObjectObstructionAndOcclusion
経由でオクルージョン値を設定していれば、両者の値の大きいほうを使います。回折と透過の様子をGame Object 3D Viewerで観察するには、Profiler Settingsやビュア―のオプションで設定します(下図参照)。
エミッタからリスナーまでのパスで計算された回折係数が、回折エッジごとに表示されます。 AkSpatialAudioInitSettings::bUseObstruction
が有効になっていれば、この回折係数は、組み込みゲームパラメータのDiffraction経由、またはエミッタのObstruction値経由で、Wwiseに伝達されます。組み込みゲームパラメータ値はバインドされているゲームパラメータをGame Sync Monitorに追加することでプロファイリングでき、オブストラクションやディフラクションはProfilerのObs/Occタブでプロファイリングできます。
計算した透過損失係数は、Game Object 3D Viewerで、該当する透過パスの隣に表示されます。透過損失の原因がジオメトリであれば、ヒットポイントが、その透過損失率()と共に示されます。一方、透過損失の原因がルームであれば、透過損失率が表示され、その下に文字で"(Room)"と表示されます。
Portalsと同じく、Diffraction値はエミッタがリスナーの視界に入っているときに0で、エミッタがシャドーゾーンを貫通し始めると増加します(Diffraction(回折) 参照)。また、シャドーゾーンの回折の詳細や、組み込みのDiffractionゲームパラメータとオブストラクションの使い方の違いについては、Rooms and Portalsの Diffraction(回折) を参照してください。
Spatial AudioのRooms and Portals( RoomとPortal )でも、隣接するルームのダイレクトサウンドの回折をPortalsによってモデル化します。これら2つのシステムは補完し合う関係で、リスナーと同じ部屋にないエミッタに対して、ジオメトリに基づく回折パスを見つけようとすることはありません。ジオメトリよりもRooms and Portalsの計算の方がかなり効率的なことを考慮すると、複雑な計算を制限するために、2つのシステムを併用することにメリットがあります。
上記の通りアーリーリフレクションはエッジで回折することがあり、エミッタをWwise Reflectにルーティングすると、Spatial Audioがこの現象のモデル化をサポートします。
その方法を説明する前に、ビューゾーン内の回折を定義する必要があります。
下図をご覧ください。エミッタはリスナーの視界に入っていますが、鏡面反射がリスナーに当たっていません。つまり、ビューゾーンに入っているのです。すでに Diffraction(回折) で説明した通り、回折はビューゾーン内でも発生します。ただしWwise Spatial Audioでは、ダイレクトパスのモデル化を行うRooms and Portalsでもジオメトリによる回折でも、ビューゾーン内の回折が実際のダイレクトパスと比較して無視できる程度なので、考慮されません。しかし反射に関しては、ビューゾーンの回折が劇的な影響をもっています。回折がないとアーリーリフレクションが聞こえるのはリフレクションゾーン内だけで、そこでは純粋な鏡面反射となっています。リスナーがビューゾーンに入った途端、反射が聞こえなくなります。回折を有効にしておけば、エッジが作用して反射波が回折されます。そうすると、リスナーがリフレクションゾーン内を歩き回ったり、そこを遠ざかったりしたときに、追加のフィルタリングや減衰が適用されたあとの反射を聞くことができるのです。
リフレクションゾーン内では、鏡面反射でほかが圧倒されるものと予想し、回折パスも、それに伴う回折値も、計算されません。あるエッジにおけるビューゾーンの回折を計算すると、リフレクションゾーンとビューゾーンの境界線において0となり、ビューゾーンとシャドーゾーンの境界線において100となります。
高次のアーリーリフレクションでは、ビューゾーンとシャドーゾーンの両方の回折が作用します。
リフレクションを要するすべてのサウンド用に、Wwise Authoringツールで、Wwise Reflectの入ったAuxバスにアーリーリフレクションのセンドを設定します。詳細は Wwiseプロジェクトセットアップ を参照してください。反射の回折を目的とする回折の特別な設定はなく、ジオメトリに対して回折を有効にするだけで充分です。
回折エフェクトを適用した反射は、Wwise Reflectでイメージソースとして表示されます。反射の回折のエフェクトをデザインするのに、回折で変化する3つのカーブ、つまりDiffraction Attenuation、Diffraction LPF、Diffraction HPFを使うことができます。詳細は Wwise 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に、 AkGeometryParams::RoomID
を設定します。そうすることで、ルームのジオメトリがほかのルームから見えるのはポータルを通したときだけで、直接には見えないということを、Spatial Audioに示します。1つのルームIDに関連付けられるジオメトリセットは1つだけなので、 AkGeometryParams::RoomID を無効にしない限り、複数の部屋で見えるようなジオメトリをルームに設定できません。また、ルームのIDに関連付けられたジオメトリセットがあれば、このルームにあえて関連付けたジオメトリ以外をルームが「見る」ことはできません。ルームにジオメトリセットをアサインしたあとは、そのルームの反射や回折をシミュレーションするときに、Spatial AudioはルームIDに具体的に関連付けられたジオメトリ以外を見ません。