Command Buffer (コマンドバッファ) を使うと、Unity のビルトインの レンダリングパイプライン を拡張できます。コマンドバッファは、カメラのレンダリング中に様々な時点で実行するレンダリングコマンドのリストを保持します。コマンドバッファを実行するための Unity のビルトインレンダリングパイプラインの位置を指定するには、CameraEvent enum を使用します。
例えば、CameraEvent の AfterGBuffer とともにコマンドバッファを使用すると、パイプラインがすべての不透明なゲームオブジェクトを処理した後に、追加のゲームオブジェクトを ディファードパイプライン にレンダリングすることができます。
下は、どのように Camera がフォワードやディファードのパイプラインを使用して Unity のシーンをレンダリングするかの概要です。
See the CommandBuffer Class and the CameraEvent Enum for more information. You can also use Command buffers in conjunction with, or as a replacement for, image effects.
以下は、コマンドバッファで作成できるエフェクトの例を紹介する Unity プロジェクトのサンプルです。 RenderingCommandBuffers.zip
このシーンでは、ぼやけたリフレクションを作成するテクニックを紹介します。 Unity が不透明オブジェクトとスカイボックスをレンダリングした後、現在の画像を一時的なレンダリングターゲットにコピーし、それをぼかします。glass シェーダーはこのぼやけた画像をサンプリングし、法線マップを使用してUV 座標をオフセットして屈折をシミュレーションします。 このテクニックは Shader GrabPass に似ています。
このシーンは、カスタムのディファードスフィア形状ライトとチューブ形状ライトの作成に使用できるテクニックを紹介します。 Unity が通常のデファードライトパスを処理した後、このテクニックはカスタムライトごとにスフィアを描画します。次に、各スフィアはシェーダーを使用してイルミネーションを計算し、ライティングバッファに加えます。
このシーンは、ディファードのデカールを処理するための基本的なテクニックを示しています。 Unity が G バッファを処理した後、各デカールを描画し、G バッファのコンテンツを変更します。このテクニックは、ディファードパイプラインでライトを処理するのと似た方法で動作しますが、このテクニックは、ライティングを累積するのではなく、G バッファのテクスチャを変更する点が異なります。 このテクニックは、各デカールをボックスとして処理し、ボックスのボリューム内のジオメトリにのみ影響します。