GLSLシェーダー効果:モーションブラーの方法


16

私は完全な2D環境を持ち、スプライトは風景、キャラクターなどとして回ります。

より最新の外観にするために、カメラをすばやく動かすときの最新のFPSゲーム(Crysis)ブラーに似たモーションブラーエフェクトを実装します。

サイドスクローラーでは、カメラが動いているときに高速で移動するように見えるように、このわずかなぼかしが望ましい効果になります。誰かがこれを行う上でいくつかのヒントをくれるなら、私はピクセルシェーダーであると思います、私は感謝するでしょう。


レンダリングされたバッファの複数のコピーを保持します。たとえば、前の4つのフレームをぼかして、現在のフレームを作成します。それはあなたが望む効果を作成する必要があります。
knight666

@ knight666は、追加のバッファーを1つ(Aと呼びます)保持し、その一部(たとえば0.75)を出力バッファーと混合する(画面に行く、それをB)と呼び、その後BをAにコピーします。これによりローリング平均が作成され、モーションブラーの増加に余分な費用はかかりません。
エルバ

1
これをコメントにするつもりでしたが、コメントボタンが見つかりませんでした。とにかく、Dave O.が言うことは、おそらくあなたが最善の策であり、Crysisのようなゲームで使用されていることです。これは少しこのように機能します。オブジェクトのレンダリング中に、オブジェクトの速度を別のバッファーにレンダリングします。MRTはこれを少し速くし、速度を計算する複数の方法がありますが、レンダーバッファー全体の速度を持つバッファーを追加することになります。その後、画素毎に速度に基づいて後処理シェーダでは、velocの反対方向の色バッファに試料
Arelius

リスト27-1のHLSL / Cgコードは、フルスクリーンポストプロセッシングピクセルシェーダーの前述の方程式を使用して、深度バッファーと現在の逆数を使用して、特定のピクセルでレンダリングされたオブジェクトのワールド空間位置を計算しますビュー投影行列。... HLSL ....コードではGLSLではありません

回答:


6

最後のフレームバッファのコピーを保持します。カメラの動きベクトルを取得し、反転します。通常どおりにシーンを描画し、わずかなオフセット(計算したばかりのカメラデルタ)と0.75アルファで最後のフレームバッファーを描画します。好きなだけ繰り返して、モーションブラー効果を与えます。


1
このアプローチは実装が非常に簡単ですが、微調整するのは非常に困難です(ぼかしの代わりにトレースを残すオブジェクトのように見える場合があります)。もう1つの簡単なアプローチは、後処理ピクセルシェーダーで反転カメラ移動方向にピクセルを「スミア」することです。
デイブO.

6
このアプローチの主な問題は、フレームレートに依存することです-20 fpsで実行している場合は、100 fpsで実行している場合の外観とは大きく異なります。あなたがそれを知っていて、あなたがそれを実行するフレームレートであなたが望む結果を得る限り、それは問題ありませんが、あなたはそれを意識する必要があります。
マキシマスミニマス

19

この方法を使用することをお勧めします:後処理効果としてのモーションブラー

実装が非常に簡単で、glslデモのRuin島で使用したものです[link]


この方法では、過去のフレームにブレンドよりはるかに優れています...
スティーブン・呂

現在のところ、この答えはリンクを提供するだけです。将来リンクが切れた場合、誰も実際に問題を解決する方法を知りません。少なくともリンクが提供する重要な情報を含めるようにしてください

J:うん、そのコピーは完全に任意の日中断されませんので、のは、インターネットのコピーを作ってみよう
SasQ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.