UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!【UNREAL FEST EXTREME 2020 WINTER】

103.7K Views

November 17, 20

スライド概要

講演アーカイブ:
https://www.youtube.com/watch?v=tPsILSSXpVo

講演内容:
2020年6月にリリースされたNintendo Switch™向け対戦ニンジャガムアクションゲーム『ニンジャラ』は、UE4を使用して最大8人のマルチプレイを60fps駆動で実現しています。UE4の最適化ノウハウは数多く共有されていますが、本講演では実際にNintendo Switch™で60fpsを実現する為に、『ニンジャラ』で行った最適化、高速化手法を紹介いたします。

講演者:
角田 高宏 ( ガンホー・オンライン・エンターテイメント株式会社 チーフプログラマー)
江原 崇将 ( ガンホー・オンライン・エンターテイメント株式会社 チーフデザイナー)

UNREAL FEST EXTREME 2020 WINTER 再生リスト
https://www.youtube.com/playlist?list=PLr_Cbd4sUDTzxG9a4TrU0Rg6-ApCJBCsI

https://unrealengine.jp/unrealfest/
#ue4fest

profile-image

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

シェア

またはPlayer版

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

関連スライド

各ページのテキスト
1.

UE4×Switchで 60FPSの(ネットワーク)対戦アクションを なんとかして作る! ガンホー・オンライン・エンターテイメント株式会社 チーフプログラマー 角田 高宏 チーフデザイナー 江原 崇将 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

2.

自己紹介 角田 高宏 • • • チーフプログラマー • グラフィックプログラムと最適化を担 当することが多い • 『ニンジャラ』ではパフォーマンス最 適化を担当 2013年 入社 アーケード、コンシューマ、モバイル と幅広くタイトルを経験 江原 崇将 • • • チーフデザイナー • 『ニンジャラ』ではテクニカルアーテ ィストとしての役割を担う 2016年 入社 デザイナサポート、マテリアル検証 アセット管理、機材調整、PV撮影など 幅は広いが底は浅い。 #ue4fest

3.

ニンジャラとは 対応ハード : Nintendo Switch ジャンル : 対戦ニンジャガムアクション 最大8人のオンライン対戦に対応 基本プレイ無料 対応言語 : 日,英,仏,伊,独,西,中(簡体/繁体),韓 2020年6月25日からサービス開始 UE4 Version : 4.24.2 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

4.

ニンジャラとは • Nintendo Switch で 60fps で動作しています 今回はここにフォーカス した話をします @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

5.

発表内容について • クライアント側の最適化全般について紹介します • 個々の内容を深く掘り下げることはやりません • ネットワークに関する話はしません • 当日担当者には同席してもらえるようにするので、 質疑に関しては、答えられる範囲で対応します • プロファイラーやデバッグツールの詳細や、 使い方についても、本発表内では触れません @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

6.

アジェンダ 要件 UE4×Switchのパフォーマンスについて 描画の基本設定 最適化 • アセット • 実装 • ビルド設定 • エンジン改造 • 対応しなかったもの • まとめ • • • • @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

7.

アジェンダ 要件 描画の基本設定 UE4×Switchのパフォーマンスについて 最適化 • アセット • 実装 • ビルド設定 • エンジン改造 • 対応しなかったもの • まとめ • • • • @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

8.

要件 • システムとして求められたもの • オンライン対戦アクションゲーム • • ニンジャでチャンバラアクション 最大8人で対戦、チーム戦もあるよ • UE4 × Nintendo Switch • バトル中は60fps死守 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

9.

要件 バトル中は60fps死守! @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

10.

要件 厳しくないか? @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

11.

要件 実際どの程度動くのか? @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

12.

アジェンダ 要件 UE4×Switchのパフォーマンスについて 描画の基本設定 最適化 • アセット • 実装 • ビルド設定 • エンジン改造 • 対応しなかったもの • まとめ • • • • @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

