5

モーションブラーを2Dプログラムに組み込むことを考えていますが、現在のアルゴリズムの結果には疑問があります。

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

  • バックバッファに描画します。
  • フロントバッファを更新するときは、バックバッファをフロントバッファにブレンドします。
  • 繰り返す

「モーションブラー」効果を引き起こすのは、動きのあるオブジェクトがフェードトレイルを残すため、明らかにブレンドです。

これは明らかにハードウェアにそれほど要求が厳しくなく、ダブルバッファリングはとにかく行われ、唯一の追加のステップは単純な計算であるアルファブレンディングです。ただし、トレイルは非常にシャープで、ぼやけることはなく、少し奇妙に見えるかもしれません。ブレンディングステップの前にバックバッファーでボックスブラーを行うことはできますが、ニンテンドーDSのようなローエンドシステムでは非常に負担がかかるように感じます。

より効率的に実行したり、見栄えの良い結果を生成したりできるソリューションはありますか?

4

3 に答える 3

5

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

現在使用しているアプローチは、低速の蛍光体を使用して古い CRT にレンダリングしているかのように、永続性をシミュレートします。これは実際にはモーション ブラーと同じではありません。フレーム継続時間が 20 ミリ秒 (1000/50) の場合、モーション ブラーが適用されたフレームは、20 ミリ秒のフレーム継続時間にわたるレンダリングで構成され、すべて同じアルファの重み付けが適用されます。持続性ソリューションは、20、40、60、80、100 ミリ秒前からのレンダリングで構成され、徐々にフェードアウトします。

于 2009-07-03T14:45:49.950 に答える
1

あまりシャープではないかもしれません。それはすべて、使用するブレンド機能によって異なります。たとえば、前/現在の画像のそれぞれ0.1 / 0.9は、かすかな軌跡を提供します。

これが本質的にOpenGLでのモーションブラーの実行方法であると付け加えるかもしれません(蓄積バッファを介して)

于 2009-07-03T13:32:40.280 に答える
1

私の知る限り、これをより効率的に行う方法はありません。それはそれが得るのと同じくらい効率的です。フレームレートが良好で、動きもそれほど鋭くない場合は、かなり見栄えがします。

最適な計画は、ピクセルごとに、新しい位置から古い位置に半透明の線を引くことです。ただし、これは簡単な計算ではありません。

于 2009-07-03T13:32:41.340 に答える