の多くのインスタンスを表示していますBasicEffect
。各インスタンスは、部分的に透明または完全に不透明な 4 つのテクスチャのいずれかがランダムに選択された「プレート」です。
私が抱えている問題は、透明度のあるプレートがレンダリングされると、既にレンダリングされているプレートだけが透けて見えることです。
すべてがどのように表示されるかを説明するのは難しいので、ここにイメージがあります。
適切な順序でレンダリングするよりも簡単な解決策はありますか?
の多くのインスタンスを表示していますBasicEffect
。各インスタンスは、部分的に透明または完全に不透明な 4 つのテクスチャのいずれかがランダムに選択された「プレート」です。
私が抱えている問題は、透明度のあるプレートがレンダリングされると、既にレンダリングされているプレートだけが透けて見えることです。
すべてがどのように表示されるかを説明するのは難しいので、ここにイメージがあります。
適切な順序でレンダリングするよりも簡単な解決策はありますか?
深度バッファには、その位置に描画された一番上のピクセルの「深度」が格納されます。その位置に別のピクセルを描画しようとすると、そのピクセルの深度値が現在バッファーにある値よりも大きい場合、そのピクセルはカラー バッファーに描画され、深度バッファーの値がその深度値に置き換えられます。しかし、別のピクセルの深度値がバッファ内の値よりも小さい場合、そのピクセルは描画されず、深度バッファ内の値は変わりません。
この結果、透過ピクセルでは深度バッファが期待どおりに機能しません。透明なピクセルは、カラー バッファーの部分的な変更のみをもたらす可能性がありますが、深度バッファーの値を完全に置き換えます。その「下」に描画する方法はありません。
この問題を解決するには、次の 2 つの方法があります。
alpha testingを使用すると、透明なピクセルがまったくレンダリングされなくなります (深度バッファーは変更されません)。これにより、描画順序に関係なく、透明な領域を通してジオメトリを表示できます。欠点は、これがアンチエイリアシングでうまく機能しないことです (アンチエイリアシングのオプションについては、ここで適切な議論があります)。
または、ジオメトリを後ろから前に並べ替えることができます。最初に不透明なジオメトリを描画する場合は、透明なジオメトリを並べ替えるだけで済みます。