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

ビルトインレンダーパイプラインのコマンドバッファによる拡張

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

コマンドバッファの基礎知識

コマンドバッファ には、レンダリングコマンド (レンダーターゲットの設定や、指定したメッシュの描画など) のリストが格納されています。Unity に指示して、これらのコマンドをビルトインレンダーパイプラインの様々な時点でスケジュールして実行するように Unity のレンダリング機能をカスタマイズして拡張することができます。

コマンドバッファを使用したぼやけた屈折。
コマンドバッファを使用したぼやけた屈折。

Graphics.ExecuteCommandBuffer API を使ってコマンドバッファをすぐに実行することができます。または、レンダーパイプラインの特定の時点で発生するようにスケジュールすることもできます。それらをスケジュールするには、Camera.AddCommandBuffer API をCameraEvent enum と共に使う、あるいは Light.AddCommandBuffer API を LightEvent enum と共に使用します。このようにしてスケジュールしたコマンドバッファを Unity がいつ実行するかは、CameraEvent と LightEvent の実行順序 を参照してください。

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

コマンドバッファの例

コマンドバッファを使用したデカール、
コマンドバッファを使用したデカール、

Unity のブログポストExtending Unity 5 rendering pipeline:Command Buffers は、ビルトインレンダーパイプラインのコマンドバッファを紹介しています。この記事では、コマンドバッファを使っていくつかの異なるエフェクトを実現する方法が説明されており、サンプルプロジェクトとサンプルコードが含まれています。このプロジェクトは古いバージョンの Unity 用に作成されたものですが、原理は同じです。

CameraEvent と LightEvent の実行順序

CameraEvent

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

ディファードレンダリングパス

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

フォワードレンダリングパス

ライトイベントの実行順序

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

Vertex Lit レンダリングパス
ビルトインレンダーパイプラインのハードウェア要件