将 unity OnRenderImage() 转换为 URP

问题描述

我正在制作一个带有像素化着色器的游戏。我从网上下载了这个着色器,它与认渲染管道一起工作。我想将 URP 用于其他目的。使用 URP 时,像素化着色器不起作用。我把问题缩小了一点。我发现 OnRenderImage() 不会使用 URP 调用,但会使用认 RP 调用。由于this thread,我认为有一种方法可以做到这一点。我不明白他们在说什么,因为我对着色器很陌生。我进一步搜索并在统一手册中找到了 this。但是,我不明白。有人可以引导我完成它,并将此脚本转换为与 URP 兼容吗?

脚本如下:

using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
[RequireComponent(typeof (Camera))]
[AddComponentMenu("Image Effects/Pixelate")]
public class Pixelate:MonoBehavIoUr{
    public Shader shader;
    int _pixelSizeX=1;
    int _pixelSizeY=1;
    Material _material; //pixelation material/shader
    [Range(1,20)]
    public int pixelSizeX=1;
    [Range(1,20)]
    public int pixelSizeY=1;
    public bool lockXY=true;
    void OnRenderImage(RenderTexture source,RenderTexture destination){
        if(_material==null) _material=new Material(shader);
        _material.SetInt("_PixelateX",pixelSizeX);
        _material.SetInt("_PixelateY",pixelSizeY);
        Graphics.Blit(source,destination,_material);
    }
    void Ondisable(){
        DestroyImmediate(_material);
    }

    void Update(){
        if(pixelSizeX!=_pixelSizeX){
            _pixelSizeX=pixelSizeX;
            if(lockXY) _pixelSizeY=pixelSizeY=_pixelSizeX;
        }
        if(pixelSizeY!=_pixelSizeY){
            _pixelSizeY=pixelSizeY;
            if(lockXY) _pixelSizeX=pixelSizeX=_pixelSizeY;
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)