问题描述
我正在制作一个带有像素化着色器的游戏。我从网上下载了这个着色器,它与默认渲染管道一起工作。我想将 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 (将#修改为@)