GPU Instancing(GPUインスタンシング)は、同一の「3Dメッシュ」と「マテリアル」を共有する大量のオブジェクトを、わずか1回のドローコール(描画指令)でGPUに一括送信して超高速で描画するハードウェア最適化技術です。

現実世界での例え:たい焼きの型を使った一括大量生産

GPU Instancingの仕組みは、「たい焼きの『型』を使った一括大量生産プロセス」に例えることができます。

  • 従来(インスタンシングなし): たい焼き(オブジェクト)を100個作るために、毎回生地をこねて型を作り、1個焼き上げては型を壊し、また最初から型を作り直して次の1個を焼く、という無駄な工程を100回繰り返します。料理人(CPU)は過労で倒れてしまいます。
  • GPU Instancingあり: 1つの鉄板に「100個分のたい焼きの凹み(同一メッシュの型)」を並べた巨大な型を用意します。そして、1回だけ生地を流し込み(1回のドローコール)、一気に100個のたい焼きを同時に焼き上げます。焼き上がったたい焼きは、配置するお皿の場所(各インスタンスの位置座標)だけを変えて素早く配膳します。料理人の手間(CPU負荷)は1回分で済み、爆発的な効率化が図れます。
Unity GPU Instancing optimization diagram

図:GPUインスタンシングによる1回の描画指令と大量クローン描画の流れのインフォグラフィック

仕組みと動作原理

GPUインスタンシングを有効にすると、CPUは「描画する共通のメッシュデータ」と「オブジェクト個々の位置・回転・スケール(および任意の色など)の配列データ」をまとめてビデオメモリVRAM)に転送します。GPUは頂点シェーダー内で、送られてきた配列のインデックス(SV_InstanceID)を参照して個別のトランスフォーム行列を適用し、1回のドローコールで全インスタンスを一括レンダリングします。