Unreal Engine 5.6 最新アップデート - オープンワールドで60FPSを達成するための最適化

15.9K Views

July 31, 25

スライド概要

2025年6月にリリースしたUnreal Engine 5(UE5)の最新バージョン、UE5.6では、高精細かつ大規模なオープンワールドを60FPSで動作させるための様々な最適化が行われています。
本スライドでは、UE5.6で行われたアップデートを中心にLumenやNaniteでリッチなグラフィックを実現しつつ60FPSを達成するための設定やテクニックを紹介します。

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Unreal Engine 5.6 最新アップデート オープンワールドで 60FPS を達成するための最適化 Senior Software Engineer, Developer Relations Takashi Suzuki Software Engineer, Developer Relations Yutaro Sawada

2.

Nanite オープンワールド開発 Unreal Engine 5 は シームレスで広大なワールドを実現する手段を エンジンに含めてリリースされました Chaos WorldPartation Zen PCG Lumen

3.

「今までにない 圧倒的なビジュアル の実現」

4.

〇〇km x 〇〇km位の 広さは欲しい もちろん密林は必須 「今までにない 圧倒的なビジュアル の実現」 ランドスケープ感の無い フィールド イキイキとした市街地

5.

ワールドの密度は ● ● ● ● ● GPUワークロードの増大 メモリ消費量の増大 ストリーミングパフォーマンス ガベージコレクション 全体的なパフォーマンスの低下

6.

「60FPSはマストで」

8.

Unreal Engine 5.6の登場

9.

STATE OF UNREAL 2025 4K | Unreal Fest Orlando @Youtube https://www.youtube.com/watch?v=ubCXb9BHhbE

10.

Table of contents ストリーミングの改善 移動処理の並列化 グラフィックスの改善

11.

ストリーミングの改善

12.

比較動画

13.

ワールド パーティション 広大でシームレスな世界を実現するための仕組み 複数の開発者による同時編集 ランタイム用のセル自動分割 RuntimePartitionLHGridの追加 (UE5.4) 遠景表示用のHLOD生成

14.

高密度なワールドでの問題点 開発中に遭遇しえる数々の課題 メモリとの戦い セルのロード時間 ヒッチの増加 どの程度のロード距離を設定するべきか 各各セルのロード時間が長くなり、高速に移 動すると読み込みが間に合わなくなる ガベージコレクション セルのコンテンツの登録/解除 ストリーミングプール

15.

ストリーミングの改善 5.6で導入された改善点 UnifiedStreamingBudget 非同期 PhysicsState生成 ゲームスレッド上の処理の許容時間 をより適切に各処理に分配 ワーカースレッドに処理をオフロード し、数倍の登録処理をヒッチ無しで処 理できるように RuntimeCellTransfomer FastGeo プラグイン セル内のコンテンツをより効率の良 い形式に変形 さらに随所に並列処理を実装

16.

ストリーミングの改善 5.6で導入された改善点 UnifiedStreamingBudget 非同期 PhysicsState生成 ゲームスレッド上の処理の許容時間 をより適切に各処理に分配 ワーカースレッドに処理をオフロード し、数倍の登録処理をヒッチ無しで処 理できるように RuntimeCellTransfomer FastGeo プラグイン セル内のコンテンツをより効率の良 い形式に変形 さらに随所に並列処理を実装

17.

タイムライン Request 16.6ms GameThread 16.6ms

18.

タイムライン Request GameThread AsyncLoading IO

19.

タイムライン Request ProcessAsyncLoading AddToWorld PhyssicsState 生成 GameThread AsyncLoading IO RenderState 生成

20.

タイムライン Request 次のRequest ProcessAsyncLoading ProcessAsyncLoading AddToWorld PhyssicsState 生成 RenderState 生成 RemoveFromWorld GameThread AsyncLoading IO AsyncLoading IO

21.

タイムライン Request 次のRequest ProcessAsyncLoading ProcessAsyncLoading AddToWorld RemoveFromWorld 16.6ms 16.6ms 16.6ms GameThread AsyncLoading IO AsyncLoading IO

22.

