音は、波として広がり波の特徴に従います。回折もその一つで、波は曲がって障害物の角を回り込んだり、開口部を通ったりします [14] 。「回折の量は波長や障害物の大きさによって異なります。障害物が波長と比較して小さければ、伝播が障害物に妨げられないようにみえます。一方、大きな障害物の背後では、音が聞こえてきません。その結果、低周波の音波の方が、高周波よりも角のまわりを大きい角度で広がります。隣の部屋から聞こえてくる声が、やや鈍く聞こえるのは、このためです 。」[15]
図 1 - 回折して角をまわり込む波
実用面で、サウンドデザイナーがなぜ回折を利用し、どう利用するのかについて考える前に、それをよく理解する必要があります。
音の伝播をシミュレーションする、波動ベースとレイベースの2方式
以前、元同僚のブノワ・アラリ(Benoit Alary)がブログで回折について書き、音の伝播のシミュレーションとしてレイベース(ray-based)と波動ベース(wave-based)の2つのメソッドの違いを説明しました [16] 。簡単に言うと波動ベース方式の方が波動の複雑な特性を自然なシミュレーションで漏らさず表現できるため、基本的に、より正確です。ただ、波動ベースで音の伝播をシミュレーションするには、任意の位置の、任意の瞬間の圧力を知ることが必要なことが多く、CPUにもメモリにも非常に大きな負荷となります。一方、音の伝播のレイベースモデルではリスナーにいずれ到達する波面のたった1つの点をレイ(ray)で表すので、計算が著しくシンプルです。従来のレイベースモデルは、レイをキャストして面を反射させることで反射をモデル化しますが、一般的に、回折のような音波の特性は考慮されていません [17] 。
波動ベースモデルのシミュレーションを観察すると、典型的なレイベースモデルの欠点が見えてきます。一例として、前述のブノワのブログに出てくる、Brian Hamiltonによる音の伝播のアニメーションからとった1フレームを見てください [18] 。このシミュレーションの静止画を見ると、オレンジ色のX印の位置で摂動が生じ、それに続く波面は外側に広がり、左側では壁にぶつかって反射して、曲がり角から先へと進みます。この時に、薄い円形の波面がこの角から出現するのが分かります。これが回折の結果です。
図 2 - [18 ] に掲載の波動シミュレーションのアニメーションの静止画。オレンジ色のX印がエミッターで、大きい円周は直接音の波面、その内側にある半円の円周は壁からの反射、赤い円によって囲まれた薄い摂動は角での回折を、表しています。
レイベースの回折
上記の例ではシミュレーションされていませんが、従来のレイベース方式の上に、明確な回折モデルをのせることができます。このようなモデルには、いくつかのクラスがあります。詳しく知りたい方は、先に参照文献としてあげたSaviojaらの研究で細かく分析されています。Tsingosはビデオゲームを念頭に、2001年にUTD(Uniform Theory of Diffraction)を使った音の伝搬のレイベースモデルを提唱しました [19] 。UTDは光波と電磁波の回折をモデル化したもので、障害物のエッジ(端)に当たったときのレイの振幅と位相を予測します。くさび型(wedge)の形状や、レイの入射角と周波数などが考慮されます。もちろん、どのようなモデルでも言えることですが、いくつかの前提条件があります。例えば、くさび型のエッジの長さは無制限にしています。現実的にありえないので、実際のエッジの長さが短ければ、単純にモデルの精度が下がります。
図 3 - Tsingos提唱のUTDのパラメータ [19] 。ソースEから出て、くさび型(Wedge)の頂点で回折したときの、リスナーの位置Lにおける大きさと位相をUTDで推定。入射の距離や角度を表すρとαi、回折の距離と角度を表すrとαd、そしてくさび型を表すnπによって、結果が変わります。
UTDでは、あるくさび型とエミッターポジションに対して、Shadow(影)ゾーン、View(視野)ゾーン、そしてReflection(反射)ゾーンの3つの領域が定義されています。下図は、先ほどのアニメーションの静止画に重ねて、オレンジ色のX印のソースの位置と3つのゾーンを示したものです。
図 4 - 回折の各ゾーン。オレンジ色のX印が、ソースの位置。Shadowゾーンはエミッターとリスナーの間にラインオブサイト(line of sight)がない領域。Reflectionゾーンは、ラインオブサイトも、くさび型に隣接する面からの鏡面反射も、ある領域。Viewゾーンはラインオブサイトだけの領域。黄色い円は、Viewゾーンの回折を示しています。
回折を使う実際のユースケース
障害物の後ろで聞こえる、直接パスのShadowゾーンの回折
貴重なCPUサイクルを、わざわざ回折するレイの計算に使う意味は?まず第一の明白な理由が、直接パスのShadowゾーンの回折を解決することです。従来のレイベース方式では、Shadowゾーンの音がありません。Tsingosは、音響環境を正しく解釈するために回折が重要であり、音源と聞き手の間の直接パスにオクルージョンがあるときは、特に大事だと述べています [19] 。現実的には回折のおかげで壁の向こう側の音も聞こえるわけで、無音の状態と比較すればその効果が非常に重要だとわかります。実際のゲームでは、この問題の対処方法も結果も様々で、レイキャストに基づいた統計学的なアプローチと、適切なオブストラクション係数で対応するのが一般的です。
Viewゾーンにおける回折と、アーリーリフレクションのロールオフ
Viewゾーンの回折は、Shadowゾーンの回折よりもかなりひかえめなのは、エミッターとリスナーの間にラインオブサイトがすでに存在しているからです。エミッターから直接くる波面の方が、エッジでの回折によるものよりも、音が明らかに大きいです。このため、レイベース方式を採用する音響エンジンによっては、これをわざわざモデル化しないものもあります。
ところが、モデル化することに、実用性はあるのです。もう一度、図4を見てください。Viewゾーンにおいて、回折を除くと、リスナーに到達するのは直接音だけになります。しかし黄色い円で示した部分から明らかなように、反射された波面は、回折のおかげでこのViewゾーンに 広がっています。実際、鏡面反射のゾーンと反射の無いゾーンの間のトランジションは、はっきりしているわけではなく、Viewゾーンの回折を利用して、2つのゾーンの間のロールオフをスムーズにすることができます。図5のとおり、レイの観点から言うと、Viewゾーンの回折は「回折した反射鏡面(diffracted reflection ray)」で表せます。
図5 - Viewゾーンの回折を、レイを使って表現:Wに隣接する面に反響したレイは、ReflectionとViewの境界からViewゾーンに「回折」して入ります。角度αをコントロールしてReflectionゾーンとViewゾーンの間のトランジションをスムーズにできます。
Reflectionゾーンの回折
回折はReflectionゾーンでも発生しますが、直接音や鏡面反射と競合するので、Viewゾーンの回折よりもさらに目立たなくなります。干渉波を引き起こしているのは確実で、それがレンダリングの真実味に貢献する可能性はあります。
このような様々な現象をモデル化すれば負荷となり、見てきたとおり、すべてをモデル化しても利益は減るばかりです。同時に、 このブログのパート1 で距離減衰が客観性に欠けることがあると書きましたが、そこで重要かつ解の無い疑問が、どれだけ正確にモデル化する必要があるのか、ということです。
Wwiseと回折
距離による減衰という単刀直入な現象でさえデザイナーの「再解釈」が必要になることが多く、多種多様のカーブをボリュームやフィルターに割り当てることで、デザイナーは求めている美学を表現しながらビジュアルに合った音を達成していることが、分かりました。私たちは回折においても、同じようにクリエイター主導のロジックを採用することに決めました。目指したのは、サウンドデザイナー自身が、妨害するジオメトリや有限のジオメトリを対象に作業して、エッジまわりで音がどのようにロールオフするのかを決められるようにすることです。そのためにWwise Spatial Audioでは、UTDという、それ自体がすでに近似値である複雑な式にCPUを使うのを避け、抽象的な「回折の係数」を採用しました。
現在Shadowゾーンの回折用に、Shadowゾーンの境界からレイまでの角度を使って係数を算出しています。つまり、入射角やくさび型の形状やエッジの長さは、考慮していません。
図 6 - Wwiseにおける回折の係数。Shadowゾーンの(直接パスの)回折の角度はShadow boundary(Shadow境界線)から取り、Viewゾーンの回折の角度(つまり反射の回折)はReflection boundary(Reflection境界線)から取っています。
事例: オブストラクションを使った、直接パスのShadowゾーンの回折
ゲーム側で稼働するオブストラクションシステムの代わりに、Wwise Spatial Audioを利用すれば、ゲーム側が提供する範囲のジオメトリ情報に基づき、エッジをまわる回折パスが計算されます。まず、対象となるサウンドの“Enable Diffraction”チェックボックスをチェックします。計算された回折係数は、オブストラクションを実行するのに使えるほか、回折用に組み込んだ特別なゲームパラメータを使い、それをボリュームやフィルターにつなげて、好みに合わせて調整できます。
(a)
(b)
(c)
(d)
図 7 - 直接パスのShadowゾーンの回折をWwiseで設定。(a) PositioningタブでEnable Diffractionを有効にします。(b) 必要に応じてDiffractionでプロジェクト全体のObstructionカーブを変化させます(デフォルト初期化設定)。(c) 3D Viewer 画面: 2つのDiffractionエッジは、34%未満と、17%(表示外)。Diffraction係数の合計は、カスケード対象の全エッジのDiffractionの合計となります(~51.8%)。黄色のEmitterが、ゲーム側の設定による本当のエミッターポジションであり、障害物を通過する音の伝達に対応しています。紫色のEmitterは、入射回折レイの起源を表しています。(d) Voice Inspector画面に、Obstructionによって変化するBus VolumeとLPFが表示されていますが、Obstruction自体もDiffractionによって変化します。
事例: 路地の出口のViewゾーンで起きる回折
壁に囲まれている路地の例です。リスナーが路地から出た瞬間、自身が発する音の鏡面反射パスはなくなります。これによって反響エネルギーが劇的に減少することがあり、 1次反射だけをシミュレーションしていた場合は現実よりも目立ちがちで、その理由はこのブログのパート1 で見たとおり、アーリーリフレクションが希少なとき、私たちはそのボリュームを誇張しがちだからです。前述の通り、このようなデッドゾーンを埋めて、反射の密度が高いゾーンと低いゾーンの切り替わりを滑らかにするのに、Viewゾーンの回折が役に立ちます。Reflectで、Diffraction(回折)によって変化するボリュームカーブやフィルターカーブを編集してみてください。
(a)
(b)
(c)
(d)
図 8 - (a) 3D Viewer画面で、音を発するListenerが路地の中央にいます。(b) Reflect画面のImage Source。(c) 音を発するListenerが路地の端にいます。右側の壁から回折した反射が、リスナーに、回折24.5%で到達します。(d) Reflect画面のImage Sourceを、回折に依存するカーブの上に重ねています。回折された反射は、追加のローパスフィルタで処理されます。
回折 v.s. その他の現象
高次の反射
回折とは別に、より高次の反射を有効にすることでデッドゾーンを補える場合があります。1次反射がリスナーに届かなくても、2次以上の反射が到達する可能性があります。あれこれ実験しながら、品質面とCPU負荷の面で、どのやり方が最適かを研究してみてください。
図 9 - 高次の反射が、「路地」内外の急なトランジションを、回折とともに、あるいは回折の代わりに、和らげてくれることがあります。リスナーが「路地」から徐々に離れるにつれ、表示されるレイの個数が減るのが分かります。
散乱
現実世界では、先ほどの事例の「路地」の出口あたりにいるリスナーにも反射は届き、それは壁が無限に滑らかなものではなく、反射波が完全に鏡面ではないからです。レイベース方式では、これを散乱としてモデルに反映しますが、散乱はマテリアルのプロパティの1つで、表面の粗さに関係します。拡散反射を生成するエネルギーと、鏡面反射を生成するエネルギーの比率を定義するものです(図 10参照)。表面が粗ければ粗いほど、拡散反射として反射されるエネルギーが大きくなります。Wwise Spatial Audioは現在、散乱をモデル化していないので、多くのデザイナーは回折の比率を誇張します。
図 10 - 散乱: Incident(入射)レイが、1つのSpecular(鏡面)反射に対し、どれだけ多くのDiffuse(拡散)反射(方角はランダム)に結び付くのかを定義します。
ジオメトリの影響
ここまで、色々な音響モデルを使いこなしたり裏技を取り入れたりして、急激なトランジションやデッドゾーンといった問題を克服したり、モデル化の対象外の現象を補ったりしました。ただ、臨機応変に回折などの音響パラメータを自由にボリュームやフィルターにマッピングするにも、限界があります。丸みのある凸面などが、その一例です。コンピュータでは常に、細かく区分された平面を合わせて使い、そのような形に近づけています。すると、鏡面反射のないデッドゾーンが発生します。隙間は回折で埋めることができます。とはいえ、どのような曲面も、それを形成する三角形によって結果が少しずつ違ってきます。
では、別の例を考えてみます。目の前の壁に、本棚が取り付けてあるか、絵画などの装飾品がかかっていたとします。1つ1つの小さい角から、回折のレイが出ているはずです。次に、そのような詳細を縮小していって、壁の表面マテリアルが完璧に平らではない程度にまでします。先ほど見たように、これは一般的に散乱でモデル化され、統計学的には、壁の極小部分の、それぞれの相対的な向きのために、複数の(拡散)レイを受けることになります。直観的には、散乱は極小レベルで起きる回折を、肉眼レベルで見たものと考えることができます。
ただ、極小レベルの回折モデルを作成しても、満足できるような散乱エフェクトとして集約できる可能性は、少なくともWwiseでは低く、それには2つの理由があります:
1. たとえゲームジオメトリのディテールを最高レベルまで詳細にこだわっても、実際の日常生活にある多数の小さな「不完全」を忠実に再現することはできませんが、それがあってこそ、リアルに聞こえるのです。
2. 回折モデルは大いに簡素化されていて、その効果は、自由に解釈されます。
そこで私たちが推奨するのは、音を伝播するジオメトリの細かさを、ゲーム内で統一して、比較的シンプルに維持することです。もし鏡面反射が不自然すぎて、すこしぼやかしたいと感じる場合は、逆にDSPのアプローチをとったほうが低いコストでより良い結果を得られるかもしれません。Wwise Reflectでフィルタを順番に入れてみて、自分なりの隠し味を見つけてください!
次は連載の第三弾、最終回ですが、レイトリバーブや、Wwise Spatial Audioの今後の展開について考えます。
コメント