13.

UE4×Switchのパフォーマンスについて @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

14.

UE4×Switchのパフォーマンスについて • Switch で ThirdPersonTemplate を動かしてみた @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

15.

UE4×Switchのパフォーマンスについて • GPU負荷が大きい • ポストプロセス • Atmospheric Fog • リフレクション このあたりが高負荷 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

16.

UE4×Switchのパフォーマンスについて • ポストプロセスをもう少し細かく調査 • SSR,SSAO,TemporalAA,MotionBlur は単体でもかなり高負荷 • • 720pだとそれぞれ 2ms 超 解像度やクオリティを落として、単体での使用ならあるいは… • アーティストにこれらを使わない方向で打診 → 結果、これらをバトル中は使わない方針に決定 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

17.

UE4×Switchのパフォーマンスについて • DefaultLitマテリアル と UnLitマテリアル • UE4のマテリアル ・ライティングするもの ( DefaultLit ) ・ライティングしないもの ( UnLit ) 乱暴に分けると、この2種類に分けられる • Switch上でのパフォーマンスを比べてみた @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

18.

UE4×Switchのパフォーマンスについて • DefaultLit と UnLit の比較 (720p) • カメラとPlane,Directional Light を1つずつ配置 DefaultLit GPU 4.36 ms UnLit GPU 0.82 ms @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

19.

UE4×Switchのパフォーマンスについて • DefaultLit と UnLit の比較 (720p) • ノーマルマップ有 / UnLitにシェーディングを追加 DefaultLit GPU 4.65 ms UnLit + Fake Shading GPU 1.15 ms @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

20.

UE4×Switchのパフォーマンスについて • UnLitマテリアルのGPU負荷が圧倒的に低い • UnLitマテリアルで賄える部分は DefaultLitに比べて、GPU負荷をかなり抑えられそう @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

21.

アジェンダ 要件 UE4×Switchのパフォーマンスについて 描画の基本設定 最適化 • アセット • 実装 • ビルド設定 • エンジン改造 • 対応しなかったもの • まとめ • • • • @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

22.

描画の基本設定 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

23.

描画の基本設定 最終的に設定は次のような感じ @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

24.

描画の基本設定 • Forward Rendering • 単純にパフォーマンスが Forward の方が良かった • Deferred でしか使えないポストエフェクト(SSR、SSAO等) は負荷の点から使用しない方針にした @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

25.

描画の基本設定 • 解像度 • コンソールモード 1080p~810p • ハンドヘルドモード 720p~540p の可変解像度(100%~75%) UE4.19 から入っている DynamicResolution を使用 UIの解像度は100%固定 E3 2018、TGS 2018 版は、720p (コンソールモード)、480p (ハンドヘルドモード) @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

26.

描画の基本設定 • Light • Movable Light • バトル中は未使用 • Stationary Light • Directional Light 1本に限る • ダイナミックシャドウを落とすのはこれ1本 • Static Light • • 上記以外のLight全て Static な Lightは「Actor Hidden In Game」 を有効にしておく • ランタイムで影響チェックが行われ、CPU負荷の原因になる為 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

27.

描画の基本設定 • ポストプロセス • • • • Bloom AutoExposure Color Grading FXAA • Fog • ExponentialHeightFog • AtmosphericFog は負荷が大きかった @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

28.

描画の基本設定 • テクスチャフィルタ • 拡縮、ミップマップ共にバイリニア • 異方性フィルタは未使用 • 使用の有無で1ms ほど負荷に差 • Mask Material only in Early Z-pass を有効に • Maskedマテリアルを多用している為 • Epicの篠山さんによる「Mask Material only in Early Z-pass」の解説 https://www.slideshare.net/EpicGamesJapan/mask-material-only-in-early-zpass @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

29.

アジェンダ 要件 UE4×Switchのパフォーマンスについて 描画の基本設定 最適化 • アセット • 実装 • ビルド設定 • エンジン改造 • 対応しなかったもの • まとめ • • • • @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

