対象:OpenGL ESの3.0アカウントの深さを考慮してスクリーニングするためのFBOをレンダリング
私のデフォルトのフレームバッファ(画面)すでにレンダリングされた私のシーンの一部が含まれていると仮定する。その色および深度バッファは有効なデータを含む。
ここで、シーンの別の部分がすでに中間のFBO 'fbo1'にレンダリングされているとします。その色データは、fbo1.COLOR0添付ファイルに添付されたテクスチャ 'mColor'に保持され、その深さは、別のFBO 'fbo2'のDEPTH添付ファイルに添付された別のテクスチャ 'mDepth'に保持されます。
今、mColorを使ってmDepthの深さを考慮して、スクリーンにレンダリングしたいと考えています。カラーデータだけを含むテクスチャをスクリーンにレンダリングする方法はわかっていますが、mDepthを考慮する方法はわかりません。
本質的には、mColorでテクスチャ化されたクォードをスクリーンにレンダリングするときのように、スクリーンのデプスバッファをクワッドからの深さではなくmDepthからの深さと比較する必要があります。どうやってするか?
私は参照してください。 私が実際にやっていることは次のとおりです。まずは自分のシーンのほとんどをレンダリングします。次に、N回のパスで、後処理を必要とする各オブジェクトをオフスクリーンバッファにレンダリングします。私は、オブジェクトが画面上でどこに終わるかを計算します(そのメッシュはかなりシンプルです)。それを十分に大きなFBOにレンダリングしてから、オブジェクトに後処理を適用し、問題に直面します。これを画面にマージします。 私は、オブジェクトごとに後処理をする方が簡単だと思っていました。これは、例えばBLURオブジェクトをBLURに近づけることが心配する必要がないからです。 – Leszek
ぼかしは自然な形の「ファジーエッジ」を意味します。それはその半分のポイントなので、いつかは「クリープ」を解決する必要があります。あなたはパイプラインの後のポイントに痛みを延期しているだけで、遠ざけたわけではありません。 – solidpixel
いいえ、私はあなたの提案を実装しました。完全に動作します。つまり、よりぼやけていないオブジェクトが、さらにぼやけたオブジェクトを部分的に遮っている場合、近くにあるオブジェクトは完全に鮮明になります。オブジェクトごとの後処理なしでこの効果を達成するには(つまり、シーン全体を一度に後処理しなければならない場合)、さらにオブジェクトにマークを付けるためにステンシルを使用し、ステンシルテストでぼかしを適用する必要がありますが、 DEPTHを考慮してください(より近いオブジェクトとの境界に近い別のオブジェクトのピクセルは、より近いオブジェクトのピクセルの影響を受けません)。 – Leszek