2009-07-03 17 views
5

モーションブラーを2Dプログラムにチャッキングすることを考えていますが、現在のアルゴリズムの結果は疑わしいです。2Dモーションブラーソリューション

私のアプローチは、現時点では次のようになります。

  • はバックバッファに描画します。
  • までの時間が、フロントバッファに バックバッファをブレンドし、フロントバッファを更新します。
  • 繰り返し動いているオブジェクトがフェージング証跡を残すだろうと「モーションブラー」効果は、明らかにブレンドされ引き起こす何

。これは明らかに非常にハードウェアに要求されていない

、ダブルバッファリングはとにかく行われますし、唯一の余分なステップは、単純な計算であるアルファブレンディング、です。しかし、トレイルは非常に鋭く、少し奇妙に見えるかもしれないすべてでぼやけていません。ブレンドの前にバックバッファーでボケをすることができましたが、ニンテンドーDSのようなローエンドシステムには非常に負荷がかかるような気がします。

は私がより効率的にそれを行うか、より良い探していた結果を得ましょう任意の解決策はありますか?

答えて

5

本当にあなたは、多くの中間フレームをレンダリングし、1つの結果にそれらをブレンドする必要があります。たとえば、出力フレームレートが50 fpsであるとします。 500fpsで内部的にレンダリングし、10フレームのブレンドしたグループをまとめてユーザーに表示すると、合理的な結果になるでしょう。

あなたが遅い蛍光体と古いCRT上にレンダリングされたかのように、あなたは、現時点で使用しているアプローチは、持続性をシミュレートします。これは実際にはモーションブラーと同じではありません。フレームの長さが20ms(1000/50)の場合、モーションブラーリングフレームは、20msのフレーム期間にわたるレンダリングで構成され、すべて同じアルファウェイティングを使用します。持続性ソリューションは、20,40,60,80,100ms前のレンダリングで構成され、徐々にフェードアウトします。

+0

これは良い提案ですが、多くの処理能力を必要とするように思えます。 – Skurmedel

+1

確かに。レンダリングしているプリミティブの種類によっては、おそらく適用できる最適化がいくつかあります。または、私の提案とあなたのハイブリッドを試すことができます。あなたが提案したアルゴリズムは、90年代の標準デモコーディングトリックでした。素晴らしい結果を生み出すことができます。 しかし、一般的な、単純で高速なモーションブラーの実装を探しているなら、あなたは不運です。だからあなたはそれが実現するのをほとんど見ていないのです。 –

1

あまり鮮明ではないかもしれません。それはすべて、使用されるブレンド機能に依存します。例えば、前/現在の画像に対してそれぞれ0.1/0.9は、いくらかのかすかな軌跡を提供する。

私は私の知識をより効率的にそれを行うには現実的な方法はありません

+0

入力いただきありがとうございます。私のアイデアがあまりにも素人ではないことを知っておいてください:) – Skurmedel

1

これは本質的であることをOpenGLで、動きボケが(累積バッファを介して)どのように行われるか追加される場合があります。それは得るほど効率的です。フレームレートが良く、動きがあまりにもシャープでない場合は、かなり良いように見えます。

最高の見ている計画では、画素ごとに、古い位置への新しい位置から半透明の線を引くことであろう。しかし、これは簡単な計算ではありません。

+0

フレーム間でオブジェクトが直線的に動かない場合は、このより見栄えのよい計画であっても間違って見えるということを付け加えておきます。 – Goz

+0

ありがとうございます。それは興味深い考えですGoz、それを考慮してhadnät。バックバッファの不透明度が低い場合、オブジェクトが1つのフレーム内で一方の端から他方の端に移動すると、奇妙に見える可能性があります。 – Skurmedel