2

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

0 回答 0