GPU インスタンシングは ドローコール最適化 の方法で、同じマテリアルをもつ複数のメッシュコピーを 1 回のドローコールでレンダリングします。メッシュの各コピーはインスタンスと呼ばれます。これは、例えば、木や茂みなど、シーンに何度も現れるものを描画するのに便利です。
GPU インスタンシングは、、各ドローコールで同じメッシュをレンダリングします。バリエーションを追加して繰り返しの印象を減らすために、各インスタンスは Color や Scale のような異なるプロパティをもつことができます。複数のインスタンスをレンダリングするドローコールは、Frame Debugger に、Draw Mesh (instanced) として表示されます。
このセクションでは、GPU インスタンシングのプラットフォーム、レンダーパイプライン、SRP バッチャーの互換性についての情報を紹介します。
GPU インスタンシングは、WebGL 1.0 を除くすべてのプラットフォームで利用可能です。
機能 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタムのスクリプタブルレンダーパイプライン (SRP) |
---|---|---|---|---|
GPU インスタンシング | 可 | あり (1) | あり (1) | あり (1) |
ノート:
GPU インスタンシングは SRP バッチャー と互換性がありません。SRP バッチャーは GPU インスタンシングより優先されます。ゲームオブジェクトが SRP バッチャーと互換性がある場合、Unity は GPU インスタンシングではなく SRP バッチャーを使用してレンダリングします。最適化手法の優先順位についての詳細は、最適化の優先順位 を参照してください。
プロジェクトが SRP バッチャーを使用していて、ゲームオブジェクトに GPU インスタンスを使用したい場合、以下のいずれかを実行します。
Unity は、同じメッシュとマテリアルを共有するゲームオブジェクトに対して、GPU インスタンシングを行います。メッシュとマテリアルをインスタンス化するには以下を行います。
マテリアルに GPU インスタンシングを使用するには、Inspector で Enable GPU Instancing オプションを選択します。
GPU インスタンシングは、Unity の ベイクした Global Illumination システム をサポートします。Unity のスタンダードシェーダーとサーフィスシェーダーは、デフォルトで GPU インスタンシングと Unity のベイクした Global Illumination システムをサポートします。
各 GPU インスタンスは、以下のいずれかのソースからのグローバルイルミネーションをサポートしています。
GPU インスタンシングは、自動的に以下と動作します。
Graphics.DrawMeshInstanced
でライト プローブ レンダリングを有効にするには、LightProbeUsage パラメータをCustomProvided に設定し、プローブ データを含むMaterialPropertyBlock を提供します。詳細およびコード例については、LightProbes.CalculateInterpolatedLightAndOcclusionProbes を参照してください。
また、LPPV コンポーネントの参照と LightProbeUsage.UseProxyVolume を Graphics.DrawMeshInstanced
に渡すこともできます。これを行うと、すべてのインスタンスがライトプローブのデータの L0 バンドと L1 バンドのボリュームをサンプリングします。L2 データとオクルージョンデータを補うには、MaterialPropertyBlock
を使用します。詳細は、ライトプローブ - 技術的な情報 を参照してください。
頂点数が少ないメッシュは、GPU インスタンシングを使用しても、効率的に処理することができま せん。なぜなら、GPU のリソースを十分に活用した方法で作業を分配できないからです。この処理効率の悪さは、パフォーマンスに有害な影響を与える可能性があります。非効率が始まるしきい値は GPU によって異なりますが、原則として、256 より少ない頂点のメッシュには GPU インスタンシングを使用しないでく ださい。
頂点数の少ないメッシュを何度も描画する場合は、すべてのメッシュの情報を含むバッファを 1 つ作成し、それを使ってメッシュを描画するのが効率的です。
2017–10–24 修正されたページ
Enable Instancing チェックボックスの説明、DrawMeshInstancedIndirect、#pragma multi-compile に関しては 5.6 で追加
GPU インスタンシングのためのシェーダーウォームアップは 2017.3 で追加 NewIn20173
GPU インスタンシングでのグローバルイルミネーション (GI) サポートは 2018.1 で追加 NewIn20181
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.