0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Profiler のOthersオプションの時間コストの最適化

Last updated at Posted at 2020-07-23

今回の主な話題:「Profiler のOthersオプションの時間コストの最適化」、「UI共有図集合併」、「UGUI図集がアンロードできない」、「Shader.WarmupAllShaders()コンパイル」…


メモリ

Q1:プロジェクトはUnity 5.6にアップグレードされたばかりで、テスト中にひどい重い現象が出てきた。Profiler実機テストをしたとき、CPUのOthersオプションの時間コストはとても高いと見つけた。しかし粒子コストもAnimatorコストも高くない、これはなぜだろうか?
1.png

Unityエンジンには10個以上のモジュールがあるが、Profilerにはっきり見られるのはRendering、Scripts、Physicsなどの六つのみ。他のモジュールの時間コストは全部Othersに統合されている。だからOthersが高いも正常だ。
問題主のProfilerスクリーンショットから見ると、当分のフレーム時間コストは166msであるが、BehaviorUpdateとLateBehaviorUpdateはそれぞれ36msと37msである。いわゆる、パネルの下に多くのCPU時間コストが書いている。問題主にはこのページを検査して、またどのようなコストがあるのを確認必要がある。理論的には、これらの時間を合計すると166msに相当すべきだ。


アニメーション

Q2:プロジェクト中の骨格「Weapon R」の軌跡がおかしかったので、UWAに聞きたい。
私のやり方は:
Step1:@skin.fbxの設定
2.png
順次にReset→Enforce T-Poseを実行する。

Step2:アニメーションファイルの設定
3.png
Step3:Play。骨格「Weapon R」を観察し、idle→Runに不気味な曲線がある。

上記の設定を繰り返す、@skin.fbxを設定する時にはResetをするのみ、Enforce T-Poseをしなければ、Weapon Rは正常だと観察された。

添付ファイルのプロジェクトを見ると、Weapon Rの骨格が存在するため、Enforce T−Poseの場合、手部の回転がおかしい。Idle→Runの場合、humanoidの補間が乱れ、誤った手部アニメーションが得られ、Weapon Rに影響する。configurationにPose−>BindPoseを使える、これで体の各部位が正しくマッピングでき、そして補間に問題がないことが保証されており。こうやってすればテスト時に「不気味な曲線」が現れていない。またconfigを修正した後にアニメーションfbx中のupdateを忘れないようにしてください。
5.png


UI

Q3:今使っているのはUnity 4.7、NGUIである。いくつかの小さなフォントの図集を持っているが,本来は部分機能モジュールに特有のものであり,現在多くの機能インタフェースがお互いに引用されている。ほぼ256×256と512×256のいくつかの図集であるが、これを1枚の1024×1024の大きな共通図集に統合したいと思う。使いやすいが、1024の共有図集はすでに2枚ある、それを加えると3枚の大きい図集になる。NGUIが1024の図集を使い過ぎる時に、GPU にアップロードするにも影響があるか?もしUGUIであればこのような問題も存在するの?注:図集はメモリに常駐させ,独立してパックする。

「GPU にアップロードする」はロードされた後に行われることが多いので、これらの小さな図集が確かに同時に使われることが多いのであれば、1つの1024図に合わせるのが合理的であり、DrawCallの統合にも顕著なメリットがある。小図を大図に合併 するによる影響については、UGUIとNGUIはほぼ同じであるが,UGUIはSprite Packerで確に1枚しか合成されていないかを確認する必要がある。


ロード

Q4:Shader.WarmupAllShaders();には全てのShaderを事前にコンパイルしたか?まだ通常のShaderを1つのPrefabの上に置いて、ゲーム起動時にロードする必要があるの?

Shader.WarmupAllShadersには2つの問題がある。1つはwarmupするのは現在のすべてのShaderだけであり、その後に新たなShaderがロードされていれば、再び解析する必要がある。もしwarmupの時にほとんどのShaderがメモリにあることが保証されている場合、このAPIを使えば十分である;二つ目はこのAPIの時間コストは非常に高い。プロジェクトに使うかどうかを問わず、全てのkeywordsの組み合わせをwarmupするため、Unity 5.0以降はshadervariantcollection.warmupで取り替えるとやってみられる。


UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、パフォーマンス分析最適化ソリューション及びコンサルティングサービスを提供している会社でございます。

UWA公式サイト:https://jp.uwa4d.com
UWA公式ブログ:https://blog.jp.uwa4d.com

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?