ポストプロセスの機能 MotionBlurSoftEdge
|
SoftEdge によって、動いているオブジェクトの外側でモーションブラーが発生しているように見えます。 |
概要
参考ページ : MotionBlur
SoftEdge 機能を使用することによって、モーションブラーの質がさらに向上して、映画を彷彿とさせる効果が得られます。フィルムカメラでは、いわゆるシャッターを一定時間開いたままにしておくことによって、光をより多く取り込みます。動く物体はそのモーションの方向に沿ってブラーするように見えます。本モーションブラーは、ポストプロセス エフェクトに基づいており、複数のテクスチャのサンプルを平均化することによって、イメージ コンテンツをブラーします。フィルム イメージで見られるような、物体の外でブラーを発生させることは可能ですが、それだけの労力が必要となります。当社では、この問題に対するソリューションのことを、モーションブラー SoftEdge 機能と呼びます。
この機能がもつ高度なプロパティを理解することによって、アプリケーションが必要とするものに応じて、見栄えとパフォーマンスを調整することができるようになります。
SoftEdge の起動と適切なパラメータの設定
SoftEdge 機能は、uber ポストプロセス ノードのポストプロセス チェーンで起動されます。
|
値が0 の場合は、SoftEdge 機能が無効になります (高速)。0 よりも大きい値は半径を指定します (有効な範囲は 1 ~ 10 )。 |
SoftEdge 機能を使用する場合は、力強いモーションブラーの方が見栄えがよくなるため、最大速度を上げることができます。
結果
|
左 : ブラーは物体内部でのみ発生しています。 中 : 物体の外でブラー機能を使用しています。 右 : より大きな半径を使うことによってエフェクトを最大限に拡張しています。 |
この機能を使用することによって、パフォーマンス上の負荷がいくらかかかります。半径を大きくすると負荷もやや大きくなります (ブラー中により多くのサンプルが必要になります)。また、値が大きくなると、複数のオブジェクトがさまざまに動いてお互いに接近しすぎた場合に、モーションに歪みが生じることがあります。中央の画像で分かるように、この値を小さくしすぎると、動いているオブジェクトが切れて見える場合もあります。ただし、これまでの経験から、小さな値であっても適正な結果を得られることが分かっています。(例 : 1)。より力強いモーションを出すには、値を 5 ~ 10 にする必要があるでしょう。この値は最大速度に基づいて計算できますが、小さめの値を使用することによってパフォーマンスと仕上がりを制御できるほうが好ましいと思っています。
実行時に値を変更する
コンソールコマンドの MotionBlurSoftEdge を使用して、ポストプロセス チェーンで指定されている強度をオーバーライドすることができます。コマンドにパラメータをつけずに使用するとヘルプ テクストが表示されます。このコマンドは、ある種の凍結状態で用いるのに最適です (たとえば、 freezeframe コマンドやゲーム ポーズを使用する場合です)。なお、MotionBlurSkinning は凍結できません。理由は、現在の実装がフレームごとに更新されているためです。オブジェクトが凍結される場合は、ボーン単位の情報が失われます。
|
コンソールコマンドのヘルプが表示されています。 |
いくつか試す中で適切な値が分かるようになり、ポストプロセス チェーンで設定することができるようになるでしょう。
実装
我々のモーションブラーは、ポストプロセスで実装されています。ここでシーンがモーションの方向にブラーされます。モーションの方向は速度テクスチャからもたらされます (スクリーン空間 2D モーション ベクターがカラーとしてエンコードされます)。このことは、 MotionBlur で説明されています。グラフィックス ハードウェアは、拡散的方法 (データを複数の目的に分配する方法) よりも集約的方法 (通常のテクスチャ マッピングの方法) を取る方が数段速度が上がります。モーションブラーでは、現在のピクセルについて、隣接しているどのピクセルからコンテンツを受け取るのかということを知る必要があります。
SoftEdge 機能が ない 場合は、現在のピクセルにおけるモーションが、隣接するピクセルにとっても同じであると単に想定します。色漏れを避けるために、モーションの方向をもたないピクセルとモーションの方向が異なるピクセルを拒絶します。このソリューションはクリアーに見えますが、オブジェクトの境界の外ではブラーが発生しません。
SoftEdge 機能が ある 場合は、単純なガウス ブラーをともなった中間的な速度テクスチャをブラーします。モーション ベクターをブラーすると、モーション ベクターの長さがロスします。これを補うためには、他のチャンネルもブラーします (0 は、オブジェクト モーションではない場合。1 は、オブジェクト モーションの場合)。このチャンネルで割ることによって、モーション強度のロスを補うことができます。
次の画像は、内部バッファがどのようになっているかを示しています (カラーが異なるのは、モーション ベクターが異なってエンコードされているためです)。
|左 : 速度テクスチャ
中 : ブラーされた速度テクスチャ (半径小)
右 : ブラーされた速度テクスチャ (半径大)
なお、ブラーするとイメージの解像度はかなり低くなります。ディテールがロスしていることは、動きの中では分かりません。さらに、テクスチャをバイリニア フィルタリングすることによって隠蔽されます。
ポストプロセスの間に、速度ベクターをブラーすることによって、サンプリングに使用するオブジェクトの方向を取得します。カメラモーションの方向でもサンプリングを行い、結果を結合させます。
パフォーマンス
現在の実装が最終的なものと考えているわけではありませんが、実用に耐えるだけの速度は充分に出ていると見ています。強いモーションを使った場合にパフォーマンスがやや低下するのは、テクスチャのキャッシュがかなりパフォーマンスに影響するためです。現在最適化に関して調査しています。
Important!
You are viewing documentation for the Unreal Development Kit (UDK).
If you are looking for the Unreal Engine 4 documentation, please visit the Unreal Engine 4 Documentation site.