OpenGLでシェーダーを使用せずにオブジェクトをぼかす良い方法はありますか?
現在、ぼかしは、オブジェクトを元の位置からわずかに上、下、左、右、および4つの対角線としてレンダリングすることで実現しています。これを行うにはもっと良い方法があるはずです。2Dシーンで作業しています。
OpenGLでシェーダーを使用せずにオブジェクトをぼかす良い方法はありますか?
現在、ぼかしは、オブジェクトを元の位置からわずかに上、下、左、右、および4つの対角線としてレンダリングすることで実現しています。これを行うにはもっと良い方法があるはずです。2Dシーンで作業しています。
回答:
あなたがすでに持っているものは良いです、そしてフルスクリーンのぼかしを達成するための標準的な方法。
全画面ぼかしが不要で、スプライトごとに2dスプライトをぼかしたい場合は、ミップマップLODクランプ/バイアスを使用して、ハードウェアに低いミップレベルをサンプリングさせることができます。バイリニア拡大フィルタリングと組み合わせて使用すると、自然な結果がぼやけて見えるはずです。
それができない場合は、ぼかした画像に別のテクスチャを使用して、ぼかした画像とぼかしていないテクスチャを切り替えるだけです。スムーズなトランジションが必要な場合は、各テクスチャを使用して2つのスプライトを同時に描画し、各スプライトのアルファ値をアニメーション化できます。すなわち。時間の増加に伴い、sprite1のアルファは0..1から、sprite2のアルファは1..0から変化します。
シェーダーを使用せずに画像をオフセットしてレンダリングすると、可能な限りぼかし効果に近づきます。フルスクリーンのぼかしを実現したい場合は、以前のフレームバッファーを透明度で上書きすることもできます。ただし、各パスは、適切なフレームレートを維持するために必要なフィルレートを約2倍にします。
次のステップでは、少なくともRendertextureと独自のロジックを使用して画像を処理するか(ソフトウェアシェーダー)、または実際のハードウェアシェーダーを使用します(iPhone 3GS以降)。
同じ種類のぼかし効果が得られない可能性がありますが、画像を小さいピクスマップサイズにダウンサンプリングし、線形補間を使用して画面に描画します。