3Dトランシーバー

概要

CRIWARE UE4 Plugin v1.29.00.00 では、CRI ADX2 の空間音響接続機能「3Dトランシーバー」を使用するためのインタフェースが新たに追加されました。3Dトランシーバ機能を使用することで、窓やドアを通して屋内外から音が漏れ聞こえるような音響表現を擬似的に実現できます。

基礎知識

ここでは 3D トランシーバ機能の基本的な機能と注意点について説明します。すぐに Unreal Engine プロジェクト上で本機能を試したい場合は、後述の「AtomTransceiverBox ブループリントクラス」の使い方を参照してください。

空間音響接続機能「3Dトランシーバー」

3Dトランシーバ機能は3Dポジショニングの仮想空間上で音声をサブミックスし、一点から出力する機能です。

下図は3Dトランシーバ機能の概要を説明しています。開口部を伴う、壁に囲まれた空間を俯瞰で見下ろした図です。3Dトランシーバは、壁の内側 (屋内) の3D音源をグループ化し、 壁の外側 (屋外) の3Dリスナーに音声をサブミックスして伝える機能です。

atom_transceiver_overview.png

3Dトランシーバを使わない場合との違い

3Dトランシーバーを用いない3Dポジショニングでは、仮に音源がゲーム上で部屋の中にあった場合でも、 音像の向きは壁を無視します。本機能を利用することで、閉じられた空間内に存在する音を開口部からまとめて出力することが可能になります。逆に、リスナーが閉じられた空間に侵入した場合には外の世界の音を入り口に集約して出力することができます。

atom_transceiver_comparison.png

空間設定要素「3Dリージョン」

「3Dリージョン」を与えることで、3D音源と3Dリスナーは自動的にグループ化されます。グループ化された3D音源は、同じ3Dリージョンに属している3Dトランシーバに紐付けられます。

下図のように「屋内」リージョンを付与された3Dソースの音声出力は、同じく「屋内」リージョンを付与された3Dトランシーバに集約されます。「屋外」リージョンを付与された屋外3Dリスナーは、屋内3Dトランシーバを経由して屋内3Dソースの音を聴くことができます。一方で、屋外3Dソースからの音はトランシーバを経由せずに直接聴くことができます。

atom_transceiver_region.png

注意:3Dトランシーバと3Dリージョンの対応関係

1 つの3Dトランシーバに複数の3Dリージョンを付与することはできません。また、1つの3Dリージョンに複数の3Dトランシーバを結びつけることもできません。3Dトランシーバと3Dリージョンの対応関係は、必ず 1:1 でなければならないことに注意してください。この原則に反する設定を適用した場合、予期せぬ動作に繋がる恐れがあります。

もしマップ上の1つ建物に複数のドアが存在した場合、1つの「屋内」リージョンだけでは不足しています。ドア毎に異なるトランシーバとリージョンを用意する必要があります。つまり、この建物内をさらにいくつかのリージョンに分けて管理する必要があります。

出力音声を自然に変化させる Field 機能

3Dトランシーバは3つの Field 機能を備えています。

  • Attenuation Distance Field
  • Input Crossfade Field
  • Output Interior Pan Field

これらの Field 機能については下図を基本に考えることができます。

atom_transceiver_field.png
Field図

ここでは、リスナーが存在する3D空間上の位置を (A)、(B)、(C)、(D) の4種類で考えます。各位置において、リスナーが聴く3Dソースと3Dトランシーバからの音声出力が変化します。図中ではリージョンの表示を省略しています。屋内外をつなぐ開口部を3Dリスナーが跨いだとき、3Dリスナーのリージョンは自動的に切り替わるものとします。

Attenuation Distance Field

Attenuation Distance Field は3Dトランシーバとリスナー間の距離に応じて出力音声の音量を変化させるための Field 機能です。3Dトランシーバを中心に、最大減衰距離と最小減衰距離を設定することができます。

