うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】CommandBuffer の Blit 時に画像の上下が反転する

CommandBuffer を試すために ポストエフェクトだけの処理を作成すると
なぜか結果が上下反転して出力されてしまいました

1f:id:hacchi_man:20201211233016p:plain:h300f:id:hacchi_man:20201211233000p:plain:h300

using UnityEngine;
using UnityEngine.Rendering;
 
public class CommandBufferSample : MonoBehaviour
{
    [SerializeField]
    private Camera _targetCamera;
    [SerializeField]
    private Shader _shader;
 
    private void Start()
    {
        Render();
    }
 
    private void Render()
    {
        var id = Shader.PropertyToID("_Temp");
  
        var cb = new CommandBuffer
        {
            name = "Blur"
        };
 
        var mat = new Material(_shader);
        cb.GetTemporaryRT(id, -1, -1);
        cb.Blit(BuiltinRenderTextureType.CameraTarget, id);
        cb.Blit(id, BuiltinRenderTextureType.CameraTarget, mat);
        cb.ReleaseTemporaryRT(id);

        _targetCamera.AddCommandBuffer(CameraEvent.AfterImageEffectsOpaque, cb);
    }

原因を調べていると Camera.forceIntoRenderTexture を有効にすると動くという記事を見つけたので早速試してみます

       _targetCamera.forceIntoRenderTexture = true;
        _targetCamera.AddCommandBuffer(CameraEvent.AfterImageEffectsOpaque, cb);

結果うまくいきました

f:id:hacchi_man:20201211233624p:plain:h300

Camera.forceIntoRenderTexture のリファレンスを読んでみると、CommandBuffer で
レンダリング結果を利用する場合には、これを有効にするといいということが書かれているので、これで対応は問題なさそうです

Camera-forceIntoRenderTexture - Unity スクリプトリファレンス