UDN
Search public documentation:
MotionBlurSkinningJP
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 ホーム > ポストプロセス エフェクト > ポストプロセス機能 MotionBlurSkinning (モーション ブラー スキニング)
ポストプロセス機能 MotionBlurSkinning (モーション ブラー スキニング)
異なる方向に動いている体の各部位によって、モーション ブラーが異なる方向で異なる強さで機能していることが分かります。 |
概要
左 : 機能が無効 中 : 機能が有効 右 : ピクセル単位の速度 (ベロシティ) がカラーで示されています。 |
機能を有効にする
MotionBlurSkinning コンソールコマンドを使用したときの様子です。 |
SkeletalMesh フラグを設定する
実装
正弦があるボーン数
ボーン データを保存するには 1D テクスチャを使用するため、ボーン数には制限があります。現在のところ、使用するテクスチャは幅 4096 であり、ボーン 1 つにつき 3 個のテクセルを保存する必要があります。この制限がゲームに影響するか否かを調べるには、 stat SceneUpdate (統計 シーン更新) コマンドを使用します。モーション ブラーは近くのオブジェクトについてしか実行されません。また、これによって問題が生じたことはありません。なお、顔のアニメーションのモーション ブラーでは、 MotionBlurSkinning 機能を必要としない場合が多い。シェーダーの置換
我々は、スキン モーション ブラーを持とうとする場合と持たないようにする場合について、シェーダー置換の回避を試みました。その目的は、ほとんどがコードの複雑化を緩和することにありましたが、同時に、シェーダーの数を全般的に少なくすることも目指していました。静的分岐 (ブール型定数で比較する) を使用することにしました。理由は、これによって問題が解決されるとともに、ドライバーによって最適化されてコードからオミットされるためです。 Xbox360 では、静的分岐を使用することによって、シェーダーの置換を回避しています。コンパイルアウトと同じくらい速いことが確かめられました。他のプラットフォームではまだこの方式が利用できません (最適化のセクションを参照してください)。パフォーマンス
CPU データの更新
スキン モーション ブラーの CPU 負荷は高くありません。その理由は、前のフレームのデータが保存されて次のフレームに再利用されるからです。ダブル バッファしか用いていないため、テクスチャ ロック処理が遅延することはありません。ただし、念のために stat (統計) でこのことを確かめることができます。コンソールコマンドの stat SceneUpdate を使用して、この数字を参照することができます。統計によって、ロックのための CPU 時間と更新されたボーン量が示されています。 |
描画コールの増加
モーション ブラーされたオブジェクトは、(ピクセル単位のモーション ベクターを保存するために) 速度レンダリング パスでレンダリングされる必要があります。非スキン モーション ブラーについては、これを実行する必要があるのは、オブジェクト モーションがある場合だけです。スキンされたオブジェクトがモーションを持っているか否かを調べるには、一層多くのデータをチェックする必要があります。この最適化はまだ行っていません。その実行は可能でしょうが、多数の動いているオブジェクトのワーストケースには無効でしょう。 つまり、動いていないオブジェクト (例: 動いていないボット) のためにスキン モーション ブラーを有効にする場合、レンダリングされる必要があり、それによってより多くの描画コールが加えられるということになります。頂点テクスチャ フェッチの GPU 負荷
現在の方法では、12 の頂点テクスチャ フェッチを、非常に大きな頂点フォーマット (1 つの 4×3 ボーン行列のために 4 つの float 型、スキニングのために 4 つのボーン) に入れる必要があります。つまり、より多くの頂点がこのようにレンダリングされる必要があるならば、それだけレンダリングの速度が低下するということになります。近くのオブジェクトだけがこのようにレンダリングされ (速度レンダリングパス)、レンダリングの負荷が、近くのアクションでピークに達する可能性があります。 Xbox360 (モーフをともなった高密度トライアングル メッシュ) で速度レンダリングパスを概観してみると、レンダリングの速度が、剛性モーション ブラーに比べて 60% 低下することが分かりました。メモリ
さまざまなプラットフォームにおけるサポート
最適化
- Xbox360 においては、頂点テクスチャ フェッチのかわりに、vfetch 機能を使用する。
- 頂点 1 つにつきボーン ルックアップの実行を 4 つ未満にする。(クオリティは低下するものの許容範囲でしょう)
- オブジェクトが動いていないことが分かっている場合に、ゲームコードを無効化するために、bPerBoneMotionBlur のチェックを実行時に行う。(単純だが、機能させるにはゲームコードに注力する必要がある)
- PC および Playstation 3 において、静的なブランチングを利用する。エンジンにバグがあって、これを使用することができません。回避策として、float 型のステートをチェックすることによって、機能を無効化することができます。(すなわち、非スキン オブジェクトであっても、速度レンダリング パスにおいて重いシェーダーの負荷を負担することになります)。
- 現在のところ、テクスチャは、その一部しか使用されていなくても全体がロックされます。
- すべてのボーンと前のボーンとを比較することによって、速度レンダリングが必要であるかどうかをテストしてください。
便利なコンソール コマンド
-
MotionBlurSkinning
- 上記にて説明しています。