UDN
Search public documentation:

OptimizingForSplitscreenJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > パフォーマンス、プロファイリング、最適化 > コンテンツのプロファイリングと最適化 > 分割スクリーンのためのコンテンツの最適化

分割スクリーンのためのコンテンツの最適化


ドキュメントの変更ログ : 作成者 Daniel Wright

概要


注意 : このページは、Xbox 360 や PS3 などの現世代のコンソールを対象としています。それ以外のプラットフォームでは、トレードオフが異なる場合があります。

分割スクリーンは、描画量が 2 倍になるため、レンダリングスレッドに大きな負荷がかかります。レンダリングスレッドにかかるコストは主に 2 つあります。1 つは、レンダリングまたは Processed Primitives (処理されるプリミティブ) のために考慮されなければならないプリミティブコンポーネントです。もう 1 つは、統計情報において Mesh draw calls (メッシュ描画コール) として表示される可視的なメッシュをレンダリングするときに使用する描画コールの総数です。ただし、すべての描画コールが等しいというわけではありません。 パーティクルの描画コールは、静的メッシュや BSP の描画コールに比較すると約 3 倍のコストがかかります。また、InterpActors や KActors、SkeletalMeshActors といった動的なオブジェクトの描画コールは、静的メッシュや BSP の描画コールよりも約 2 倍のコストがかかります。メッシュエミッタは、パーティクル 1 つにつき 1 回の描画コールを実行するため、所定のシーン内で最も負荷が大きいアセットになりがちです。

分割スクリーンがどのように実行されるかを調べる際に最も役立つ統計情報は、分割スクリーン状態にあるときに、コンソール上の stat splitscreen (統計 分割スクリーン) によってアクセスすることができます。これは PIE で機能します。そのためには、debugcreateplayer 1 を入力して分割スクリーンモードに入ります。入力を他のプレイヤーに切り替えるには、2 つのコントローラーを接続するか、ssswapcontrollers を使用します。つぎの統計情報は、最適化する前の「Gears of War 3 SP」のレベルからとったものです。

StatSplitscreenSmall.jpg

上記統計は、Xbox 360 において 50ms のレンダリングスレッド時間に相当します。これを、分割スクリーン内で目標の 33ms まで下げるには、およそつぎのようにする必要があります。

  • Mesh draw calls (メッシュの描画コール) は 1600 に。
  • Processed primitives (処理されるプリミティブ) は 1700 に。
  • Particle draw calls (パーティクルの描画コール) は 150 に。

最もコストが高いコンポーネントを発見する


まず、レベルのどの部分が配分を超えているかを調べる必要があります。そのためには、stat splitscreen を有効にして、Xbox の分割スクリーンでプレイするか、PIE でプレイしながら、上記目標と比較します。

静的メッシュのアクタについては、おそらく primitive stats (プリミティブ統計情報) ブラウザが最も良いツールです。なお、レベル内で最も小さなメッシュを素早く発見するには、半径を制限してソートします。行を複数選択して enter を押すことによって、すべての関連するアクタを選択することができます。

パーティクルについては、どのエミッタとパーティクルが最も負荷が高いかを示す統計情報を収集する場合、TRACKPARTICLERENDERINGSTATS コンソールコマンドを入力し、レベルをプレイしてから DUMPPARTICLERENDERINGSTATS を入力します。 このコマンドによって、2 個のスプレッドシートがパーティクル情報をともなってローカルのログ ディレクトリにダンプアウトされます。

分割スクリーンのためにコンテンツの規模を縮小する


最も良い方法は、プリミティブ上の MaxDrawDistance (最大描画距離) か、または、大胆に設定された cull distance volume (カリング距離ボリューム)を使用することです。 MaxDrawDistance はポッピングを生じさせる可能性がありますが、詳細モードを設定するよりも問題を起こす可能性が低いです。これは、メッシュがつねに近くからレンダリングされるためです。 MaxDrawDistance の欠点は、Mesh draw calls (メッシュ描画コール) の統計値を下げるだけで、Processed primitives (処理されるプリミティブ) の統計値を下げないことにあります。 cull distance volume (カリング距離ボリューム) の設定に関しては、UDN のドキュメントである VisibilityCullingJP[Visibility Culling]] (可視性のカリング) を参照してください。

その次に良い方法は、コンポーネントの DetailMode (詳細モード) を High (高) にセットすることによって、分割スクリーン内でまったくレンダリングされないようにすることです。これをセットするには、右クリック -> LOD Operations (LOD 操作) -> Set Detail Mode (詳細モードのセット) -> High (高) と進みます。ただし、これを使用する場合は、目立ったアーティファクトを生じさせないように注意しなければなりません。その原因は、メッシュがライトマップ内にダークスポットを残すか、あるいは、キャラクターが外の光源を受ける穴ができるかのいずれかになります。分割スクリーン内でどのように見えるかをプレビューするには、View (ビュー) -> Detail Mode (詳細モード) -> Medium (中) と進むか、あるいは、PIE に入って debugcreateplayer 1 を入力します。このようにしてコンポーネントを除去すると、Processed primitives (処理されるプリミティブ) と Mesh draw calls (メッシュ描画コール) の統計値が両方とも下がるため、パフォーマンスに最も有効となります。

パーティクルエミッタ (カスケードのコラム) には、MediumDetailSpawnRateScale という新しいプロパティがあります。これを使用して、分割スクリーンにおけるパーティクルの数を減らすか、あるいは、0 にセットしてエミッタをまったく無効にすることができます。 メッシュエミッタは、1 個のパーティクルにつき 1 回の描画コールを実行するため、そのパーティクルを縮小することによって大きな影響が出ます。どのようなタイプのエミッタであっても、MediumDetailSpawnRateScale を 0 にすることによって、パフォーマンスはかなりの節約することができます。