2023年11月11日

2023年9月にゲームジャムイベントで制作した「実録 ハイスコア刑務所」が環境によっては上手く再生できず、重くなってしまっていました。分かった原因と、やってみたことの記録です。

今はかなり軽くなったとは思うのですが……。サーバーキャッシュを削除しても読み込み時にブラウザが一時停止してしまったりしています。FireFoxだとなぜかすぐロード出来たりしました。謎です……。今サーバーのほうが不安定なようなので、後でまた見てみようかと思います。

UnityのWebGLで作ったゲームが重いときの参考になるかもしれません。ならないかも。

重い原因とやってみたこと

カメラ

一番の原因だと思うのですが、複数のカメラが同時にONになっていました。カメラの負荷はかなり高いそうで、1度に1つのカメラしかONにならないようにしたらSetPassCallが半分になりました。2倍描写してたからでしょうか。反省。そもそも2つが同時にONになっていたのは確認不足というか怠惰で、2個目を追加したら1個目のカメラの画面が上書きされるのかな?と思いそのままにしてしまっていました。猛省!

FPS

11月に制作した「Check in Chicken」で分かったことですが、FPSの上限を設定しないと環境によってはかなり重たくなるようです。猛省。何も知らなかった……。というわけでSet Target FramerateでFPSの上限を60にしました。エディターでは軽くなっていたしテストビルドでも良い感じだと思うのですが、正しいのかはあまり自信がありません……。これにより若干目押しするゲームのほうに影響が出るかもしれませんが、誤差範囲なのでは。

その他やってみたこと

ゲームビュー画面右上の統計情報を確認すればいいということも今回知りました。

SetPass callsが100以上だと良くないという記事を見かけたので、早速見てみました。

最初に確認したときは180くらいでした。重たい訳ですわ……。この受刑者がただ座っているだけのシーンでも153! 重すぎ!

プレハブ化する

今までやってなかったのかよって話なんですけど、やってませんでした。キャラクター(囚人)たちは全部prefabではありませんでした。実のところprefabがどういうときに使うべきなのか、何が便利なのか分からなかったので使っていませんでした。Unityで初めてゲームを完成させてから1年経つのにどうして……。

これをプレハブ化することで1人当たり2くらい数値が下がりました。prefabすごい! prefab化のときに顔の細々としたMaterialをオフにしたことも効いたのかもしれません。更にMOB受刑者の髪テクスチャをなくし、バズカットにしてみました。かなり効果があったのでは。

ライトを変える

かなり効果がありました。ポイントライトは重いとのことなのでスポットライトにしたところ、かなり軽量化されました。すごい。ただし雰囲気が少し変わってしまいました。

カメラのファーを小さくする

これはやってみたもののあんまり効果が無かったです。ロケ地は屋内で、運動場もそこまで遠景があるわけではなかったからだと思います。

ポストプロセス

URPではグローバルボリュームとかいう名前に変わっていました。Bloomが特に重いみたいです。でもここはいじりたくありません……。それで上手く再生できなかったら元も子もないのではと思いつつ……。

テクスチャサイズを縮小

ビルドレポートのテクスチャサイズを小さくすべく色々設定しました。刑務所内の構造がどうしても重くて、特に重要ではないライトなどの小物に容量が持ってかれてしまっていました。ビルドのところで一括で縮小する機能が便利でよく使っていたのですが、タイトル画面とかの写真はそのままにしたかったので、他の画像を少しずつ小さくしました。多分もっと効率的な方法はあったと思いますが、勉強になりました。

フォントサイズ縮小

フォントが3種類使われていて、それを全て大きいマップサイズ?でいらない文字まで設定していたため余計に重かったようです。使う文字を全て抜き出し、それだけに対応できるようサイズを縮小し、フォントアセットクリエイターでフォントアトラスを作り直しました。

動作が重いのも軽減できたし、ビルドサイズも最初は100MB近かったのに56MBまで減らせました。でもそれらが正しいのかは分からないしまだまだ改善の余地がありそうです。

メッシュ結合のやり方は検討中で、おそらく有料アセットを使うことが一番早いのかなあと思っていますがその前にVROIDのポリゴン数を減らして出力したほうがいいのかなあとか色々……。

おわりに

今回はサイズが大きくなってしまったおかげで色々な反省がありました。データキャッシングの件で別の記事も書いています……。

軽量化についてはテクスチャサイズを小さくすれば解決!くらいの軽い気持ちでいたので、いざ調べてみると全然違って勉強不足を痛感しました。今回は使っていませんが、オクルージョンカリング?はかなり使えそうで気になります。CPUへの負荷があるそうなので、それが便利なのかそうではないのかは実際よく分かりません……。

他のブラウザでのテストプレイはしているものの、全ての不具合を一人で見つけるのは無理です……。ゲーム制作イベントという期限付きの突貫作業だとなかなか難しいですが、友達にテストプレイを頼むなりして、色々な環境で遊べるか確認したほうが安心です。

毎回そうなんですが、1weekの成果物として悪いところも残したい気持ちがあります。完璧にすることは無理ですし……。良いところばかりではなく悪いところからも学べることが多いかと思いますしね……。もう少しその領域に詳しくなったら、あのときはああするのが一番だったという最適解にたどり着けるのでは……。色々な学び……。

追記 24/05/16

結局環境によっては3D部分が上手く再生されませんでした(ありがたい実況動画で確認)。一定以上のグラフィックボードを積んでいないとどうしても厳しそうです……。3D部分のない低画質版を作るなどの対策は出来そうですが、上述の理由もあり未定です。映像部分だけのページを作ってあるので補完していただけたらと思います。

どれくらいの割合で楽しめない方がいらっしゃるのか分かりませんが、やっぱりPCスペックに関わらず快適に遊べるのが理想です。今の技術ではやっぱりまだ難しいので、精進します……。

追記24/10

続編です。

Categories: