私は WebGL の初心者です。ND-Buffers と G-Buffers が WebGL 開発の戦略的な選択であるかのように、いくつかの投稿を読みました。
ND バッファーと G バッファーはパイプラインのレンダリングにどのように関連していますか? ND バッファーはフォワード レンダリングでのみ使用され、G バッファーは遅延レンダリングでのみ使用されますか?
両方を実装する JavaScript コード例は、違いを理解するのに役立ちます。
私は WebGL の初心者です。ND-Buffers と G-Buffers が WebGL 開発の戦略的な選択であるかのように、いくつかの投稿を読みました。
ND バッファーと G バッファーはパイプラインのレンダリングにどのように関連していますか? ND バッファーはフォワード レンダリングでのみ使用され、G バッファーは遅延レンダリングでのみ使用されますか?
両方を実装する JavaScript コード例は、違いを理解するのに役立ちます。
G バッファは、遅延レンダリングで一般的に使用されるバッファのセットです。
ウィキペディアは、g バッファーでよく見られる種類のデータの良い例を示しています。
拡散色情報
ワールド空間またはスクリーン空間の法線
深度バッファ / Z バッファ
これら 3 つのバッファーの組み合わせは、「g バッファー」と呼ばれます。
ジオメトリとマテリアル データからこれら 3 つのバッファを生成すると、シェーダを実行してそれらを結合し、最終的なイメージを生成できます。
実際に g-buffer に入る内容は、特定のエンジン/レンダラー次第です。たとえば、Unity3D の遅延レンダリングの1 つには、拡散色、オクルージョン、鏡面反射色、粗さ、法線、深度、ステンシル、放出、照明、ライトマップ、反射プローブが含まれています。
ND バッファーは、「通常の深度バッファー」の略であり、典型的な g バッファーで通常見られるもののサブセットになります。
SO には間違いなく大きすぎるサンプルについては、MDN の WebGL での遅延レンダリングに関する記事があります。
以前の回答にさらに情報を追加したいと思います。
ND-Buffers と G-Buffers が WebGL 開発の戦略的な選択であるかのように、いくつかの投稿を読みました。
遅延レンダリングの最も重要な部分の 1 つは、特定のプラットフォームが MRT (複数のレンダー ターゲット) をサポートしている場合です。そうでない場合、各レンダリング間でシェーダーの部分的な計算を共有できず、「レイヤー」と同じ回数レンダリングを実行する必要があります (unity 3D の場合、最大 11 回になる可能性があります)。 ?)。これにより、プログラムが大幅に遅くなる可能性があります。
この質問の詳細を読む OpenGL ES 2.0 で延期されたレンダリング/シェーディングは可能ですか?
Webgl は MRT をサポートしていませんが、拡張機能があります: https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/
また、深度テクスチャの拡張もあります: https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/
したがって、遅延レンダリング手法を使用できるはずですが、その速度を推測するのは困難です。