SlideShare a Scribd company logo
1 of 56
UE4のスレッドの流れと
Input Latency改善の仕組み
Epic Games Japan / Support Manager
Nori Shinoyama (篠山範明)
INPUT LATENCY
● UE4のDefault動作は、並列性を最大限活かす様につくられています
しかしその副作用として、逆にLatencyが長くなる可能性があります
● 30fpsのゲームで特に顕著に
○ 30fpsのゲームでは130ms以上のLatency
○ 60fpsでは軽減されるも、格闘ゲームなど入力がシビアなゲームでは依然問題に
● 4.19からInput Latencyの改善が入りました。
○ DefaultではOffです。Onにすることで新たな制約が生まれます
○ 対応しているプラットフォームとしていないプラットフォームがあります、
各プラットフォームのドキュメントを参考にしてください
Input Latencyの話をする前に。。。
どのThreadがどの様に毎フレーム走っているのかをおさらいします
INPUT LATENCY
免責事項
これから各スレッドの動きと同期について説明していきますが、
厳密には各プラットフォームによって動きが違う可能性があります
例えば。。。
RHI Threadがあるかないか
フリップ命令を発行するのがCPUかGPUか
などなど
各プラットフォームでの動作の詳細を確認したい場合、
必ずそのプラットフォームが出しているCPU Profilerを参照してください
Third Person TemplateでInput LatencyのWorst Caseを見てみます
GAME
Render
RHI
GPU
VSync
Profilerで見る各スレッドの処理タイムラインの例
超スーパーウルトラ簡略図
GAME
Render
RHI
GPU
VSync
このGameThreadが画面に描画されるのはいつ?
最初に誤った例を説明します
GAME
Render
RHI
GPU
VSync
※誤った例です
Game ThreadからRender Threadに行き...?
GAME
Render
RHI
GPU
VSync
※誤った例です
Game ThreadからRender Threadに行き...?
Render ThreadはUE4の中間グラフィクスコマンドである
RHI(Render Hardware Interface)コマンドを発行
GAME
Render
RHI
GPU
VSync
※誤った例です
RHI Thread (及びWorker Threads)が
RHIをGPU Native言語に変換
GAME
Render
RHI
GPU
VSync
※誤った例です
積まれたコマンドをGPUは描画して。。。
次のVsyncを待って。。。
GAME
Render
RHI
GPU
VSync
※誤った例です
このフレームで画面に表示!
…ではありません!
正しくはこんな感じです
GAME
Render
RHI
GPU
VSync
とあるプラットフォームでの
UE4のDefault動作
このフレームで表示されます
GAME
Render
RHI
GPU
VSync
とあるプラットフォームでの
UE4のDefault動作
このフレームで表示されます
これがLatencyが長いと言われる理由
GAME
Render
RHI
GPU
VSync
この空白は?
この空白は?
DisplayへのFlipが1フレーム遅い?とあるプラットフォームでの
UE4のDefault動作
各空白の原因を知るために
各スレッドの役割と動きをおさらいしていきます
Render Thread
GAME
Render
RHI
GPU
VSync
この空白は?
Default動作でのRender Threadの動き
Render Threadの動作を大きく2つに分けてみると。。。
1. Init Views
画面に映るオブジェクト、ShadowMapに描画されるオブジェクトの選別
2. RHI Commandの発行
RHI Commandは、GPUのNativeCommandに変換するために
RHI Thread(及びWorker Threads)らに送られる
RHI Threadが前フレームの処理を終えるまで、RHI Commandを送れない
GAME
Render
RHI
GPU
VSync
Init Views
RHI Commands
Generation
GAME
Render
RHI
GPU
VSync
Init Views
RHI Commands
Generation
前フレームのRHI Threadが終わるまでRHI Commnadsを発行できない, なので待っている
RHI Thread
GAME
Render
RHI
GPU
VSync
この空白は?
とあるプラットフォームでの
UE4のDefault動作
RHI Threadの役割
RHI Threadの役割
1. RenderThreadから送られてくるRHIをGPU Commandに変換する
2. GPU CommandをGPUに送る(Submitする)
3. Flip命令をGPUに送る
(Flip命令: ディスプレイに現在描画したフレームバッファを表示させる命令)
GAME
Render
RHI
GPU
VSync
とあるプラットフォームでの
UE4のDefault動作
RHIのGPUコマンドへの変換
作成したコマンドをGPUに送る
Flip命令も送る
GAME
Render
RHI
GPU
VSync
RHIのGPUコマンドへの変換
とあるプラットフォームでの
UE4のDefault動作
作成したコマンドをGPUに送る
Flip命令も送る
GPUにコマンドを発行したくて待っている
GAME
Render
RHI
GPU
VSync
とあるプラットフォームでの
UE4のDefault動作
GPUは前のフレームのCommandを処理中
RHIはその間GPUに今のフレームのCommandを送らない
GPU & Flip
GAME
Render
RHI
GPU
VSync
DisplayへのFlipが1フレーム遅い?とあるプラットフォームでの
UE4のDefault動作
GPU
GPUの処理負荷だけ見てみると。。。
GPU
この様な単位で1フレーム毎に描画しているように見えますが。。。
実際は違います
GPU
本当はこのように描画されています
この空白なに??
GPU
拡大して見ていきます
GPU
Temp Buffer
Frame Buffer
A
Frame Buffer
B
Back
Buffer
Display
Temp Buffer に描画中
(その後Bにコピー予定)
Aには既に前フレームの
描画結果が書き込み済み
Displayへの表示待ち
GPU
Temp Buffer
Frame Buffer
A
Frame Buffer
B
Back
Buffer
Display
Dsiplayに表示されているのでコピーできない…
待つ
GPU
Temp Buffer
Frame Buffer
A
Frame Buffer
B
Back
Buffer
Display
Flip!!
VSync!!!
Frame Buffer
A
Frame Buffer
B
GPU
Temp Buffer
Frame Buffer
A
Frame Buffer
B
Back
Buffer
Display Frame Buffer
A
Frame Buffer
B
ここでコピー & Slate描画
GPU
Temp Buffer
Frame Buffer
A
Frame Buffer
B
Back
Buffer
Display Frame Buffer
A
Frame Buffer
B
BはFlipまで次のVSyncを待ち…
次のフレームの描画がTemp Bufferに行われる
GPU
Frame Buffer
A
Frame Buffer
B
VSync!!!
Flip!!
Frame Buffer
A
Frame Buffer
B
ようやく、Frame Buffer Bの結果が画面に表示される
Back
Buffer
Display
GAME
Render
RHI
GPU
VSync
これが、DisplayへのFlipが遅い理由ですとあるプラットフォームでの
UE4のDefault動作
GAME
Render
RHI
GPU
VSync
長々と説明しましたが、これが1フレームの一連の処理の流れです
Render/RHI/GPUの動作を見ながら、
各スレッドが待つ理由を確認していきました
UE4のスレッド間の流れ まとめ
UE4はどのスレッドも”行けるところまでなるべく早く動こう”とする
並列性が確保できるがその副作用として、
RenderはRHIを
RHIはGPUを
GPUはFlipを
と待ち、レイテンシーが増加する傾向にある
このレイテンシーを改善するための設定が4.19からできました。
Input Latency Setting
CVars for Input Latency Improvement
● r.GTSyncType
○ Determines how the game thread syncs with the render thread, RHI thread and GPU
○ 0: Sync the game thread with the render thread (default)
○ 1: Sync the game thread with the RHI thread
○ 2: Sync the game thread with the GPU swap chain flip
● rhi.SyncInterval
○ Determines the frequency of VSyncs in supported RHIs.
○ 0 - Unlocked
○ 1 - 60 Hz (16.66 ms)
○ 2 - 30 Hz (33.33 ms)
● rhi.SyncSlackMS
○ Increases input latency by this many milliseconds, to help performance (trade-off tunable).
Gamethread will be kicked off this many milliseconds before the vsync
○ Default: 10ms
公式ドキュメントが用意されているので、詳しくはそちらを参照してください
https://docs.unrealengine.com/ja/Platforms/LowLatencyFrameSyncing/index.html
Input Latency 調整のコンセプト
このInput Latencyの設定によって、
全ての起点であるGame Threadの開始を明示的に遅れらます
結果として、そうすることで各スレッドの待ち時間を減らしレイテンシーの低減を図ります
Input Latency改善のための基本設定はこの3つになるかと思います
● rhi.SyncInterval 1/2 (何フレームのゲームを想定しているか?: 1:60fps, 2:30fps)
● r.GTSyncType 2 (Game Threadの開始をVSyncを待つ)
● rhi.SyncSlackMS 0 (Game Threadの開始をVsyncより何ms早くさせるかのオフセット)
Input Lateny改善の前後を比較してみます
GAME
Render
RHI
GPU
VSync
Input Latency改善前の動作
可能な限り最速で動こうとする
Game Thread
Render
RHI
GPU
VSync
Input Latency改善後の動作
GTSyncType=2
GAME
VSyncGame Threadの開始位置を
このVSyncが来るまで待つようにする
rhi.SyncSlackMSのoffset
(default 10ms)
Render
RHI
GPU
VSync
Input Latency改善後の動作
GTSyncType=2
GAME
VSync
Game Threadの開始が遅いため、
各スレッドの待ちがなくなり
レイテンシーが高速になる
VSync
Input Latency改善の副作用
GTSyncType=2
VSync
しかし、このLatencyの改善には副作用があります
Latencyの改善により、同一フレームの各スレッドが並列で走ります
そのため各スレッドの依存関係が生じ、
各スレッドでの処理負荷が想定フレームに
収まっていても処理落ちしてしまうかもしれません
使用する際は各プラットフォームのプロファイラなどを用いて、
各種スレッドの依存関係と処理負荷を確認するようにしてください
まとめ
UE4.19でのInput Latencyの改善
1. 使うと新たな制約が出て処理負荷をよりシビアにおさえないといけない。
2. r.GTSyncTypeで動的変更可能なので、カットシーンなどではオフにできる。
3. rhi.SyncSlackMSでGameThreadの開始位置を変更可能。
デフォルトではVSyncの10ms前からGameThreadがスタートする
ありがとうございました!

