簡単な答えは、各ドローコール間でそれらを変更することです。シェーダーを設定し、ティーポットを描画し、別のシェーダーを設定し、別のティーポットを描画します。
ぼかし、グローなど、1つのオブジェクトだけに複数のシェーダーを適用する必要がある、より複雑なもの。基本的に、すべてがテクスチャにレンダリングされます。次に、別のシェーダーを使用しながら、テクスチャを適用して画面全体にクワッドをレンダリングします。
たとえば、グローエフェクトをレンダリングする場合、通常の非グローシーンをレンダリングする必要があります。次に、テクスチャでグローしたいものの色付きのシルエットだけをレンダリングしてから、ぼかしシェーダーに切り替えてレンダリングします。輝きのないシーンにそのテクスチャがアタッチされたクワッド。
遅延シェーディングと呼ばれる別の手法があります。この手法では、照明なしでシーンをレンダリングし、後で画面スペースに適用します。コア目標は、ピクセルごとの照明の費用を削減することです。
通常、画面に配置されるカラーバッファーをレンダリングします。遅延シェーディングでは、代わりに1つのシェーダーパスでカラーバッファーと法線と深度バッファーをレンダリングします(法線と高さのマッピングのように、法線ベクトルと深度をテクスチャに格納できます)。
これは、すべてのピクセルについて、最も近い透明でないジオメトリの部分(深さまたは目からの距離)の色と法線を知っていることを意味します。このため、レンダリングするすべてのオブジェクトの各表示ピクセルにではなく、画面上の各ピクセルに照明を適用できます。シーンが前後の順序で完全にレンダリングされない場合、一部のオブジェクトは他のオブジェクトの上に描画されることに注意してください。
影の場合、実際にはライトの視点から深度バッファーのみをレンダリングし、その深度情報を使用してライトが当たる場所を判断します。これは、シャドウマッピングと呼ばれます(ジオメトリのシルエットを作成して押し出すシャドウボリュームと呼ばれる別のアプローチもありますが、それでもシェーダーを使用します)。
より近代的なOpenGLの(3.0+)を使用すると、使用フレームバッファオブジェクトレンダとが接続されるオブジェクト。レンダバッファはテクスチャのように扱うことができるため。あなたは(あなたが、あなたの法線を、あなたのテクスチャをレンダリングする必要はありませんので、複数の異なるレンダに1つのシェーダをレンダリングしているようなこと行う可能性があり、その後グローコンポーネント)が、根本的な練習はまだ同じです。
また、オーバーヘッドを節約するために、シェーダースイッチの数をできるだけ少なくすることが望ましいです。そのため、一部のエンジンは、すべてを一度に描画できるように、同じマテリアルを使用してすべてをグループ化します。