我正在使用像素化着色器制作游戏。我从网上下载了这个着色器,它与默认的渲染管道一起工作。我想将 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;
}
}
}