Unity:GPU インスタンシング(Instancing) を WebGL で実行する
はじめに
Unityの高速化の一般的な手法、GPU インスタンシングを使ってパフォーマンスを改善するようなデモを作成したので動作してみてください。
また、WebGLで出力した場合も有効かどうか確認し有効でしたので合わせてデモページもありますので各自の環境で試してみてください。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/amimation-1.gif)
Unityを知らない方は、ぜひ こちらの記事 をご参照ください。
Link
- Github:https://github.com/fastsystem/unity-gpu-instancing-example
- デモ (GPU Instancing無効) : http://www.fast-system.jp/wp-content/uploads/static/unity-gpu-instancing-example-disabled/
- デモ (GPU Instancing有効):http://www.fast-system.jp/wp-content/uploads/static/unity-gpu-instancing-example-enabled/
- Qiita:https://qiita.com/kingyo222/items/a6d58b54109eb5d4efc4
Unityで作成
プロジェクトの作成
新たにUnityで新規プロジェクトを作成してください。
Prefabの作成
「Cube」のオブジェクトを作成します。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000001-1.jpg)
「Material」を追加します
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000002-1.jpg)
マテリアルの名前を「Cube」に変更します。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000003-1.jpg)
作成したマテリアルを「Cube」のオブジェクトにドラッグアンドドロップで設定します。この時に「Cube」オブジェクトの Mesh Renderer の Materials に「Cube」マテリアルが設定されます。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000004.jpg)
「Cube」マテリアルを選択して、「Enable GPU Instancing」を有効にします。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000005.jpg)
「Cube」オブジェクトをドラッグアンドドロップで、Projectに持っていき、Prefabを作成します。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000005_2.jpg)
Prefabが作成できました。ヒエラルキー上の「Cube」オブジェクトについては使わないので削除しましょう。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/image-4.png)
1万個のキューブの生成スクリプト
新しいオブジェクトを追加します。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000007-1.jpg)
「GpuInstancingManager」と名前を変更します。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000007_2-1.jpg)
スクリプトを追加して、「 GpuInstancingManager 」で名前を設定します。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000008-1.jpg)
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000009-1.jpg)
スクリプトは以下のソースコードを使用してください。
https://github.com/fastsystem/unity-gpu-instancing-example/blob/master/Assets/GpuInstancingManager.cs
「Cube」マテリアル、「Cube」Prefabを、GpuInstancingManagerにドラッグアンドドロップで設定します。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000010-1.jpg)
設定が完了するとこんな感じになります。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000011-1.jpg)
カメラの移動
今のままでは全体の表示が大きすぎるのでカメラの位置を移動します。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/image-5.png)
動作確認
GPU Instancingが無効の場合
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000014-1.jpg)
GPU Instancingが有効の場合 、「Batches」の数が大幅に減っていてパフォーマンス上有利に働いているのが確認できます。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000013-1.jpg)
ちなみにプラットフォームを「WebGL」に変更して、GPU Instancingが有効の場合 、GPU Instancing の効果が無いように見えますが、実際に動作させるとパフォーマンスが改善している事が確認できるので効果があるようです。
※デモページなどで確認してみてください。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000015.jpg)
パフォーマンスに関する設定
プロジェクトの設定から「Quality」から、現在の設定から下げてください。
この設定をしないと、GPUインスタンシングをWebGLで出力した際に、マウスが反応しなかったり初期表示まで時間がかかったりします。具体的にどの設定が効果があるのかは検証していませんが、おおむね動作が改善した事を確認しました。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000000-1.jpg)
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000001-2.jpg)
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000002-3.jpg)
![](http://www.fast-system.jp/wp-content/uploads/2019/01/WS000003-2.jpg)
デモページ
ページ上部にデモページを設置したので動作確認してみてください。私の環境では以下のようなパフォーマンスの違いになりました。
![](http://www.fast-system.jp/wp-content/uploads/2019/01/image-2.png)
![](http://www.fast-system.jp/wp-content/uploads/2019/01/image-3.png)
注意点
Unity:GPU インスタンシング(Instancing) を WebGL がおかしい https://qiita.com/kingyo222/items/a6d58b54109eb5d4efc4
よければ、SNSにシェアをお願いします!