セルのロードにおけるゲー ムスレッド上の 処理時間割り当て設定 それぞれが個別に時間予算を持つ 単純に予算を下げると、処理完了までが遅延してしまう ;ProcessAsyncLoading予算 s.AsyncLoadingTimeLimit=5.0 s.PriorityAsyncLoadingExtraTime=15.0 ;AddToWorld予算 s.LevelStreamingActorsUpdateTimeLimit=5.0 ;RemoveFromWorld予算 s.UnregisterComponentsTimeLimit=1.0

23.

ProcessAsyncLoading 5ms AddToWorld 5ms RemoveFromWorld 1ms

24.

UnifiedStreamingBudget ゲームスレッドで時分割処理されている ● ProcessAsyncLoading ● AddToWorld ● RemoveFromWorld の処理時間を統一して割り振る仕組み s.UseUnifiedTimeBudgetForStreaimg=true s.AsyncLoadingTimeLimit=5.0 s.LevelStreamingActorsUpdateTimeLimit=1.0 合計値 s.PriorityAsyncLoadingExtraTime=5.0 s.PriorityLevelStreamingActorsUpdateExtraTime=1.0 合計値

25.

AsyncLoading UnifiedStreamingBudget AddToWorld

26.

UnifiedStreamingBudget ヒッチの改善 セルのロードレスポンスの改善

27.

改善点 UnifiedStreamingBudget 非同期物理ステート生成 ゲームスレッド上の処理の許容時間 をより適切に各処理に分配 ワーカースレッドに処理をオフロード し、数倍の登録処理をヒッチ無しで処 理できるように RuntimeCellTransfomer FastGeo プラグイン セル内のコンテンツをより効率の良 い形式に変形 さらに随所に並列処理を実装

28.

物理ステート生成負荷 セルをストリーミングした時に大量の物理ステートが生成され、ゲーム スレッドを占有する問題 プロシージャル生成でばら撒かれる、 スタティックメッシュや ISMで発生しやすい コリジョンを無効化しても良いものは積極的に NoCollisionに設定する ことも重要

30.

非同期物理ボディ生成 物理ステート生成処理を ワーカースレッドにオフロード セルロード時のヒッチの改善 p.Chaos.EnableAsyncInitBody=true LevelStreaming.AllowIncrementalPreRegisterComponents=true LevelStreaming.AllowIncrementalPreUnregisterComponents=true

31.

次のTickに間に合わないと 移動処理などが物理ワールドのロック待ちでブ ロックされる可能性 AddToWorld AsyncInitBody

32.

改善点 UnifiedStreamingBudget 非同期 PhysicsState生成 ゲームスレッド上の処理の許容時間 をより適切に各処理に分配 ワーカースレッドに処理をオフロード し、数倍の登録処理をヒッチ無しで処 理できるように RuntimeCellTransfomer FastGeo プラグイン セル内のコンテンツをより効率の良 い形式に変形 さらに随所に並列処理を実装

33.

Streaming Improvements for Dense Worlds @ Unreal Fest Orlando 2025 https://youtu.be/zP3er6tA6Ks?t=11345

34.

RuntimeCellTransformer ワールドパーティションによって生成された 各セルのコンテンツを加工する ● ● ● ● アクター/コンポーネントの追加変更削除 編集対象のワールドのコンテンツは変更しない セルの追加は出来ない グリッドやセルの分割には干渉できない

35.

ワールド RuntimeHash RuntimeCellTransformer の動作 WorldPartition Cells Serialize Cells To Streaming Levels PIE Cooker Package

36.

ワールド RuntimeHash RuntimeCellTransformer の動作 WorldPartition Cells Cell Transformer Transformed WorldPartition Cells Serialize Cells To Streaming Levels PIE Cooker Package

37.

RuntimeCellTransformer の動作 ワールド Cell Transformer RuntimeHash Transformed WorldPartition Cells WorldPartition Cells Cell Transformer Transformed WorldPartition Cells PIE ・・・ Serialize Cells To Streaming Levels Cooker Package

38.

設定 ● ● スタック構造 各CellTransformerにパラメータを設定

39.

独自のTransformer 非常に自由度が高くパワフルな機能なので実装には細心の注意を 十分なデバッグ機能や検証機能を組み込む アイデア ● コリジョンの最適化 ● インスタンス化 ● パラメータの加工 ● カスタムコンポーネントへの変換

40.

エンジン組み込み実装 WorldPartitionRuntime CellTransformerISM 対象のスタティックメッシュを ISM化し さらに一つのアクターにまとめる コンポーネント数の減少 サンプルとしても

