2012年8月15日水曜日

NGUI ドラッグパネルのパフォーマンス

今回はドラッグパネルのパフォーマンスに関するディスカッションから。



http://www.tasharen.com/forum/index.php?topic=1338

質問(常連メンバーAさん)
NGUIをしばらく使ってみてNGUI/Unityで悩んでいることがあって他の人も同様の
状況がないか教えてほしい。

1.Draggable PanelがiPhone4で遅い。iPad2, iPhone3, iPhone4Sは大丈夫。でもDraggable panelがひとつあるだけ、それもiPhone4だと遅い。それしかシーンにないのにパフォーマンスが激重。何か間違えた?でも実際問題、私が重く感じている。シェーダの問題?iPhone4のFillrateが悪いと聞いたことあるけど関係ある?
2.メニューをオブジェクト名、カメラ、パネル、アンカー等で作成してメニューを独自で作成する場合。質問はカメラのことで、たとえば「タイトルスクリーン」ってメニューをひとつのオブジェクトに格納したとして、カメラはひとつだけ使用したとする。もしゲームのメニューとチャットウィンドウに別アセットを容易したらパフォーマンスに悪影響出る?
カメラを3つか4つあると確実にパフォーマンスが激重になる?だとしたらUnityの仕組みがよく分からないし、もし複数カメラがあった場合、それぞれ別のコールが行われて、Draw Callを余分にコールするのとどんな違いがあるのか。
(とくにカメラが別レイヤーでレンダリングされてるのであれば)
3.UIDraggablePanel
ドラッグパネルのリストにて使用オブジェクトが1000あるけど画面表示されるのが10個の場合、1000オブジェクトをあらかじめ生成するのと動的に生成するのとどちらがよいのか?iphone 4でUIDraggablePanelパフォーマンスが落ちる点と連動して関係あるのかなと考えているのですが。

コメント(初心者Bさん)

んー、UI Root配下にひとつのレイヤーでひとつのカメラがベストじゃなかったかな?あと画面外に大量の非表示オブジェクトがあっても配置(geometry)が変わらないならパフォーマンスに何の影響もないんじゃないかな?(パネル全体を動かすのは配置変更に当たらないとおもっているし)

ただ、動的に生成するのがパフォーマンスに悪影響は作者さんに回答おまかせですー。

回答
Draggable Panelは正しく設定することで十分なパフォーマンスを発揮するので、実際にデモのパフォーマンスを見てほしい。その時にパネルの中のものをドラッグするときには配置情報を更新し直す必要あるのでパフォーマンスは当然に落ちる。パネルそのものあるいはUIDraggablePanelのドラッグは実際には何も動かす必要ないためレスポンス早い。

パフォーマンスをさらに早めるにはstaticにすることでウィジェットの大きさ、色、位置が変わらない。これは無駄なチェックを外すのでパフォーマンスが向上する。

賢くやるなら、デフォルトでstaticにしておいて、パネル変更が必要なときにstaticeを外す方法がある(ボタンクリックの時に外す、等)。次のフレームでまた元に戻せば良い。

あと複数カメラはひとつのカメラより確実にリソース消費する。私自身が作成してるWinwardでもカメラはひとつであり、その下に必要なウィンドウがアンカー付でたくさんついている(必要なときまで無効化)。

追加質問(常連メンバーAさん
Bさんの指摘は認識している。確かにUIPanelは別の配置(geometry)を必要としておりDrawCallを余分に消費するので、複数のUI Panelをさらにパネルのなかに入れ込むことは遅くなる要因だ。自分の場合にはUIDraggablePanelではNGUIデモと同じ設定にしてて、パネルだけ動かしてオブジェクトは動かしていない。

ところで、UIPanelをネストしてUIPanelの中にあり、かつ片方がstaticで片方がstaticでない場合は結局static扱いになるのだろうか?
たぶん親が優先されると考えているのかな?自分のプロジェクトでパフォーマンス低下の要因として説明つくのはUIPanelにあるDraggablePanelしか考えられず、ただ二つ目のUIPanelはドラッグ可能であるにも関わらず一つ目をドラッグ不可能としていることである。

追加回答
ネストされたパネルはすべて別エンティティとして扱われる。staticも子が優先され(親から子への)継承は行われない。
----

パフォーマンスに関する議論はケースバイケースだと認識している。ただし、色々なケースにおいて実際の利点・欠点の情報が共有されることで、個々のプロジェクトについて正しい判断が出来るものだ。Unityは日本でも勉強会やセミナーが活発なので、そういった所で議論されたうえでさらに情報の公開が進むことを強く望む。

もっと活発な議論をしようぜ! NGUI!

0 件のコメント:

コメントを投稿

ブックマークに追加

このエントリーをはてなブックマークに追加

自己紹介

自分の写真
Unity3D公式マニュアル翻訳やってる人がスマホ(iPhone, Android)のゲーム開発しています。気軽に面白く初心者が遊べる内容がモットー。Blogでは開発情報をひたすら、Twitterではゲーム作成の過程で参考にしている情報を中心につぶやきます

ページビューの合計

過去7日間の人気投稿

ブログ アーカイブ