上の Field 図においては、赤色の円内が最小減衰距離の範囲、青色の円内が最大減衰距離の範囲です。リスナー位置(A)~(D)に応じて、出力音声は以下のように変化します。

  • (A):リスナーは最大減衰距離の範囲外に位置しています。この場合、3Dトランシーバの出力音声の音量はゼロになります。
  • (B):リスナーは最大減衰距離の範囲内に位置しています。この場合、3Dトランシーバの出力音声の音量は後述の関係図に従って変化します。
  • (C):リスナーは最小減衰距離の内側に位置しています。この場合、3Dトランシーバの出力音声の音量は最大化されます。
  • (D):リスナーは屋内に位置しています。この場合、3Dトランシーバからは音声が出力されません。

リスナーが位置(B)に存在する際、出力音声の音量には3Dソースと3Dトランシーバ間の距離も加味されます。下図のような減衰が適用される点に注意が必要です。

atom_transceiver_distance_attenuation_calc.png

Input Crossfade Field

リスナーの3Dリージョンを切り替えた際、デフォルトの設定下では音像が急激に変化してしまいます。この変化はスピーカーデバイスから非連続な変化を伴う音声として出力されます。ゲームプレイヤーは不自然さを感じ、ゲームへの没入感を失わせる恐れがあります。このような問題を防ぐために、3Dトランシーバーは出力音声のクロスフェード機能を備えています。

上の Field 図中の青色の領域を「クロスフェード領域」、赤色の領域を「直接音領域」と呼びます。リスナー位置(A)~(D)に応じて、出力音声は以下のように変化します。

  • (A):リスナーはクロスフェード領域の外側に位置しています。この場合、リスナーが聴く音声は3Dトランシーバの位置にのみ音像を結びます。
  • (B):リスナーはクロスフェード領域の内側に位置しています。この場合、リスナーが聴く音声は3Dトランシーバと3Dソースの中間的な位置に音像を結びます。この音像感は3Dリスナーの位置によって変化します。
  • (C):リスナーは直接音領域の内側に位置しています。この場合、リスナーが聴く音声は3Dソースの位置にのみ音像を結びます。
  • (D):リスナーは屋内に位置しています。この場合、リスナーが聴く音声は3Dソースの位置にのみ音像を結びます。

クロスフェード領域と直接音領域を設定することで、位置(B) –> (C) –> (D) への移動の際に音像を連続的に変化させることができます。

Output Interior Pan Field

5.1ch等、マルチチャンネルのスピーカー環境下においては、幾つのスピーカーからどの程度の音量で出力されるかによってゲーム中の音像の変化を表現することが可能です。このような変化を実現するために、CRI ADX2 ではパンニングとインテリア距離の機能が提供されています。3Dトランシーバの Output Interior Pan Field も同様の概念に基づく機能です。

上の Field 図においては、赤色の円内がトランシーバ半径の範囲、青色の円内がインテリア距離の範囲です。リスナー位置(A)~(D)に応じて、出力音声は以下のように変化します。

  • (A):リスナーはインテリア距離の範囲外に位置しています。この場合、3Dトランシーバの音声は1つまたは2つのスピーカーで出力されます。
  • (B):リスナーはインテリア距離の範囲内に位置しています。この場合、3Dトランシーバの音声は3つ以上のスピーカーから出力されます。より自然な音像の移動が実現できます。
  • (C):リスナーはトランシーバ半径の範囲内に位置しています。この場合、3Dトランシーバの音声は全てのスピーカーから同じ音量で出力されます。リスナーと同じ位置に音像があることになります。
  • (D):リスナーは屋内に位置しています。この場合、3Dトランシーバからは音声が出力されません。

距離・角度 AISAC の適用

3DトランシーバにはグローバルAISACと、それをコントロールするためのAISACコントロールを設定することが可能です。その際、AISACコントロールを下記の値にバインドすることが可能です。

  • 3Dトランシーバと3Dリスナーの距離
  • リスナーから見た3Dトランシーバーの方位角
  • リスナーから見た3Dトランシーバーの仰俯角
  • 3Dトランシーバー出力の位置から見たリスナーの方位角
  • 3Dトランシーバー出力の位置から見たリスナーの仰俯角

上から、距離減衰AISAC、リスナー基準方位角AISAC、リスナー基準仰俯角AISAC、音源基準方位角AISAC、音源基準仰俯角AISAC に相当します。各種 AISAC の詳細は CRI ADX2 ツールマニュアルの、各機能についての解説を参照してください。