More Related Content

What's hot

What's hot (20)

UE4における大規模背景制作事例(コリジョン編)
UE4における大規模背景制作事例(コリジョン編) UE4における大規模背景制作事例(コリジョン編)
UE4における大規模背景制作事例(コリジョン編)
 
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
 
UE4における大規模背景制作事例 描画特殊表現編
UE4における大規模背景制作事例 描画特殊表現編UE4における大規模背景制作事例 描画特殊表現編
UE4における大規模背景制作事例 描画特殊表現編
 
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DDマテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
マテリアルとマテリアルインスタンスの仕組みと問題点の共有 (Epic Games Japan: 篠山範明) #UE4DD
 
60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編
 
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
 
UE4におけるLoadingとGCのProfilingと最適化手法
UE4におけるLoadingとGCのProfilingと最適化手法UE4におけるLoadingとGCのProfilingと最適化手法
UE4におけるLoadingとGCのProfilingと最適化手法
 
UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
 
UE4の色について v1.1
 UE4の色について v1.1 UE4の色について v1.1
UE4の色について v1.1
 
猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem 猫でも分かるUE4.22から入ったSubsystem
猫でも分かるUE4.22から入ったSubsystem
 
豚×京都 ~UE4でなろう破壊神~ (UE4 VFX Art Dive)
豚×京都 ~UE4でなろう破壊神~ (UE4 VFX Art Dive)豚×京都 ~UE4でなろう破壊神~ (UE4 VFX Art Dive)
豚×京都 ~UE4でなろう破壊神~ (UE4 VFX Art Dive)
 
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
大規模タイトルにおけるエフェクトマテリアル運用 (SQEX大阪: 林武尊様) #UE4DD
 
