UDN
Search public documentation:
VFXOptimizationResultsJP
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
中国翻译
한국어
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 ホーム > パーティクルとエフェクト > パーティクルシステム > 「Unreal Engine 3」における VFX の最適化 > VFX の最適化 : 結果を得る
UE3 ホーム > FX アーティスト > 「Unreal Engine 3」における VFX の最適化 > VFX の最適化 : 結果を得る
UE3 ホーム > FX アーティスト > 「Unreal Engine 3」における VFX の最適化 > VFX の最適化 : 結果を得る
VFX の最適化 : 結果を得る
Cascade におけるコアシステム - GPU/ ゲームスレッド / レンダリングスレッド
- パーティクルシミュレーション時間 (ティック) は、ゲームスレッド (gamethread) 上で計算されます。
- パーティクルデータのファイナライズ (ジオメトリ、描画コールのパック化) は、レンダリングスレッドで計算されます。
- パーティクルのビジュアル (シェーダー複雑度、オーバードロー) は、GPU で計算されます。
オーバードロー - GPU
オーバードロー=ピクセルシェーダーのコスト=レイヤー数×レイヤーによって影響を受ける平均ピクセル数×レイヤーのための平均インストラクション (命令) 数基本的には、マテリアルをスプライトのサーフェスに追加する場合、そのマテリアルのインストラクション数に応じてコストがかかります。(「Unreal Engine 3」では、コンテンツブラウザおよびマテリアルエディタでこれを表示することができます)。透過オブジェクトについては、透過処理が積み重なってオーバードローを作るため、インストラクションによるコストが嵩みます。透過処理のレイヤーが増えるにしたがって、コストが高くなります。このコストは、シェーダー複雑度のビューモードを使って簡単に表示することができます。明るい赤= 300 インストラクション、ピンク= 600 インストラクション、白= 900 インストラクション。PC 上でシェーダー複雑度を表示するには、F5 キーを押します。 シェーダー複雑度のビューモードによって、システムのおよそのコストが算出されますが、このコストはシーンにも依存します。それというのも、透過処理が、やはりコストをもつ不透明なオブジェクトを背景にして計算されるからです。 エフェクトの使用法をチェックすることは、欠かせないことです。通常、任意のシナリオ (武器の衝撃) で呼び出されるエフェクトは、カスタムビルドすることによって、特定のシナリオにマッチさせるようなエフェクトよりも軽くなければなりません。理由は、コストが変動するシナリオで描画されるためです。 オーバードローの影響を制御するために取ることができる処置は、次のようになります。
- エミッションのレートを下げる。
- マテリアルのインストラクション数を減らす。
- パーティクルのスケールを下げる。(スクリーンのより狭い範囲をフィルする)
- 近く / 遠くのパーティクルエミッションのための LOD を作成することによって、さまざまな視界距離におけるコストを下げる。
- 一列に配置されたエミッタが、互いに重なり合っていないかチェックする。(静的な、配置されたエフェクト)。
LOD -Level of Detail(詳細度)- GPU/ゲームスレッド
LOD Distance Check Time (LOD 距離チェック時間)
この機能は、プレイヤーからシーン内に配置されたエミッタまでの距離をゲームがチェックする頻度を規定します。(この距離は、使用すべき LOD を決定するために使用されます)。LOD Distance Check Time (LOD 距離チェック時間) は、Automatic (自動) にセットされている場合に有効です。 基本的に、automatic にセットすることによって、LOD がゲームによってプレイ時に決定されます。この LOD Distance Check Time (LOD 距離チェック時間) を大きくすると、チェックの間隔が長くなります。LOD Distance Check Time (LOD 距離チェック時間) は秒で計算されるので、これをセットする場合は、プレイヤーの最大移動速度を考慮する必要があります。LOD Distance Check Time (LOD 距離チェック時間) を 0.00 の値にセットすると、距離が毎フレームごとにチェックされることになり、パフォーマンスは低下します。LOD のメソッド - ゲームスレッド
パフォーマンスとビジュアルにとって、LOD のメソッドを適切に設定することは不可欠です。 Automatic (自動) - ゲームが、LOD Distance Check Time (LOD 距離チェック時間) を使用して、エフェクト内で定義された距離パラメータに基づく LOD をセットします。通常、ゲームコードによって呼び出されないループするアンビエント (環境) エフェクトで使用されます。 Direct Set (直接設定) - エフェクトが、定められた LOD にスポーンされてとどまっている場合に、(通常はゲームコードによって) LOD が決定されます。普通は、爆発や衝撃などのバースト (破裂的) エフェクトで使用されます。 Activate Automatic (自動のアクティベート) - LOD で定義された距離パラメータに基づき、エフェクトがスポーンされたときに LOD が定義されます。通常、いったんスポーンされると LOD を二度と変更する必要がない、Kismet などによって呼び出される突発的なエフェクトで使用されます。固定境界と非固定境界 - ゲームスレッド
境界 (bound) は、エンジンがエフェクトのビジビリティ (表示 / 非表示) を決定できる方法の 1 つです。そのような目には見えない座標によって、エフェクトが表示されるのか表示されないのかを、エンジンが知ることができるのです。境界の隅がビジブル (表示) になっている場合は、エンジンが、必要なエフェクトのあらゆるコンポーネントを計算します。 毎フレームごとにチェックおよび更新される境界は、コストが高くつきます。したがって、境界を固定 (fixed) にセットして、必要な境界の大きさを決定することが重要となります。たとえば、爆発から飛び散った残がいをすべて表示しなければならない場合などでは、境界をかなり大きくする必要があります。コストを抑えるには、境界を中心となるコンポーネントに制限することによって、パフォーマンスを向上させることができます。ただし、その場合、境界が視界領域から外れた場合に、エフェクトが突然非表示になるという欠点があります。 固定境界にすべきか非固定境界にすべきかをを決定するには、考慮しなければならない事項がいくつかあります。 ロケットのトレイル (ロケット雲) や追跡物、発射物に付属するものなどのようなエフェクトを高速で動かす場合は、固定境界をセットすべきではありません。あるいは、大きな固定境界をセットすることによってエミッタが境界の外に飛んで行かないようにすべきです。 境界を設定する場合は、システムで定義されているワールド空間座標とローカル座標について注意を払わなければなりません。エミッタが境界の向きと反対の方向に回転している場合は、エフェクトの要素が、境界の外に飛び出してしまい、要素が、視界領域から突然消えてしまう可能性があります。描画コール - レンダリングスレッド
- パーティクルシステム A が、1 個のパスをもつマテリアルを使用して、12 個のスプライトをスポーンさせる 1 個のエミッタから構成されている場合、パーティクルシステム全体のコストは、1 描画コールということになる。
- パーティクルシステム B が、2 個のパスをもつマテリアルを使用して、12 個のスプライトをスポーンさせる 1 個のエミッタから構成されている場合、パーティクルシステム全体のコストは、2 描画コールということになる。
- パーティクルシステム C が、2 個のパスをもつマテリアルを使用して、12 個のメッシュをスポーンさせる 1 個のエミッタから構成されている場合、パーティクルシステム全体のコストは、24 描画コールということになる。(1 コールにつき 2 個のパス × 12 個のメッシュ (各メッシュは 1 描画コールであるため) = 24 描画コール)。
- パーティクルシステム D が、 2 個のパスをもつマテリアルを使用して、6 個のメッシュをスポーンさせる 1 個のエミッタ、および、1 個のパスをもつ 10 個のスプライトをスポーンさせる 1 個のエミッタから構成されている場合、パーティクルシステム全体のコストは、13 描画コールということになる。(1 コールにつき 2 個のパス × 6 個のメッシュ (各メッシュは 1 描画コールであるため) = 12 描画コール、1 個のパス × 10 個のスプライト = 1 描画コール)。
透過マテリアル=1 パスベース
- 歪み (distortion) は、+2
- bUseLitTranslucencyDepthPass (光源処理透過デプスパスを使用する) は、+1
- bUseLitTranslucencyPostRenderDepthPass (光源処理透過性ポストレンダリングデプスパスの使用) は、+1
- bUsedWithFogVolumes (フォグボリュームとともに使用) は、+2
DumpParticleFrameRenderingStats
(パーティクルフレームレンダリング統計のダンプ) コマンドを使用します。このコマンドは、描画コールのコストを詳細にリスト表示したスプレッドシートを出力します。
描画コールによる影響は、レンダリングされているビューの数に比例して強まります。つまり、分割スクリーンでは、その影響が倍になるということです。分割スクリーンのためのエフェクトの最適化に関する詳細については、 VFX の最適化 : 分割スクリーン のページを参照してください。
エフェクトを作成する場合、および、エフェクトを最適化する場合は、以上にあげたコストに留意することが大切です。レンダリングスレッドのコストが描画コールのために高くなり、なおかつ、背景がコスト配分内にある場合は、このことから検討してみる必要があります。
メッシュエミッション = ゲームスレッド / レンダリングスレッド
コリジョン - ゲームスレッド
- MaxCollisions (最大コリジョン): この値をできるだけ小さくします。
- Collision Completion Option (コリジョン完了オプション): これを HaltCollisions/Freeze (コリジョン停止 / フリーズ) に設定することによって、MaxCollisions (最大コリジョン) に達したときにシーンのコリジョンチェックを中止させます。
- Damping Factor (減衰係数) によって、コリジョンに続いて起きるオブジェクトの跳ね返り (bounce) が決定されます。この値が低くなるほど、オブジェクトの静止が早くなります。(MaxCollisions の値を低めます)。
Spawn Per Unit (単位当たりのスポーン) - GPU/ ゲームスレッド
- Unit Scalar (単位スカラー) をできるだけ高い値に保つとともに、この値とエミッションレートとのバランスを取ることによって、エフェクトを重くしすぎずに、必要なフィルが得られるようにする。
- Spawn Per Unit (単位当たりのスポーン) を使用して高いエミッションレートになることが分かっている場合は、なるべく少ないインストラクションのマテリアルを使用する。
- Max Frame Distance (最大フレーム間隔) を調整して、エミット可能なパーティクルの数を制限する。エミッタがこの Max Frame Distance (最大フレーム間隔) を超えた場合は、その間隔を下回るようになるまで、Spawn Per Unit (単位当たりのスポーン) がミッションを中止します。これによって、エミッタが大量のスプライトをシーンにダンプしないようになります。
メモリコスト
- システム内にあるモジュールの数を、当該ビヘイビアのために必要不可欠なモジュールまで減らす。
- ループエフェクトについては、Loop Time/Duration (ループ時間 / 期間) を減らす。(ループ当たりのパーティクル割り当て数を減らす)。
- ライフタイムを減らす。(全体としてのパーティクル数を減らす)。
- できるかぎり多くのモジュールを共有する。
ティック時間 - ゲームスレッド
非平行光源のコスト - ゲームスレッド
- メモリ内にエフェクトのユニークなカラー種を保存するためのコスト
- 実行時にユニークなカラー種をロードするためのコスト
- Cascade 内で各カラー種を作成するためのコスト
- エフェクトを光源処理して、ゲームスレッド上で非平行光源と環境をマッチさせるのにかかるコスト