30.

アセットの最適化 キャラクター @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

31.

アセットの最適化 キャラクター • スペック • • • • • • 約11000ポリゴン 平均的な物で26ボーン パーツ数(10個くらい) LOD • 3段階 リムライト、レフライト、目専用、色変え等 マテリアルは平均的な物で10個使用 • パフォーマンスの目安 • 1.0 ms / キャラ @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

32.

アセットの最適化 キャラクター • 問題になった点 ダイナミックシャドウの負荷 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

33.

アセットの最適化 キャラクター • ダイナミックシャドウの負荷 • シャドウの有無による比較 ダイナミックシャドウ あり GPU 9.53 ms ダイナミックシャドウ なし GPU 7.51 ms @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

34.

アセットの最適化 キャラクター • ダイナミックシャドウの負荷 • シャドウキャストするパーツ数による比較 5パーツ 1パーツ(Bodyのみ) GPU 9.53 ms GPU 7.95 ms @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

35.

アセットの最適化 キャラクター • キャラクターのダイナミックシャドウの負荷 • シャドウを落とすオブジェクト数が問題 • 専用の影モデルを用意 • • ダイナミックシャドウを落とすオブジェクト数の削減 頂点数の削減 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

36.

アセットの最適化 キャラクター • 専用の影モデル • 素体用(シルエット別にいくつか用意)+武器用 の2つで構成 • キャストシャドウするパーツ数を、最大 10個 → 2個 に削減 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

37.

アセットの最適化 キャラクター • 専用の影モデル • Hidden Shadow + PoseableMeshComponent を使い、 ボーンのTransform情報を、影メッシュにコピーして使用 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

38.

アセットの最適化 キャラクター • 対策前後の負荷比較 この例では 1.5 ms 以上高速化 Before After GPU 9.53 ms GPU 7.87 ms @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

39.

アセットの最適化 背景 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

40.

アセットの最適化 背景 • 背景 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

41.

アセットの最適化 背景 • 背景用のマテリアル • DiffuseColor,MRE(Metaric,Roughness,Emissive を1テクスチャ に格納),NormalMap のテクスチャ3枚を使った DefaultLit が基本 • 最適化の方針 • テクスチャアクセスを減らす • • • MRE の変化量が小さすぎるものはパラメータへ置き換え 効果が小さいノーマルマップを削除 部分的にUnLitも併用 • 遠景や水表現など @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

42.

アセットの最適化 背景 • UnLitマテリアル • 遠景のビル群 • 水面 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

43.

アセットの最適化 背景 • メッシュ • 最適化の方針 • • カリングを考慮して地面、遠景はステージ中央から放射状に分割 高さ方向に関しては、シビアに分割していない @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

44.

アセットの最適化 背景 • LOD • 近景は最大4段階(基本は3段階) • UE4標準のリダクション機能を使用 • 単にポリゴン数、頂点数の問題だけで無く、 表示距離 / 面積に応じた適切な頂点密度にすることが重要 頂点が密集しすぎると、マイクロポリゴンや OverDraw の原因にな り、負荷が上がるため、頂点数が少ないメッシュでもLODを作る意 味はある @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

45.

アセットの最適化 パーティクル(エフェクト) @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

46.

アセットの最適化 パーティクル • マテリアル • ほぼ UnLit の不透明 or Masked で構成 • • UnLitマテリアル内で陰影付けをやっているものもある ガムは UnLit なパーティクル • 動的光源を使わない • ライトを発生させていない @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

47.

アセットの最適化 パーティクル • パーティクルLODを使ったニアクリップの制御 • LOD0 に何も設定しない事で、疑似的にLOD0 と LOD1 の 切り替わり距離を、ニアクリップとして扱っている @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

48.

アセットの最適化 疑似透過表現 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

49.

