教育事業部の事業内容 演劇、音楽のタレント並びに作詞家、作曲家、編曲家等アーティストの育成及びマネージメント、コンピュータ教室の経営等を行っています。
教育事業 パルテア

〜Unity Graphics カリンググループ API〜 #ゲームプログラミング #ゲーム制作 #unity3d #unity3dgames #unity2d

カリンググループ API

CullingGroup は、独自のシステムを Unity のカリングおよび LOD パイプラインに統合する方法を提供します。これはさまざまな目的に使用できます。例えば:

現在実際に表示されているキャラクターの完全なゲームオブジェクトのみを使用しながら、群衆をシミュレートします

Graphics.DrawProcedural によって駆動される GPU パーティクル システムを構築しますが、壁の後ろにあるパーティクル システムのレンダリングはスキップします

プレイヤーが視界に「ポップ」するのをプレイヤーに見られずに敵をスポーンさせるために、どのスポーンポイントがカメラから隠されているかを追跡します。

キャラクタが近くにいるときはフル品質のアニメーションと AI 計算から、遠くにいるときは低品質で安価な動作に切り替えます。

シーン内に 10,000 個のマーカー ポイントがあり、プレーヤーがそれらのいずれか 1 メートル以内に近づいたことを効率的に検出します。

API は、境界球の配列を提供することで機能します。次に、特定のカメラを基準としたこれらの球の可視性が、LOD レベル番号のように扱うことができる「距離バンド」値とともに計算されます。

CullingGroup の使用を開始する

CullingGroups を操作するためのコンポーネントやビジュアル ツールはありません。これらはスクリプト経由で純粋にアクセスできます。

CullingGroup は、「new」演算子を使用して構築できます。

CullingGroup group = new CullingGroup();

CullingGroup に可視性や距離の計算を実行させるには、使用するカメラを指定します。

group.targetCamera = Camera.main;

BoundingSphere 構造体の配列を作成して球の位置と半径を設定し、実際に配列内にある球の数とともに SetBoundingSpheres に渡します。球の数は配列の長さと同じである必要はありません。 Unity では、実際に配列内にある球の初期数が非常に少ない場合でも、一度に最も多くの球を保持できる十分な大きさの配列を作成することをお勧めします。より大きな配列を使用すると、実行時に配列のサイズを変更するという計算コストのかかるプロセスを行わずに、必要に応じて球を追加または削除できます。

BoundingSphere[] spheres = new BoundingSphere[1000];
spheres[0] = new BoundingSphere(Vector3.zero, 1f);
group.SetBoundingSpheres(spheres);
group.SetBoundingSphereCount(1);

この時点で、CullingGroup はフレームごとに 1 つの球の可視性の計算を開始します。

CullingGroup をクリーンアップして、使用しているすべてのメモリを解放するには、標準の .NET IDisposable メカニズムを使用して CullingGroup を破棄します。

group.Dispose();
group = null;

onStateChanged コールバックを介して結果を受信する

球体の可視性や距離の状態の変化に応答する最も効率的な方法は、onStateChanged コールバック フィールドを使用することです。これを、CullingGroupEvent 構造体を引数として取る関数に設定します。カリングが完了した後、状態が変化した各球体に対して呼び出されます。 CullingGroupEvent 構造体のメンバーは、球体の以前の状態と新しい状態を示します。

group.onStateChanged = StateChangedMethod;

private void StateChangedMethod(CullingGroupEvent evt)
{
if(evt.hasBecomeVisible)
Debug.LogFormat(

    unity

  • 日時:// ~ //
  • 名称:
  • 場所:
  • 料金:¥0 (消費税込)