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.

UE4アセットリダクション手法紹介

10,747 views

Published on

処理負荷/メモリ/ロード時間/パッケージサイズ…アセットは大量に作成され、様々な領域に影響を及ぼします。そのため、UE4はエディタ内に様々なアセットリダクション機能があります。しかし、無闇にアセットをリダクションすると、負荷は改善しないのにクオリティを下げてしまうこともあります。

今回UE4のアセットリダクション機能の各種が、
何を削減し何に対して効果があるのかを簡単にまとめてみました。(Audioは間に合わずでごめんなさい!調べてちゃんとまとめたいと思います。)

Published in: Engineering
  • Sex in your area is here: www.bit.ly/sexinarea
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: www.bit.ly/2AJerkH
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

UE4アセットリダクション手法紹介

  1. 1. UE4アセットリダクション手法紹介 Epic Games Japan / Support Manager Nori Shinoyama
  2. 2. アセット最適化のためのUE4機能紹介
  3. 3. アセット最適化のためのUE4機能紹介 処理負荷/メモリ/ロード時間/パッケージサイズ… アセットは大量に作成され、様々な領域に影響を及ぼします。 UE4はエディタ内に様々なアセットリダクション機能がありますが、 無闇にアセットをリダクションすると、 負荷は改善しないのにクオリティを下げてしまうこともあります。
  4. 4. アセット最適化のためのUE4機能紹介 今回UE4のアセットリダクション機能の各種が、 何を削減し何に対して効果があるのかを簡単にまとめてみました。 1. Polygon Reduction / LOD 2. Actor Merge / HLOD 3. LOD Bone Reduction 4. Animation Compression 5. Texture Resize
  5. 5. 備考 • Audioアセットに関しては今回含まれておりません – 篠山の勉強不足です。後日Audioは別枠としてまとめます。 • 検証バージョンはUE4.18~4.19となります。
  6. 6. LOD & Polygon Reduction
  7. 7. UE4はエディタ内部で自動的にLODとそれに合わせた Polygon Reductionをする機能があります。
  8. 8. Static Mesh LOD & Polygon Reduction
  9. 9. Skeletal Mesh LOD & Polygon Reduction
  10. 10. 備考: Static Mesh のPolygon Reductionは二種類から選べる • Editorの Mesh Simplificationで設定可能 – UE4内製 or Simplygon
  11. 11. Polygon Reduction & LOD GPU負荷の削減 (Early Z-pass, Shadow pass, BasePassで効果的) 有益 Render Thread(Draw) ポリゴン数が減ってもドローコール数が減るわけではない 影響薄 ロード時間とメモリ LODモデルを沢山持つことは、その分のデータ増加の懸念 副作用
  12. 12. どのオブジェクトを、どれぐらいの遠さに、 どれぐらいのポリゴン数で置いたら良いのだろうか??
  13. 13. Polygon Reduction & LOD どのように効果を測定するか? 頂点計算負荷の高いオブジェクトの選出 BasePassの負荷を見ながら探す手法 • UE4のみで確認する手順 1. r.screenpercentageを下げて、出力解像度を下げる。 2. r.RHISetGPUGaptureOptions 1にして ProfileGPUコマンドで計測 DrawCall単位の描画負荷を頂点負荷として確認 • 各種プラットフォームGPUプロファイラで頂点負荷を確認
  14. 14. 備考: r.RHISetGPUCaptureOptions コマンド • これをONにすることで、BasePass内部の各DrawCall毎の処理負荷 を出力してくれます – ※RHIThreadがOffになり、DrawThread負荷が急激に増えます – CPU負荷計測時や常時ONはやめましょう
  15. 15. 動的にLODを変化させるコマンド 大雑把な調査には非常に便利 • SkeletalMesh – r.skeletalmeshlodbias: LODのOffsetを調整 – r.skeletalmeshlodscale: LODの距離をスケーリング • Static – r.StaticMeshLODDistanceScale: LODの距離をスケーリング – r.forceLOD: 任意のLODに一律で設定 これらを使い、どの距離で、 どのぐらいのオブジェクトが必要かを大まかに検証できます
  16. 16. 4.20から… 最小LODを指定し、それよりも詳細なLODモデルをCook時に省くこ とが可能になるそうです。 これにより、例えば、 – PC/Console • LOD0の一番クオリティの高いモデルから全て持つ – Mobile • LOD2からそれ以下のモデルだけを持つ という設定が可能になり、それぞれのプラットフォームに最適なア セットサイズを、一つのアセットで達成することが可能になります。
  17. 17. HLOD / Actor Merge
  18. 18. HLOD / Actor Merge レベル上の複数のメッシュを一つのメッシュにまとめる機能
  19. 19. Merge Actors 複数のStaticMeshを一つのStaticMeshに変換する
  20. 20. Merge Actors 複数のメッシュを選んで Outliner上で右クリック Developer Toolsから設定 エディタを開くことが可能
  21. 21. HLOD 複数メッシュをまとめたLODモデルを作成し、 遠景の場合はそのまとめたメッシュを使ってレンダリングする
  22. 22. HLOD レベル単位で HLODのOn/Offを設定 HLODのクラスタリングや 生成メッシュを設定するエディタ
  23. 23. 備考: HLOD / Merge Actorsの Polygon Reduction 機能 HLOD/Merge Actorsどちらにも Polygon Reduction機能があります 4.19から、Simplygonを使わない独 自のPolygon Reduction機能も使用 できるようになっています。
  24. 24. Merge Actors DrawCall削減によるRenderThreadの負荷軽減有益 カリング効率低減によるGPU負荷の増加の可能性 視野外のポリゴン描画が多くなる可能性 副作用 Polygon Reductionを行わないとGPU負荷は減りません 設定を忘れずに 影響薄
  25. 25. HLOD カリング効率低減によるGPU負荷の増加の可能性 視野外のポリゴン描画が多くなる可能性 DrawCall削減によるRenderThreadの負荷軽減有益 副作用 Polygon Reductionを行わないとGPU負荷は減りません 設定を忘れずに 影響薄 ロード時間とメモリの増加 HLODモデルを沢山持つことは、その分データが増える
  26. 26. HLODデータはレベルに紐付いて作成されます ロード時間とメモリーの増加は必ず確認を Memreportなどでメモリ消費量をチェック
  27. 27. Merge Actor と HLODの注意点2つ • 注意点1: Material MergeしないとDrawCallは減りません • 注意点2: シーン内の同一オブジェクトのマージは別オブジェクトに
  28. 28. 注意点1. MaterialをMergeしないとDrawCallは減りません
  29. 29. 注意点1. MaterialをMergeしないとDrawCallは減りません 3つのマテリアルのオブジェクトをマージしても。。。
  30. 30. 注意点1. MaterialをMergeしないとDrawCallは減りません レンダリングはマテリアル単位で行われるので、 ドローコール数は減りません
  31. 31. 注意点1. MaterialをMergeしないとDrawCallは減りません マテリアルをまとめることドローコールが一つになります
  32. 32. 注意点2. シーン内の同一オブジェクトのマージは別オブジェクトに
  33. 33. 注意点2. シーン内の同一オブジェクトのマージは別オブジェクトに 同一のアセットをシーンに置いていたとして…
  34. 34. 注意点2. シーン内の同一オブジェクトのマージは別オブジェクトに 同じLODモデルが別Static Meshとして作成されてしまいます このような場合は独自でメッシュを差し替える方が良いかもしれません
  35. 35. LOD Bone Reduction
  36. 36. LOD Bone Reduction Skeletal Meshの動くBoneをLOD毎に設定する機能
  37. 37. LOD Bone Reductionのコンセプト こんな遠くのキャラクター LODは効いてポリゴン数少 なくても。。。 ボーンは全部計算される 指のボーン計算しなくても バレないのでは??
  38. 38. 消したいSkeletonを選択して右クリックで、 どのLODで省くかを設定可能
  39. 39. LOD Bone Reduction CPU上のBone計算(Evaluation)の負荷削減 複雑なAnimGraphを使用している場合特に効果的です。 基本的には、Main ThreadではなくWorker Threadの処理削減です 有益 遠景のアニメーションクオリティの低下の懸念 大丈夫かどうかの確認をお願いします。 副作用 GPU側の負荷削減には繋がりません 若干あるかもですが、こちらで観測できていません 影響なし
  40. 40. Animation Compression
  41. 41. Animation Compression 各Animation Sequenceの圧縮形式を設定可能
  42. 42. Animation Compression メモリ、ロード時間の削減 メモリ上で圧縮を展開したりしません。 圧縮データから直にアニメーションデータを読み込みます 有益 アニメーションクオリティの低下 適切な圧縮方式を選ぶことが必要 副作用
  43. 43. “CompressAnimations” Commandletで 全アニメーションを一括で圧縮可能 • コマンド例 – UE4Editor-cmd.exe [ProjectPath] –run=CompressAnimations • Project Settingsで、コマンドの圧縮形式の設定が可能 • アセット毎に、 この一括圧縮をしないと設定することも可能
  44. 44. Animation Compression 圧縮されたデータ量のチェック1 Content Browerで圧縮率とサイズがわかります
  45. 45. Animation Compression 圧縮されたデータ量のチェック2 Cook後の Animation Assetsのサイズ Memreportで見る AnimSequenceのメモリ量 圧縮率: 小 圧縮率: 大
  46. 46. 例はThirdPersonで6個しかAnimSequenceがありませんが。。 割合で言うと50%以上の差がある場合も。 圧縮設定でメモリ消費量が大きく変わる可能性があります。 細かくチェックしましょう 圧縮率: 小 圧縮率: 大
  47. 47. Animation Compression 各項目の設定方法 • 設定内容について細かく説明しているブログがあります – https://nfrechette.github.io/2017/01/11/anim_compression_unreal4/ • また、4.20でAnim Compressionを大幅に改善するように 現在制作中です。
  48. 48. Texture Resize
  49. 49. Texture Resize パッケージサイズ, メモリに優しい GPU描画も高速に (キャッシュに乗りやすいためレンダリング速度向上の可能性あり) 有益 テクスチャクオリティの低下 許容できるか、様々なシーンで確認が必要 副作用
  50. 50. Texture Resize 各テクスチャの設定 • UE4 Editorにインポートしたものと、 ゲームで読み込まれるサイズの確認 • Cook時に既に適用されるので、実機用のテクスチャはリサイズさ れた状態。 – パッケージサイズやロード時間にも影響
  51. 51. Texture Resize 各テクスチャの設定 • Gameで読み込むLODを変更する”LOD Bias” しかし、これは各プラットフォームで共通
  52. 52. Texture Resize Cook後のTextureのサイズの確認 LODBias = 0 LODBias = 2 UE4 マネキンのテクスチャのサイズの確認
  53. 53. Texture Resize Platform毎での一括設定 • 各プラットフォームのDeviceProfile.ini のLODBiasを各 TextureLODGroupsで設定することにより、 そのグループを設定されたテクスチャ全ての最小LODを変更できる • Platform毎に別々の設定ができるが、グループ単位で一括の設定
  54. 54. アセット最適化のためのUE4機能紹介 1. Polygon Reduction / LOD 2. Actor Merge / HLOD 3. LOD Bone Reduction 4. Animation Compression 5. Texture Resize
  55. 55. End…

×