Version: 2019.4
言語: 日本語
Vertex Lit レンダリングパス
ビルトインのレンダリングパイプラインのハードウェア要件

ビルトインレンダーパイプラインをコマンドバッファで拡張する

コマンドバッファはレンダリングコマンドのリストを保持します。これらのコマンドのスケジュールと実行を Unity に指示することができます。

このページでは、ビルトインレンダーパイプラインのコマンドバッファの使用に関して説明します。スクリプタブルレンダーパイプライン (SRP) のコマンドバッファの使用については、スクリプタブルレンダーパイプラインのレンダリングコマンドのスケジュールと実行を参照してください。

コマンドバッファを使用して実行できるコマンドの完全なリストは、スクリプトリファレンスの CommandBuffer を参照してください。一部のコマンドは特定のハードウェアでのみサポートされていることに注意してください。例えば、レイトレーシングに関するコマンドは DX12 でのみサポートされています。

コマンドバッファを即座に実行する

Graphics.ExecuteCommandBuffer API を使用して、コマンドバッファを即座に実行できます。

コマンドバッファのスケジューリング

ビルトインレンダーパイプラインでは、レンダーループの特定の時間にコマンドバッファを実行できます。これを行うには、CameraEvent 列挙型と共に Camera.AddCommandBuffer API を使い、LightEvent 列挙型と共に Light.AddCommandBuffer API を使います。

例えば、CameraEvent の AfterGBuffer とともにコマンドバッファを使用すると、パイプラインがすべての不透明なゲームオブジェクトを処理した後に、追加のゲームオブジェクトを ディファードパイプライン にレンダリングすることができます。

CameraEvent の実行順序

実行の順序は、プロジェクトが使用するレンダリングパスによって異なります。

ディファードレンダリングパス
BeforeGBuffer
不透明なジオメトリをレンダリングします。
AfterGBuffer
深度を解決します。
BeforeReflections
デフォルトのリフレクションをレンダリングします 。
リフレクションプローブのリフレクションをレンダリングします。
AfterReflections
リフレクションを G バッファのエミッシブチャンネルにコピーします。
BeforeLighting
影をレンダリングします。LightEvent の実行順序を参照してください。
AfterLighting
BeforeFinalPass
最終パスを処理します。
AfterFinalPass
BeforeForwardOpaque (ディファードを使用してレンダリングできない不透明なジオメトリがある場合にのみ呼び出されます)
ディファードレンダリングで処理できない不透明なジオメトリをレンダリングします。
AfterForwardOpaque (ディファードを使用してレンダリングできない不透明なジオメトリがある場合にのみ呼び出されます)
BeforeSkybox
スカイボックスをレンダリングします。
AfterSkybox
ハローをレンダリングします。
BeforeImageEffectsOpaque
Post-processing Stack V2 パッケージを使用している場合、不透明のみのポストプロセスエフェクトを適用します。
AfterImageEffectsOpaque
BeforeForwardAlpha
透明なジオメトリと、レンダリングモードが Screen Space - Camera (スクリーンスペース - カメラ) に設定されているUI Canvases をレンダリングします。
AfterForwardAlpha
BeforeHaloAndLensFlares
レンズフレアをレンダリングします。
AfterHaloAndLensFlares
BeforeImageEffects
Post-processing Stack V2 パッケージを使用している場合、ポストプロセスエフェクトを適用します。
AfterImageEffects
AfterEverything
レンダリングモードが Screen Space - Camera (スクリーンスペース - カメラ) ではない UI Canvase をレンダリングします。

フォワードレンダリングパス
BeforeDepthTexture
不透明なジオメトリの深度をレンダリングします。
AfterDepthTexture
BeforeDepthNormalsTexture
不透明なジオメトリの深度法線をレンダリングします。
AfterDepthNormalsTexture
影をレンダリングします。LightEvent の実行順序を参照してください。
BeforeForwardOpaque
不透明なジオメトリをレンダリングします。
AfterForwardOpaque
BeforeSkybox
スカイボックスをレンダリングします。
AfterSkybox
ハローをレンダリングします。
BeforeImageEffectsOpaque
Post-processing Stack V2 パッケージを使用している場合、不透明のみのポストプロセスエフェクトを適用します。
AfterImageEffectsOpaque
BeforeForwardAlpha
透明なジオメトリと、レンダリングモードが Screen Space - Camera (スクリーンスペース - カメラ) に設定されているUI Canvases をレンダリングします。
AfterForwardAlpha
BeforeHaloAndLensFlares
レンズフレアをレンダリングします。
AfterHaloAndLensFlares
BeforeImageEffects
Post-processing Stack V2 パッケージを使用している場合、ポストプロセスエフェクトを適用します。
AfterImageEffects
AfterEverything
レンダリングモードが Screen Space - Camera (スクリーンスペース - カメラ) に設定されているUI Canvases をレンダリングします。

LightEvent の実行順序

影のレンダリングの段階で、影を投影する各ライトに対して Unity は以下を実行します。

BeforeShadowMap
BeforeShadowMapPass

現在のパス (pass) のすべてのシャドウキャスターをレンダリングします。

AfterShadowMapPass
各パス (pass) で繰り返します
AfterShadowMap
BeforeScreenSpaceMask
シャドウマップをスクリーンスペースバッファに集め、フィルタリングを行います。
AfterScreenSpaceMask

その他の参考資料

  • Unity ブログ Extending Unity 5 rendering pipeline: Command Buffers は、ビルトインレンダーパイプラインのコマンドバッファについて述べ、サンプルプロジェクトとサンプルコードを紹介しています。古いバージョンの Unity についてですが、原理は同じです。
Vertex Lit レンダリングパス
ビルトインのレンダリングパイプラインのハードウェア要件