フォーカスポイントとは?
- 「フォーカスポイント」 は、3Dポジショニング時にリスニングポイントを細かく制御するための機能です。
 フォーカスポイントを使用することで、音源からリスナまでの「距離」と「方向」を分離して制御することが可能となります。 
フォーカスポイントは、カメラとキャラクタが独立した三人称視点のゲームで主に使用します。
 CRIWARE Unreal Engine Plugin では、基本的にリスナの位置はカメラの位置に同期します。
 距離に応じた音量の減衰が音源~カメラ間を基準に計算されるため、キャラクタが音源近くにいる場合でも、音量が小さくなってしまいます。
 
 キャラクタの位置をフォーカスポイントとすることで、この問題を解決できます。
 
 上図の場合、音源との「距離」のみをフォーカスポイントを基準として算出しています。
 フォーカスポイントであるキャラクタが音源近くにいるので、音量は大きくなります。
活用できるシチュエーション
- 主にTPSゲーム等で、音の聴こえ方を次のようにしたい場合が多くあります。
- 音源とキャラクタの位置を基準に距離減衰を適用する。
 
- ただし音が聴こえてくる方向はカメラの向きと位置を基準とした方向から。
 
 
- このような音の聴こえ方には以下のメリットがあります。
- キャラクタとの距離に応じて音量が変化するため、ユーザがキャラクタと音源との距離を把握しやすい。
 
- 音源の方位が画角と一致するため、マップ上のオブジェクトの方向をユーザが認識しやすい。
 
 
- フォーカスポイントを利用すれば、このような動作を実現することができます。
 
- また、フォーカスポイントによって次のような動作を実現することもできます。
- オクルージョンを適用する。
 
- 音が壁によって遮られるかどうかの判定はキャラクタと音源の位置関係を基に行う。
 
- ただし音が聴こえてくる方向はカメラの向きと位置を基準とした方向から。
 
 
フォーカスポイントのインタフェース
フォーカスポイント機能を使うには以下2通りの方法があります。
- フォーカスポイントコンポーネントを使うケース
 
- フォーカスポイント情報とフォーカスポイント制御関数を使うケース
 
基本的に両者は併用できないため注意してください。
フォーカスポイントコンポーネントの使い方
- 上記のように、音源とキャラクタの位置を基準に距離減衰を適用させたいという想定で、フォーカスポイントの利用方法を説明します。
 
- キャラクタを選択した状態で、詳細ウィンドウの「コンポーネントを追加」ボタンを押します。
 
 
- 「Atom Listener Focus Point」を追加します。
 
 
- 以上の操作で、キャラクタを基準に距離減衰が適用され、カメラ位置を基準に定位が決定されるようになります。
 また、キャラクタを基準にオクルージョンが適用されます。 
フォーカスポイントの詳細な仕様について
- 「活用できるシチュエーション」で紹介した2つのシチュエーションを実現する用途以外にも、工夫次第で様々な効果を生み出すことが可能です。
 フォーカスポイントを使いこなすには、その仕様について理解する必要があります。 
フォーカスポイントの仕組み
- デフォルト状態では、カメラとリスナは同一の座標に存在します。
 
- 
 
- フォーカスポイントを配置することで、カメラとフォーカスポイントの間の任意の位置にリスニングポイントを移動することが可能になります。
 
- 
 
- 例えば、フォーカスポイントにリスニングポイントを配置することで、TPSゲーム時に音源をキャラクタとの位置関係によって減衰させることが可能です。
 
- 
 
「Atom Listener Focus Point」のパラメータ
- 「Atom Listener Focus Point」には、以下のパラメータが設定可能です。
 
- Distance Focus Level
 
- Direction Focus Level
 
- (1)Distance Focus Levelについて
 - Distance Focus Levelは、音源までの距離を計算する起点となる位置をコントロールするパラメータです。
 
- Distance Focus Levelを0に設定した場合、音源までの距離はカメラを起点として計算されます。
 (カメラに近い音源ほど、音が大きく聞こえます。)
 Distance Focus Levelを1に設定した場合、音源までの距離はフォーカスポイントを起点として計算されます。
 (フォーカスポイントに近い音源ほど、音が大きく聞こえます。)
 
- (2)Direction Focus Levelについて
 - Direction Focus Levelは、音源の方向を判定する起点となる位置をコントロールするパラメータです。
 
- Direction Focus Levelを0に設定した場合、音源の方向はカメラを起点として計算されます。
 (カメラの右側に存在する音が右から、カメラの左側に存在する音が左側から聞こえる形になります。)
 Direction Focus Levelを1に設定した場合、音源までの距離はフォーカスポイントを起点として計算されます。
 (フォーカスポイントの右側に存在する音が右から、フォーカスポイントの左側に存在する音が左側から聞こえる形になります。)
 
フォーカスポイント情報とフォーカスポイント制御関数の使い方
フォーカスポイントコンポーネントを使わず、特定のリスナーに直接フォーカスポイント情報を設定することが可能です。
 そのためにはフォーカスポイント制御関数を使います。
 以下、UAtomStatics に定義されているフォーカスポイント制御関数の一部を紹介します。
| フォーカスポイント制御関数  | 機能   | 
| SetListenerFocusPointInfo  | 特定のプレイヤーに紐付いたリスナーのフォーカスポイント情報を取得します  | 
| SetListenerFocusPointTargetActor  | リスナーのフォーカスポイント情報の内、フォーカスポイントとするアクターを変更します  | 
| SetListenerFocusPointDistanceLevel  | リスナーのフォーカスポイント情報の内、Distance Focus Level を変更します  | 
上記関数に与えるフォーカスポイント情報、すなわち FAtomListenerFocusPointInfo クラスの主なメンバを紹介します。
| フォーカスポイント情報のメンバ  | 意味   | 
| TargetActor  | フォーカスポイントとなるアクタ  | 
| DistanceLevel  | Distance Focus Level。フォーカスポイントとの距離の比率  | 
| DirectionLevel  | Direction Focus Level。フォーカスポイントとの定位の比率  | 
例えば下図のようにすれば、特定のアクタを直接指定してフォーカスポイントを設定することができます。
 
 また、アクタだけではなくシーンコンポーネントをフォーカスポイントとすることもできます。