UDN
Search public documentation:

GPUProfilingHomeJP
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 ホーム > パフォーマンス、プロファイリング、最適化 > GPU のパフォーマンスとプロファイリング

GPU のパフォーマンスとプロファイリング


概要


GPU のプロファイリングの特性は複雑で多岐にわたります。GPU のパフォーマンスに関するおよその指針を述べれば、常に実験せよということになります。GPU が実行するものの中では、ピクセルシェーディングが最も時間を消費するものです。GPU のコストがかかるものには、他にも、変形 / スキニングがあります。これはメッシュ内の頂点の数に依存します。スキニングされた頂点は、静的メッシュの頂点よりもかなりコストがかかります。

ピクセルシェーディング


オーバードロー

複数の透過 (translucent) マテリアルをオーバーラップ (オーバードロー) することによって、GPU のパフォーマンスに大きな問題を起こす可能性があります。通常は、透過マテリアルが占めるスクリーンスペースの量を常に制限する必要があります。複数の透過マテリアルがオーバーラップしている場合は特にそうです。

この分野について寄与度が高いのは、パーティクルシステムです。通常、パーティクルのために使用されるマテリアルは透過性があるため、1 つのパーティクルシステム内に多数のパーティクルが描画されると、オーバードローの可能性が極めて大きくなります。以下では、パーティクルによるオーバードローを制限するためのこつについて説明します。

  • 複雑なパーティクルの数を少なくします - パーティクルシステム内に少数の複雑なパーティクルがある方が、多数の単純なパーティクルがあるよりもパフォーマンス的には優れています。多数のパーティクルによって作られたエフェクトを、マテリアル内で作ることができ、単一のパーティクルに適用できるというのは好ましいことです。
  • スクリーンスペースの適用範囲を制限します - パーティクル エフェクトがスクリーン上で占有するスペースの量を制限するならば、そのエフェクトによるオーバードローの影響を制限することができます。
  • エフェクトのオーバーラップを制限します - 複数のエフェクトをオーバーラップさせると、単一のエフェクトによるオーバードローの影響を増幅させることになります。可能ならば、複数のエフェクトを同一の場所でスポーンさせる必要があるのがいつなのかを調べて、単一のエフェクトのみをスポーンさせるようにします。

オパシティ マスク

マスクされたマテリアルは、GPU のパフォーマンスを浪費する原因になりえます。理由は、ジオメトリのサーファスを構成するピクセルを、最終的に可視化することになるか否かにかかわらず、1 つずつ評価しなければならないからです。マスクされたマテリアルのオーバーヘッド量を最小化するために、最適化を行うことができます。

  • ジオメトリを可視的なマテリアル領域に一致させます - 特別なディテールをメッシュに追加することによって適用されているマテリアルの可視的領域に綿密に一致させる方が、無駄なピクセルを大量にともなった単純なジオメトリを使用するよりも、実際は効率的になります。
  • スペキュラを取り除きます - 絶対に必要という場合を除いて、マスクされたマテリアルでは、あらゆるスペキュラ コンポーネントを削除します。これによって、無駄なピクセルの計算をできるだけ単純なものにします。
  • 非平行光源を使用します - 非平行光源を使用することによって、無駄なピクセルのために光源処理を計算しなければならないインストラクション (シェーダー文) を軽減し、パフォーマンスの高速化が得られます。

動的な光源処理


静的な光源処理とライトマップは、サーファスを光源処理する際に極めて効率的な方法となります。レベル内でサーファスに作用する動的ライトの数を制限することは常に有効です。目標は常に、レベルのできるだけ多くの部分が動的ライトから作用をまったく受けなくすることにあります (特に、決してプレイヤーが近づいて見ることがない部分について)。 ライトの複雑度 ビューモードがこの場合有効です。サーファスに作用する動的ライト数の観点からワールドを表示するためです。

動的なオブジェクトの光源処理は、パフォーマンス上、莫大な浪費となる可能性があります。SkeletalMeshActors、KActors、InterpActors などは、ワールドの多くの部分を構成するため、特別なテクニックを用いずにこれらオブジェクトの光源処理を行うならば大変なことになります。DynamicLightEnvironments を使用することによって、GPU への影響度を制限しながら動的オブジェクトの光源処理を行うことができます。各オブジェクト上の各光源のために作成されているパスのかわりに、あらゆる光源処理を単一の光源とパスに凝縮させます。当然のことながら、これにも欠点があります。光源処理およびシャドウイングは 100% 正確になることはあり得ません。可能な場合は常に DynamicLightEnvironments を使用すべきです。ただし、正確性あるいはクオリティが優先する場合もあります。そのような場合 (シネマティックスなど) は、例外と見なすことができます。