41.

FastGeoStreaming プラグイン Experimental

42.

FastGeo FastGeoWorldPartition RuntimeCellTransformer 高性能 Transformer ● 静的なスタティックメッシュを非 UObject型の FPrimitiveSceneProxyDescに変換する ● 専用のコンテナに格納 ● ストリーミングの動作を乗っ取って改善 ○ 非同期生成

43.

FastGeo FPrimitiveScneProxyDesc アクターやコンポーネントなどを使わずに 軽量な構造体を直接レンダラーに 登録して描画を行う仕組み セルロード時の CPU負荷最適化 SceneProxy非同期生成RenderState) UObject数が大きく減少 → ガベージコレクション最適化 省メモリ化

44.

UnrealEngine5のCPU最適化テクニック @ Docswell https://www.docswell.com/s/EpicGamesJapan/ZN1982-2024-12-09-104909#p39

45.

FastGeo 対応フォーマット 対応アクター ● AStaticMeshActor ● APackedLevelActor ● AWorldPartitionHLOD ● AWorldPartitionAutoInstancedActor ● 指定したアクター ● FastGeoActorTag 対応コンポーネント ● UStaticMeshComponent ● UInstancedStaticMeshComponent ● UHierachicalInstancedStaticMeshComponent ● USkinnedMeshComponent ● UInstancedSkinnedMeshComponent

46.

FastGeo コンテンツ生成とコンテナ 通常のパッケージ化されたセル FastGeoで変換されたセル 変換されなかった アクター アクター FastGeoContainer アクター FastGeoComponent HLODs FastGeoHLOD

47.

FastGeo デバッグ用コンソールコマンド FastGeo.Show 1/0 パッケージビルドでも利用可能 Show ActorColoration FastGeo FastGeo.EnableTransformer DebugMode 1/0 PIEで利用 なぜ変換されないかなどがログに出力 される

48.
[beta]
ランタイムセル生成の前段 でアセットに加工を加える
※詳しくはUnrealFestの動画を参照
その他のアップデート

Mutator

ランタイムグリッドの自動割り当て
最適なグリッドに割り振ることで省メモリ化など
常駐化IsSpatiallyLoaded)の自動切り替え
Cで実装しフックする

// ActorDescs Mutator を登録 (WorldSubSystemなどから EditorWorldに登録する )
World->GetWorldPartition()->OnGenerateStreamingActorDescsMutatePhase.AddUObject
(this, &UMyActorDescMutator::HandleStreamingGenerationMutatorPhase);
// 実装
void UMyActorDescMutator::HandleStreamingGenerationMutatorPhase
(const IStreamingGenerationContext* Context, TArray<FActorDescViewMutatorInstance>&
OutActorDescsMutators Instances)
{...}

49.

その他のアップデート テクスチャストリーミング FSimpleStreamableAssetManager テクスチャのミップマップの管理やメッシュストリーミングの更新処理を 非同期化または並列化 ゲームスレッドの負荷軽減 ;更新処理をワーカースレッドにオフロード s.StreamableAssets.UseSimpleStreamableAssetManager=1 ;テクスチャのサンプリング密度をキャッシュ(パッケージビルドのみ) r.Streaming.EnableTexturesSamplingStreamingCache=1 ;ストリーミングマネージャへの登録処理を並列化(パッケージビルドのみ) r.Streaming.AllowParallelRenderAssetStreamingManagerIncrementalUpdate=1 r.Streaming.WorkerCountForParallelRenderAssetStreamingManagerIncrementalUpdate=4

50.

その他のアップデート ワールドパーティション の更新 ワールドパーティションのセルの状態更新を非同期化 EndPlayの時分割 FastGeoに含まれない SceneProxy生成もマルチスレッド化 ゲームスレッドの負荷軽減 ;ワールドパーティション更新をワーカースレッドに wp.runtime.UpdateStreaming.EnableAsyncUpdate = 1 ;EndPlay処理を時分割可能に s.LevelStreamingRouteActorEndPlayForRemoveFromWorldGranularity = 1 ;AddPrimitive(SceneProxy生成)をマルチスレッド化 LevelStreaming.AsyncRegisterLevelContext.Enabled = 1 LevelStreaming.AsyncRegisterLevelContext.PrimitiveBatchSize = 8

51.

