シェーダーを使用せずにOpenGLで2Dゲームのオブジェクトをぼかす方法はありますか?


8

OpenGLでシェーダーを使用せずにオブジェクトをぼかす良い方法はありますか?

現在、ぼかしは、オブジェクトを元の位置からわずかに上、下、左、右、および4つの対角線としてレンダリングすることで実現しています。これを行うにはもっと良い方法があるはずです。2Dシーンで作業しています。


シェーダーを使用しないのはなぜですか?
ジョナサンフィショフ2010

1
@Jonathanいくつかの理由がありますが、最大の理由はOpenGL ES 1.1(FFのみ)の使用です。
スヌーピー博士、2010

ああ、そうだな。:(
ジョナサン・フィショフ2010

これらのオブジェクトのぼやけたアニメーションを実現しますか?
Alex Jasmin、2010

回答:


6

あなたがすでに持っているものは良いです、そしてフルスクリーンのぼかしを達成するための標準的な方法。

全画面ぼかしが不要で、スプライトごとに2dスプライトをぼかしたい場合は、ミップマップLODクランプ/バイアスを使用して、ハードウェアに低いミップレベルをサンプリングさせることができます。バイリニア拡大フィルタリングと組み合わせて使用​​すると、自然な結果がぼやけて見えるはずです。

それができない場合は、ぼかした画像に別のテクスチャを使用して、ぼかした画像とぼかしていないテクスチャを切り替えるだけです。スムーズなトランジションが必要な場合は、各テクスチャを使用して2つのスプライトを同時に描画し、各スプライトのアルファ値をアニメーション化できます。すなわち。時間の増加に伴い、sprite1のアルファは0..1から、sprite2のアルファは1..0から変化します。


6

シェーダーを使用せずに画像をオフセットしてレンダリングすると、可能な限りぼかし効果に近づきます。フルスクリーンのぼかしを実現したい場合は、以前のフレームバッファーを透明度で上書きすることもできます。ただし、各パスは、適切なフレームレートを維持するために必要なフィルレートを約2倍にします。

次のステップでは、少なくともRendertextureと独自のロジックを使用して画像を処理するか(ソフトウェアシェーダー)、または実際のハードウェアシェーダーを使用します(iPhone 3GS以降)。


1

同じ種類のぼかし効果が得られない可能性がありますが、画像を小さいピクスマップサイズにダウンサンプリングし、線形補間を使用して画面に描画します。


1

オブジェクトは、透明からぼやけに移行する必要がありますか?

レベル1:

  • 最も簡単な解決策は、ソースアートを事前にぼかし、直接描画することです。

レベル2:

  • いくつかのぼかしの個別のステップを作成して事前に生成し、必要に応じて画像を入れ替えます。スムーズな移行の外観を得るために、それほど多くは必要ないでしょう。

レベル3:

  • 一連の個別の事前生成されたブラーステップを生成し、最も近い2つのステップ間でアルファブレンドを行って、遷移をスムーズにします。

0

シェーダーがなければ、それはあなたができるほとんどすべてのことです。アキュムレーションバッファは、プラットフォームで利用できる場合、より多くのジョブを実行するためのより多くのパワーを提供します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.