動的シャドウイング


動的シャドウイングも潜在的にパフォーマンス上の問題となります。動的シャドウイングがパフォーマンスに影響を及ぼすか否かを素早く評価するには、 SHOW DYNAMICSHADOWS (動的シャドウイングの表示) コンソールコマンドを使用して、動的シャドウイングを off に切り替えてみます。このコマンドにあるキーをバインドさせて、そのキーを押している間は動的シャドウイングが off になり、キーを放すと on に戻るようにすると便利です。これはコンソールで設定できます。たとえば、次のようにします。 SETBIND F SHOW DYNAMICSHADOWS | ONRELEASE SHOW DYNAMICSHADOWS

UnrealScriptで作成されたアクタに関しては、ShadowParenting を利用しなければなりません。これは基本的に、1 つのアクタには多数のアタッチメントがあるが、動的シャドウはただ 1 つしかないということを意味します。あるPawn (ポーン) が、武器、ヘルメット、バックパック、その他アタッチメントを所持している場合、アタッチメントのシャドウがすべて、Pawn 自身を親とするようにします。次のようにします。 Attachment.SetShadowParent(Parent.Mesh)

動的シャドウに関するパフォーマンスの制限

シャドウバッファによる GPU コストは、シャドウ視錘台のスクリーンスペース サイズに正比例します。したがって、シャドウバッファを使用する近くのキャラクターの方が、遠くのキャラクターよりもコストが著しく高いことになります。また、動的シャドウバッファのシャドウを投じる大型のオブジェクトの方が、小型のオブジェクトよりもコストが際立って高いということにもなります。詳細に関しては、 シャドウバッファ フィルタリングのオプション のページを参照してください。

また、シャドウの最適化については、 シャドウイング参照 のページと モジュレートシャドウ のページを参照してください。

ビューモード


「Unreal」エディタのビューポートは、さまざまな ビューモード を使用してレンダリングするように設定することができます。ビューモードは、シーンの特定要素を有意義に表示するために使用されるものです。

シェーダーの複雑度

Shader Complexity (シェーダーの複雑度) ビューモードは、ピクセル単位のシェーディングに要したシェーダー文の数に基づいて、画面の色を制御するものです。赤は非常にコストが高く、緑は非常にコストが低いです。透過ライトシャフトによって、それらの背後にある負荷が小さい不透明なマテリアルにコストが付加されることに注意してください。

shadercomplexity.jpg

このビューモードの詳細については、 ビューモード のページに掲載されている シェーダーの複雑度 のセクションを参照してください。

ライトの複雑度

ライトの複雑度のビューモードは、サーファスに作用する動的ライトの数に基づいて、画面の色を制御するものです。黒は、作用する動的ライトがないことを意味します。さまざまなカラー / シェーダー (緑から赤まで) によって、作用している動的ライトの増加が示されます。目標は、レベル全体が常に黒として表示されることです。ただし、当然のことながら、これが常に可能だということにはなりません。

lightingcomplexity.jpg

このビューモードの詳細については、 ビューモード のページに掲載されている ライトの複雑度 のセクションを参照してください。

ディテールレベル(精度レベル)


複数のプラットホームでゲームを出荷する場合、あるプラットホームが他のプラットホームよりも、GPU の能力において落ちることがあります。そのような場合は、レベルを処理するプラットホームにおいて、その見栄えを下げるのではなく、DetailMode を通してマップのディテールを選択的に切ることができます。これによって、同一のマップを複数のプラットホームで使用できるようになります。さらに、分割画面のように、GPU をクラッシュするようなモードを扱う場合もあります。ビジュアル専用ディテールをレンダリングしなければ、分割画面にも非常によく対応でき、非分割画面用のマップの魅力も損なうことがありません。

あらゆるコンポーネントには、設定可能な DetailMode があります。High Detail (高ディテール) に設定されたものは、High Detail が許される場合にのみレンダリングされることになります。

detailmode_high.png