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.

『修羅道』制作事例 モバイルハイエンドグラフィックゲーム実現まで

18,433 views

Published on

講演動画:https://www.youtube.com/watch?v=Iy0WWtMJgNQ

2018年10月14日に行われた「UNREAL FEST EAST 2018」における株式会社ガンバリオン様の講演で使用されたスライドです。
●公式サイト
https://unrealengine.jp/unrealfest/
===
UE4にて開発したスマートフォン用ゲーム『修羅道』において、UE4の勉強から始めて、期間半年でどのようにモバイルハイエンドグラフィックゲームを実現したかお話します。アセット制作や最適化、モバイルならではの問題点などを解説していきます。

Published in: Engineering
  • Be the first to comment

『修羅道』制作事例 モバイルハイエンドグラフィックゲーム実現まで

  1. 1. #ue4fest#ue4fest 『修羅道』制作事例 モバイルハイエンドグラフィックゲーム実現まで 株式会社ガンバリオン CGデザイナー エンジニア 太田直人 濱浦誠悟
  2. 2. #ue4fest#ue4fest 株式会社ガンバリオン 『修羅道』ディレクター 太田直人 2012年、株式会社ガンバリオン入社。 CGデザイナーとしてUIを中心として 開発に携わる。 『修羅道』では世界観や仕様設計、 キャラクターモデリングなどを担当。 株式会社ガンバリオン 『修羅道』メインエンジニア 濱浦誠悟 2015年、株式会社ガンバリオン入社。 『修羅道』では主にメインモードに あたる修羅道と羅生門の実装、 開発環境の整備を担当。 自己紹介
  3. 3. #ue4fest#ue4fest 初めてUE4を使用して 期間半年で どのようにモバイルハイエンドグラフィックを実現したか 本講演で話すこと
  4. 4. #ue4fest#ue4fest ■1部:3カ月で基本を完成させたワークフロー 1-1 開発が始まるまで 1-2 UE4の検証 1-3 ハイエンドクオリティを実現するために 1-4 ワークフローに関するTips ■2部:リリースに向けて、最適化 2-1 リリースに向けて 2-2 最適化 2-3 ここが困った アジェンダ
  5. 5. #ue4fest#ue4fest
  6. 6. #ue4fest#ue4fest
  7. 7. #ue4fest#ue4fest グラフィックにこだわった剣戟アクションゲーム AppStore/GooglePlayで配信中 敵の一挙一動を気にする緊迫した 駆け引きを愉しむゲーム 空気や「間」が感じられる ビジュアルの説得力が求められた 『修羅道』
  8. 8. #ue4fest#ue4fest 開発期間 ・半年 開発開始から3か月後にTGS出展が控えていた 開発人数 ・2名(濱浦と太田)でスタート ・8名前後で開発 ・繁忙期に最大12名 期間と人数
  9. 9. #ue4fest#ue4fest 第1部:3カ月で基本を完成させたワークフロー
  10. 10. #ue4fest#ue4fest 1-1 開発が始まるまで
  11. 11. #ue4fest#ue4fest プロジェクトの前提 ・モバイル ・ハイエンド ※据え置き機と遜色ないグラフィックが目標 ・期間短め ・規模小さめ 1-1 開発が始まるまで
  12. 12. #ue4fest#ue4fest UE4での開発 ・バージョン4.15~スタート ・EULA版での開発 1-1 開発が始まるまで
  13. 13. #ue4fest#ue4fest 1-2 UE4の検証
  14. 14. #ue4fest#ue4fest そもそもUE4の使用経験がない →プロトタイプを作りつつ検証 1-2 UE4の検証
  15. 15. #ue4fest#ue4fest 役立った文献 ・UnrealEngine4で極めるゲーム開発 (2015年7月発売) ・UnrealEngine4 ブループリント逆引きリファレンス (2016年2月発売) 1-2 UE4の検証
  16. 16. #ue4fest#ue4fest マーケットプレイスでテスト用モデル/モーションを購入 ・低コストで高クオリティ ・規格が設定されており、すぐに使える 高速でプロトタイプが作れた 1-2 UE4の検証 Movement Animset Pro
  17. 17. #ue4fest#ue4fest ディファ―ドレンダリングのテスト ・UE4.15.3 当時、モバイルディファードレンダラが開発されており 設定からレンダラを変更できた ・UE4の採用理由のひとつでもあったためサンプルのレベルを使用して まずは動作を確認 1-2 UE4の検証
  18. 18. #ue4fest#ue4fest ディファ―ドレンダリングの断念 サンプルレベルを使用してテストした結果… ・iOSでは描画結果が破たんしていた ・Androidでは表示できたがSnapdragon820でも20fps程度しか出ず フォワードレンダラを採用 ・・・UE4.20現在はモバイルディファ―ドレンダラの設定自体が消滅している 1-2 UE4の検証
  19. 19. #ue4fest#ue4fest ブループリントの検証 ・考え方は一般的なオブジェクト指向言語に近くで大きな混乱はなかった ・Delay ノードやイベントなどでフレームをまたいだ処理も書きやすい ・演算子1つにも1つのノードを使うため、ソートなどのアルゴリズムや 数学の公式を表現しようとすると複雑化しやすい プロトタイプはブループリントで不自由なく作れた 1-2 UE4の検証
  20. 20. #ue4fest#ue4fest プロジェクト本格始動 ・プロトタイプの作成には3週間ほど使用 ・UE4の基本操作を覚えた ・試作できる程度の仕様をまとめた 1-2 UE4の検証
  21. 21. #ue4fest#ue4fest 1-3 ハイエンドを実現するために
  22. 22. #ue4fest#ue4fest ハイエンドの定義:モバイルで据え置き機のクオリティ ・見た目第一、ポリゴン数など一切の制約を気にせず作る 1-3 ハイエンドを実現するために
  23. 23. #ue4fest#ue4fest キャラモデル 主な使用ツール Maya ZBrush Substance Painter ポリゴン:約47,000tris テクスチャ:1024x1024 diffuse / material / normal 1モデルにつき1枚ずつ 1-3 ハイエンドを実現するために
  24. 24. #ue4fest#ue4fest マテリアル テクスチャ構成はキャラクター/武器/ステージ共通 ・diffuse ・material(R=roughness G=metallic B=ambient occlusion) ・normal モバイルレンダラではAOは効かなかったが コントラストの強いビジュアルなので あまり気にならなかった 1-3 ハイエンドを実現するために
  25. 25. #ue4fest#ue4fest マテリアル・濡れた世界の表現 ・硬質パーツは特に輪郭のmetal値を極端に 上げ、少ない光源でもハイライトが 入るようにしている ・逆に布系はmetal値を0にして 少ない光源でも質感差が分かるように している 1-3 ハイエンドを実現するために
  26. 26. #ue4fest#ue4fest マテリアル・少ない光源への対応 ・ステージがかなり暗いため、 ディフューズカラーは極限までビビッドに している ・極限まで上げてようやく視認できる程度に 暗い 1-3 ハイエンドを実現するために
  27. 27. #ue4fest#ue4fest 1-3 ハイエンドを実現するために 武器モデル 主な使用ツール Maya Mudbox ZBrush Substance Painter ポリゴン:約1,000~11,000tris テクスチャ:1024x1024 diffuse / material / normal 1モデルにつき1枚ずつ
  28. 28. #ue4fest#ue4fest 武器モデル・少ない光源への対応 武器用ライトを用意して視認性を上げる ・ステージの光量では目立たないため 1-3 ハイエンドを実現するために BEFORE AFTER
  29. 29. #ue4fest#ue4fest 1-3 ハイエンドを実現するために モーション 主な使用ツール Maya
  30. 30. #ue4fest#ue4fest モーション・ボーン構成 ・社内汎用とUE4で 骨構造が異なる ・ボーン総数125本 1-3 ハイエンドを実現するために 社内汎用 UE4
  31. 31. #ue4fest#ue4fest モーション・UE4構成の採用 UE4のボーン構成でモデルを作成することに ・社内汎用でもリターゲットできたが 対応にひと手間かかるため ・UE4構成の方が不安要素が少ない 1-3 ハイエンドを実現するために
  32. 32. #ue4fest#ue4fest モーション・プロトタイプデータの活用 購入した仮モーションで事前に完成形のステートマシンを作成しており、 モーションキャプチャの指示が的確にできた ・必要なモーションの尺、要素を割り出すことができていた ・上記ステートマシンに本番データを流し込んでもほぼそのまま運用できた 1-3 ハイエンドを実現するために
  33. 33. #ue4fest#ue4fest モーション・キャプチャモーションの扱い方 殺陣経験のある役者の方による高品質なキャプチャモーション ・微調整はしたが、基本的にはキャプチャデータを そのまま使用できた ・モーション速度はUE4側で調整 1-3 ハイエンドを実現するために
  34. 34. #ue4fest#ue4fest モーション・めり込み対策 武器が体にめり込まないように 武器の形状に応じて腕の傾きを調整 1-3 ハイエンドを実現するために Before After
  35. 35. #ue4fest#ue4fest キャラバリエーションをつけるにあたり 全キャラクターでボーン構成を統一 ・四脚など異形デザインは採用しなかった 1点集中してクオリティを上げるため 1-3 ハイエンドを実現するために
  36. 36. #ue4fest#ue4fest バリエーション ・体格 ・刺さった矢 ・角の有無 ・色 1-3 ハイエンドを実現するために
  37. 37. #ue4fest#ue4fest バリエーション・体格と矢、角 ・体格はアニメーションBPで ボーンをスケール ・刺さった矢や角は予め刺さった 状態でスケルタルメッシュを用意 「Hide Bone by Name」ノードで 不要なものを非表示に 1-3 ハイエンドを実現するために
  38. 38. #ue4fest#ue4fest バリエーション・色 ・色はマテリアルを入れ替える ことで対応 1-3 ハイエンドを実現するために
  39. 39. #ue4fest#ue4fest 物理アセット 1-3 ハイエンドを実現するために
  40. 40. #ue4fest#ue4fest 物理アセット 場所を限定して使用(前垂れや紐) ・物理エディタとゲーム画面とで物理の見た目が合わなかった ・調査せず「見た目良ければ良し」で実装した 特にバグも上がらなかったのでそのまま採用 1-3 ハイエンドを実現するために
  41. 41. #ue4fest#ue4fest ステージ 主な使用ツール Maya ZBrush Substance Painter ポリゴン: 1区画 約110,000tris 1-3 ハイエンドを実現するために
  42. 42. #ue4fest#ue4fest ステージ・アセットクオリティを上げるために 遮蔽物の多いシチュエーションを採用 黒のfogを効かせ、視界を狭めることで アセットの質を高めることができた 1-3 ハイエンドを実現するために
  43. 43. #ue4fest#ue4fest ステージ・効果的に落ちる影 鳥居部分だけムーバブルにすることで効果的にキャラに影を落とせた ・全てのアセットが動的に影を落とす必要はない 1-3 ハイエンドを実現するために
  44. 44. #ue4fest#ue4fest ステージ・単調な見た目の回避 地面など、同じ見た目が続くと違和感が あるものはテクスチャをブレンドできるマテリアルを使用 1-3 ハイエンドを実現するために Before After
  45. 45. #ue4fest#ue4fest ステージ・立体感のある壁と地面 壁や地面にはAチャンネルにHeight情報の 入ったマテリアルを使用 ・壁は100ポリゴン程度 1-3 ハイエンドを実現するために
  46. 46. #ue4fest#ue4fest ステージ・デザイン作業に没頭するために ライトマップ用のUVを自動で展開してくれる機能を活用 1-3 ハイエンドを実現するために
  47. 47. #ue4fest#ue4fest 演出 ハイポリゴンモデル、 動的光源を生かす演出 ・鍔迫り ・クリティカル、パリィ 1-3 ハイエンドを実現するために
  48. 48. #ue4fest#ue4fest 演出・ドアップ鍔迫りの実現 ・鍔迫りカメラに切り替えることで表現 ・武器ごとに鍔迫り用のsocketを用意し、 位置を合わせて再現 ・足元を見せないアングルにすることで 背の高さの違いによる破綻を回避 1-3 ハイエンドを実現するために
  49. 49. #ue4fest#ue4fest 演出・直感的な気持ちよさ クリティカルとパリィは動的ライトを活用 ・HUDを省き、没入感を損なわないように ・光量が少ないため効果が大きかった 1-3 ハイエンドを実現するために
  50. 50. #ue4fest#ue4fest エンジニアリング デザイナーが用意したこれらのアセットを試しに表示 ・キャラクター +武器:50,000tris x 2体 ・ステージ :stat Engine コマンドで確認する 処理量の最大タイミングで100,000tris 程度 (マテリアルもデザイナーの希望クオリティ) 1-3 ハイエンドを実現するために
  51. 51. #ue4fest#ue4fest エンジニアリング 特に積極的な最適化はしていなかったものの ・当時最新だったiPhone7であれば意外にも快適に動作することを確認 ・Android はSnapdragon820で若干のフレームレート低下を確認 このクオリティレベルを基準として クオリティアップと最適化を行うことに決定 デザイナー主導でこの後も色々追加したことで最適化自体は苦労しましたが… 1-3 ハイエンドを実現するために
  52. 52. #ue4fest#ue4fest エンジニアリング ・デザイナー主導で高品質なビジュアルを作成できた デザイナーが使おうとする機能がモバイルで使用できるかどうかの確認や グラフィックスに関してはプレビューしやすい環境の構築が主な作業になった 1-3 ハイエンドを実現するために
  53. 53. #ue4fest#ue4fest プレビュー ・モバイルプレビュアを使用してエディタ内で見た目を確認しつつ作業 ・実機上での動作に不安もあったため、実機による確認は必須とし、 最終的なクオリティの確認には iPhone 6s を使用 1-3 ハイエンドを実現するために
  54. 54. #ue4fest#ue4fest モバイルプレビュアでの表示確認 1-3 ハイエンドを実現するために モバイルプレビュア 実機 ※画像はイメージです
  55. 55. #ue4fest#ue4fest 1-4ワークフローに関するTips
  56. 56. #ue4fest#ue4fest バージョン管理ツールについて ・UE4本体ソース以外のプロジェクト内のファイルはアンリアルエディタの Subversionクライアント機能を使用してSubversionで管理 ・アンリアルエディタはContentフォルダ以下しか管理しないため それ以外のC++コードや設定ファイルはUE4と直接関連しないスクリプト等と共に TortoiseSVNを使い同じリポジトリで管理 Subversionクライアント機能はアカウントを設定するだけですぐに使用でき 素直に他のクライアントツールと同じリポジトリで運用すると扱いやすい 1-4 ワークフローに関するTips
  57. 57. #ue4fest#ue4fest バージョン管理ツールについて ・UE4本体のソースコードはプロジェクトリポジトリとは別に 社内変更分とともにGitで管理 ・公式ソースから変更の適用前・適用後でバージョンごとに2つブランチを分けて バージョンアップの際は変更前後のブランチ間差分からパッチを作成して 新しいバージョンのソースコードに適用して対応 エンジン本体とプロジェクトは別のバージョン管理ツールになったが UE4のバージョン管理環境と合わせて使用でき運用上問題は無かった 1-4 ワークフローに関するTips
  58. 58. #ue4fest#ue4fest ビルドの自動化 ・専用でビルドマシンを1台用意 コンソールからビルド、パッケージをモバイル端末のブラウザからダウンロー ドできるよう構成 Jenkinsから iOS, Android版のパッケージを常に最新でビルドし続ける ・参考:株式会社ヒストリア 様 ブログ 「 [UE4] 4.9におけるパッケージングまとめ ~ProjectLauncher & Console編~」 http://historia.co.jp/archives/3684/ 1-4 ワークフローに関するTips
  59. 59. #ue4fest#ue4fest ライティングのバッチ処理 ・ステージのライトビルドをワンボタンで複数レベルの処理を連続実行できる ように整備 必要に応じてライトビルドを夜間実行 ・参考:株式会社ヒストリア 様 ブログ 「[UE4] ライトビルドをコマンドから実行しよう!」 http://historia.co.jp/archives/7343/ 1-4 ワークフローに関するTips
  60. 60. #ue4fest#ue4fest 環境の全体図(社内) 1-4 ワークフローに関するTips
  61. 61. #ue4fest#ue4fest C++かブループリントか ・ブループリントのほうが書籍やTips解説系ブログなど国内情報が充実 ・エンジニア以外へのレクチャのためにブループリントの習熟が必要 ・仕様規模からノードベースでもつくりきれると判断 ・開発期間の短さからエンジン起因のトラブルは避けたい状況 BPに公開されていない、情報が少なくエンジン内部に近い操作を要する機能の使用は 仕様を変更してもらってでも極力避けることに(HTTPなどどうしても必要な機能はある) 『修羅道』はブループリントベースで開発 1-4 ワークフローに関するTips
  62. 62. #ue4fest#ue4fest ブループリントベースとした効果 ・公開されているTipsを手早く取り込め すぐに各機能の実装ができた ・エンジニア以外ともやりとりしやすく、調整値の 設定環境の作成が最低限の作業で済んだ 1-4 ワークフローに関するTips
  63. 63. #ue4fest#ue4fest C++の立ち位置 ・シンプルに1モジュールで構成 ・Character 等の主要なクラスは継承だけした空のC++クラスを継承して保険に ・バトル中のステータス異常関連の処理など数値処理の多い機能はC++で実装 いくつかの列挙体、構造体などをC++に移動する 必要は生じたものの根本的な作り直しは発生しなかった 1-4 ワークフローに関するTips
  64. 64. #ue4fest#ue4fest UE4 のソースコード使用とUE4改造のスタンス ・改造にかかるコストが高いと考え原則としては改造は行わない ・例外として、モバイルのOS機能周りについてのみ改造を許可 ・特に最初のレベルが読み込まれるよりも先に行いたい処理などエンジンの処理 をフックしないといけない場所のみで対応 パッケージ化するPCのみ変更を適用すれば済むため UE4の改造が作業環境に影響することは無かった 1-4 ワークフローに関するTips
  65. 65. #ue4fest#ue4fest UE4の改造箇所 – Android 向け対応 ・SaveData保存場所がユーザからアクセス可能な場所になっていたため変更 ・OBB(拡張ファイル)を使用すると一部端末では READ_EXTERNAL_STORAGEのパーミッションを取らないと OBBにアクセスできないため起動時に権限要求を行う (Galaxy s7 edge で確認) 1-4 ワークフローに関するTips
  66. 66. #ue4fest#ue4fest HDDネックの解消 ・特にパッケージング中、明らかにHDDネックになっていることを確認 SSDの導入でビルド時間を4割程度短縮 1-4 ワークフローに関するTips
  67. 67. #ue4fest#ue4fest 最終的なPCスペック OS Windows 10 Pro 64bit CPU Intel Xeon E5-1620 v3 メモリ 16 GB グラフィック NVIDIA GeForce GTX 960 SSD 250GB x2 HDD 2TB この構成で重くなることも少なく快適に作業ができた 1-4 ワークフローに関するTips
  68. 68. #ue4fest#ue4fest 期限に間に合いました ・2017/9/11 PV、第1報公開 ・2017/9/21 TGS出展
  69. 69. #ue4fest#ue4fest 第2部:リリースに向けて、最適化
  70. 70. #ue4fest#ue4fest 2-1 リリースに向けて
  71. 71. #ue4fest#ue4fest クオリティの押し上げ 2-1 リリースに向けて TGS版 リリース版※Ver1.1.3
  72. 72. #ue4fest#ue4fest ポストエフェクトの調整と追加 ・Bloom ・Exposure Compensation ・Depth of Field 2-1 リリースに向けて
  73. 73. #ue4fest#ue4fest ハイライトのじらつきの緩和 Bloomを抑える 2-1 リリースに向けて BEFORE AFTER
  74. 74. #ue4fest#ue4fest BEFORE AFTER コントラストの調整 Exposure Compensationで 中間色を増やす 2-1 リリースに向けて
  75. 75. #ue4fest#ue4fest Depth of Fieldの実装 ・UE4アップデートにより Androidでも使えるようになった ※4.17 で修正確認済み 2-1 リリースに向けて
  76. 76. #ue4fest#ue4fest 臨場感の補強 パーティクルを 追加して臨場感を上げる ・蛍火 ・水滴 2-1 リリースに向けて
  77. 77. #ue4fest#ue4fest ゲーム完成に向けての量産 86種類の武器の作成※Ver1.0.1当時 ・色違いのみの武器もあるが基本的に1点もの ・武器アセット86本で約200MB ステージの変化 ・鳥居など印象的なアセット以外はできるだけ使いまわし ・ポストエフェクトのMobile TonemapperのTintとContrastで 色味を変更 2-1 リリースに向けて
  78. 78. #ue4fest#ue4fest 見た目の完成 2-1 リリースに向けて
  79. 79. #ue4fest#ue4fest 2-2 最適化
  80. 80. #ue4fest#ue4fest クオリティを押し上げた結果 ・それなりに快適だった iPhone7 でも処理落ちする状態 ・Androidはさらにサーマルスロットリングによる速度低下が深刻 ・処理速度だけでなくバッテリーの減りも改善が求められる いよいよ最適化を開始 2-2 最適化
  81. 81. #ue4fest#ue4fest 目標設定 ・低いスペックの端末では画質を落とすなどの対応は行わずに非対応とし 遊べる機種を限定してでも高品質なものとする ・目に見えるレベルのビジュアルクオリティは下げない 2-2 最適化
  82. 82. #ue4fest#ue4fest 目標設定 - Android 当時のハイエンドSoCだったSnapdragon820を下限端末に選定 ・処理落ち・熱の問題が大きかったものの、後継の Snapdragon 835 のモデルが 殆ど無かったため 2-2 最適化
  83. 83. #ue4fest#ue4fest 目標設定 - iOS iPhoneはiPhone 6sを下限端末として選定 ・2年前のモデルなら一定のシェアがあると考えたため ・同世代以降のiPad系デバイスもサポート 2-2 最適化
  84. 84. #ue4fest#ue4fest 最終的な目標 ・iPhone 6s以上 及び Snapdragon 820相当以上のAndroid ・30fpsの維持 ・iPhone系端末は r.MobileContentScaleFactor=2.0 を設定 ・Androidはデフォルト設定で基本的に r.MobileContentScaleFactor=1.0(1280x720) ・Androidにおけるサーマルスロットリングの抑止 2-2 最適化
  85. 85. #ue4fest#ue4fest 最終的な目標 ・Android, iOS いずれも処理落ちしていたものの より処理落ちが深刻だったAndroidさえ動けばこちらは問題になることは無いと想定 →これ以降は基本的にAndroid端末で検証 (スライド上のデータもSnapdragon 820搭載Android端末でのもの) 2-2 最適化
  86. 86. #ue4fest#ue4fest サーマルスロットリングについて ・端末の温度が高くなると自動的に速度を落として端末の冷却を図る機能 ・コンシューマやPCでは起きないモバイル特有の問題 ・特にAndroidでの影響が顕著で高負荷をかけるとすぐに速度が落ちる →1フレームあたり80msかかっていた場面では 約5分経過後、1フレームあたり140msにまで処理時間が増加し 端末性能が半分程度まで落ちることがあった 性能を100%使い続けられないので、高負荷状態が続かないようにする必要がある 2-2 最適化
  87. 87. #ue4fest#ue4fest 負荷状況の確認 ・stat fps, stat unit, stat unitgraph コマンド ・Snapdragon Profiler 最も処理落ちの激しかった下限端末 Snapdragon820 搭載 Android デバイス実機で 処理落ちする箇所を調べた結果、Draw, GPU の負荷の高さが問題と確認 ・参考:CEDEC2017 - Epic Games Japan 様 講演 「UE4 プロファイリングツール総おさらい(グラフィクス編)」 https://www.slideshare.net/EpicGamesJapan/cedec2017-ue4 2-2 最適化
  88. 88. #ue4fest#ue4fest UE4の動作要素 ・Game CPU:ゲームの世界を更新してキャラクターの位置や動きを確定 ・Draw CPU:Gameで決定したシーンを解釈して描画命令を発行 ・GPU GPU:頂点やピクセルを計算して画面に表示する絵を作成 2-2 最適化
  89. 89. #ue4fest#ue4fest Draw負荷の低減 特にスタティックメッシュの描画に時間がかかっていることを確認 ・いくつものスタティックメッシュをレベルに配置してもらう方法で 背景をデザインしており、ドローコールを大きく減らす余地がある →アクターのマージ機能でドローコールを減らすことに 2-2 最適化
  90. 90. #ue4fest#ue4fest アクターのマージ レベルは全部まとめてしまうとクリッピングが効かなくなってしまい、 逆に重くなってしまうので程よく、負荷状況を見つつマージ 2-2 最適化 ドローコール 数 Draw 処理時間 マージ前 1,120回 85ms マージ後 185回 33ms 特に重かった場所
  91. 91. #ue4fest#ue4fest アクターのマージ 編集用と書き出し用のレベルを用意し、編集用はアセットがばらばらの状態、 書き出し用はマージしてまとめたものと分けていた 配置変更のたびにマージが必要になるためマージ後の微調整は大きな手間 今回は実現できなかったがエディタプラグインなどで自動化できればもっと良かった 2-2 最適化
  92. 92. #ue4fest#ue4fest GPU負荷の低減 パーティクルの描画に時間がかかっていることを確認 ・ステージに浮かぶ炎もカメラに近づくなどで使用ピクセルが増えると 非常に負荷が増える 演出効果の薄い背景の小さな炎にパーティクルを使っている部分も確認 →パターンアニメへの置き換えをすることに 2-2 最適化
  93. 93. #ue4fest#ue4fest パーティクルをパターンアニメに変更 アイテムの表示などに使用しているパーティクルや 見た目のサイズが大きなパーティクルは パターンアニメのビルボードにして負荷低減 2-2 最適化
  94. 94. #ue4fest#ue4fest パーティクルをパターンアニメに変更 ・数が多く、かつ小さくて静止している背景の蝋燭の炎はマージできない ビルボードは使わず、板ポリゴンを2枚十字に重ねてからマージ ・パーティクルへの対策だったが CPUの処理時間に対する効果が高かった 2-2 最適化 炎アクター数 Draw処理時間 Game処理時間 対策前 128個 71ms 29ms 対策後 1個 65ms 25ms ボスバトルの場面の場合
  95. 95. #ue4fest#ue4fest 2-2 最適化 視覚化機能による問題個所の確認 ・問題になっていそうな箇所を分かりやすく簡単に確認できる 怪しい箇所をエンジニアが手元で軽く調整してみて効果の程を確認 Lightmap Density, Shader Complexity の調整で効果が確認できた
  96. 96. #ue4fest#ue4fest ・Lightmap Density - ライトマップ密度の高い部分を修正 2-2 最適化
  97. 97. #ue4fest#ue4fest ・Shader Complexity - エクスポートミスで表示されている判定ポリゴンを削除 2-2 最適化
  98. 98. #ue4fest#ue4fest 描画APIの選択 ・iOS は当初より Metal を使用していた 元々GLES3.1より高速な動作を確認しており、動作も安定していた 2-2 最適化
  99. 99. #ue4fest#ue4fest 描画APIの選択 ・Androidは Vulkan に変更 Experimental とされており検証段階で不安定だったため避けていたが 残りの期間が少ない中、サーマルスロットリングが依然発生していたため Vulkanを有効にして負荷を下げる方法しか取れる手が無い状態だった →当時の最新版で再度検証を行った結果、一部の端末でちらつく不具合があったものの 以前との比較では安定してきていたため採用 UE4.20現在もExperimentalとされており、Android版については注意が必要 2-2 最適化
  100. 100. #ue4fest#ue4fest その他の最適化 ・異方性フィルタのオフ →16%程度のGPU負荷改善 ・テクスチャ解像度の変更 キャラクターのテクスチャサイズを 2048x2048 から 1024x1024 に変更 →2体分で 7% 程度のGPU負荷改善 2-2 最適化
  101. 101. #ue4fest#ue4fest 2-3 ここが困った
  102. 102. #ue4fest#ue4fest UE4特有の不具合 ある程度致命的なものがリリースされているものから出てくることが →UE4.17.0 で立体音響がiOSデバイスの左右片方からしか音が出ない (現在修正済み・未確認) →UE4.18.3 でパッケージングしたバイナリがリジェクト(現在修正済み) 等々… AnswerHub, Unreal Engine Issues の事例を検索して対応方法を検討 立体音響などかなり先のバージョンで修正予定と判明して断念した表現も… アップデートを続ける運営型のゲームには注意が必要 2-3 ここが困った
  103. 103. #ue4fest#ue4fest ボーン数の制限が追加 ・キャラモデルの使用ボーン数 125 本 ・UE4.20でES3.1環境下で(Metal, Vulkan 含む) スケルタルメッシュのボーン数が75を超えると アサートに失敗する仕様が追加 エンジンコード変更による上限の変更で修正 2-3 ここが困った
  104. 104. #ue4fest#ue4fest ブループリントのネイティブ化 ・ネイティブ化ツールは不具合による制約から断念 ・マップ型変数を使用するとネイティブ化に失敗する不具合が Unreal Engine Issues に掲載されていることが判明(修正済み・未確認) →使うつもりだったものの途中から有効にしたことも問題 使う気があれば初期から有効にして様子を見るべきだった リアルタイムに複雑な処理を多数行うようなゲーム性ではなく、 より描画周りに改善の余地があったため今回はこのまま 2-3 ここが困った
  105. 105. #ue4fest#ue4fest UE4の不具合の調査方法のまとめ ・クラッシュやモバイルでの問題はXcodeなどデバッガを実機に接続して問題個所の調査 ・githubからソースコードを取得して差分の確認(コミットが多数まとめられていると難しい) ・古いUE4で起動して異常のあるバージョンの調査 ・Forum, AnswerHub, Unreal Engine Issues で事例検索・質問 小手先の対応でなんとかなるものもあれば、内部知識を要し手元での対応が難しいものも モバイル含め特に続々と機能が追加される部分については検証をしっかり行う必要がある 2-3 ここが困った
  106. 106. #ue4fest#ue4fest まとめ
  107. 107. #ue4fest#ue4fest ・モバイルでもハイエンドグラフィックはできる ・一点集中でクオリティを高められる企画を ・最適化は支援機能を生かして的確に ・どの機能もまずは一回動かすことが重要 ・運営系のタイトルの場合、エンジンのアップデートは大変 まとめ
  108. 108. #ue4fest#ue4fest ご清聴ありがとうございました

×