Particle SystemにおけるGPUインスタンシングの基礎知識と注意点をまとめました。
Unity2019.4.0
GPUインスタンシング?
GPUインスタンシングとは、要は「同じモデル一回の一気にいっぱい描画できる」機能です(適当な説明)。
一気にいっぱい描画するので、パーティクルのようなものに正しく使えば処理負荷が抑えられます。
インスタンシングの効果を感じるためにまず以下のようなヤバいパーティクルを作ってみます。
- Max Particles: 10000
- Emission > Rate over Time : 1000
- Render Mode: Mesh
- Mesh: Sphere(頂点数多いので)
これを表示してみるとPCでも17FPSです。ヤバいですね。
ここでGPUインスタンシングを有効にしてみます。
なんと1861FPSになりました。ヤバいですね(良い意味で)。
非Particle SystemのGPUインスタンシングとの違い
さてここからはParticleSystemでGPUインスタンシングを使う上で必要な基礎知識をまとめていきます。
Unityでは基本的に(=ParticleSystem以外は)以下の記事のようにマテリアルのEnable GPU Instancing
にチェックを入れることでGPUインスタンシングを有効化します。
しかしながら、Particle Systemだけはインスタンシングを実現する技術的なバックグラウンドが異なり、したがって設定方法も異なります。
Particle SystemにおけるGPUインスタンシングの使い方は以下の通りです。
- Render ModeをMeshにする
- Enable Mesh GPU Instancingにチェックする
またシェーダやハードウェアがインスタンシングに対応している必要があります。
これについては次節で説明します。
対応しているシェーダが必要
ParticleをGPUインスタンシングするためにはシェーダがインスタンシングに対応している必要があります。
これは非Particle SystemのシェーダをGPUインスタンシング対応させるのとは方法が全く異なるので注意してください(具体的な方法は別記事にまとめる予定です -> まとめました)。
また、UnityのレガシーではないParticle用シェーダはGPUインスタンシングに対応しています。
具体的には以下の二つのシェーダが対応しています。
- Particles > Standard Surface
- Particles > Standard Unlit
対応しているGPUが必要
GPUインスタンシングはGPUの機能を使うため、GPUが対応していないと使えません。
シェーダには#pragma target 4.5
の記述が必要になります。
すなわちOpenGL ESだと3.1相当になります。
これは非Particle Systemのインスタンシングよりも厳しい制約なので注意してください。