4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

URP14のRendererFeatureで複数のポストを使用した際に前のポストを後ろのポストが上書きしてしまう問題

Posted at

概要

URP12からURP14へ移行時に詰まったポイントをメモ程度にまとめています、前提として下記の記事を巡回済みの方が対象です。
https://zenn.dev/sakutaro/articles/convert_blitter

解決策

上記の記事に下コードという表記があるが

   public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
   {
       if (renderingData.cameraData.isSceneViewCamera)
       {
           return;
       }

       var cmd = CommandBufferPool.Get(ProfilerTag);
       Blitter.BlitCameraTexture(cmd, cameraColorTarget, cameraColorTarget, material, 0);
       context.ExecuteCommandBuffer(cmd);
       CommandBufferPool.Release(cmd);
   }

このコードではうまく動いているように見えるが、
同じバッファに同一シェーダで読み書きしてはいけないと言うUnityのルールに反しているため、
同一のバッファに書き込めているように見えて内部では別の状態として保存されている。
なので複数のRendererFeatureを使用すると、
イメージ的にはSource側のcameraColorTargetには前回の処理後の状態が入るはずだが、
実際にはScriptableRenderFeatureが始まったときのバッファの状態が入ってくる。

   public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
   {
       if (renderingData.cameraData.isSceneViewCamera)
       {
           return;
       }

       var cmd = CommandBufferPool.Get(ProfilerTag);
       Blitter.BlitCameraTexture(cmd, cameraColorTarget, bufferTarget, material, 0);
       Blitter.BlitCameraTexture(cmd, bufferTarget, cameraColorTarget);
       context.ExecuteCommandBuffer(cmd);
       CommandBufferPool.Release(cmd);
   }

なので上記のように一旦別のバッファに描画し、それをメインバッファにコピーするとうまく複数の描画が行なえます。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?