ストリーミングの改善 サンプルについて UE5.6版のCitySampleは今日紹介した最適化が適用済みです 7/22現在、まだランチャーからダウンロードできる状態に なっていないので、 P4にアクセス可能な方は //UE5/Release-5.6.0/Samples/Showcases/CitySample からダウンロードしてください。

52.

移動処理の並列化

53.

CharacterMovementComponent ● ● ● ● キャラクター用の移動コンポーネント 非常に高機能 ネットワークの同期機能 ゲームスレッド上で動作 ○ 多数のキャラクターを動かそうとすると ボトルネックになりやすい

54.

CharacterMovementComponent ● ● ● ● キャラクター用の移動コンポーネント 非常に高機能 ネットワークの同期機能 ゲームスレッド上で動作 ○ 多数のキャラクターを動かそうとすると ボトルネックになりやすい →マルチスレッドに分散したい!

55.

Mover Plugin Experimental 開発中の次世代移動コンポーネント

56.

Project Titanから学ぶオープンワールドワークフローと 次世代移動コンポーネントMoverの設計 @ Docswell https://www.docswell.com/s/EpicGamesJapan/KYD6XR-2025-04-14-113909#p43

57.

ネットワーク同期を含む移動のベース処理を定義 BackendLiaison MoverStandaloneLiaisonComponentに 非同期処理が追加

60.

有効化

61.

[ConsoleVariables] mover.standalone.RunProduceInputOnAnyThread=true mover.standalone.RunMovementSimOnAnyThread=true 有効化

62.

グラフィックスの改善

63.

初期設定の見直し、最適化 各種機能の並列化等アルゴリズムレベルでの改善 UE 5.6~ グラフィックス関係の アップデートについて 各種機能のアップデート Lumen, Nanite, VSM, Virtual Texture,~ GPU Profiler 2.0 プロファイラの改善

64.

UE 5.6 GPU Profiler 2.0 追加機能の紹介 本日の内容 各種機能のアップデート Lumen, Shadow, Translucency Lighting Volume

65.

UE 5.6 GPU Profiler 2.0 ● 再設計された Insights GPU ● 非同期キューの対応 ● 依存関係Fenceの可視化

66.

GPU Insightsの開き方 これまでと同様に... Gameを引数-trace=gpu 付きで起動 -> UnrealInsights.exeからトレース Editorの場合は右下のトレースボタンチャンネルを確認 -> UnrealInsightsを起動し、トレース を開始

67.

追加された非同期キュー

69.

表示オプションについて

70.

Fenceの可視化機能

71.

1フレーム全体の関係性 Fenceの可視化

72.

パス毎の関係性 Fenceの可視化

73.

GpuWork、GpuWait

74.

ボトルネックを見つけるための強力なツール 現在のGPU処理は非常に非同期処理が多い よりクリティカルなボトルネックを見つけることが必要に 解像度の固定化 r.DynamicRes.TestScreenPercentage 60 r.screenpercentage 60 非同期処理のオフ r.RDG.AsyncCompute 0

75.

Insightsでデータが取れない時はバージョンを確認

77.

UE5.6のUnreal Insightsは v1.07

78.

Unreal Insightsについて詳しく知りたい方は

79.

UE 5.6 Lumen - HWRTの強化 ● Lumen mesh cardのSkeletal Mesh対応 ● Ray Tracing Proxyの改善 ● Extra Ambient Occlusion ● Shader Execution Reordering SERの対応

80.

Lumen mesh cardのSkeletal Mesh対応 r.MeshCardRepresentation.SkeletalMesh 1(デフォルト有効)

81.

Screen Space無しLumen Reflection Surface Cache利用時、Screen Space無しでもSkeletal Meshの反射が利用可能に

84.

Mesh Cardによる簡易表現や遅延等の懸念はあるが、アーティファクトは減る

85.

Lumen Mesh Card更新の最適化 ・自身のカードでより小さいものがリクエストされている場合、ダウンサンプルで作成 r.LumenScene.SurfaceCache.AllowCardDownsampleFromSelf 1 インスタンス可能なものは、コピーで生成を行う(カードシェアリング) r.LumenScene.SurfaceCache.AllowCardSharing 1 PerInstanceRandom /PerInstanceCustomData /WorldPosition /ActorPositionWS が使われているとそれぞれでラスタライズが必要になる r.LumenScene.SurfaceCache.DetectCardSharingCompatibility 1 距離指定で優先的にライティングを更新 r.LumenScene.Lighting.MaxDistanceFromFrustumToPrioritize 500

