2015-09-28 12 views
9

私はSceneKitスタータープロジェクトに非常に一貫性のないフレームレートを見ています。時にはそれが60のFPS(12msのレンダリング、6msの金属フラッシュ)、そして時には劣らず、これ以上の40件のfps(20msのレンダリング、6msの金属フラッシュ)、で、常にそれを実行時に常に動作します。一貫性のないSceneKitフレームレート

フレームレートは、アプリケーションを再度開くとランダムに変化し、次の再表示までそのフレームレートにとどまります。私は、OpenGL ESに切り替える試みたが、それはスタータープロジェクトでそれを修正するようだが、私はまだ私の本当のアプリでそれらの滴を参照してください。

スタータープロジェクトは変更されておらず(回転船)、iOS 9.0.1を実行しているXcode 7.0とiPad Mini 4でテストしています。私は何が問題を引き起こしているのかわからない、SceneKit、iOSまたは私のデバイス。

編集:メタルシステムトレースは60fpsで最初の部分、2番目はホームボタンを押してアプリを開き、40fpsで実行します。 2番目の部分には多くのカラーロード/ストアがあるようです。

enter image description here

+0

あなたのデバイスはiPhone用のもので、iPad上でテストしていただけですか?私はiPhone専用のゲームで作業していたので、iPadでテストしたところ、40fpsも受け取った。しかし、デバイスのターゲットを普遍的なものに変更すると、iPadは常に60 fpsにとどまりました。 – Jarron

+0

@ジャロンそれは実際にはiPad専用のプロジェクトでした。 Appleのフォーラムを閲覧しました。これは既知のバグであるようです。 – Xzya

+0

@ Xzyaアップルのフォーラムではなくディスカッションへのリンクがありますか?私はフレームレートが60fpsで始まり、次にゆっくりと50sに落ちるのを見ています。 –

答えて

4

残念ながら、それはSceneKit(およびSpriteKitベース)のように見えるが、それらを使用して、それらを犠牲にし、開発の進化の段階にあります。

この問題は、私の知る限り、すべてのデバイスに間違いであり、次のフレームワーク:

でもでOpenGLの代わりに金属を使用して
  • SceneKit
  • SpriteKitベース
  • メタル

ゲームフレームワークの問題は依然として存在します。

iOSが安定した60fpsを維持していると判断した場合、フレームレートを40fpsに固定しようとしているようです。

私は40fpsへの低下の原因がiOSが「問題」を解釈することにはあまりよくないと思うし、アプリの立ち上げ時に不安定な点で過度に短い時間にわたってパフォーマンスサンプリングを行っても、いったんiOS自体が実際に落ち着いてしまって、app/gameが妨げられることなく動くようになったら、そこにはない。

jetFighterとデフォルトのテンプレートは、これまでトラブル60fpsの時に実行しているべきではありません。だから、それだけで40fpsでのゲームループをキャップする際のiOSによるポーリングは時間の短すぎるため、あまりにも早く打ち上げで行われているかを決定する場合は、このフレームレートキャップ「機能」がアクティブになるという意味になります。これは、ゲームの最初のいくつかのフレームのいずれかの中断が事前emptively/60fpsのを維持することはできませんではないだろうゲームを考え、40fpsでそれをキャップするのiOSの原因となることを意味します。

皮肉なことに、おそらくiOSはゲームの立ち上げ時に検出されたしゃっくりの原因で、おそらく安定した60fpsを維持できないアプリだと考えられます。

私は分化しています!

これは、観察に基づいており、問題に関する既知の事実はありません。しかし、それは私が起こっていることと、今まで私が持っている唯一の合理的な説明と一致しています。

「良いニュース」は、iOSが1回だけサンプリングして残していることです。これは、ゲームをスピードでサンプリングし、中断後にホーム画面にジャンプしてアプリに戻ります。

たとえば、iOSでフレームレートを再サンプリングし、デバイスが接続されている間にQuicktime screenCaptureを起動するだけで、40から60、または60から40にジャンプすることができます。どうやらこれ(および他のいくつかのアクション)は、iOSが実行中のアプリケーションのフレームレート一貫性をテストし、再びiOSがその結果に応じて調整します。

そして、任意の時間が経過した後、再度スキャンします。 JetFighterのテンプレートをしばらく実行しておくと、最終的にiOSはフレームレートの一貫性のテストをもう一度行い、最初は60fpsで安定していると判断し、60fpsに戻します40fpsで実行する必要があります。

私はこのデバイス上の統計情報で「レンダラー」と呼ばれるものを意図的に見ているため、40フィートの速度で他の十分な時間がない場合でも、それが必要なものになるようなことが起こります。

AppleはiPad Proに関するステートメントに従って可変フレームレートの技術を開発しており、サポートするiOSの機能は(一見)画面技術のリリースより前に実装されていてひどく奇妙なことに実行中のアプリをテストして、強制的に遅いフレームレートにロールダウンするタイミングを決定します。

40fpsが奇数であり、60fpsのリフレッシュレートで現在のデバイスのデフォルトのリフレッシュレートに等しく分割されていないとすれば、iPad Proは40fpsに興味があれば120Hzの画面をリフレッシュする可能性が高いです。

現在のiPadsからキャプチャするとき、iOSでフレームレートが40fpsに固定されている場合、60Hzのリフレッシュデバイスで40fpsにする方法は2:1:2:1:2:1のフレームシーケンスです。

これは決して理想的ではありません。これは60Hzの画面でこれを見たいと思うことはありません。目の不自由な人でも目に見えて迷惑です。

おそらく、この可変フレームレート技術は新しいiPhoneで真の40fpsを可能にしますが、わかりません。まだテストされていないものは見たことがないが、iPad Proで真に可能性のあるものは、現時点でこの問題を引き起こしている可能性があることは奇妙に思える。

+0

これは実際にはそうであるようです。トレースを詳しく見てみると、2:1:2:1のパターンがはっきりと見えます。http://i.imgur.com/DUEI0A3.png – Xzya