FusionInterestArea

広大なワールドでは、すべてのオブジェクトの状態をすべてのクライアントに送信すると、帯域を浪費するだけでなく、プレイヤーが知るべきでない情報が漏れることもあります。この問題は関心領域(Area of Interest:AOI)によって、各クライアントが特定の空間領域を購読できるようにして、領域内のオブジェクトのみを複製することで解決できます。購読していない領域のオブジェクトはクライアントから見えなくなるため、帯域とチートの余地を同時に減らすことができます。

Fusionはグリッドシステムで関心領域を実装しています。ワールドは固定サイズのセルで分割され、各クライアントは自身の位置周辺のセルを購読します。オブジェクトは自身が属するセルを公開し、サーバーはオブジェクトのセルとプレイヤーの購読情報を照合して、送信するオブジェクトを決定します。

概要

FusionInterestAreaは、関心領域のグリッド購読を自動管理します。これを子ノードとして追加すると、形状・サイズ・対象ノードの位置に基づいて、各フレームでどのグリッドセルを購読するかを計算します。

interest_modeの概要については、レプリケーション - インタレストマネジメントをご覧ください。

プロパティ

これらのプロパティは、購読領域の形状・サイズ・動作を制御します。

プロパティ デフォルト 説明
shape Shape SQUARE 購読領域の形状
orientation Orientation 3D_XZ セル計算時に投影する平面
grid_size int 5 セルの辺長(Squareのみ、奇数値:1~21)
radius float 5.0 セルの半径(CircleとConeのみ)
fov_angle float 90.0 視野角度(Coneのみ)
base_send_rate int 1 中央セルの送信レートの上書き(0 = サーバーのデフォルトを使用)
decay_mode DecayMode DOUBLING 中央からの距離によって送信レートをどう増加させるか
target_path NodePath ".." 位置に基づくセル計算を行うノード
enabled bool true 実行時に購読のON/OFFを切り替える

デバッグ用プロパティ

デバッグの可視化を有効にすると、購読されたセルがビューポート上にオーバーレイで表示されます。

プロパティ デフォルト 説明
debug_draw bool false 購読されたセルをオーバーレイで描画するか
debug_labels DebugLabels NONE デバッグセル上に表示されるラベル内容
debug_gradient Gradient null 送信レートに対応したカラーグラデーション(低 → 高)

列挙型

Shape

購読領域の形状によって、対象位置周辺のセルをどのように選択するかが決定されます。

説明
SQUARE grid_size × grid_size 長方形領域
CIRCLE 半径に基づいて、円の外側の角にあるセルをスキップする
CONE 視線方向への指向性を持つ視野

Orientation

グリッドが投影される2D平面を選択します。

説明
2D XY平面(Node2Dシーン用)
3D_XZ XZ平面(3Dのデフォルト)
3D_XY XY平面(3D用)

DecayMode

中央から離れたセルに対して、サーバーの送信レートをどのように低下させるかを制御し、端領域の帯域を節約します。

説明
FLAT すべてのセルで同じ送信レート
DOUBLING ring 1を超えるごとに倍増
LINEAR base + ring × step

DebugLabels

デバッグラベルでは、デバッグオーバーレイの各セルに表示される情報を設定できます。

説明
NONE ラベルなし
PRIORITY 計算された優先度の値を表示
CELL_AND_PRIORITY セルのIDと優先度を表示

使用例

FusionReplicatorの兄弟ノードとしてFusionInterestAreaを追加し、インスペクター上またはコード上から、形状と半径を設定します。

GDScript

# Scene tree:
# Player (CharacterBody3D)
# +-- Camera3D
# +-- FusionReplicator
# +-- FusionInterestArea

@onready var interest: FusionInterestArea = $FusionInterestArea

func _ready():
    interest.shape = FusionInterestArea.SHAPE_CIRCLE
    interest.radius = 8.0
    interest.decay_mode = FusionInterestArea.DECAY_DOUBLING

グリッド計算に使用されるセルサイズは、プロジェクト設定fusion/interest_management/area_of_interest_cell_sizeからグローバルを設定されます。INTEREST_AREAモードに設定されたすべてのFusionInterestAreaFusionreplicatorは、このセルサイズを共有します。

Back to top