3Dトランシーバに AISAC を適用することで、リスナーとの位置関係に応じて出力音声にエフェクトを掛けたり、その強さを変化させたりといったことが可能です。例えば、屋内から漏れ聞こえる音にローパスフィルタを掛けることで、疑似的な音響遮蔽の表現が可能です。

3D トランシーバ機能のインタフェース

CRIWARE Unreal Engine Plugin のユーザは 3D トランシーバ機能を使用するために、下記のインタフェースを使用することができます。

  • Atom3dTransceiverComponent クラス
  • Atom3dRegion アセット
  • AtomTransceiverBox ブループリントクラス

Atom3dTransceiverComponent クラス

3Dトランシーバ機能のプリミティブなコントロールを希望する場合は、Atom3dTransceiverComponent クラスを使用することができます。このクラスは SceneComponent の派生クラスであり、C++ とブループリントの両方からアクセスすることができます。また、Unreal Editor 上で GUI 操作を行うことにより対象のアクターにアタッチすることも可能です。

3Dトランシーバ機能の設定プロパティ

下図はUnreal Editor 上で表示される Atom3dTransceiverComponent の詳細タブの内容です。これまでに述べた3Dトランシーバ機能の設定値を変更し、適用することが可能です。

atom_transceiver_detail.png

デバッグ用の可視化機能

コンソール変数 "cri.ShowSoundLocation" に "1" を指定することで、下図のように3Dトランシーバの情報を可視化することが可能です。

atom_transceiver_visualize.png

青色のスプライトが3Dトランシーバの位置を示しています。赤い矢印は3Dトランシーバの前方方向を、水色の矢印は頭上方向を指しています。また、黒い文字のテキストラベルによって、3Dトランシーバのリージョン情報と位置関係が示されます。リージョン名の隣の "(Inactive)" という文字列は、現在このトランシーバから音声が出力されているかどうかを示します。リスナーと同じリージョンに属している場合は "(Inactive)" を示し、音声は出力されません。

このデバッグ機能で可視化できるのは以下の情報です

  • 3Dトランシーバの方向 (Forward, Up)
  • Attenuation Distance Field
  • Output Interior Pan Field
  • Input Crossfade Field
  • 3Dトランシーバに付与された 3D リージョン名
  • 3Dリスナーと3Dトランシーバ間の距離・角度

上図では 3 つの Field の内、Output Interior Pan Field のみを可視化しました。Atom3dTransceiverComponent の各種 Field 設定プロパティの "Visible" チェックボックスで個別の表示切替えが可能です。また、Details カテゴリの "Visible" チェックボックスででテキストラベルの表示切替えも可能です。

本機能はPIE中にのみ使用可能である点に注意してください。

Atom3dRegion アセット

CRIWARE Unreal Engine Plugin において、3Dリージョンは単一のアセットクラスとして提供されます。ユーザは Atom3dRegion アセットを作成し、目的の3Dソースや3Dトランシーバ、3Dリスナーに対して所有させることが可能です。

リージョンを所有できるクラス

CRIWARE Unreal Engine Plugin において、3Dソース、3Dトランシーバ、3Dリスナーは別個のクラスで表現されます。これら以外にもリージョンを所有することが可能なクラスが存在します。以下にまとめます。

クラス名 概要 所有する3Dリージョンの用途
Atom3dTransceiverComponent 3Dトランシーバ (割愛)
FAtomListener 3Dリスナー このリスナーと同じリージョンに属する3Dソースはトランシーバを介さず音声出力される
AtomComponent 3Dソース この AtomComponent と同じリージョンを持つトランシーバへ音声出力を集約する
SoundAtomCue キュー このキューアセットを再生する AtomComponent は、このキューと同じリージョンに所属する
AtomParameterComponent Atom関連パラメータを保持するコンポーネント このコンポーネントを付与されたアクターがアニメーションする際、PlayAtomCue 通知によって動的に生成された3Dソースは、このコンポーネントと同じリージョンに所属する

アセットの作成方法