アセットの最適化 疑似透過表現 • カメラ接近時のディザーによる疑似透過表現 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

50.

アセットの最適化 疑似透過表現 • カメラ接近時のディザーによる疑似透過表現 • キャラクターがカメラに接近した時に使用 • UnLit のディザー専用マテリアルに差し替え • DefaultLit + ディザー は高負荷なため UnLit なディザー専用のマテリアルに差し替えている @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

51.

アセットの最適化 疑似透過表現 • ディザー(Mask)の負荷比較(720p) DefaultLit 不透明 GPU 12.42 ms DefaultLit + ディザー GPU 19.41 ms @2020 GungHo Online Entertainment, Inc. All Rights Reserved. UnLit + ディザー GPU 13.35 ms #ue4fest

52.

アセットの最適化 透視表現 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

53.

アセットの最適化 透視表現 • 遮蔽物の向こう側のキャラが見える特殊表現 • 特定スキル発動時 拡大 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

54.

アセットの最適化 透視表現 • 遮蔽物の向こう側のキャラが見える特殊表現 • Unlit のシンプルなマテリアル + VertexOffset で カメラ方向へ頂点を引き寄せる方法で実現 • カスタムステンシル+ポストプロセスでの実装も テストしたが負荷の面で断念 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

55.

アセットの最適化 UMG @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

56.

アセットの最適化 UMG • 更新頻度の低いものは Invalidiation Box を使用 • ニンジャラのバトル中のUIの例 • Invalidation Box なし CPU 3~4 ms • Invalidation Box あり CPU 1~1.5 ms これくらい差が出る @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

57.

アセットの最適化 UMG • アニメーションは可能ならマテリアルによる表現に変更 • パーツの Transform を変更するアニメーションは最小限に • 階層を深くしない • 階層が浅くても重ねると負荷が高いパーツもある • 例) ScaleBox • 汎用的なWidget BluePrint( WBP ) にして、その組み合わせで作りす ぎると、想像以上に階層が深くなることがあるので注意 • • 使い易さとパフォーマンスのトレードオフ Widget Reflector で状態を確認 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

58.

アセットの最適化 UMG • 階層による負荷増加の例 GPU 10.07ms CPU 8.05ms GPU 10.06ms CPU 2.32ms @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

59.

アセットの最適化 UMG • 構造による負荷 • 構造を見ただけでは正直よく分からない • WBP1つ1つパフォーマンスを測り 負荷の高いWBPの構造を解析 • 負荷が高いパーツ、構造をデザイナーに 伝え、それを使わずに作れないか相談 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

60.

アジェンダ ゲーム概要、要件 描画の基本設定 UE4×Switchのパフォーマンスについて 最適化 • アセット • 実装 • ビルド設定 • エンジン改造 • 対応しなかったもの • まとめ • • • • @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

61.

最適化 実装 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

62.

最適化 実装 実装ルール @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

63.

最適化 実装 実装ルール • バトルで使用するBPは、Tickの使用を禁止 • E3 2018, TGS 2018版のTickは全てC++のスクラッチ実装 • • 当時は完全同期型の通信システムを採用しており、 標準のUE4には完全同期の通信システムがなかった 60fpsに近いパフォーマンスで動作していた そこから、非同期型のシステムへ移行することになった為、 UE4の非同期通信の仕組みを取り入れる際、 パフォーマンスを担保するためにこのルールを適用 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

64.

最適化 実装 リアクションのある配置物 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

65.

最適化 実装 リアクションのある配置物 • StaticMesh として配置 • リアクション時に SkeletalMesh へ切り替えてアニメーション再生 • 影は思い切ってオミット • ダイナミックシャドウは高負荷な上、配置数、密度が読めなかった @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

66.

最適化 実装 キャラクター @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

67.

