ユニティ世界スーパーマルチオブジェクトのレンダリング--- BatchRendererGroup

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を開始します。

公開された610元の記事 ウォン称賛96 ビュー330 000 +

おすすめ

転載: blog.csdn.net/wodownload2/article/details/104225593