はじめに
ECSを使用すると多くのオブジェクトを表示させても、低負荷状態をキープできる低減化手法が色々とあります。
基本的にはECSを実装すると、自然とその最適化が適応されるような仕組みになっていますが、自分がハマったポイントについて残しておきます。
なにが起きたか
下記の図は小さな点1つ1つがCubeで、毎周期色を変えています。
このときStatisticsをみるとBatchesが80000を超える値となっており、Cube1つ1つに対してBatchesが走ってしまっています。
ECSにすることで処理自体をある程度軽減し、これでも30FPS程度まで軽減できているのですが、期待したほどではない?という感じでした。

DOTSインスタンシングという仕組み的にはマテリアルの共有化という話のようなので異なる色に関しては適応されないのかと思ったのですが、調べてみるとどうもそうではなさそうです。
解決方法
色々記事を調べてみると、色替えをしながらBatchesを低減している方もいたので、これはなにか設定が悪そうということで色々試してみたところ、シェーダグラフの設定が悪いことがわかりました。
具体的にはGraph Inspectorに表示されるGraph SettingsのAllow Material OverrideがONになっていると、マテリアルが共通でもオブジェクトごとに描画が走ってしまいBatchesがオブジェクトの個数分発生してしまうようです。

これを変更して再度実行するとBatchesが49と劇的に減少することが確認できます。

さいごに
ECSを使用した処理負荷の軽減、最適化方法は色々あるようなので、自分も勉強を継続していきたいと思います。
本記事がどなたかのお役に立てば幸いです。
コメント