最適化 実装 キャラクター • カメラから遠いキャラの移動処理の頻度を下げる • 35m 以上離れているキャラは 3フレームに1回 • SetRotation の呼び出し抑制 • 回転量の変化が一定閾値を超えない限り呼ばない • SetActorLocation,SetActorRotation,SetActorTransform の呼び出し は Overlap や ChildComponentTransform の更新処理が走り高負荷 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

68.

最適化 実装 その他 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

69.

最適化 実装 その他 • Spawnのタイミングをフレーム分散 • ヒッチ対策 • Tickでの検索処理( FindFunction や Actorの検索等 )の排除 • 気づかずに使われているケースが割とある • プロファイルをかけると負荷上位に来るので比較的見つけやすい • オブジェクトをプールしておいて使い回す • 配置物やアイテムの動的生成を抑制 • 使っていないUMGは徹底的に Collapsed に設定 • Hidden だと 裏で処理は回るので Collapsed @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

70.

アジェンダ ゲーム概要、要件 描画の基本設定 UE4×Switchのパフォーマンスについて 最適化 • アセット • 実装 • ビルド設定 • エンジン改造 • 対応しなかったもの • まとめ • • • • @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

71.

最適化 ビルド設定 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

72.

最適化 ビルド設定 • メモリアロケーターに Binned2 を使用 • UE4.22から 標準は Binned3 だが、Binned2 に比べCPU負荷が高い • • UE4.22へ上げた直後は 2~3ms CPU負荷が増加 UE4.24.2時点でも、1ms ほど負荷が高い ※ニンジャラのバトルシーンでの負荷 • メモリ使用量は Binned3 の方が少ない • こちらで計測した結果だと、Binned3 の方が多いケースもあり @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

73.

最適化 ビルド設定 • Binned3 → Binned2 にする方法 • ニンジャラではTarget.cs に以下のコードを記述 if (Target.Platform == UnrealTargetPlatform.Switch) { GlobalDefinitions.Add("USE_MALLOC_BINNED3 = 0"); } @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

74.

最適化 ビルド設定 • PGO (Profile-guided optimization) の使用 • 実際のコードの実行のされ方によって 最適化を行ってくれる仕組み • UE4のSwitchビルドも対応している • ニンジャラのバトルシーンでは 1~3ms CPUが高速化 非常に強力! @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

75.

最適化 ビルド設定 • PGOの注意点 • どれだけ最適化が出来るのか予測が難しい • • • トレーニングラン時のプレイの仕方や、その時点でのコードに左右される PGOをあてにしたパフォーマンス設計は危険 ニンジャラでは、PGO無しでも 16.666ms に収まる状態まで CPUを最適化し、少し余裕を持たせるくらいの感覚で使用 • ビルド(リンク)時間が長い • • • プロファイルデータ収集用に専用のビルドを行う必要がある UE4.23 だと +1時間 UE4.24 だと +15分 ※ CPUがCore i7-8700kのマシンでの時間 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

76.

最適化 ビルド設定 • ニンジャラでのPGOの運用 • TestBuild でトレーニングラン(プロファイルの収集) • プロファイルの書き出しにデバッグ用の機能を使ったため • 本来は ShippingBuild でやるべき • トレーニングランは人力 • • 自動テストに組み込むのが理想 重点的に最適化したい箇所が明確な場合は、人力が有利かも @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

77.

アジェンダ ゲーム概要、要件 UE4×Switchのパフォーマンスについて 描画の基本設定 最適化 • アセット • 実装 • ビルド設定 • エンジン改造 • 対応しなかったもの • まとめ • • • • @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

78.

最適化 エンジン改造 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

79.

最適化 エンジン改造 • カメラ位置と回転の取得の最適化 • APlayerCameraManager::GetCameraViewPoint の修正 const FMinimalViewInfo CurrentPOV = GetCameraCachePOV(); • 上記の FMinimalViewInfo のメンバ FPostProcessSettings のコピーが高負荷 → カメラ位置と回転を FMinimalViewInfo と分けてキャッシュ • パーティクルシステムからの呼び出しが多数 • 全体の約50% この修正で、1~2ms 高速化 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