86.

Ray Tracing Proxy

87.

Ray Tracing Proxyとは ハードウェアレイトレーシングを行う時にヒットポイントを求めるメッシュ 従来は、Naniteが利用できない環境で Nanite Meshの代わりに表示される(Nanite) Fallback Meshと兼用

88.

Ray Tracing Proxyが別途作成できるように LOD0に加えて更に軽量化したLOD1を同時に作成可能

89.

Autoの設定 Nanite Fallback用Auto設定値 r.Nanite.Builder.FallbackTargetAutoRelativeError 1 RayTracingProxy用Auto設定値 r.Nanite.Builder.RayTracingProxy.FallbackTargetAutoRelativeError 2 RelativeError 1 RelativeError 2

90.

プロジェクト設定から一括有効化

91.

LOD1を用意することのメリット レイトレーシングのBLASを一定のメモリプールサイズに抑える機能がUE5.5から導入 r.RayTracing.UseReferenceBasedResidency r.RayTracing.ResidentGeometryMemoryPoolSizeInMB 使われていないものはLOD1に置き換えて削減可能なため、LOD1が重要 r.RayTracing.NumAlwaysResidentLODs 1

92.

Extra Ambient Occlusion

93.

Lumen の Ambient Occlusion ShortRangeAO SSAO

94.

ShortRangeAO LumenGIに含まれるAO r.Lumen.ScreenProbeGather.ShortRangeAO 1 r.Lumen.ScreenProbeGather.ShortRangeAO.DownsampleFactor 2

95.

SSAO ShortRangeAOを無効化したうえで利用可能な、スクリーンスペースのAO r.Lumen.ScreenProbeGather.ShortRangeAO 0 r.Lumen.DiffuseIndirect.SSAO

96.

Extra Ambient Occlusion LumenGIを使いつつ強めにAOを乗せる事が可能 r.Lumen.ScreenProbeGather.ExtraAmbientOcclusion

97.

比較 ShortRangeAO SSAO Extra Ambient Occlusion

98.

Shader Execution Reordering

99.

Shader Execution Reordering(SER)対応 Lumenが、Shader Execution Reordering(SER)に対応 NVIDIAの対応ハードウェア(Ada世代以降)のみですが、複雑なシーンで処理速度が向上 r.Lumen.HardwareRayTracing.ShaderExecutionReordering デフォルト有効

100.

Electric Dream (Editor実行) 検証環境 CPU: Ryzen 9 7950x RAM: 128 GB GPU:Geforce RTX 5090

101.

オンオフの比較 r.Lumen.HardwareRayTracing.ShaderExecutionReordering 0 r.Lumen.HardwareRayTracing.ShaderExecutionReordering 1

102.

UE 5.6 Shadowに関するアップデート ● DOFによるVSM解像度変更 ● Shadow Fade挙動の変更

103.

DOFによるVSM解像度変更 r.Shadow.Virtual.MaxDOFResolutionBias (0を設定することで無効化、値を大きくすると解像度は低下)

105.

DOFの機能追加 - ペッツバール湾曲ボケ

107.

ShadowMaps(非VSM)Shadow Fade挙動の変更 Shadow FadeがライトのResolution Scaleに連動するように r.Shadow.DoesFadeUseResolutionScale true (デフォルト有効化、Falseが5.6以前の挙動) r.Shadow.FadeResolutionやr.Shadow.MinResolutionで制御可能なFade機能

108.

UE 5.6 Translucency Lighting Volume のアップデー ト ● デバッグビューの追加 ● 部分更新機能 MarkVoxels)

109.

デバッグビューの追加

110.

部分更新機能(MarkVoxels) サンプリングされた箇所をマークして更新する機能 r.TranslucencyLightingVolume.MarkVoxels 1 CPU: Intel Core i7 11850H RAM: 32 GB GPU:NVIDIA Geforce RTX 3070 Laptop

111.

最適化可能な箇所 CPU: Intel Core i7 11850H RAM: 32 GB GPU:NVIDIA Geforce RTX 3070 Laptop ライト:100個、TLV-DIM:128

112.

まとめ

113.

Thank you! EPIC GAMES JAPAN