Frame Pacing (フレーム ペーシング) は、デバイスのネイティブ リフレッシュ レートより低いフレーム レートでフレームのレンダリングを行うよう、アプリケーションを制限するシステムです。この機能によりアプリケーションは、レンダリングの一貫性と安定性を優先して、フレームレートを制限しない実行よりもスムーズなユーザー エクスペリエンスを実現できます。In Unreal Engine 4 (UE4) のフレーム ペーシングは、プロジェクトの構成を記述する Device Profiles (デバイスプロファイル) を使用してデバイスごとに設定できます。
デバイスプロファイルでフレーム ペーシング設定を編集する
フレーム ペーシングは、対象のデバイスを記述した DeviceProfiles.ini
ファイルの CVars で制御します。
- iOS デバイスの場合は
[/Script/IOSRuntimeSettings.IOSRuntimeSettings]
でデバイスプロファイルを追加可能 - Android デバイスの場合は
[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
でデバイスプロファイルを追加可能
フレーム ペーシングを制御するパラメータを以下に示します。
パラメータ | 使用方法 | 説明 |
---|---|---|
FrameRateLock = [value] |
FrameRateLock=True |
True に設定すると、すべてのフレーム ペーシングを許可します。 |
bEnableDynamicMaxFPS = [value] |
bEnableDynamicMaxFPS=True |
True に設定すると、対応するデバイスで 120Hz を許可します。 |
4.24 以前で利用可能 | ||
rhi.synchinterval = [value] |
rhi.synchinterval = 1 |
4.24 以前でフレーム ペーシングのリフレッシュ レートを設定する従来の変数で、1 の値を 60Hz のリフレッシュ レートとして扱います。 |
4.25 以降で利用可能 | ||
r.setframepace [value] |
r.setframepace 30 |
r.setframepace 30 4.25 で iOS と Android に推奨する新しい方法で、リフレッシュ レートを指定する値に直接設定します。 |
a.UseSwappyForFramePacing = [value] |
a.UseSwappyForFramePacing=1 |
デフォルトの設定は 0 で、この値を 1 に設定すると Android デバイス標準の UE4 フレーム ペーサーの代わりに、Google が提供する Swappy フレーム ペーシング ソリューションを有効化します。Swappy は UE4 フレーム ペーサーと同じ CVar を使用します。 |
高リフレッシュ レートのガイドライン
フレーム ペーシングの最大リフレッシュ レートは通常 60Hz に制限されていますが、bEnableDynamixMaxFPS
を有効化するとこの制限を 120Hz に上げられます。60 Hz を超えるリフレッシュ レートをサポートするモバイル デバイスの例を示します。
- Samsung Galaxy S20
- OnePlus 7T
- Google Pixel 4
- iPad Pro 第 2 世代以降
Android 向け Swappy フレーム ペーシング
Unreal Engine 4.25 は従来のフレーム ペーシング システムに加えて、Android Game SDK で Google が提供する Swappy フレーム ペーサー を統合しています。
通常、Android ハードウェアはフレーム バッファーを使用して、フレーム準備遅延の検出時に過去のフレームを表示することで画面のテアリングを防止します。ところが、ゲームに使用するレンダラの多くがこのプロセスに対応しておらず、同調せずに表示したフレームよりも先に進みます。通常は入力のサンプリング後に遅延が発生するので、フレームの表示時間が大幅に変動し、タッチスクリーン制御で入力のレイテンシーが増大します。
Swappy はこのビヘイビアを安定させるために設計された Android 独自のフレーム ペーシング ソリューションであり、フレーム ペーシングの機能を提供するのはもちろん、ゲームのレンダリング サイクルと Android デバイスの更新サイクルの効率的な通信を可能にします。これは他のハードウェアすべてに使用してきた、従来の UE4 フレーム ペーサーの代替手段です。
Swappy を有効化する
4.25 の時点で Swappy にはさらなるテストが必要で、現状 Unreal の Android プロジェクトでデフォルトのフレーム ペーサーではありません。しかし従来のフレーム ペーサーと比較して、実質的にスムーズなパフォーマンスを実現しています。そのため、これを有効化することを推奨します。今後のバージョンのエンジンでは Swappy が Android に対する新しいデフォルトのフレーム ペーサーになる予定です。
Android プロジェクトで Swappy を有効化するには、使用する Android プロファイルに a.UseSwappyForFramePacing=1
を追加します。また、すべての Android デバイスで有効化する場合は、これを Android_Default
に追加します。
C++ でフレーム ペーシングを制御する
フレーム ペーシングを C++ で制御する場合は FPlatformRHIFramePacer
インターフェースから static 関数を呼び出します。こうした関数のパラメータとして使用する場合は、フレームのペースを 32 ビットの整数として渡します。
FPlatformRHIFramePacer::SupportsFramePace
は、指定したフレームのペースが対象デバイスのリフレッシュ レートと互換性があるかどうかを確認します。FPlatformRHIFramePacer::SetFramePace
は指定する整数値をペースに設定して、FPlatformRHIFramePacer::GetFramePace
は現在のフレームのペースを返します。