26.6K Views
April 30, 24
スライド概要
UnrealEngine5 では開発効率を改善するための様々な機能の開発が行われています。本資料は、UE5で導入された新しい機能についての紹介や開発効率をさらに上げるためのTips、UE開発における環境の検討に役立つ情報を提示しています。
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Epic Games Conference 2024 Unreal Engine の開発イテレーションの基 礎と高速化のためのTips Epic Games Japan Support Engineer, Developer Relations Ken Kuwano
本日お話すること ● Unreal Engine 開発におけるワークフローの基礎知識 ● 開発イテレーションのポイント ● 課題解決の方法/機能やTipsの紹介 ターゲットバージョン:UE5.3.2 (2024/3)
先に結論 ● ゲーム開発においてイテレーションは大事 ● UE開発のイテレーションは勘所がある ● 便利な機能や設定を使って効率上げていこう
イテレーションとは? イテレーション(iteration)とは、反復、繰り返しという意味。 IT分野では、ソフトウェア開発などにおける反復的な作業や工程のことや、プ ログラムにおける処理の繰り返しなどをイテレーションという。 出典:IT用語辞典 e-Words
Unreal Engine 開発でのイテレーション Level Editor レベルにオブジェクト配置 プログラムやBPで処理を追加 パラメータの調整 Play In Editor (PIE) 遊びの面白さ、難易度のチェック 期待通りに動作するかテスト
Unreal Engine 開発での 悪い イテレーション Play In Editor (PIE) Level Editor 2分 かかる レベルにオブジェクト配置 プログラムやBPで処理を追加 パラメータの調整 遊びの面白さ、難易度のチェック 期待通りに動作するかテスト
イテレーションが悪いと大変 Q. エディタで編集して PIE 開始までの時間が長くなると何が起きるか? ● ● ● 1回の編集からチェックまでの待ち時間が長くなり 作業コストが上がる 問題が発生した時に 問題の原因特定に時間が掛かる 純粋に作業に時間が掛かって ストレスになる
1. アジェンダ イテレーションの課題と解決 ユースケース別での問題点と解決策の提示 2. イテレーション改善のTips その他知っておくと良い事前知識
イテレーションの課題と解決 UE5 でイテレーション改善の機能追加 https://www.docswell.com/s/EpicGamesJapan/5W1L11-UE5_CEDEC2023_ImproveIteration まだ開発中の機能なので...
イテレーションの課題と解決 UE4 の頃はイテレーションに悩まされた...
イテレーションの課題 よくあるUE開発イテレーションでの課題 ソースコードビルド Play In Editor (PIE) パッケージング エンジンの更新およびリビルドに長 い時間がかかる エンジン改造のハードル エディタで動作確認する際のセッ ション開始前の待ち時間が長くイテ レーションが悪い 帰り際にパッケージングを仕掛けて 帰ったにも関わらず朝出社してきて も完了していない エディタ起動 Shader Compile 同期 エディタ操作できるまでが遅くエディ タを終了したくなくなる エディタ右下のShader Compileの 数字が永遠に0にならない 毎朝プロジェクトの最新を取得する が時間が掛かり過ぎかつ競合する ことがある デプロイ ロード モバイルデバイスやコンソール機で 実機確認する際に遅くイテレーショ ンが悪い レベル移動時の読み込みが長い 1つのアセットを開くだけなのに時 間がかかる
イテレーションの課題 よくあるUE開発イテレーションでの課題 ソースコードビルド Play In Editor (PIE) パッケージング エンジンの更新およびリビルドに長 い時間がかかる エンジン改造のハードル エディタで動作確認する際のセッ ション開始前の待ち時間が長くイテ レーションが悪い 帰り際にパッケージングを仕掛けて 帰ったにも関わらず朝出社してきて も完了していない エディタ起動 Shader Compile 同期 エディタ操作できるまでが遅くエディ タを終了したくなくなる エディタ右下のShader Compileの 数字が永遠に0にならない 毎朝プロジェクトの最新を取得する が時間が掛かり過ぎかつ競合する ことがある デプロイ ロード モバイルデバイスやコンソール機で 実機確認する際に遅くイテレーショ ンが悪い レベル移動時の読み込みが長い 1つのアセットを開くだけなのに時 間がかかる
イテレーションの課題1 - ソースコードビルド ビルドのイテレーション コード更新 ● ● ● ● ● ● ● Github や Perforce からソースコードをダ ウンロード 最初に UE5 ソリューションをビルド プロジェクトのビルドを実行 完了したらエディタを起動 C++で実装する場合やコード修正の都度 プロジェクトをビルド エンジンのカスタマイズや不具合修正の 際にはエンジンのビルド エンジンのビルドは長い時で数時間かか ることも コード修正 動作確認 ビルド
イテレーションの課題1 - ソースコードビルド ビルド時間の改善 ● ● ● HDDではなく SSD を導入 Core/Clock の良い CPU を導入 分散ビルドシステム を利用 ● Incredibuild ● SN-DBS ● FASTBuild ● Unreal Build Accelerator 分散なし 分散ビルド
イテレーションの課題1 - ソースコードビルド Unreal Build Accelerator ● ● ● ● ● ● ● 分散ビルドを実現する内製ツール UE5.4 でリリース予定 (Experimental) Third Party (外部ツール) 依存を削減 Unreal Engine のユーザーに Epic で使用 しているビルドシステムをそのまま提供 Shader Compilation に関しては調査中 現在、分散先は同一ネットワークに限定 Epic ではUE5ベースのプロジェクトのコンパ イル高速化を目的に使用中 UBA UBA
イテレーションの課題1 - ソースコードビルド ソースコードビルドフロー ビルド .cpp プリプロセス コンパイル アセンブル リンク ソース コード #define MAX 100 Int a = MAX ; #define MAX 100 Int a = 100; コードの事前処理、 条件付きコンパイル、ファ イルのinclude、 マクロの展開など #define MAX 100 Int a = MAX ; 001110011010100 101001010100111 1011100100100 プリプロセスコードを プログラミング言語から機 械語に変換 1011110110011011 001110011010100 111010101001111 001110011010100 101001010100111 0111011000001 101001010100111 1011100100100 1011100100100 MOV AX, X MOV DX, Y 1011110110011011 111010101001111 0111011000001 アセンブラによって アセンブリ言語から 機械語への変換 複数の.objファイルやラ イブラリを結合して、単一 の実行可能なプログラム を生成 各プロセスのどこかを効率化すればビルドは早く完了する .exe ファイル
イテレーションの課題2 - PlayInEditor (PIE) PIE のイテレーション ● ● ● ● PIE は、実装したアセットやロジックが一連 の流れとして組み込まれていることを確認 する際に使用 エディタで編集してから実装した内容を確 認するため [Play] ボタンから開始 PIE を実行する度に、エンジンの内部で PIE 専用のワールドを生成 プロジェクトの規模が小さいと問題になり にくいが、規模やマップが大きくなるにつ れて待ち時間が長くなる
イテレーションの課題2 - PlayInEditor (PIE) PIE の実行フロー PIE起動 アセット ロード PIE実行前 レベル生成と アクター配置 初期化 PIE実行後 StaticMesh Material Material Material レベルアセットに 紐づくアセットをPC から読み込み レベル上に存在していた アクターをスポーンして再 配置 全てのアクターの BeginPlayなど 初期化処理
イテレーションの課題2 - PlayInEditor (PIE) PIE のイテレーション改 善 アセットロード ● 一括で大量のアセットをロードをしない ● 多くのアセットがハード参照で存在している とイテレーションが悪くなりやすい レベル生成とアクター配置 ● ActorやComponentを増やし過ぎない ● Actorプールを作成して Actorを再利用 ● World Partition を使用する場合はロード するレンジを狭くしておく 初期化 ● Begin Play に初期化処理を集中させすぎ ないようにする 確認における工夫 ● エディタ検証用のパフォーマンス優先デ バッグ設定を作成しておく ● エフェクトを出さない ● 重そうなメッシュは出さない ● NiagaraやMaterialなどはそれぞれの専用 エディタで十分に確認しておく
イテレーションの課題3 - パッケージング パッケージングの イテレーション ● ● ● ● パッケージング パッケージを作成する工程 パッケージ プロジェクトのコードとアセットを各プラット フォームで動かすことができるフォーマット に変換したファイル パッケージをモバイル端末やコンソール機 にインストールする プロジェクトによってはパッケージの作成 に半日~丸一日かかることもある .cpp .cpp コード アセット パッケージング パッケージ
イテレーションの課題3 - パッケージング パッケージングフロー Packaging Build Cook Stage Package Project Package Ediitor Asset #define MAX 100 Int a = MAX ; Cooked Asset ソースコードからプラット フォームで動作する実行 ファイル作成 エディタ用アセットをプラッ トフォーム専用に最適化す る変換処理 Cooked Asset 実行ファイルとクック済み のアセットを1つのフォル ダにコピー 各プラットフォームで動作 するアプリケーションの形 式に変換 各プロセスのどこかを効率化すればパッケージングは早く完了する ※ Cook 処理が全体の 90%以上を占めることも
Cook によるアセットのコンバート .uasset エディタ用アセット Cooking .uasset Asset ファイル パッケージのヘッダー情報 .uexp Export ファイル パッケージのアーカイブ情報 .ubulk Bulk ファイル 実データが格納 パッケージ用アセット
イテレーションの課題3 - パッケージング Multi-Process Cook より高速な並列クック • 複数のworkerに分散してクックプロセスを指示 することで、利用可能な CPUコアとメモリリソー スを有効活用 • 弊社タイトルでは 4 workerで~2.5倍の改善 • UE5.3 ではベータ版としてリリース • 規模が大きいほど効果が大きい • 使用方法は Editor.ini で以下の設定を追加 [CookSettings] CookProcessCount=4 Cook Director Cook Worker 1 Cook Worker 2 Cook Worker 3 Cook Worker 4
イテレーションの課題3 - パッケージング Cook の効率を更に上げるために 大量のコンテンツを扱うプロジェクトにおける Cook 時間を改善する推奨事項 ● ● ● Shared DDC を有効化してキャッシュを共有する クッカーのメモリに十分なスペースがある ストレージに SSD を使用 その他 ● テストや動作確認に必要ない個人フォルダのアセットをクックに含めない ● 引数 “-iterate” を追加してクックすると同一アセットのクックを省略
1. アジェンダ イテレーションの課題と解決 ユースケース別での問題点と解決策の提示 2. イテレーション改善のTips その他知っておくと良い事前知識
開発用PC
開発用PC 良いPC の導入はイテレーション改善の効果大 ● 効果的で安全にイテレーションを改善できる ● UEにイテレーション改善の機能はあるがマシン(土台)が重要 ● とはいえコストの面での負担が大きい (2024/3 現在) ● ハイエンドPC で快適な開発環境を揃えるなら 30万円/台~ ● デスクトップPC で開発環境を揃えるなら 20万円/台~ ● ノートPC は 15万円/台~くらいの値段帯のPCだと概ね動作可能 ● メモリやグラフィックボードなどの現物が必要 ● 一度購入すると簡単に変更することが難しくなる ● ノートPCはカスタマイズが難しい
公式ドキュメント記載のスペック情報 推奨ハードウェア UE5 レンダリング 機能の要件 Epic で使用される 典型的なシステム (~UE5.1) Epic で使用される 典型的なシステム (UE5.2~) OS Windows 10 64 bit ー Windows 10 64 bit Windows 10 64 bit プロセッサ (CPU) Quad-core Intel または AMD 2.5 GHz 以上 ー 6Core Xeon E5-2643 @ 3.4GHz 以上 AMD Ryzen Threadripper Pro 3975WX Processor - 128MB Cache, 3.5 GHz base / 4.2 GHz turbo, 32 Cores / 64 Threads, 280w グラフィックボー ド (GPU) DirectX 11 または 12 対応の グラフィックカード GeForce RTX 2080 または AMD Radeon 6000 以上 NVIDIA GeForce RTX 2080 SUPER Nvidia RTX 3080 - 10GB • NIC 1GBPS on-board + Intel X550-T1 10G PCI-e メモリ (RAM) 8 GB ー 64 GB 128GB DDR4-3200 内部ストレージ ー ー 256 GB SSD 1TB M.2 NVMe3 x4 PCI-e SSD 外部ストレージ ー ー 2TB SSD 4 TB Raid Array 2 x 2TB NVMe3 x4 PCI-e SSD コメント 推奨ではない、殆ど快適に動 作しないのでこれ以上は必須 最低限定義されているのはグ ラフィクスカード Epicで実際に開発で使用され る典型的なPCのスペック Epicで実際に開発で使用され る典型的なPCのスペック https://docs.unrealengine.com/5.3/ja/hardware-and-software-specifications-for-unreal-engine/
公式サンプルのスペック情報 Epicで使用 古代の谷 City Sample Electric Dreams OS Windows 10 64 bit ー ー ー プロセッサ (CPU) AMD Ryzen Threadripper Pro 3975WX Processor - 128MB Cache, 3.5 GHz base / 4.2 GHz turbo, 32 Cores / 64 Threads, 280w 12-Core CPU @3.4GHz 12-Core CPU @3.4GHz 12-Core CPU @3.4GHz グラフィック ボード (GPU) Nvidia RTX 3080 - 10GB • NIC 1GBPS on-board + Intel X550-T1 10G PCI-e GeForce RTX 2080 or AMD Radeon 6000 以上 GeForce RTX 2080 or AMD Radeon 5700 以上 GeForce RTX 3080 (同等のものかそれ以上) メモリ (RAM) 128GB DDR4-3200 64 GB 64 GB 64 GB 内部ストレージ 1TB M.2 NVMe3 x4 PCI-e SSD ー ー ー 外部ストレージ 4 TB Raid Array 2 x 2TB NVMe3 x4 PCI-e SSD ー ー ー コメント Epicで実際に開発で使用さ れる典型的なPCのスペック Lumen/NaniteなどのUE5 登場初期のサンプル World Partitionを利用し た4km*4kmのマップ PCGやSubstratなどが初 登場したマップ
開発用PC UE5 動作確認済モデル ● ● UE5のサンプル (Lyra, City Sample)で予め 動作確認が行われた PC 動作確認済みのため、実際の開発にあたっ てどの程度動作するかの目安になる Copyright © YAMADA-DENKI Co., Ltd. All rights reserved. Copyright 株式会社ユニットコム All Rights Reserved. Copyright © MouseComputer CO.,LTD. All Rights Reserved.
教育者向けガイド https://cdn2.unrealengine.com/unreal-engine-5-early-access-educator-guide-ja-a61b81511a3e.pdf
開発用PC パーツ別の特徴 Epicで使用 コメント OS Windows 10 64 bit Windows の場合は基本的に64bit OSでWin10, 11どちらでも問題ない プロセッサ (CPU) AMD Ryzen Threadripper Pro 3975WX, 3.5 GHz, 32 Cores, 280w エディタやエンジンのパフォーマンスに影響するだけでなく、エンジンのソース コードビルド、シェーダーコンパイルの速度に影響 Incredibuild を利用できない場合は12~Coreのプロセッサを利用したい グラフィック ボード (GPU) Nvidia RTX 3080 グラフィクス全般のパフォーマンスに影響、低いと最新の機能は動作しない Nanite/Lumen等はDX12(SM6.6)サポート要、HWRTは更に高いスペックを要求 ビデオメモリが枯渇すると極端にパフォーマンスが落ちるので多い方が良い メモリ (RAM) 128GB DDR4-3200 Unreal Editor のアプリケーションが動作するのに必要なメモリに影響 クックをしたりエンジンビルドをする場合は使用メモリ上昇に注意 他のツールと併用する場合なども考慮すると32GB~ は欲しい 内部ストレージ 1TB PCI-e SSD 外部ストレージ 4TB PCI-e SSD SSDの利用を強く推奨し HDDは使用しないことをおすすめ ファイルアクセスの速度が段違いにSSDの方が早く、アセットのロード、ファイ ルの読み込み時間が大きく短縮されて、イテレーション改善の効果が大きい Launcher版で256GB, Github版のエンジンで512GB~1TBから欲しい ※ CPU, GPUのスペックを上げると電源, ファン, ボードも見合ったものが必要になってくるので注意
ノートPCに関する補足 Epicで使用 コメント OS Windows 10 64 bit ー プロセッサ (CPU) 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz デスクトップよりも若干パフォーマンスが劣ることはあるが、そ れでもノートPCで利用する分には十分なパフォーマンス グラフィック ボード (GPU) NVIDIA GeForce RTX 3070 古代の谷、CitySample、ElectricDreamsのサンプルはいずれも 30fps程度で動作させることが可能 メモリ (RAM) 32.0 GB Unreal Editor と Visual Studio を併用していても特に問題な く、ブラウザや他アプリを起動していても支障はない 内部ストレージ 2TB SSD M.2 PCIe NVMe SSD ソースエンジンをビルドすると大体500GBの容量が必要になるの で異なるエンジンを3-4個は入れられる、プロジェクトはWin64 のみでパッケージングして15GBほどなので特に問題なし 外部ストレージ なし ー ※ こちらの情報はドキュメントなどに記載はなく、現在私が使用しているノート PCの情報を記載しています
開発用PC 使用中のPCは適切? ● 最初にデフォルトのマップでコンソールコ マンド”stat unit”を実行して現在の負荷を 確認 ● 純粋にエンジンを動かすことができ るスペックであるか? ● 最初から自分のゲームコンテンツで チェックをすると、そもそもスペック不 足なのか、ゲームのコンテンツが重 いのかが分からない https://www.docswell.com/s/EpicGamesJapan/ZJDQ1Z-UE_pr ofiling_and_optimization
結論 ● ゲーム開発においてイテレーションは大事 ● UE開発のイテレーションは勘所がある ● 便利な機能や設定を使って効率上げていこう
Thank you!