https://zhuanlan.zhihu.com/p/105616808
ハンド旅が今どんどん大きくされ、世界のMMOゲームは非常に多くの世界のものに対処する必要性は、しかし、基本的な構成となっているようです。
オンライン情報は比較的小さいです。BatchRendererGroupそれこの問題の完璧なソリューションは、また、カルとLODを行うには、マルチスレッドのメリットをもたらします。
3つのインターフェイス上での使用に非常に単純なBatchRendererGroup、建設、AddBatch、GetBatchMatricesは、十分です。
コンストラクタ:
コンストラクタはカル関数を渡され、この機能カルは私たちの後ろに言えば、ほとんどの機能は、内部にあります。
AddBatch機能:
https://docs.unity3d.com/ScriptReference/Rendering.BatchRendererGroup.AddBatch.html
パラメータのほとんどが明確である、私は主にいくつかのパラメータは、注意すべきであると述べ、境界では、この手段を制御するために使用されます一括表示と非表示は、彼は一般的に、私たちはあなたにBoundingBoxのすべてのコレクションを取る、カメラでカル操作を行うだろう。人口MaterialPropertyBlockは、これはGPUInstance、シェーダで使用される、着信ブロック変数を作るために使用することができ、もあります。
ここではint型の戻り値があり、これはBatchGroupの重要なマーカー現在のバッチインデックスに相当します。
私たちは第三インタフェースGetBatchMatricesを使用するようにインデックスを使用する必要があり、この行列はリストを取得します、マークメッシュ情報を変換し、我々は行列を埋めるために内部に見てする必要があります。
次に、我々の仕事のほとんどはカルの内側で行われます。
この方法は、そのようなカル定義されます
JobHandle OnPerformCulling(BatchRendererGroup rendererGroup, BatchCullingContext cullingContext)
二つのパラメータ、BatchRendererGroupは、このグループの構成があり、これはあなたが複数のグループ、第二BatchCullingContextを生成することができ、同じカル機能を区別するために使用され、これはあなたが記入する必要がカルの結果です。4つの変数がありますBatchCullingContext
//
// 摘要:
// Planes to cull against.
public readonly NativeArray<Plane> cullingPlanes;
//
// 摘要:
// See Also: LODParameters.
public readonly LODParameters lodParameters;
//
// 摘要:
// Visibility information for the batch.
public NativeArray<BatchVisibility> batchVisibility;
//
// 摘要:
// Array of visible indices for all the batches in the group.
public NativeArray<int> visibleIndices;
最初の2つの変数が読み取り専用の情報を私たちに、最初のものは、カメラの六面であり、第2のパラメータはまた、FOVこれら、直交または遠近等のカメラパラメータ、内部に、LODです。
以下の2つのパラメータが、我々は記入する必要がカルの結果です。
上記目的および可視マークの総数は情報の一部のみを読み取り、次のオブジェクトは、最初の数が表示されているマーキング、可視指標です。
最も重要なは、この場所はあなたがJobSystemユニティを使用できることを意味しますJobHandleを返すことです。
上記の根拠では、我々は問題を解決するために設定してください。
植生は、例えば、アイデアはこれです:
私たちは、あなたがこの部分のゲームオブジェクトを削除することができ、ゲームが実行されている、資産として保存するなどの植生の平行移動、回転、拡大縮小、色(またはその他のGPUInstance変数)メッシュ、LodMesh、ロド情報、材料、を含む、すべての植物を置きますアウト。
私たちは、資産が使用するブロックシェーダの建設中資産GPUInstance変数を介して、建設RenderBatchGroupを開始取得し、その後LodMeshメッシュをバッチに充填マトリックスを構築し、平行移動、回転、拡大縮小を通じて、AddBatchのアドオンを使用して、残りの仕事はですマルチスレッド実行カル作業が淘汰。カル原則は、椎体に応じて、LODレベルが何であるかを示すための決定はカットされ、比較的簡単です。
基本的に2つのバッチ、もちろん、ここと組み合わせて使用強いURPバッチGPUInstanceを開始します。