うにてぃブログ

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

【Unity】ポストエフェクトのサイズを変える

OnRenderImage のタイミングで、対象サイズの RenderTexture に一度書き込み
それを destination にコピーすることでサイズを変更することができます

f:id:hacchi_man:20200515013006p:plain:h300f:id:hacchi_man:20200515013016p:plain:h300

using UnityEngine;
 
[RequireComponent(typeof(Camera))]
[ExecuteInEditMode]
public class PostEffect : MonoBehaviour
{
    [SerializeField]
    private int _division = 10;
    
    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        // 対象サイズの RenderTextureを取得
        var temp = RenderTexture.GetTemporary(source.width / _division, source.height / _division, 0, source.format);
        // 対象サイズの RenderTextureにもともとの画像をコピー
        Graphics.Blit(source, temp);
        // サイズを変更したものを 表示させる
        Graphics.Blit(temp, destination);
        // 先程利用したRenderTexureを破棄 これをしないとメモリが死ぬ
        RenderTexture.ReleaseTemporary(temp);
    }
}

注意

RenderTextureを更に増やしているので、サイズが異なるとは言えメモリ
上に2個のRenderTextureが乗ってしまうことになるので注意してください

f:id:hacchi_man:20200515013222p:plain