微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 unity OnRenderImage() 转换为 URP

如何解决将 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 举报,一经查实,本站将立刻删除。