Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Fortniteを支える技術

7,855 views

Published on

4月21日に京都で開催した「UNREAL FEST WEST 2018」で使用したスライドです。
●公式サイト
https://unrealengine.jp/unrealfest/
===
2018年3月8日に日本でもリリースした「Fortnite」で使われているテクニックやTipsの紹介を致します。

Published in: Engineering
  • Be the first to comment

Fortniteを支える技術

  1. 1. UNREAL FEST WEST 2018 Unreal Fest West 2018
  2. 2. UNREAL FEST WEST 2018 Fortniteを支える技術 Epic Games Japan – Yutaro Sawada
  3. 3. 資料は後日公開します
  4. 4. UNREAL FEST WEST 2018 • Fortniteについて • Fotnite Battle Royaleを実現するために • ライティングとシャドウについて • LODとHLOD • アニメーション • Significance Manager • まとめ • 付録 目次
  5. 5. Fortniteについて
  6. 6. UNREAL FEST WEST 2018 3月に日本で配信開始。 TPSのアクションビルディングゲーム
  7. 7. UNREAL FEST WEST 2018 大きく分けて2つのモードがあります • Save the world(世界を救え) • オンラインで協力して敵と戦う • Battle Royale(バトルロイヤル) • 100人対戦 • プレイヤー同士で戦う Fortniteについて
  8. 8. Battle Royaleの話がメイン
  9. 9. UNREAL FEST WEST 2018 • 100人が同時に ネットワーク上で対戦 • 2.5 km x 2.5 kmの 広いマップ • 建物を壊したり、 資材を集めて、 新しく建築することができる Fortnite Battle Royaleの特徴
  10. 10. UNREAL FEST WEST 2018 マルチプラットフォーム Windows, Mac, PS4, XBOXONE, iOS, Android... (Android版は現在開発中で未リリース) • ハードウェア毎にスペックがバラバラなので 最適化が必要に • 描画のクオリティやエフェクトなど、 スケーリング可能なパラメーター設計が必要になった Fortnite Battle Royaleの特徴
  11. 11. UNREAL FEST WEST 2018 • 話すこと • 描画周りが中心 • ライティング • アセットリダクション • アニメーション • 話さないこと • ネットワーク • AI 今日話すこと、話さないこと
  12. 12. Fotnite Battle Royaleを 実現するために
  13. 13. 課題 100人対戦かつ、建物の破壊や建築といった コンセプトを実現させる 見た目を保って如何に処理を端折るか
  14. 14. UNREAL FEST WEST 2018 • ライティング • アセットリダクション • アニメーション • Significance Manager Fotnite Battle Royaleを実現するために
  15. 15. ライティング
  16. 16. Battle Royaleの特徴① 建物などのフィールド上のモノを壊せる 昼や夜、ストームなどライティングが変わる
  17. 17. 事前計算した静的なLightingが使えないことから すべて動的なライティング
  18. 18. UNREAL FEST WEST 2018 • Project SettingsのRenderingから、 Allow Static Lightingのチェックをオフ Static Light(静的なライト)をオフにする方法
  19. 19. UNREAL FEST WEST 2018 Cascade Shadow Map(CSM) × Ray-traced distance field shadows(RTDF) シャドウについて
  20. 20. UNREAL FEST WEST 2018 △ UE4で通常使用しているシャドウ 利点 • 背景に配置されている静的オブジェクトから、 アニメーションしている動的なオブジェクトまで、 静的/動的関係なくオブジェクトのシャドウを 動的に生成することが可能 • 品質がそこそこ良い 注意点 • 描画にコストがかかる Cascade Shadow Map(CSM)について
  21. 21. UNREAL FEST WEST 2018 事前計算した3Dテクスチャを使用するシャドウ 利点 • CSMよりもコストが安く描画できる • CSMより30%~50% Ray-traced distance field shadows(RTDF)について
  22. 22. UNREAL FEST WEST 2018 △注意点 • エディタ上で事前計算しメッシュがデータを保持する (Ambient Occulusionでも利用する) • 歪んだスケールやアニメーションは使用できない • 細いオブジェクトだとレイが抜けて影がきれいにでない • メッシュ毎にメモリのコストが必要 Ray-traced distance field shadows(RTDF)について
  23. 23. UNREAL FEST WEST 2018 両方の利点を活かし、 • 手前のモノはCSM • 遠くのモノはRTDF シャドウについて CSM shadows RTDF shadows
  24. 24. RTDFの使い方
  25. 25. UNREAL FEST WEST 2018 • まずProject SettingsのRenderingから、 Generate Mesh Distance Fieldsを有効にする • Eight Bit Mesh Distance Fieldsを有効にすると 保存データが16bitから8bitになる • シーンの規模などによっては アーティファクトが発生する可能性があるが、 データサイズは単純に半分になる RTDFのセットアップ
  26. 26. UNREAL FEST WEST 2018 RTDFのセットアップ
  27. 27. UNREAL FEST WEST 2018 • 設定後、Editorを再起動し、 レベルをビルドすると、 事前計算データが作られます • ShowのVisualizeから確認できます Mesh Distance FieldsのVisualize
  28. 28. UNREAL FEST WEST 2018 Directional LightのDetailsから、Distance Field Shadows欄の RayTraced DistanceField Shadowsのチェックをいれると有効 RTDFの使用方法
  29. 29. UNREAL FEST WEST 2018 Directional LightのDetailsから、Cascaded Shadow Mapsの Dynamic Shadow Distance MovableLightで影響範囲を指定 RTDFの使用方法 CSM shadows RTDF shadows
  30. 30. ライティング終わり
  31. 31. アセットリダクション
  32. 32. Battle Royaleの特徴② フィールドが広く建物や木といった オブジェクト数が多い 上空から飛び降りるアクションがあり、 フィールドを見渡すことができる
  33. 33. GPU負荷や、DrawCallを減らす改善が必要 LODとHLOD+Impostorによって改善
  34. 34. UNREAL FEST WEST 2018 • 遠い場合ポリゴンの 少ないモデルに切り替えて 描画負荷を減らす手法 Level of Detail(LOD)
  35. 35. UNREAL FEST WEST 2018 △ 利点 • 描画時のポリゴン数が減り、GPU負荷が軽減 • (Early Z-pass, Shadow pass, Base passに効果的) 注意点 • LODを保持すれば保持するほどメモリ量は増える LODの注意点
  36. 36. UNREAL FEST WEST 2018 • UE4でLODを使用するには2つの方法があります。 1. 外部ツールで作成し、インポートし使用する方法 2. UE4内部でLOD用メッシュを作成し使用する方法 LODを使用するには
  37. 37. UNREAL FEST WEST 2018 • UE4では、2つのLODメッシュ作成方法があります。 • UE4内製ツールで行う方法(QuadricMeshReduction) • ミドルウェアのSimplygonで行う方法(SimplygonMeshReduction) UE4でLOD用メッシュの作成 Project Settings – Editor – Mesh Simplificationから変更できます。
  38. 38. LODの作成方法
  39. 39. UNREAL FEST WEST 2018 Meshを開いて、LOD Settingsから Number of LODsの数を増やし、 Apply Changesで適応する。 LODの追加方法
  40. 40. UNREAL FEST WEST 2018 LODの追加方法
  41. 41. UNREAL FEST WEST 2018 LODの表示切り替えが 可能になっており、Detailsから 各種設定が行えるようになる。 LODの追加方法
  42. 42. UNREAL FEST WEST 2018 LODのReduction設定 Percent Trianglesを50%に設定、 Apply Changesで適応させる ポリゴンが半分のLODモデルを 作成することができる
  43. 43. UNREAL FEST WEST 2018 LODの追加方法 LOD1890 triangles, 760 vertices.
  44. 44. Static Mesh-Polygon percentageのみ変更した場合の LODの各種比較
  45. 45. UNREAL FEST WEST 2018 Polygon Reduction 50%(UE4内製) LOD0 LOD1 LOD0 LOD1 50% 50% 890 triangles, 760 vertices. 890 triangles, 760 vertices.1782 triangles, 1467 vertices. 1782 triangles, 1467 vertices.
  46. 46. UNREAL FEST WEST 2018 Polygon Reduction 10%(UE4内製) LOD0 LOD1 LOD0 LOD1 ※10を入れると9.99999となってしまう 9.99999% 9.99999% 178 triangles, 199 vertices. 178 triangles, 199 vertices.1782 triangles, 1467 vertices. 1782 triangles, 1467 vertices.
  47. 47. UNREAL FEST WEST 2018 Polygon Reduction 10%(横)(UE4内製) LOD0 LOD1 LOD0 LOD1 9.99999% ※10を入れると9.99999となってしまう 9.99999% 178 triangles, 199 vertices. 178 triangles, 199 vertices.1782 triangles, 1467 vertices. 1782 triangles, 1467 vertices.
  48. 48. UNREAL FEST WEST 2018 Polygon Reduction 50%(Simplygon) LOD0 LOD1 LOD0 LOD1 50% 50% 890 triangles, 780 vertices. 890 triangles, 780 vertices.1782 triangles, 1467 vertices. 1782 triangles, 1467 vertices.
  49. 49. UNREAL FEST WEST 2018 Polygon Reduction 10%(Simplygon) LOD0 LOD1 LOD0 LOD1 9.99999% 9.99999% ※10を入れると9.99999となってしまう 178 triangles, 248 vertices. 178 triangles, 248 vertices.1782 triangles, 1467 vertices. 1782 triangles, 1467 vertices.
  50. 50. UNREAL FEST WEST 2018 Polygon Reduction 10%(Simplygon) LOD0 LOD1 LOD0 LOD1 9.99999% ※10を入れると9.99999となってしまう 9.99999% 178 triangles, 248 vertices. 178 triangles, 248 vertices.1782 triangles, 1467 vertices. 1782 triangles, 1467 vertices.
  51. 51. LOD比較まとめ
  52. 52. UNREAL FEST WEST 2018 △ 利点 • 大幅に削減してもシルエットが保ててる。 • ポリゴンの数は同じだが、 頂点数がUE4内製のほうが少ない • 比較的速い 注意点 • Skeletal Meshのリダクションはできない • 変更できる設定項目は少ない UE4内製 UE4内製 178 triangles, 199 vertices.
  53. 53. UNREAL FEST WEST 2018 △ 利点 • UE4のものよりも設定項目が多い • 細かい設定が可能 • 調整をすれば良くなる可能性 • Skeletal Meshもリダクション可能 注意点 • ミドルウェアとしてSymplygonを 導入する事が必要 Symplygon Simplygon 178 triangles, 248 vertices.
  54. 54. UNREAL FEST WEST 2018 比較した結果 • Static MeshのみであればUE4内製のツールで十分良さそう • サクッとLODモデルを作成する時に有用 LOD比較まとめ Simplygon 178 triangles, 248 vertices. UE4内製 178 triangles, 199 vertices. 元メッシュ 1782 triangles, 1467 vertices.
  55. 55. Hierarchical Level of Detail(HLOD)
  56. 56. UNREAL FEST WEST 2018 • 複数の建物、木といった違うアセットのメッシュやマテリアルを マージし、LOD処理を行うことで、描画負荷を減らす方法 Hierarchical Level of Detail(HLOD)
  57. 57. UNREAL FEST WEST 2018 △ 利点 • ポリゴンが減ることでGPU負荷の削減 • Materialが減り、Draw Callを減らすことができる 注意点 • MaterialをマージしないとDraw callは減らない • 保持すれば保持するほどメモリ量は増える HLODについて
  58. 58. UNREAL FEST WEST 2018 • HLODの使い方に関しては、 ドキュメントをご参照ください • http://api.unrealengine.com/JPN/Engine/HLOD/ HLODの使い方
  59. 59. HLOD + Inpostor
  60. 60. HLODでガッツリ削ると 遠景とはいえクオリティが下がってしまう
  61. 61. HLOD + Inpostor
  62. 62. UNREAL FEST WEST 2018 • アセットを各方向からレンダリングしたテクスチャを用意し、 • ビルボードに貼り付けることで見せかける手法 Inposter
  63. 63. UNREAL FEST WEST 2018 △ 利点 • ポリゴン数の大幅削減 • 負荷が高いアセットも 一律コストで描画が可能 気をつけるべきこと • 影がでない。 • 解像度、方向数など、 調整できるが、近いと崩れやすい。 • あくまで遠景用として Inpostorについて
  64. 64. UNREAL FEST WEST 2018 • どちらもHLODなのでDraw call数は同等 半分のポリゴンになっていながら、見た目が綺麗 HLODとInposter組合せ
  65. 65. UNREAL FEST WEST 2018 • もとのオブジェクトと比較しても、見た目を保っている HLODとInposter組合せ 1/2以下
  66. 66. UNREAL FEST WEST 2018
  67. 67. UNREAL FEST WEST 2018 • 以前からImpostorの機能はありましたが、 FortniteではPluginとして公開している、 ImpostorBakerを使用 • Impostorアセットの作成が容易になり、 半球分のみ生成するなどの工夫から、 テクスチャの使用効率があがっています • 詳しい使い方は付録で紹介 ImpostorBaker
  68. 68. アセットリダクション終わり
  69. 69. アニメーション
  70. 70. Battle Royaleの特徴③ 100人が同時に対戦 移動やアニメーションが同時に起こる
  71. 71. 重要度に応じて、フレームをスキップするなどの最適化 Update Rate Optimization(URO)
  72. 72. UNREAL FEST WEST 2018 • 遠くにいるキャラクター等、重要度の低いものに対して アニメーションの更新頻度を抑えることで処理を軽くする。 Update Rate Optimization(URO) No URO URO 5 URO 10
  73. 73. UNREAL FEST WEST 2018 Skeletal Mesh Compornentの Enable Update Rate Optimizationsを 有効にすることで動作可能 UROの設定方法
  74. 74. UNREAL FEST WEST 2018 UROのイメージ • キャラクターA、Bがいたとした場合 • それぞれにインデックスが割り振られる • すべてのキャラを2フレームごと更新と設定 • 交互にアップデートするように最適化される Character A Update Character B Update 0 1 2 3 4 5 [0] [1] Character A Update Character B Update Character A Update
  75. 75. 5フレームスキップしたUROの例
  76. 76. UNREAL FEST WEST 2018 URO 5
  77. 77. ゆっくりみてみると...
  78. 78. UNREAL FEST WEST 2018 URO 5 - Slow
  79. 79. UNREAL FEST WEST 2018 • 以下コマンドをOutputLogから入力することで検証可能 • 現状UIから細かい設定ができず、C++からの設定が必要 UROのパラメーター設定 コマンド 効果 a.URO.Enable 強制的にUROをON,OFF a.URO.ForceAnimRate 何フレーム毎にするか強制的に設定する
  80. 80. アニメーション終わり
  81. 81. LOD、HLOD、URO、、、 紹介してきた機能のパラメーターを どうやって切り替えているのか?
  82. 82. Significance Manager
  83. 83. UNREAL FEST WEST 2018 Significance Manager 4.15からプラグインとして 追加された機能(クラス)
  84. 84. UNREAL FEST WEST 2018 Significance Manager ビューの表示状態をもとに、優先度(状態)を管理 • LOD • HLOD • アニメーションのURO rate 等々 Player View
  85. 85. UNREAL FEST WEST 2018 Significance Manager UI等はないので、C++からのみアクセス可能 ドキュメントは現状ないので、 コードから理解することが必要...
  86. 86. UNREAL FEST WEST 2018 Significance Manager Viewport::Tick SignificanceManager- >Update(Viewpoints); SignificanceTypeによって優先度の格納情報や条件が変わる AnimationならURO、LODだったらLODのレベルなど Tick ViewportのTickを通じてパラメーターが更新されているので、自分自 身のパラメーターを参照すれば最適なものになっている。 BeginPlay CustomPawn USignificanceManager::Get(World)-> RegisterObject(this, SignificanceType); SignificanceTypeどんなタイプのアセットなのか渡す SignificanceUpdate ViewportのTickからSignificanceManagerを 通じて呼び出されパラメーターを更新する。 Game • 基本的な使い方としては、 WorldでSignificance Managerを持つように実装し、 Actor生成時等に、対象のActorを登録するような実装を行う • ビューポートのTick(ViewportClient::Tick)で、 ビューのトランスフォーム情報を元にアップデートを行う LOD Level URO Rate SIGNIFICANCE MANAGER
  87. 87. UNREAL FEST WEST 2018 △ Significance Manager 現状 • Significance Managerを継承して実装が必要 • ビューポートからの距離などの判断基準を自前で実装する必要がある 利点 • 一括して変更が可能なため検証がしやすい 気をつけるべきこと • グローバルだからと、なんでも実装してしまうと肥大化する可能性
  88. 88. Significance Manager終わり
  89. 89. UNREAL FEST WEST 2018 まとめ 今回はFortniteに関連して4.19で公開されている機能で、 実際に使えそうな機能を紹介しました お役に立てる情報があれば幸いです
  90. 90. 付録
  91. 91. ImpostorBakerの使い方
  92. 92. UNREAL FEST WEST 2018 • 準備 • https://github.com/ictusbrucks/ImpostorBaker からプラグインをダウンロード。 • Project以下のPluginsフォルダにダウンロードしたプラグインを追加。 • コンテンツブラウザーからPluginコンテンツを表示する。 • Generate_Impostor_Mapを開く ImpostorBaker
  93. 93. UNREAL FEST WEST 2018 • はじめに Generate_Impostor_Mapを開いた後に、 Levelに配置されているBP_Generate_ImposterSpritesを選択する。 Render Framesボタンをクリックすると、 初期配置されているアセットのImpostorのプレビューができる。 ImpostorBaker
  94. 94. UNREAL FEST WEST 2018 • マテリアルの出力 • BP_Generate_ImposterSpritesのDetailsから出力先情報を入力し3)Create Static Assetsをクリック ImpostorBaker
  95. 95. UNREAL FEST WEST 2018 • メッシュの出力 • BP_Generate_ImposterSpritesのコンポーネントからProceduralMeshを選択する。 一覧からProceduralMeshのCreate StaticMeshをクリックすると出力先を聞かれるので選択する。 ImpostorBaker
  96. 96. UNREAL FEST WEST 2018 Inpostorのスポーン • ProceduralMeshから生成したStatic Mesh Actorを Levelにスポーンさせれば、生成したInpostorを確認できる。 ImpostorBaker
  97. 97. ImpostorBaker 初期アセット以外のセットアップ
  98. 98. UNREAL FEST WEST 2018 • Materialのセットアップ • 使用しているMaterialの最後にImpostorCaptureSwitchを追加する。 1. 通常のMaterial Nodeの接続をMakeMaterialAttributesに置き換る 2. この時出力ノードをDetailsからUse Material AttributesをEnableにする 3. ImpostorCaptureSwitchを挟み出力させる。 ImpostorBaker
  99. 99. UNREAL FEST WEST 2018 • Static Mesh Actorの置き換え Materialを設定したStaticMeshをデフォルトのCube-Scaledと 置き換えるような形で配置し、RenderFramesで確認する。 ImpostorBaker
  100. 100. UNREAL FEST WEST 2018 Fortnite最適化セッション • Optimizing UE4 for Fortnite: Battle Royale - Part 1 https://www.youtube.com/watch?v=KHWquMYtji0&index=16&list=PLZlv_N0_O1gYcueZ- mOraUuH0WufCLuto&t=0s • Optimizing UE4 for Fortnite: Battle Royale - Part 2 https://www.youtube.com/watch?v=1xiwJukvb60&index=15&list=PLZlv_N0_O1gYcueZ- mOraUuH0WufCLuto&t=0s その他講演プレイリスト • GDC 2018 | Unreal Engine https://www.youtube.com/playlist?list=PLZlv_N0_O1gYcueZ-mOraUuH0WufCLuto GDC講演Youtubeリンク

×