UE4アセットリダクション手法紹介
UE4アセットリダクション手法紹介UE4アセットリダクション手法紹介
UE4アセットリダクション手法紹介
 
猫でも分かるUMG
猫でも分かるUMG猫でも分かるUMG
猫でも分かるUMG
 
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
 
UE4のレイトレで出来ること/出来ないこと
UE4のレイトレで出来ること/出来ないことUE4のレイトレで出来ること/出来ないこと
UE4のレイトレで出来ること/出来ないこと
 
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
 
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
 

More from エピック・ゲームズ・ジャパン Epic Games Japan

More from エピック・ゲームズ・ジャパン Epic Games Japan (20)

初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
 
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
 
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめUnreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
 
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
 
UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)
 
Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)
 
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive OnlineUE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
 
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
 
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMERVisual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
 
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMERUnreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
 
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMERバレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
 
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMERSAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
 
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
 
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMERUE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
 
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMERオンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
 
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMERMetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
 
Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介
 

UE4のスレッドの流れと Input Latency改善の仕組み

Editor's Notes

  1. In the end, we disabled low latency mode in 60fps mode (since 60fps is lower latency anyway), but we are looking to re-enable in a future release.
  2. In the end, we disabled low latency mode in 60fps mode (since 60fps is lower latency anyway), but we are looking to re-enable in a future release.