18.5K Views
July 17, 19
スライド概要
2019年7月16日に行われた「UE4モバイル勉強会 in 東京」で登壇した際に使用した資料です。
https://connpass.com/event/137717/
動画はこちら:https://www.youtube.com/watch?v=luYTZHI0byg
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
UE4のモバイル向け機能や 最新情報などを改めて紹介!2019 Epic Games Japan Support Engineer 岡田和也
本日のハッシュタグ #UE4Mobile #UE4 | @UNREALENGINE
あんただれ? Epic Games Japan サポートエンジニア 岡田 和也 Twitter: おかず ( @pafuhana1213 ) 簡易揺れ骨プラグイン「Kawaii Physics」を 最近リリースしました。簡単にかわいく揺らせます 趣味プロジェクトなのであまりサポートしないですが、 フィードバックお待ちしております! https://github.com/pafuhana1213/KawaiiPhysics #UE4 | @UNREALENGINE
あれからもう2年… CEDEC2017 で 当時のUE4モバイルについて講演しました 「最新モバイルゲームの実例から見るUE4のモバイル向け機能・開発Tipsを全部まるっとご紹介!」 当時のバージョンは UE4.17。現在はUE4.22 Fortniteや様々なタイトルの対応を経て 数多くの機能追加・改善が入りました ということで、改めて UE4 のモバイル対応についてまとめました #UE4 | @UNREALENGINE
お品書き ● UE4とモバイルについて ● モバイル向け機能 ● 開発の下準備から実機起動まで ● 基本機能 ● Scalability機能 ● 実機プロファイリング・デバッグ ● 追加コンテンツ ● 最新機能 ● 今後のイベントについて ● 参考資料 #UE4 | @UNREALENGINE
この講演で話さないこと (後の講演で解説があるので) レンダリング機能に関する詳細 ● モバイルで使える・使えない機能のリスト ● パフォーマンス など モバイルVR, ARの話 ● ARKit, ARCore #UE4 | @UNREALENGINE など
他の登壇者の方の資料などは 以下のページからアクセス可能です https://connpass.com/event/137717/presentation/ #UE4 | @UNREALENGINE
お品書き ● UE4とモバイルについて ● モバイル向け機能 ● 開発の下準備から実機起動まで ● 基本機能 ● Scalability機能 ● 実機プロファイリング・デバッグ ● 追加コンテンツ ● 最新機能 ● 今後のイベントについて ● 参考資料 #UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
Unreal Engine とモバイル #UE4 | @UNREALENGINE
モバイル向けのサンプルを無料公開 https://docs.unrealengine.com/ ja/Resources/SampleGames/ UnrealMatch3/index.html https://www.unrealengine.com/ marketplace/ja/slug/soul-city https://www.unrealengine.com/ marketplace/ja/slug/epic-zen-garden https://www.unrealengine.com/marketplace/ja/ slug/infinity-blade-effects https://www.unrealengine.com/marketplace/ja/ slug/infinity-blade-fire-lands https://www.unrealengine.com/marketplace/ja/ slug/infinity-blade-plain-lands https://www.unrealengine.com/marketplace/ja/ slug/infinity-blade-ice-lands https://www.unrealengine.com/ marketplace/ja/slug/ ue4-mannequin-mobile #UE4 | @UNREALENGINE https://www.unrealengine.com/ marketplace/ja/slug/soul-cave https://www.unrealengine.com/ marketplace/ja/slug/action-rpg https://www.unrealengine.com/marketplace/ja/ slug/infinity-blade-weapons
海外のUE4製モバイルタイトル #UE4 | @UNREALENGINE
国内のUE4製モバイルタイトル #UE4 | @UNREALENGINE
UE4製のインディーモバイルタイトル! 灰原とうさん( @haibaratou ) 製作中の 「クマムシさん惑星 ミクロの地球最強伝説」 https://twitter.com/haibaratou/status/ 1144467373547651072 最終的にはトップ10に! #UE4 | @UNREALENGINE
今話題のOculus Questにもタイトル沢山 #UE4 | @UNREALENGINE
Fortnite PCからモバイルまで あらゆるプラットフォームに対応 100人対戦 かつ 動的なオブジェクトが大量に存在 毎週コンテンツアップデート 数ヶ月毎に大型アップデート #UE4 | @UNREALENGINE
Fortnite これらの仕様を実現するために 数多くの機能追加・改善を開発・導入 それらの機能は 積極的にエンジン本流に組み込まれる 実プロジェクトでの運用実績! 特にモバイルに関しては この一年でかなり改善されました! #UE4 | @UNREALENGINE
お品書き ● UE4とモバイルについて ● モバイル向け機能 ● 開発の下準備から実機起動まで ● 基本機能 ● Scalability機能 ● 実機プロファイリング・デバッグ ● 追加コンテンツ ● 最新機能 ● 参考資料 ● 今後のイベントについて #UE4 | @UNREALENGINE
UE4でモバイル開発する 下準備 #UE4 | @UNREALENGINE
Androidの場合 Android クイックスタート https://docs.unrealengine.com/ja/Platforms/Mobile/Android/GettingStarted/index.html ~UE4.21 CodeWorksforAndroid-1R 6u1-windows.exe UE4.22 CodeWorksforAndroid-1R #UE4 | @UNREALENGINE 7u1-windows.exe
iOSの場合 iOS クイックスタート https://docs.unrealengine.com/ja/Platforms/Mobile/iOS/QuickStart/index.html Advanced iOS PC/Mac Workflow https://docs.unrealengine.com/ja/Platforms/Mobile/iOS/GettingStarted/index.html Apple iOS Developer Program への登録が 必要です (年間 11,800円(税別)) #UE4 | @UNREALENGINE
iOSの場合 BPプロジェクトの場合 Windowsのみでも開発可能 C++プロジェクトの場合 Windows上でも開発は可能 リモートビルド時にMacが必要 Windows で iOS をビルドする https://docs.unrealengine.com/ja/Platforms/ Mobile/iOS/Windows/index.html [CEDEC+KYUSHU 2017] 最新モバイルゲームの実例からみる UE4のモバイル向け機能・Tipsを全部まるっとご紹介! + UE4.18 モバイル最新情報の紹介 #UE4 | @UNREALENGINE
iOS開発環境構築で困ったら… (証明書とかプロビジョニングとか…) そらまめゲームス さん( @WanchanJP )の 「【UE4】いろんなパターンのiOSアプリ開発環境を用意してみる」 が超参考に! #UE4 | @UNREALENGINE
その他 参考ドキュメント Androidの開発要件 https://docs.unrealengine.com/ja/Platforms/Mobile/Android/AndroidSDKRequirements/index.html Android デバイスの互換性 https://docs.unrealengine.com/ja/Platforms/Mobile/Android/DeviceCompatibility/index.html iOS and tvOS開発要件 https://docs.unrealengine.com/ja/Platforms/Mobile/iOS/SDKRequirements/index.html iOSデバイスの互換性 https://docs.unrealengine.com/ja/Platforms/Mobile/iOS/DeviceCompatibility/index.html #UE4 | @UNREALENGINE
実機で動作させるまで #UE4 | @UNREALENGINE
新規プロジェクトを作成 モバイル開発の場合、 Target Hardwareを「Mobile/Tablet」にするのオススメ! ▶ 一部の設定を自動ON・OFF! #UE4 | @UNREALENGINE
エディタから直接実機に転送・起動 Launchボタン https://docs.unrealengine.com/ja/Engine/Deployment/Launching/index.html テクスチャの 圧縮フォーマットを指定可能 昨今の端末なら 圧縮品質の良い ASTC がオススメ #UE4 | @UNREALENGINE
余談:Android テクスチャフォーマット Android ゲームの開発のリファレンス https://api.unrealengine.com/JPN/Platforms/Android/Reference/index.html #UE4 | @UNREALENGINE
パッケージ作成 Fileメニューの「Package Project」 から #UE4 | @UNREALENGINE
より細かく設定・高度なことをしたい場合 Project Launcher https://api.unrealengine.com/JPN/Engine/Deployment/Releasing/index.html Launch や Package Project を カスタマイズした設定で実行可能 https://docs.unrealengine.com/en-US/Engine/ Deployment/ProjectLauncher/index.html パッチ・DLC作成も可能 https://api.unrealengine.com/JPN/Engine/ Deployment/Patching/index.html #UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
お品書き ● UE4とモバイルについて ● モバイル向け機能 ● 開発の下準備から実機起動まで ● 基本機能 ● Scalability機能 ● 実機プロファイリング・デバッグ ● 追加コンテンツ ● 最新機能 ● 参考資料 ● 今後のイベントについて #UE4 | @UNREALENGINE
エディタ上で モバイルでの見え方を確認するには? #UE4 | @UNREALENGINE
エディタでの見え方と、モバイル実機での見え方の違い ハードウェアの仕様やスペックの違いにより 一部の機能が無効・制限されています 実機で毎回確認するのがベストですが 画作りのイテレーション速度が 落ちてしまうという悩み… #UE4 | @UNREALENGINE
参考ドキュメント Supported Rendering Features http://api.unrealengine.com/JPN/Engine/Rendering/SupportedRenderingFeatures/index.html モバイル デバイスのパフォーマンス ガイドライン http://api.unrealengine.com/JPN/Platforms/Mobile/Performance/index.html モバイル プラットフォーム向けのマテリアル http://api.unrealengine.com/JPN/Platforms/Mobile/Materials/index.html モバイル プラットフォーム向けのライティング http://api.unrealengine.com/JPN/Platforms/Mobile/Lighting/index.html モバイル プラットフォーム向けのテクスチャ ガイドライン http://api.unrealengine.com/JPN/Platforms/Mobile/Textures/index.html モバイル プラットフォーム向けコンテンツの作成 http://api.unrealengine.com/JPN/Platforms/Mobile/Content/index.html 大変申し訳ないのですが… アップデートに追いついていないページがあリますのでご注意ください… #UE4 | @UNREALENGINE
Mobile Previewer #UE4 | @UNREALENGINE
Mobile Device Preview #UE4 | @UNREALENGINE
Mobile Previewに関するドキュメント https://api.unrealengine.com/JPN/Platforms/Mobile/Previewer/index.html https://docs.unrealengine.com/en-US/Platforms/Mobile/Previewer/index.html あくまで疑似再現なので 必ず実機上で確認しましょう! 詳細は この後のカニパンチさんの講演で! #UE4 | @UNREALENGINE
エディタ上で実機での操作感を確認するには( iOS限定 ) iOS 開発用リモート セッション プラグインを使用する https://docs.unrealengine.com/ja/Platforms/Mobile/iOS/UsingSlateRemotePlugin/index.html Unreal Remote 2というアプリを使うことで、 iOSデバイスの入力情報をPCに送信 実機に転送しなくても ゲームの操作感などのテストが可能 https://apps.apple.com/jp/app/unreal-remote2/id1374517532 #UE4 | @UNREALENGINE
実機上で使用するレンダラーを 設定するには? #UE4 | @UNREALENGINE
モバイル用のレンダラー(描画システム) PC向けとは異なるレンダラーを使用 さらに、Android向けには複数のレンダラーが存在 それぞれのメリット・デメリットを把握した上で コンテンツ・画作りをする必要があります 詳細は この後のカニパンチさんの講演で! #UE4 | @UNREALENGINE
モバイル用のレンダラー プロジェクト設定から設定可能 ● OpenGL ES2 ● OpenGL ES3.1 ● Vulkan #UE4 | @UNREALENGINE < Android >
ES2 or ES3.1 or Vulkan? 個人的には… これから開発するなら ES3.1 Vulkanは…まだ発展途上… (パフォーマンスが逆に落ちるケースがある) UE4 + Vulkanに関する最新情報はこちら https://www.unrealengine.com/ja/events/unreal-fest-europe-2019/ vulkan-powering-aaa-experiences-on-android?lang=ja&sessionInvalidated=true #UE4 | @UNREALENGINE
モバイル用のレンダラー < iOS > プロジェクト設定から設定可能 ● Metal v1.2 ~ v2.1 ● Metal Desktop Renderer ● UE4.22から、Forward, Deferredを選択可能に #UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
モバイルプラットフォーム固有の あの機能はどう使うの? #UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
BPから「プラットフォーム固有のあの機能」を呼び出し ローカル通知 https://docs.unrealengine.com/ja/Platforms/Mobile/LocalNotifications/index.html リーダーボード https://docs.unrealengine.com/ja/Platforms/Mobile/Leaderboards/index.html インゲーム広告 https://docs.unrealengine.com/ja/Platforms/Mobile/Ads/index.html アチーブメント https://docs.unrealengine.com/ja/Platforms/Mobile/Achievements/index.html アプリ内課金 https://docs.unrealengine.com/ja/Platforms/Mobile/InAppPurchases/index.html #UE4 | @UNREALENGINE
アプリ内課金に関して、より細かく制御したい場合は… iniファイルから bUseStoreV2 を有効にすると より多機能な仕組みで動作するように ただし、既存のBPノードに対応していないので C++で実装することに Storeインターフェース https://api.unrealengine.com/JPN/Programming/Online/Interfaces/Store/index.html Purchaseインターフェース https://api.unrealengine.com/JPN/Programming/Online/Interfaces/Purchase/index.html #UE4 | @UNREALENGINE
bUseStoreV2を有効にするには (iOSはデフォルトで有効) [OnlineSubsystemGooglePlay.Store] bUseStoreV2=true [OnlineSubsystemIOS.Store] bUseStoreV2=true UE4.22現在、bUseStoreV2有効時に 課金処理用BPノードが正常に動作しない不具合あるので注意 bUseStoreV2を無効にするか、C++に切り替える必要あり… #UE4 | @UNREALENGINE
アプリのアイコンとか 起動時の画面を変えたい! #UE4 | @UNREALENGINE
アイコン・起動画面の変更方法 プロジェクト設定の Android( iOS )カテゴリから変更可能 Android 起動画面の設定 https://api.unrealengine.com/JPN/Platforms/Android/LaunchScreens/index.html Android 8.0からサポートされた アファプティブアイコンの設定方法 https://www.unrealengine.com/ja/tech-blog/ adding-adaptive-icons-to-a-ue4-project-for-android #UE4 | @UNREALENGINE
お品書き ● UE4とモバイルについて ● モバイル向け機能 ● 開発の下準備から実機起動まで ● 基本機能 ● Scalability機能 ● 実機プロファイリング・デバッグ ● 追加コンテンツ ● 最新機能 ● 参考資料 ● 今後のイベントについて #UE4 | @UNREALENGINE
Scalability対応について 1つのゲームを様々な環境下で動作させるために エンジンの各機能・アセットの振る舞いを 条件によって変化させるScalability機能を多数用意 #UE4 | @UNREALENGINE
端末・スペックに応じて パラメータを調整する方法について #UE4 | @UNREALENGINE
Engine Scalability Settings 各描画機能の品質を5段階で設定 https://api.unrealengine.com/JPN/Engine/Performance/Scalability/ScalabilityReference/index.html #UE4 | @UNREALENGINE
例 アンチエイリアシング 内部では、Console Variables( CVar ) の一つである “r.PostProcessAAQuality” の設定値を変更 #UE4 | @UNREALENGINE
Console Variables エディタ・ゲームから 変更・参照できるパラメータ群 iniファイルからも設定可能 #UE4 | @UNREALENGINE
Engine¥Config¥BaseScalability.ini #UE4 | @UNREALENGINE
Device Profile プラットフォーム、ハード構成(GPU, SoCなど)毎に用意された 設定のプリセット。起動時に最適なものを自動適用 http://historia.co.jp/archives/11231/ #UE4 | @UNREALENGINE
設定・プラットフォーム毎に アセットの設定・処理を変える方法について #UE4 | @UNREALENGINE
● ● ● ● Material Effect Audio Static / Skeletal Mesh #UE4 | @UNREALENGINE
Material #UE4 | @UNREALENGINE
品質の設定値に応じて処理を変更 Quality Switch https://docs.unrealengine.com/ja/Platforms/Mobile/Performance/index.html High(1), Medium(2), Low(0)の 三段階で処理を分けることが可能 r.MaterialQualityLevel 0~2 使用例: - ローエンドでは簡易処理に - ハイエンドでは様々な処理を 組み合わせた複雑な表現に #UE4 | @UNREALENGINE
Quality Switchの注意点 現在のQuality設定とは関係なく ピンに繋がっているノードが持つアセットがロードされ、メモリに乗る 例:Low設定なのにHighに繋いだテクスチャが… Game Discards Unused Material Quality Levels - ロード後に現在のQuality以外のアセットを メモリから取り除く仕様なので要注意 #UE4 | @UNREALENGINE
特定のQualityに接続しているノードを完全に取り除きたい Discard Quality During Cook 有効にした場合、 その指定したQualityのピンに 繋がっているノードを Cook時に取り除くように この画像の場合、 Low以外のQualityは取り除く #UE4 | @UNREALENGINE
とあるMaterialでCook後のサイズを検証 Discardなし - 716KB Medium, HighをDiscard - 207KB 1つのプロジェクトで 複数のパッケージを 作成する場合に非常に有効 #UE4 | @UNREALENGINE
レンダラの種類に応じて処理を変更 Feature Level Switch https://api.unrealengine.com/JPN/Engine/Rendering/Materials/ExpressionReference/Utility/index.html#featurelevelswitch 使用例: 使用可能なテクスチャの枚数に 制限があるローエンド端末への対応 (詳細はカニパンチさんの講演で!) #UE4 | @UNREALENGINE
使用中 / 使用可能のテクスチャ枚数の確認 Platform Stats https://docs.unrealengine.com/en-US/Platforms/Mobile/Materials/index.html#platformstats #UE4 | @UNREALENGINE
Effect #UE4 | @UNREALENGINE
0 #UE4 | @UNREALENGINE 1 2
Detail Mode Bitmask ( Cascade ) r.DetailMode の値毎に 指定のEmitterを動作させるか否かを制御可能 Low:0, Medium:1, High以上:2 #UE4 | @UNREALENGINE
Min (Max) Detail Level ( Niagara ) r.DetailLevel の値がMin(Max)Detail Level以内なら 指定のEmitterを動作させる …NiagaraはまだEarly Accessなので 今後仕様変更が入る可能性はあります #UE4 | @UNREALENGINE
Audio #UE4 | @UNREALENGINE
Audio Quality Level 環境・設定毎にチャンネル数・Sound Cueの処理内容を設定 オーディオメモリの使用量とパフォーマンスを調整 https://docs.unrealengine.com/en-US/Support/Builds/ReleaseNotes/2015/4_9/index.html #UE4 | @UNREALENGINE
Audio Quality Levelの設定について GameUserSettings(.ini)で設定した値がデフォルト値 プロジェクト設定の各プラットフォームカテゴリで上書き可能 #UE4 | @UNREALENGINE
Audioアセットのサイズ抑制 Cook時にリサンプリングを行うことでのリダクション ● ● Engine.ini または Project SettingsのAudioカテゴリから設定 サイズを小さくすることができるが Audio品質が低下、Cook時間が長くなる点に注意 #UE4 | @UNREALENGINE
Audioアセットのサイズ抑制 ● Resample for Device Resampling Qualityに従いCook時にResampleを行う ● Resampling Quality Cook時にResampleを行う際のサンプリングレートを指定 Sound WaveはSample Rateの値でResampling #UE4 | @UNREALENGINE
Static / Skeletal Mesh #UE4 | @UNREALENGINE
Level of Detail ( LOD ) 画面上での表示面積(≒カメラからの距離)によって 簡易モデルを使うことでGPU負荷を削減 #UE4 | @UNREALENGINE
Static / Skeletal Mesh LOD Simplygonなどの外部ツールを使わずに UE4エディタ上でStatic / Skeletal MeshのLODを作成可能 Static Mesh https://docs.unrealengine.com/ja/Engine/Content/ Types/StaticMeshes/HowTo/index.html Skeletal Mesh ( UE4.22~ ) https://docs.unrealengine.com/ja/Engine/Content/ Types/SkeletalMeshes/SkeletalMeshReductionTool/index.html #UE4 | @UNREALENGINE
LODの設定について 4.22から Platform毎にMinimum LODを設定可能 Android : 2を設定した場合、 LOD:0~1の詳細なモデルは使用されないように #UE4 | @UNREALENGINE
不要なLODアセットの排除 不要なLODモデルをパッケージに含まないようにするためには、 以下の設定が必要 https://docs.unrealengine.com/ja/Engine/Content/Types/StaticMeshes/HowTo/StripUnUsedLOD/index.html Static Mesh: r.StaticMesh.StripMinLodDataDuringCooking 1 Skeletal Mesh: r.SkeletalMesh.StripMinLodDataDuringCooking 1 上記の設定を無視して、 対象のモデルの全LODをパッケージに入れたい場合は Disable Below Min LOD Strippingを有効に (UE4.23から) #UE4 | @UNREALENGINE
LODのメリット・デメリットについて UE4アセットリダクション手法紹介 https://www.slideshare.net/EpicGamesJapan/ue4-95238296 #UE4 | @UNREALENGINE
余談:遠景の負荷削減手法の紹介 HLOD 複数のメッシュ・マテリアルを マージ + LOD処理することで負荷削減 https://api.unrealengine.com/JPN/Engine/HLOD/index.html Imposter 各方向からレンダリングしたテクスチャを 代用することで負荷削減 https://api.unrealengine.com/JPN/Engine/Content/ Tools/RenderToTextureTools/3/index.html #UE4 | @UNREALENGINE
HLOD / Imposterに関する詳細はこちら Fortniteを支える技術 https://www.slideshare.net/EpicGamesJapan/fortnite-97791917 #UE4 | @UNREALENGINE
Scalability対応に関する有益資料・動画の紹介 UE4 LODs for Optimization -Beginnerhttps://www.slideshare.net/com044/lods-for-optimization-beginner Fortniteにおける最適化の話 https://www.youtube.com/watch?v=KHWquMYtji0 https://www.youtube.com/watch?v=1xiwJukvb60 #UE4 | @UNREALENGINE
お品書き ● UE4とモバイルについて ● モバイル向け機能 ● 開発の下準備から実機起動まで ● 基本機能 ● Scalability機能 ● 実機プロファイリング・デバッグ ● 追加コンテンツ ● 最新機能 ● 参考資料 ● 今後のイベントについて #UE4 | @UNREALENGINE
実機プロファイリング #UE4 | @UNREALENGINE
プロファイリング大事! 特に実機を使ったプロファイリングは超大事! Console Command / Variablesを送ることで実機上で計測結果などを表示可能! https://www.slideshare.net/EpicGamesJapan/cedec2017-ue4 #UE4 | @UNREALENGINE
Console Commandの例 stat SceneRendering: レンダリング(Draw)の全体の内訳を エディタ・実機上でリアルタイム表示 #UE4 | @UNREALENGINE stat startfile / stopfile: 複数フレームキャプチャし その後エディタ上で処理負荷確認
Console Commandの例 stat OpenGLRHI #UE4 | @UNREALENGINE stat MetalRHI
モバイル端末にConsole Command / CVarを送る方法 ① 画面を4本の指でタップすると表示される Console Command / Variables用ウィンドウから 入力・選択可能! PC不要で楽なのですが 事前に用意されたプリセット以外は 手動で打ち込む必要あり #UE4 | @UNREALENGINE
モバイル端末にConsole Command / CVarを送る方法 ② PCと実機の接続後、Session Frontendから送信することが可能 Android:http://pafuhana1213.hatenablog.com/entry/2019/02/20/013340 iOS:http://pafuhana1213.hatenablog.com/entry/2018/12/13/031440 接続が少し手間なのと 入力予測がないので タイプミスがしばしば… #UE4 | @UNREALENGINE
モバイル端末にConsole Command / CVarを送る方法 ③ UE4.22から正式リリースされた Device Output Log がオススメ! 簡単に接続できるし、入力予測あり! 実機からのログ出力も確認可能! Android:logcat iOS:Console #UE4 | @UNREALENGINE
モバイル端末にConsole Command / CVarを送る方法 ④ 以下のadbコマンドから送信することが可能 JenkinsなどUE4外のツールから送信したい場合に有用 shell "am broadcast -a android.intent.action.RUN -e cmd '●●●●●’” #UE4 | @UNREALENGINE
おまけ①: 動画の録画コマンド (最大180秒) adb shell screenrecord /sdcard/●●●●●.mp4 --bit-rate 8000000 おまけ②: UE4上でadbコマンドを送信するための エディタ拡張を公開中 https://qiita.com/EGJ-Kaz_Okada/items/160b4d2425843195f25f https://github.com/pafuhana1213/AdbCommandWidgetSample #UE4 | @UNREALENGINE
実機デバッグ #UE4 | @UNREALENGINE
Androidの場合 CPUデバッグ AndroidStudioを使ったデバッグ UE4.22現在では、Android Studio 3.5 Betaがエンジンチーム内で使われています https://docs.unrealengine.com/ja/Platforms/Mobile/Android/AndroidDebugging/index.html エンジンコードのデバッグ エンジンをコンパイルして、.soにビルドマシンのパスではなく ソースパスが含まれるようにする必要があり APKのデバッグ APKを開いた後、 libUE4.soを選択してソースパスを上書き #UE4 | @UNREALENGINE
Androidの場合 GPUデバッグ RenderDoc https://docs.unrealengine.com/en-US/Engine/Performance/RenderDoc/index.html 描画コマンドや 各テクスチャ・メッシュを確認可能 ただし処理負荷は確認できず… #UE4 | @UNREALENGINE
Androidの場合 GPUデバッグ Snapdragon Profiler https://developer.qualcomm.com/software/ snapdragon-profiler RenderDocとは異なり、 処理負荷の割合を確認可能! …ただし、不安定なことが多い(´・ω・`) #UE4 | @UNREALENGINE
iOSの場合 UE4 & iOS開発時の実機デバッグ・プロファイリング方法 まとめ 2018 http://pafuhana1213.hatenablog.com/entry/2018/12/13/031332 #UE4 | @UNREALENGINE
お品書き ● UE4とモバイルについて ● モバイル向け機能 ● 開発の下準備から実機起動まで ● 基本機能 ● Scalability機能 ● 実機プロファイリング・デバッグ ● 追加コンテンツ ● 最新機能 ● 参考資料 ● 今後のイベントについて #UE4 | @UNREALENGINE
モバイルパッケージウィザード 起動用のパッケージ( APK, IPA )と 起動後にDLされるDLCを作成するためのビルド設定を作成 https://docs.unrealengine.com/en-US/Platforms/Mobile/MobilePackagingWizard/index.html #UE4 | @UNREALENGINE
Mobile Patch Utility ノード モバイルパッケージウィザードを使って作成したDLCを DL・管理などの行うBPノード https://api.unrealengine.com/JPN/Engine/Blueprints/UserGuide/PatchingNodes/index.html #UE4 | @UNREALENGINE
モバイルパッケージウィザードの問題点 DLCが1パッケージなので管理は楽ですが アップデートの度に全DLCをDLすることになるので 頻繁にアップデートする仕様には向いてない… レベル単位での管理になるため、 DLCに含めたいアセットは動的に生成する場合でも いずれかのレベルに紐付ける必要がある… #UE4 | @UNREALENGINE
より細かくアップデート管理するには Chunkというレベルより細かい粒度で管理が可能 各Chunkのリスト確認( Asset Audit )、 各アセット・Chunk間の参照関係の可視化( Reference Viewer )、 各Chunkに含まれるアセットのサイズの割合を可視化( Size Map )などの機能を用意 #UE4 | @UNREALENGINE
詳細はこちら! UE4のモバイル開発におけるコンテンツアップデートの話- Chunk IDとの激闘編 – https://www.slideshare.net/EpicGamesJapan/ue4-chunk-id 徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意! https://www.slideshare.net/EpicGamesJapan/ue4-95204920 #UE4 | @UNREALENGINE
お品書き ● UE4とモバイルについて ● モバイル向け機能 ● 開発の下準備から実機起動まで ● 基本機能 ● Scalability機能 ● 実機プロファイリング・デバッグ ● 追加コンテンツ ● 最新機能 ● 参考資料 ● 今後のイベントについて #UE4 | @UNREALENGINE
UE4.20~4.22にかけて、モバイル(特にAndroid)対応が強化 UE4.20 https://api.unrealengine.com/JPN/Support/Builds/ReleaseNotes/4_20/index.html ● RHI Threadの追加 (Android) ● ハードウェア・ソフトウェアのオクルージョンクエリ ● モバイル向けのランドスケープ改善 UE4.21 https://api.unrealengine.com/JPN/Support/Builds/ReleaseNotes/4_21/index.html ● Pipeline State Object (PSO) キャッシュ ● Vulkanサポートの向上 (Android) ● CPUスレッドアフィニティ制御 (Android) ● Program Binary Cache (Android) ● エミュレートされたユニフォームバッファ(Android) UE4.22 https://api.unrealengine.com/JPN/Support/Builds/ReleaseNotes/4_22/index.html ● 動的スポットライトのサポート ● SaveGame System iCloud (iOS) #UE4 | @UNREALENGINE この他にも細かい機能追加・最適化が色々追加
UE4.20~4.22にかけて、モバイル(特にAndroid)対応が強化 UE4.20 https://api.unrealengine.com/JPN/Support/Builds/ReleaseNotes/4_20/index.html ● RHI Threadの追加 (Android) ● ハードウェア・ソフトウェアのオクルージョンクエリ ● モバイル向けのランドスケープ改善 UE4.21 https://api.unrealengine.com/JPN/Support/Builds/ReleaseNotes/4_21/index.html ● Pipeline State Object (PSO) キャッシュ ● Vulkanサポートの向上 (Android) ● CPUスレッドアフィニティ制御 (Android) ● Program Binary Cache (Android) ● エミュレートされたユニフォームバッファ(Android) UE4.22 https://api.unrealengine.com/JPN/Support/Builds/ReleaseNotes/4_22/index.html ● 動的スポットライトのサポート ● SaveGame System iCloud (iOS) #UE4 | @UNREALENGINE この他にも細かい機能追加・最適化が色々追加
RHI Threadの追加 #UE4 | @UNREALENGINE
RHI Threadの追加 Render Threadにおける処理の大半はGL API呼び出し GL API呼び出しのみを行うRHI Threadを追加することで負荷を分散 Game Thread Render Thread RHI Thread Overall Frame Time (ms) #UE4 | @UNREALENGINE
RHI Threadを有効にするには Debug / Developmentの場合 ● r.RHIThread.Enable 1 又は 2 を実行 Test / Shippingの場合 ● [Project].Target.cs に以下を追加 if (Target.Platform == UnrealTargetPlatform.Android) { GlobalDefinitions.Add("EXPERIMENTAL_OPENGL_RHITHREAD=1"); } #UE4 | @UNREALENGINE
RHI Threadを追加する際の注意 RHI Thread は Render Thread, Game Thread と 同期する その結果、レイテンシ(遅延)が追加される オブジェクト数が少ない場合、あまり効果がないのに レイテンシが追加される可能性があるので注意 #UE4 | @UNREALENGINE
Pipeline State Object (PSO) キャッシュ #UE4 | @UNREALENGINE
PSOキャッシュとは ざっくり説明 モバイル端末(特にAndroid)の場合、あるシェーダを 初めてゲーム中に使用する際のシェーダコンパイルが非常に負荷高い 数秒から数十秒レベルのヒッチ(カクツキ)が発生 #UE4 | @UNREALENGINE
PSOキャッシュとは ざっくり説明 実際にプレイして収集した事前情報を使って シェーダコンパイルにおける一部の処理をゲーム起動直後に行うことで ゲームを遊んでいる間のヒッチを回避するための仕組みがPSOキャッシュ #UE4 | @UNREALENGINE
PSOキャッシュの使い方 ざっくり説明 1. Share Material Shader Code, Shared Native Shader Librariesが有効の状態で コマンドラインパラメータに -logPSO を追加したパッケージを作成し、 一通りゲームを遊ぶ(又は、PSOキャッシュ収集用レベルを開く) 2. 1の過程で生成された .scl.csv と .rec.upipelinecache から シェーダデータである stablepc.csv を生成 3. stablepc.csv を含むパッケージを作成 起動時にPSOキャッシュデータをコンパイル 4. コンパイル完了後、PSOキャッシュデータの対象となるシェーダは シェーダコンパイル時にそのデータを利用するようになる #UE4 | @UNREALENGINE
PSOキャッシュの使い方 公式ドキュメント 概要 https://docs.unrealengine.com/en-US/Engine/Rendering/PSOCaching/index.html リファレンス https://docs.unrealengine.com/ja/Engine/Rendering/PSOCaching/PSOReference/index.html 1. PSO キャッシングの有効化とビルド https://docs.unrealengine.com/ja/Engine/Rendering/PSOCaching/EnablingBuildingPSOCaching/index.html 2. PSO データの収集 https://docs.unrealengine.com/ja/Engine/Rendering/PSOCaching/GatheringPSOData/index.html 3. PSO キャッシュのビルド https://docs.unrealengine.com/ja/Engine/Rendering/PSOCaching/BuildingPSOCache/index.html 4. PSO キャッシングを使用した UE4 プロジェクトのビルド https://docs.unrealengine.com/ja/Engine/Rendering/PSOCaching/BuildingUE4ProjectWithPSOCaching/index.html 5. PSO キャッシング データのコンパイルと使用 https://docs.unrealengine.com/ja/Engine/Rendering/PSOCaching/CompilingUsingPSOCachingData/index.html #UE4 | @UNREALENGINE
PSOキャッシュのメリット シェーダコンパイルの処理負荷を大幅に削減! ユーザのストレスを大幅に削減し快適なゲームプレイを…! マテリアルを編集するたびに再度収集する必要はない! ただし、定期的に収集して無駄な部分を取り除くことが推奨 #UE4 | @UNREALENGINE
PSOキャッシュのデメリット ● 起動時のロード時間の増加 ● メモリ使用量の増加 ● 事前の収集作業のコスト #UE4 | @UNREALENGINE
起動時のロード時間の増加 デフォルトでは、ゲーム起動時(PreInit)で全PSOキャッシュをコンパイル → 起動直後のスプラッシュスクリーン+暗転時間が増加 UE4.22から、起動時にコンパイルを走らせるか否かを選択可能 r.ShaderPipelineCache.StartupMode 0 : 明示的にResumeBatchingを呼ぶまでコンパイルしない 1:Fastモードで起動時にコンパイル開始 ( デフォルト ) 2:Backgroundモードで起動時にコンパイル開始 #UE4 | @UNREALENGINE
FastとBackgroundの違い Fast ● r.ShaderPipelineCache.BatchSize = 50.0f 1フレームにつき、最大50個のPSOをコンパイル可能 ( Async ) ● r.ShaderPipelineCache.BatchTime = 16.0f 1フレームにおける、最大許容コンパイル時間 Background ● r.ShaderPipelineCache.BackgroundBatchSize = 1.0f ● r.ShaderPipelineCache.BackgroundBatchTime = 0.0f #UE4 | @UNREALENGINE
PSOコンパイルのPause, Resume FShaderPipelineCache::PauseBatching / ResumeBatching で PSOコンパイルの一時停止・再開が可能 例えば、ロード画面ごとに少しずつPSOコンパイルを行う事が可能 ただし、コンパイル未完了なPSOを使うシェーダが ゲーム中で使用された場合はヒッチが発生してしまう #UE4 | @UNREALENGINE
PSOキャッシュの問題点 ● 起動時のロード時間の増加 ● メモリ使用量の増加 ● 事前の収集作業のコスト 全Material用のPSOキャッシュを作成することは非推奨 ● そもそも100%カバーすることは非現実的 ● ゲームで使用されるシェーダは全体のごく一部 殆ど使用されないシェーダ用のためにメモリが増大するのは無駄 #UE4 | @UNREALENGINE
必要なPSOだけコンパイルするためには ● 対象のマテリアルのみを使用するレベルを用意して、 そのレベル上のみで事前収集作業を行う ● UE4 Shader Pipeline Cache に乗っていない シェーダーを調査する https://qiita.com/Takezoh/items/8b9b18d3c28969b5cfdd ● 事前収集時にCustom usage mask を設定することで 端末のスペックや用途などに応じて 必要な分だけPSOコンパイルを走らせる(検証間に合わず…) #UE4 | @UNREALENGINE
おまけ:Mac上でのシェーダプリコンパイルについて iOS( Metal )の場合、シェーダコンパイル処理の一部を Mac上で事前に行うことが可能! PSOキャッシュと併用することも可能! 注意: UE4.22現在、 リモートビルド時はプリコンパイルは行われません 必ずMac上で直接パッケージを作成する必要があります #UE4 | @UNREALENGINE
PSOキャッシュ、ある程度手間はかかるのですが ゲーム中のカクツキを大幅に減らせるのは魅力的! 是非検証・導入をご検討ください! #UE4 | @UNREALENGINE
まとめ ● 増加している国内外のモバイル事例やFortniteに対応するために、 モバイル向けの様々な機能追加・最適化が日々行われています ● 基本的な機能だけでなく、 様々な環境・条件に対応するためのScalability機能、 ゲームの品質向上をする上で重要なプロファイリング・デバッグ機能、 昨今のモバイル開発では欠かせない追加コンテンツ用機能、 より高いパフォーマンスを実現するための RHIスレッドの追加、PSOキャッシュなどの新機能が追加されました! ● 今後もより良くしていきたいので、 エンジンへのフィードバックなどお待ちしております! #UE4 | @UNREALENGINE
お品書き ● UE4とモバイルについて ● モバイル向け機能 ● 開発の下準備から実機起動まで ● 基本機能 ● Scalability機能 ● 実機プロファイリング・デバッグ ● 追加コンテンツ ● 最新機能 ● 参考資料 ● 今後のイベントについて #UE4 | @UNREALENGINE
今まで紹介した資料以外でオススメのもの ● 『修羅道』制作事例 モバイルハイエンドグラフィックゲーム実現まで ● ARKのiOS移植に関する講演 ● ● ● https://www.slideshare.net/EpicGamesJapan/ss-119696520 https://www.unrealengine.com/ja/events/unreal-fest-europe-2019/ark-on-ios-leveraging-ue4-for-98-contentreduction https://www.unrealengine.com/ja/events/unreal-fest-europe-2019/ark-on-ios-coding-and-design-tips-for-trulyunreal-success-on-mobile Oculus Quest対応についての講演 https://www.youtube.com/watch?v=hEtu-ciPc7g 【CEDEC2018】Android ハイパフォーマンス・プログラミング https://www.youtube.com/watch?v=oxJWWCYWRlY ヒストリア 技術ブログ UE4/Mobileカテゴリ http://historia.co.jp/category/ue4/ue4_mobile/ #UE4 | @UNREALENGINE
お品書き ● UE4とモバイルについて ● モバイル向け機能 ● 開発の下準備から実機起動まで ● 基本機能 ● Scalability機能 ● 実機プロファイリング・デバッグ ● 追加コンテンツ ● 最新機能 ● 参考資料 ● 今後のイベントについて #UE4 | @UNREALENGINE
Unreal Meetup Tokyo 2019/8/3(土) 弊社のセールスマネージャによる講演「UE4.23新機能紹介」 https://habroom.connpass.com/event/139234/ #UE4 | @UNREALENGINE
出張ヒストリア! ゲーム開発勉強会2019 2019/8/4(日) 弊社のテクニカルアーティストによる講演あり! https://atnd.org/events/106967 #UE4 | @UNREALENGINE
CEDEC2019 EpicGamesJapanの講演 2019/9/4(水)~6(金) 「Press Button, Drink (French) Coffee」 UE4におけるビルドパイプラインとメンテナンスの全体像 https://cedec.cesa.or.jp/2019/session/detail/s5ce39c8f82904 UE4でマルチプレイヤーゲームを作ろう https://cedec.cesa.or.jp/2019/session/detail/s5ce39c64c1ca2 #UE4 | @UNREALENGINE
最後に これだけは今日必ず覚えてください…! #UE4 | @UNREALENGINE
Unreal Fest East 2019 10/6(日) 参加登録受付中!!! #UE4 | @UNREALENGINE
https://unrealfesteast2019.peatix.com/ #UE4 | @UNREALENGINE
ご清聴 ありがとう ございました! #UE4 | @UNREALENGINE