80.

最適化 エンジン改造 • TArrayをReserveするように対応 • ColorGrading の毎フレーム更新のスキップ • VertexFog 時に VolumetricFog を参照しないように修正 • シェーダーに少し手を加えた • AABB計算の最適化 • FKSphylElem,FKBoxElem の GetTransform() を使わずに、 キャッシュした Transform を使うように修正 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

81.

最適化 こんな感じで最適化を進めた結果 60fpsで動くようになりました @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

82.

最適化 なんとかできた! @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

83.

アジェンダ ゲーム概要、要件 UE4×Switchのパフォーマンスについて 描画の基本設定 最適化 • アセット • 実装 • ビルド設定 • エンジン改造 • 対応しなかったもの • まとめ • • • • @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

84.

対応しなかったもの @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

85.

対応しなかったもの • Precomputed Visibility Volume • 空中戦、空中移動が多く、壁側面も歩けるので、不向き • 仕様上、カメラがオブジェクトの中にめり込む可能性があるため、 その場合 Visibility がおかしくなる • UMG の RetainerBox • UE4.24で Transform の補正処理にバグがあり使用を断念 • issue番号:UE-88093 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

86.

対応しなかったもの • Instanced Static Mesh • テストしてみたが、Switchでは1つ1つ描画する方が パフォーマンスが良かった • BPのネイティブ化 • 有効にすることで若干高速化することは検証済み • ネイティブ化が原因のパッケージングエラーが出ることがあり、 安全を優先し無効化 • 既にパフォーマンス要件を満たせていたのも理由 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

87.

アジェンダ ゲーム概要、要件 UE4×Switchのパフォーマンスについて 描画の基本設定 最適化 • アセット • 実装 • ビルド設定 • エンジン改造 • 対応しなかったもの • まとめ • • • • @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

88.

まとめ @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

89.

まとめ Switch×UE4 で 60fpsの対戦アクション実現のために • UE4×Switch の パフォーマンス • 描画の基本設定 • 各種最適化 • アセット、実装、ビルド設定、エンジン改造 以上についてご紹介しました 一見広範囲に見えますが、作業自体はシンプルです @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

90.

まとめ Switch×UE4 で 60fpsの対戦アクション実現のために • 最適化作業のサイクル 1.負荷の調査 2.高負荷部分の原因を調べる • • 不要な処理、または軽量化の余地がありそう →3へ 端折れない必要な処理だった →1へ 3.負荷対策 • • 不要なものならカット 最適化の検証 / 実行 これをひたすら繰り返す @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

91.

まとめ Switch×UE4 で 60fpsの対戦アクション実現のために • 所感 • 実機での負荷確認は非常に重要 • • 負荷調査のサイクルをどれだけ回せるかが最適化のキモ 継続して計測し続けることが大事 • 必要機能をきちんと取捨選択すれば Switch で十分高速に動作する • • デフォルト設定のまま使わない 最初に必要な機能や設定と不要なものとを切り分ける事が重要 • 一般的にパフォーマンスで気を付けるべき点は、UE4でも同じ • • エンジンが「いい感じ」にしてくれることは無い 機能として用意はされているが、「意識して」使う必要がある #ue4fest

92.

謝辞 • WinterCrownWORKS 様 • ソレイユ株式会社 様 • 有限会社ウニコ 様 @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

93.

以上で本発表は終了となります 本発表が皆様の一助となれば幸いです ご清聴ありがとうございました @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest

94.

付録 • UE4×Wwise×Nintendo Switch――『ニンジャラ』サウンド制作事例 https://www.gamebusiness.jp/article/2020/08/21/17500.html • 質問等 • [email protected] 角田 高宏(プログラマー) • [email protected] 江原 崇将(デザイナー) まで @2020 GungHo Online Entertainment, Inc. All Rights Reserved. #ue4fest