Unreal Editor のコンテンツブラウザ上で作成可能です。

atom_transceiver_region_create_ui.png

デバッグ時テキストラベルの色

Atom3dRegion アセットは Color プロパティを保持しています。これは先述のデバッグ機能で示したテキストラベル (3Dトランシーバに設定されているリージョン名等) のフォントカラーとして反映されます。Unreal Editor 上でのみ有効なデータであり、実際にビルドしたアプリケーションのパッケージ内では Color データを保持しません。

AtomTransceiverBox ブループリントクラス

AtomTransceiverBox は、CRI ADX2 の空間音響接続機能「3Dトランシーバー」をプログラムレスで使用するためのブループリントクラスです。コンテンツブラウザ上から AtomTransceiverBox ブループリントアセットをドラッグアンドドロップしてマップに配置するだけで、3Dトランシーバ機能を使用することができます。

atom_transceiver_box_icon.png

上図のようにコンテンツブラウザ上で AtomTransceiverBox ブループリントアセットを表示するには、View Options からプラグインコンテンツの表示設定を有効にする必要がある点に注意してください。

atom_transceiver_box_how_to_show.png

使い方

手順1:AtomTransceiverBox の配置

コンテンツブラウザ上で AtomTransceiverBox ブループリントアセットを表示してください。このアセットをビューポートに直接ドラッグアンドドロップすることで、AtomTransceiverBox をマップに配置することができます。

手順2:前方・後方の3Dリージョンを設定

AtomTransceiverBox には2つの3Dリージョンを設定することができます。前方向のリージョンと、後方向のリージョンです。それぞれ "Forward Region"、"Rear Region" と呼びます。リスナーが AtomTransceiverBox に侵入し、前方向に通り抜けた場合は前者がリスナーのリージョンとして設定されます。後方向に通り抜けた場合は後者がリスナーのリージョンとして設定されます。

例えば、下図では AtomTransceiverBox の x 軸上の前方向に赤い部屋 ("ClayRoom" リージョン)、後方向に緑色の部屋 ("Marble" リージョン) を設定するのが適切です。

atom_transceiver_box_forward_and_rear_regions.png
atom_transceiver_box_forward_and_rear_region_properties.png

また、リスナーだけでなく AtomParameterComponent も AtomTransceiverBox の通り抜けに対応しています。AtomParameterComponent をアタッチされたアクタが AtomTransceiverBox を通り抜けると、その方向に応じて "Forward Region"、"Rear Region" が自動的にこのコンポーネントにも付与されます。

手順3:各種 Field や AISAC を設定

次に AtomTransceiverBox が持つ Atom3dTransceiverComponent に対して各種設定を行います。ですが AtomTransceiverBox が 2 つの Atom3dTransceiverComponent を保有している点に注意してください。Atom3DTransceiverForward と Atom3DTransceiverRear です。それぞれ Forward Region 用、 Rear Region 用に当たります。先述の通り、トランシーバとリージョンは 1:1 の対応関係にあるためです。

レベル開始時、Atom3DTransceiverForward には Forward Region、Atom3DTransceiverRear には Rear Region が自動的に設定されます。下図では、3Dリスナー(カメラ)が AtomTransceiverBox の背面側のリージョン (Marble Region) に属しているとします。この場合、リスナーは Atom3DTransceiverForward からの出力音声を聴くことになります。

atom_transceiver_box_and_listener.png

この場合にリスナーが聴く音声を編集したい場合は、Atom3DTransceiverForward の設定値を変更してください。

手順4:リスナーの初期リージョンを設定

何のリージョンも付与されていないリスナーは、3Dトランシーバからの出力音声を聴くことができません。ブループリントの場合は、下記の関数ノードでリスナーに目的の Atom3dRegion アセットを設定してください。

atom_transceiver_how_to_set_region_for_listener.png

基本的な使い方は以上になります。CRIWARE SDK for Unreal Engine には 3D トランシーバ機能のサンプルレベル (Atom160_Transceiver) が同梱されているため、動作させて挙動を確認することをおすすめします。また AtomTransceiverBox はごく小規模なブループリントクラスとして実装されており、ユーザによる改変や拡張が可能です。