見出し画像

Unityゲーム開発でモバイル向けパフォーマンス検証(4度目)

もう来月にはプレビュー版が公開できそうな自作ゲーム
MarineSchoolSimulator(Android版)ですが、色々キャラとオブジェクトを配置しても動作にまだ余裕がありそうなので、テレインに草を追加してみました。

このゲームにはモバイル向けテレインアセットPolarisを使ってます。

独自のローポリのテレインが作れるこれを使って木も植えまくれるのですが、MSS開発初期に「テレインはモバイルでは重くて使えない」と聞いて、Blenderで地形を作って、オブジェクトの木を手作業で並べて、GPUInstancerとかでカリングしてと努力したのにfps10代から抜け出せず苦戦したため、Polaris導入後でも植林はだいぶ妥協してスカスカにしてたのですが、
当時の記事 
昨今の他のスマホゲーム見たら、「結構草植えれてるな…?」と思いまして。

透過テクスチャを使わない、ビルボードじゃないローポリの草をつくり、

こんなん

こいつを、すでに草木が数千本あるシーンに追加で1000本ぐらい植えて(※ビルボードではないのでtreeのカテゴリで植えます)スマホにビルドしてみましたが、

草ぼーぼー。まあPCやゲーム機に比べたらスカスカだけど

全く処理落ちしませんでした。
開発初期に草木モデルを植えた時は画面に数本見切れただけでカクカクだったのに…

開発初期の木を植えた状態。実機じゃ全く動きませんでした

この差は、オブジェクトとテレインの描画の違いと、透過テクスチャの有無にあるのでしょう。
Polarisのテレインの草木は設定した距離(木は80m以内、草は50m以内)にしか表示されないようにしてあり、ヒエラルキーにもオブジェクトとして存在してない、オブジェクトとしての実体がないかのようで、いろいろ負荷が違うのでしょう。
それでも、透過テクスチャの使われたモデル(正確には、テクスチャの透過部分を多用してるモデル)や、ビルボードの草を植えたら20fps以下に落ち込んだので、植物モデルを何度も作り直して…

試行錯誤の末実現した「軽い」草木

モデルに透過テクスチャの葉っぱが殆どなく、テクスチャの解像度もすごく小さくしてると、処理負荷が超下がるのがわかりました。


※なお草木が風などでゆれる・遠距離でビルボードに変わるなどの処理はオフにしてます。
※JOBSとかBURSTとかも未使用です

草揺らすのは多分流石に、贅沢

さらに、オブジェクトペイントで、海中に気泡のパーティクルを出すプレハブを100個以上植えました。

水色の縦棒ギズモがそのプレハブです

草と違ってオブジェクトはヒエラルキーに存在し、距離で非表示にする機能は使われてないようなのですが、まるで処理落ちせずでした。

静止画だとわかりにくいけど海底からアブクが出てます

画面外で100個以上のパーティクルが垂れ流しになってるはずなんですが。
これがメッシュレンダラー=建物かキャラだったら確実に処理落ちするはずなんですが。
パーティクルは自前で描画を抑える機能が付いてるというのか…?

…でもおかしい、去年の4月頃には植物のローポリ化はしててそれでも20fpsで、草を削りまくって建物を描画最適化してやっと30fpsだったはずなのに、あれからさらにモデルを増やした今になってまだ余裕があるなんて…
半年前に自分が書いた記事を覆すことになるじゃんか?
そういえば最初はURP使ったら遅くなったから使わず、11月に「あれやっぱりURP早いじゃんか」となってまた使った、ということもあった。
実機テストに使った機種が貧弱だったのもある。
謎が増えた…

まあ…モバイルの描画負荷ってのは見えないしきい値(オブジェクト数とかポリゴン数とかマテリアル数とか諸々のトータル)を超えた途端ガクッとくるので、たまたまギリギリセーフだっただけかもしれません。

ちゃんと、負荷軽減の最適化処理をするに越したことはないはず

Polarisはいいアセットですが、なぜか木のコライダーが効かない、対応してるはずのBURSTが効いてない、テレインが粗いなどの難点があります。(もちろん私が使いこなせないだけかもしれないです)

Unityには、負荷の高い大量の草木・オブジェクトの描画を軽くしようというアセットは多数あります。それらすべてが、Unityの仕様が変わるたび使い勝手が激しく変動してるという特徴があります。ストアのレビューを見るとURPとかBURSTとかが実装された時期で評価が星1つ-5つと変動しています。現時点での正当な評価が実につけづらいジャンルといえます…
私はVegetationStudioGPUInstancerOptimizerを持ってますので、そのうちベンチマークしてみます。

この記事が気に入ったらサポートをしてみませんか?