weixin_65342675 2024-01-02 13:13 采纳率: 33.3%
浏览 32
已结题

URP14下的高斯模糊的unity shader和脚本,报错

报错:只能在scriptable render pass的范围内用camera color target否则管道及目标可能创建或已被释放。
搜网上应该是setupRenderPasses的问题,需要在Feature里面定义,在pass里面的Excute调用,然而我对着网上的方法改修改仍然未解决。
我以前都是学着写内置渲染管线,相对简单,突然换成URP还是新版的,一脸懵,烦请详细说说怎么改。shader应该没什么问题。
//参数
GaussianBlurVolume:VolumeComponent

img

//处理脚本
//GaussianBlurFeature和Pass

img

  • 写回答

11条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-01-02 13:15
    关注

    引自免费微信小程序:皆我百晓生

    根据你提供的信息和代码片段,报错是由于在使用render pass时没有正确配置camera color target所导致的。

    根据你提供的代码片段,你需要修改GaussianBlurRenderFeature.cs文件中的Execute方法。具体步骤如下:

    1. 首先,在方法开头获取当前渲染目标的标识符:
    RenderTargetIdentifier source = renderingData.cameraData.renderer.cameraColorTarget;
    
    1. 然后,在执行命令之前设置全局纹理:
    cmd.SetGlobalTexture(MainTexId, source);
    
    1. 最后,在执行命令之前进行模糊处理:
    cmd.Blit(buffer01.Identifier(), source, passMaterial, 0);
    

    更新后的代码如下:

    public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
    {
        CommandBuffer cmd = CommandBufferPool.Get("Gaussian Blur");
        
        // 获取当前渲染目标的标识符
        RenderTargetIdentifier source = renderingData.cameraData.renderer.cameraColorTarget;
      
        // 设置全局纹理
        cmd.SetGlobalTexture(MainTexId, source);
        
        // 进行模糊处理
        cmd.Blit(buffer01.Identifier(), source, passMaterial, 0);
        
        context.ExecuteCommandBuffer(cmd);
        CommandBufferPool.Release(cmd);
    }
    

    请尝试修改代码后重新编译并测试使用高斯模糊的shader和脚本,看看是否还会出现报错。如果还有其他问题,请提供更多的代码片段和错误信息,以便我们更好地帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月4日
  • 创建了问题 1月2日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见