「ドラゴンクエストXIへの道2019 ~NintendoSwitch編~ 」適当メモその最後

 適当メモ(その最後)なので正確性*1は保証しません^^;

記事

 フェスの講演の内容をファミ通さんがスライド画像付きで記事にされてていて そちらの方が大変分かりやすいです。

  1. 『ドラゴンクエストXI S』はいかにUnreal Engine 4で最適化されたか? “UNREAL FEST EAST 2019”のセッションをお届け - ファミ通.com

メモ書き

# 16:00- ドラクエ

紙山
高木 TA
ミハウ

2年ぶり(PS4
 switch一つでswitch版が出来なかった

PS4<->Switchスペック差は大人の事情でw-


Unity/UE4どっちが好き(数人、Unityの方?
PS4/switchどっちがスペック高い(switch,任天堂の人?



## PS4 UE4 ver4.13 LoadTimesブランチ?
  ロード、GC、ヒッチ対応ブランチ

  switch UE4 ver4.15

  一旦PS4版UE4のパッチ(プラグイン)等外して、それから4.15(18?)までrebaseした?


UE4プラグイン

UE4 でもGI欲しい(拍手

Enlighten
  switch版はUE4標準lightmassに切り替えた
    Enlightenはライト編集してもベイク不要だったが、lightmassは必要でアーティストに不評
    

CRIsofdec2
  最初MediaFrameworkに不具合有り
    代わりにCRI導入
      switch版開発時はMF不具合修正済みなので一旦CRI外す

  弊社SoundDriver内で、CRI HCAコーデックだけはまだ使用中

バージョンアップ快適



容量削減

  Switch32BG
  PS4版DQ   30GB容量
    SW版DQはPS4版追加に、マップ追加、2Dモード、振るボイスなど

   ゼルダで13GBだった <-目標


  大きいアセットを調査
    違いが分からないようにswitch版に最適化(削減

ムービー  -> WebM VP9 -> 半分でH264相当
メッシュ  -> Static/SkeltonMesh両方最適化 -> Simplygon使用(ほぼほぼ手作業修正もやってる
  リダクション比較 4.22比較、Simppolygonの方ががきれい

テクスチャ-> サイズ調整 -> メッシュを考慮して

モーション ー> ApplyCompression,ResampbleAnimetion = 15変更 ->見た目変わらず半減(全部人間が確認


13.5GB達成

 PF4よりロード短くなる? <= ならなかった


 アセット数同じ、サイズ省、

  アセットロード IO uasset FileHandle.Read()
    アッセト CPU  初期化

IO CPU 処理時間

 PS 同じ switch IO少ない -> バランス => switchはIOほどCPU減らなかった
  CPUネック

   UnrealPack ZLIB重い? Setting -> Compress content

      =>LZ5変更、8倍速い
    日暗転中のレベルストリーミング、カクツキ軽減


まだIOひま(GPUもひま?
 SDK対応(N社?GPUクロック落として、CPU上げる?
  IOとCPUがよいバランスに




ゲームちゅの処理速度
 switchは仲間付いてくる CPU/GPU限界

 ブループリン後問題
        c++ Lua100倍遅い、BP1600倍遅い

 BP高速化(Nativize
  2017紹介わな(当時バグってた ->4.22治ってる
   Luaより早い

 UFE処理される順序が変わるので注意



TA 高木

1. Scalability設定
2. 草木最適化
3. 自動化

Scalability設定
^^^^^^^^^^^^^^

Scalabilit(拡張性)アセット弄らず、プラットフォーム毎に最適化


r.AmbientOcclusionLevel=1のSSAO汚い -> はーぷれぞリューションの処理の軽いSSAO作成(3倍速い

影の設定


表示距離素ケース


スケーラビリティーだけであ、パフォーマンス間に合わず

草木最適化
^^^^^^^^^

草木 <- Maskedbe多い

マテリアル軽量化
 PivotPainter VertexShader 重い ->SimpleGrassWind 中 、Sineカーブ 軽い

効率的にかリングされてない
 Foliageクラスター分割設定
    Foliage.MinVertsToSplitNode 

         16384(defalt),  5000,  1000

    マップ毎に変更することも可能 -> folliage.MinVertsTo.. -> foliage.RebuildFoliageTrees -> レベル保存

    HSIMもこれを参照
      Folliageクラスター <-- folliage.MinVertsTo.. 
      HSIMクラスター <-- folliage.MinVertsTo.. 

樹の頂点数軽減

 LODをきつめに =>
 LOD切り替わり目立つ

  ー>そこでDithered LOD Transition(注意、チェック入れると不透明でも常時Masked

    LOD0  ---------> LOD1
    +++++++++++++++++++++
    Opaque -------> Opaque
    Mask   - Mask-> Mask    (Dithered LOD Transition
    Opaque - Mask-> Opaeuq  (Dithered LOD Transition + エンジン改造


Imporstor改良

  パカパカ切り替わる(エンジン改造

その他
 Maskedの透明面積省 => 不透明で草作る

Mask Material only Early z-pass


他の最適化のために


自動化
^^^^^

ミハウさん

Map Check 
  -> 1件 1-2ms はy九なるかも

マテリアルインsタンス最適化
 M > MI
  M < MI の場合も?(シェーダーバイナリのため

マテリアル重複
 マップ100、MI25000


MI最適化の事例1
 UE4Python(runtime / editor
    -> DQはeditorのみ

  py重いあらc++を使用

事例2
Oerrideen Materialsワーニングしゅうせい

 結果 Blutility使った ー>ワーニング直した(c++で作業発生



エディター自動化による最適化

 c++     早い
 blutility 作りやすい
 python   便利


UE4pythonから勉強したこと

 UE4 Mayaと違う
  MayaPythonAPI 普通
  UE4PythonAPI BPと同じ(ue4py(blutility)使いたければソース嫁

 ググれ ue4 python livestream

switch版DQ買っていない(ーw-

*1:誤字脱字は気にするな^^;