120fps — 120フレーム毎秒のフレームレートで、120 Hzリフレッシュレートのディスプレイで利用可能で、各フレームは8.3 msを要します。Apple WWDC 2023 Sessionによると、ProMotionは滑らかさと消費電力のバランスを取るために周波数を24から120 Hzに自動切り替えます。8.3 msは標準予算の半分であり、レンダリングの場合はシリアスな最適化が必要です。
まとめ
120fpsは標準フレームレートの2倍で、ディスプレイが毎秒120回画像を更新します。各フレームには8.33 msの予算があり、60fpsの半分です。これは、GPUとCPUがグラフィックスを2倍の速さで処理する必要があり、60fpsで16.7 msで動作するすべてのアルゴリズムが120fpsで動作するには、効率が2倍である必要があります。
120 Hzディスプレイを備えた最初のモバイルデバイスは、SharpのIGZOパネルを採用したRazer Phone (2017)でした。AppleはiPad Pro (2017)でProMotionという名称で120 Hzを導入し、その後2021年にiPhone 13 ProではiPhoneにも採用されました。Androidでは、2020年から120 Hzがメインストリームになりました: Samsung Galaxy S20、OnePlus 8 Pro、Xiaomi Mi 10。今日では、90–120 Hzがフラッグシップデバイスの標準であり、LTPO技術によって動的な周波数切り替えが可能になりました。
120fpsのユーザー覚えは60fpsとは、スタッターがないというよりも、即時応答の感覚 — カーソル、スクロール、アニメーションが最小のラテンシーで指に従うことが違います。この感覚はよく“液体”や“油性”のスクリーンと言われます。120 Hzを使った後で60 Hzに戻ると、客観的なフレームドロップがなくても、主観的にもさつきを感じます。
120 Hzディスプレイは、MIPI DSI/DPIバスを通じて倍の周波数で信号を送信し、ピクセルを毎秒120回更新します。各ピクセルは8.3 msごとに新しい亮さ値を受け取ります。OLEDパネルの場合、各サブピクセルの発光時間が短縮され、同じ画像の亮さを維持するにはより明るいバックライトが必要になります。
LTPO (低温ポリクリスタリン酸化物)は、LTPS(高速スイッチング)とIGZO(体止時の低消費電力)を組み合わせたOLEDディスプレイ製造技術です。LTPOにより、ディスプレイは追加の電力コストなしで、1から120 Hzまで動的にリフレッシュレートを変更できます。Always-On Displayモードでは周波数が1 Hzまで下がり、スクロール中は120 Hzまで上がります。これにより、常に120 Hzで動作するディスプレイと比較して、30%までの電力節約が可能です。
Frame pacing — フレーム間の間隔の均一性は、120fpsにおける最も重要なパラメータです。60fpsで2–3 msの違が目に見えないのに対し、120fpsでは同じ絶対的な違いがフレーム期間の25%を展げ、スタッターとして知覚されます。スムーズな120fpsを実現するには、各フレームが8.3 ms ±1 ms内に収まる必要があります。Xcode InstrumentsのFrameRateのようなツールは、平均FPSだけでなく、frame pacingを評価するための間隔のヒストグラムも表示します。
// iOS — CADisplayLinkを使用した120 Hzディスプレイの検出
func checkDisplayRefreshRate() {
let link = CADisplayLink(target: self,
selector: #selector(step))
if let preferredRate = link?.preferredFrameRateRange {
print("最大周波数: \(preferredRate.maximum) Hz")
}
}
ProMotionは、120 Hzまでのアダプティブリフレッシュレートを備えたディスプレイに対するAppleの商標です。最初はiPad Pro 10.5 (2017)で導入され、その後2021年にiPhone 13 ProおよびMacBook Pro (2021)でも採用されました。ProMotionは単なる120 Hzではありません — それはインテリジェントな周波数管理です: システムがコンテンツのタイプを分析し、パフォーマンスと消費電力の最適なバランスを得るために周波数を切り替えます。
ProMotionは4つのモードをサポートします: 静止コンテンツと24fps動画に24 Hz、30fps動画に30 Hz、UIナビゲーションに60 Hz、スクロールとゲームに120 Hz。モード切り替えは1フレーム(8.3 ms)で行われ、ユーザーには見えません。開発者はCADisplayLinkのpreferredFrameRateRangeを通じて周波数選択に影響を与えることができますが、最終的な判断はコンテンツ分析に基づいてシステムが行います。
AppleはiOS 15からProMotionを使用するためのAPIを提供しています。CADisplayLink.preferredFrameRateRangeで予想周波数範囲を設定できます。UIScene.ActivationConditionsはシーン姻移時に周波数に影響を与えることができます。Metalレンダリングの場合、ProMotionとの同期にはCAMetalLayer.displaySyncEnabledをtrueにする必要があります。アプリが120fpsに最適化されていない場合、iOSは自動的に60 Hzに切り替えます。これはXcodeのGPU Reportセクションで確認できます。
// iOS — ゲームモードの120fpsリクエスト
let displayLink = CADisplayLink(
target: self,
selector: #selector(gameLoop)
)
if #available(iOS 15.0, *) {
displayLink?.preferredFrameRateRange =
CAFrameRateRange(minimum: 80,
maximum: 120,
preferred: 120)
}
displayLink?.add(to: .current,
forMode: .default)
120fpsへの最適化は、コードを単に2倍にするだけではなく、レンダリングアーキテクチャをやり直すことです。60fpsで16.7 msで完了していた処理が、今や8.3 msで完了する必要があります。これはパイプラインのすべての段階に影響します: CPUの準備、GPUレンダリング、システムコール。
120fpsでは、同じGPUロードを維持するために、フレームあたりのdraw calls数を60fpsの半分にする必要があります。60fpsで400のdraw callが可能な場合、120fpsでは200を超えてはなりません。draw callsを削減するにはテクスチャアトラス、メッシュ統合、GPUインスタンシングを使用します。Metalでは、Indirect Command Buffersを使用します; Vulkanでは、並列コマンド記録のためにSecondary Command Buffersを使用します。
Shaders — もう一つの重要な要因です。複数のテクスチャルークアップと数学的な操作を含む複雑なピクセルシェーダーは、8.3 msの予算を軽く超える可能性があります。低精度シェーダー(floatの代わりにhalf)を使用し、インストラクションとテクスチャサンプルの数を減らします。モバイルGPU (Apple A17、Snapdragon 8 Gen 3)では、各テクスチャルークアップに2—4サイクルかかり、120fpsではこれがボトルネックになりうるためです。
120fpsでは、メインスレッドがGPUレンダリングのための時間を残すために4–5 msでフレームを準備する必要があります。メインスレッドでの同期処理 — データベース読み込み、JSON解析、画像読み込み — はスタッターを生じます。重い処理はすべてバックグラウンドスレッドに移し、非同期APIとスレッドプールを使用します。iOSでは、qualityOfService .userInteractiveを持つDispatchQueueは、重要なレンダリングコードのためだけに保留する必要があります。
| コンポーネント | 120fps予算 | 60fps予算 |
|---|---|---|
| CPU (メインスレッド) | 4 ms | 8 ms |
| GPUレンダリング | 4 ms | 8 ms |
| コンポジット | 0.3 ms | 0.7 ms |
| VSync待ち | 0–2 ms | 0–5 ms |
120fpsと60fpsの比較は、単に滑らかさが2倍になるだけではありません。違いはコンテンツのタイプによって異なる方法で知覚されます。スクロールやUIアニメーションでは、120fpsは主観的により“レスポンシブ”なインターフェースを提供します。ゲームでは、120fpsの利点は、モーションブラーの減少と高速物体のより適确な追跡によって明らかになります。
消費電力 — 主なトレードオフです。120fpsは、同じディスプレイの亮さで、60fpsより30–50%多くの電力を消費します。これは、4000 mAhバッテリーで、120fpsでの1時間のゲームにより、バッテリーが約25–30%高速で消耗されることを意味します。LTPOディスプレイは、静止画面で周波数を1 Hzまで下げることで問題を部分的に解決しますが、アクティブな使用中(スクロール、ゲーム)は周波数が最大になります。
60fpsと120fpsの選択は、開発者の優先事項によります。ソーシャルネットワーク、メッセンジャー、ニュースアプリでは、120fpsはあまり有意义のある利点はありません — 主なインタラクション(読み取り、テキスト入力)は超滑らかさの恩恵を受けません。ゲーム、地図、グラフィックエディタ、濃強なアニメーションを使用するアプリでは、120fpsが競争利と品質の印になります。
テスト 120fpsには特別なアプローチが必要です: 標準的60fpsメトリクスで120 Hzでのframe pacingの問題を明らかにできません。実際のスクリーン動作を録画するためにハイスピードカメラ (120+ fps) を使用するか、プラットフォーム組み込みツール — iOS用Xcode Metal CaptureやAndroid用AGI (Android GPU Inspector) を使用します。これらのツールはVSync待ちを含む各フレームの正確な時間を表示し、マイクロスタッターを識別するのに役立ちます。
よくある質問
いいえ。120fpsには2倍の電力とコンピュータリソースが必要です。静止コンテンツやシンプルなUIには、60fpsで十分です。120fpsの利点は動的な画面(スクロール、ゲーム、移行アニメーション)で注目されます。
Xcode Instruments(Core Animationテンプレート)またはAndroid Studio Profilerを使用します。iOSでは、CADisplayLink.timestampを確認します — コールの間隔が約8.3 msであるべきです。Androidでは、Developer OptionsでShow refresh rateを有効にします。
ディスプレイがピクセルを2倍の頻度で更新し、GPUが2倍のレンダリング処理を行い、CPUが2倍のフレームを処理するためです。各操作が電力を消費します。LTPOディスプレイは静止時に周波数を下げますが、アクティブな使用中は、消費電力が周波数に比例して増加します。
はい。Android 11以降、システムは複数のリフレッシュレートをサポートしています。開発者はWindowManager.setPreferredRefreshRateを通じて120 Hzをリクエストできます。ただし、すべてのデバイスが120fpsを穏やかに維持できるとは限りません — GPUレンダリングの最適化が必要です。
盲比較テストでは、多くのユーザーがスクロールやアニメーション中に違いを感じます。ただし、日常使用(ソーシャルメディア、動画、メッセンジャー)では、違いは主観的に小さいです。120 Hzに慣れた後に60 Hzに戻ると、もさつきを感じます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。