島がすべての対応プラットフォームで動作することを保証するため、フォートナイトでは、複数のメモリ制限が設けられています。
Unreal Editor for Fortnite (UEFN) では、拡張されたメモリ機能を利用して、より大規模で多様な体験を作成することができます。 この機能をフルに活用するためには、UEFN におけるメモリ使用量の計算方法を理解する必要があります。
World Partition
World Partition は、大規模な島の体験を構築するための優れた機能です。 この機能は、ワールドを自動的にグリッドに分割し、必要なセルだけをストリーミングします。
World Partition は、セルをロードおよびアンロードするストリーミングや、プレイヤーのカメラが遠ざかるほど、グループ化してアセットの詳細度を下げる Hierarchical Level of Detail (HLOD) を使用しています。
World Partition、ストリーミング、HLOD の詳細については、「ストリーミングと HLOD」を参照してください。
メモリの計算方法
UEFN は、クック時に生成されるデータからメモリ使用量を計算します。 つまり、
大規模な島での結果が高速に取得可能になります。
同じ島バージョン、フォートナイトのビルド、仕掛けで計算を実行するたび、数値は一貫して同じになります。
より多くのアセット タイプおよび SceneGraph へ広く対応しています。
UEFN のメモリ計算システムは編集時にのみ実行され、プレイ時にメモリ使用量の評価に使用することはできません。 島のベースライン メモリ使用量が適切なしきい値を超えていないことを検証するために使用されます。
ただし、カスタムのランタイム ロジックを使用するとメモリ使用量が増大するため、プレイヤーに問題を引き起こして、島でプレイできる機能が制限される可能性があります。 プレイヤーに安定性やパフォーマンスの問題を引き起こすことを回避するため、空間プロファイラを使用して、島のメモリ使用量やプレイ時間のパフォーマンスをより詳しく把握することを推奨します。
セッション レイアウト
セッションにロードすると、HUD に現在のメモリ使用量バーが表示されます。
バーには、島のメモリの使用量を把握するために、最大 100,000 メモリ ユニットが表示されます。
配信を有効にすると、島内の全アセットが使用する総メモリ量ではなく、島内のプレイヤーの位置に基づいてメモリが計算されます。 メモリ計算を行うと、各ストリーミング セルの最も正確なメモリ消費量の値が得られます。
一部のアセットはプレイヤーの位置に関わらずメモリに残り、マップのどこでもメモリ使用量に加算されます。 ほとんどのアセットはストリーム入出力時にロード/アンロードされるため、バーはそれを反映して更新されます。
レベルによって参照されるすべてのアセット (仕掛け、ランドスケープ、カスタム メッシュおよびテクスチャなどを含む) も総メモリ使用量にカウントされます。
レベルのいずれかのエリアが 100,000 を超えると、島を公開できなくなることにご注意ください。
UEFN ユーザーとして、公開しない限り、100,000 のサーモメーターの制限を超えることができます。 コンソールで協力している人たちが、使用可能なメモリのハードウェア制限に達して、セッションから追い出される可能性があることに留意してください。 問題が解決すれば再接続できます。
コンテンツを変更する
システムでメモリ使用量を正確に計算するには、最新のクック済みデータが必要です。 ライブ編集またはスマホ ツールでコンテンツを変更すると、編集モードインジケータが最新と表示されている場合でも、[変更をプッシュ] プロンプトが表示されます。これは、ライブ編集ではメモリ計算に使用されるクック済みデータが更新されないためです。
変更をプッシュするまで、使用状況バーは更新され続けますが、古い値が表示されます。 コンテンツ変更のコストは反映されません。
メモリ計算を起動
問題なく公開するには、島がすべてのサポートされているハードウェア プラットフォーム上で動作できる必要があります。
公開前に、プロジェクトがメモリ制限を超えないことを必ず確認してください。 [Project (プロジェクト)] ドロップダウンから [Launch Memory Calculation (メモリ計算を起動)] を選択します。
このプロセスにより、すべてのセルで使用されているメモリが計算されます。
ダイアログ ボックスが表示され、プライベート バージョンをアップロードするよう求められます。 ボタンをクリックして、進行状況バーを確認します。
必要に応じて、プロジェクト バージョンの説明も追加できます。
画面の下部にポップアップが表示され、メモリ計算が進行中であることが示されます。
アップロードが完了すると、ポップアップが変化して計算が開始されたことを示します。
クライアントではメモリ計算結果が表示されます。 プレイヤー キャラクターの操作に戻るには、[Continue (続行)] をクリックします。
終了すると、プレイヤー キャラクターは計算が開始される前の元の場所に戻り、次の 2 つのステータスのいずれかが表示されます。
プロジェクトでストリーミングを有効にしている場合、飛び回ることでさまざまな領域が占めるスペースの量を確認できるようになりました。
ストリーミングが有効な場合、フライスルー中にメモリ使用量バーが変化します。 これを使用すると、バジェット超過の可能性があるレベルの領域を特定することができます。
島がバジェットを超過している場合、公開前にローカル メモリの問題を修正する必要があります。
島がバジェットを超過しています。 どうすればよいですか?
制限に達した場合、メモリを節約するための策は数多くあります。 以下の方法を組み合わせて試してください。
メモリの計算後は、島内でメモリを大量に使用するアセットの上位 100 件を含むシートを開くことができます。 [Window (ウィンドウ)] > [Message Log (メッセージ ログ)] > [Memory Test Results (メモリ テスト結果)] に移動します。
以下の表は、各用語の意味を示しています。
用語 説明 リソース
通常、これはコンテンツ ブラウザにおけるアセットの名前です。 一部のリソースが「Fortnite Asset」として表示される場合があります。これは、プロジェクトで作成されていないリソースに割り当てられる名前ですが、島のメモリ使用量に追加されます。
タイプ
リソース/アセットのタイプです 例として、テクスチャ、マテリアル、レベルなどがあります。
# アクタ参照
リソースを直接的または間接的に参照しているアクタの数。
# パッケージ参照
リソースを参照しているクック済みパッケージの数。 通常、この数は、リソースが複数の World Partition セルによって参照されている場合に増加します。
サイズ
リソースのサイズ。 これは、特定のリソースがサンプリング位置の [Current Memory Usage (現在のメモリ使用量)] バーに反映される量です。
可能な場合にテクスチャをストリーミングします つまり、ストリーミングしやすくなるようにテクスチャをオーサリングし (2 つの次元の累乗)、ミップマップが生成されるようにテクスチャを設定します。 テクスチャをストリーミングできない場合、どれだけ離れて使用されているかに関係なく、常に最大量のメモリが使用されます。 詳細については、[Resizing Textures (テクスチャのサイズを変更)] を参照してください。
World Partition パネル内でストリーミングをオンにします。 これは大きな島では必須ですが、小さな島でも、特にコンテンツが密集してくると、ストリーミングを活用できる場合があります。
ストリーミングがオンになっている場合、可能であればアクタの [空間的にロードされている] が有効になっていることを確認してください。 そうでない場合、それらはメイン レベル パッケージにクックされ、常にロードされます。 これは、一般的にオンデマンドでストリーミングする多くのコリジョン データを含むことができるランドスケープ ストリーミング プロキシ アクタに特に関係があります。
島のコンテンツを均等に広げます。 狭いエリアに過度に多くのアクタを集中させると、コンテンツがストリーミングされなくなり、メモリ バジェットの超過につながります。
島が使用する仕掛け数を減らします。 仕掛けは配置可能なアクタの中でも最も負荷の高いアクタです。 ただし、同じ仕掛けのインスタンスを配置することで、メモリ使用量は大幅に低下します。
[Project Size (プロジェクト サイズ)] ウィンドウを確認します。 ディスクにメモリ使用量の多いオブジェクトがある場合、ランタイム時のメモリ使用量も多くなる可能性があります。 プロジェクト サイズを確認するには、[Project (プロジェクト)] ドロップダウンをクリックし、[Project Size (プロジェクトのサイズ)] を選択します。
カスタム仕様のアセット LOD の品質レベルを下げます。特に遠くからしか見えないアセットの品質レベルを下げます。
アセットを複数回再利用します。 100 本の木から成る森では、100 本の異なる木を使用する代わりに、5 つのバリエーションを複製して使用します。 これは、メモリ使用量に大きな違いをもたらします。
HLOD を使用する場合、プロジェクトのプロセスを通して生成し、遠くから見えるオブジェクトの HLOD だけを生成するようにします。
島がすべてを同時に表示することを必ずしも目的としない設定に島を細分化できる場合は、データ レイヤーを利用します。 例としては、地下のダンジョンで、プレイヤーが神社に入らない限り到達不可能なものが挙げられます。
カスタム コンテンツのメッシュの複雑さを軽減します。 ハイポリ メッシュはメモリ使用量が増大します。 コンテンツ ブラウザでメッシュをダブルクリックして編集し、[Nanite Settings (Nanite 設定)] の [Keep Triangle Percent (三角ポリゴン比率を維持)] の値を調整します。 低い値を使用すると、メッシュの複雑さが軽減され、アクタのメモリ使用量も低下します。
その他の問題をトラブルシューティングする
適切な検証には、クリエイターはストリーミングが有効になっており、テクスチャ用にミップマップが生成されていることを確認する必要があります。 いずれかのテクスチャの MipGenSettings オプションが No Mipmaps に設定されている場合、以前は、島が公開のために送信されるときにフラグが付けられませんでした。 現在では、プロジェクトのテクスチャが MipGenSettings を No Mipmaps に設定していると、検証で失敗します。
この要件には、ストリーミングとミップマップに関する以下の例外があります。
このルールは、100 万テクセルを超えるテクスチャにのみ適用されます。 たとえば、テクスチャの寸法が乗算されて 1,048,576 未満になると、MipGenSettings が No Mipmaps に設定されていても検証に合格します。
UI グループのテクスチャは、ストリーミングを有効にする必要はありません。