You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

URP自定义Renderer Feature调用cameraColorTarget报错的解决方法

问题解决:URP自定义Renderer Feature中cameraColorTarget访问错误

错误原因

renderer.cameraColorTarget 仅允许在ScriptableRenderPass的执行作用域内访问(比如Execute方法中),在AddRenderPasses方法中访问时,相机目标纹理可能尚未创建或已被释放,因此触发报错。

重构方案

将设置相机颜色目标的逻辑从AddRenderPasses移到自定义ScriptableRenderPass的Execute方法中,确保在Pass的执行作用域内访问cameraColorTarget。

步骤1:修改Renderer Feature的AddRenderPasses方法

移除直接设置颜色目标的代码,改为将ScriptableRenderer实例传递给自定义Pass:

public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) {
    m_ScriptablePass.AssignRenderer(renderer);
    renderer.EnqueuePass(m_ScriptablePass);
}

步骤2:修改自定义ScriptableRenderPass类

添加存储Renderer实例的字段,并在Execute方法中安全设置颜色目标:

public class VolumetricLightScatteringPass : ScriptableRenderPass {
    private ScriptableRenderer _assignedRenderer;

    // 用于接收Renderer实例
    public void AssignRenderer(ScriptableRenderer renderer) {
        _assignedRenderer = renderer;
    }

    public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) {
        // 处于Pass执行作用域内,可安全访问cameraColorTarget
        SetCameraColorTarget(_assignedRenderer.cameraColorTarget);

        // 此处添加你的体积光散射渲染逻辑
    }
}

替代方案:传递RenderTargetHandle

如果不想持有Renderer实例,也可以在AddRenderPasses中传递颜色目标的句柄,在Pass内转换使用:

// Renderer Feature的AddRenderPasses
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) {
    m_ScriptablePass.SetColorTarget(renderer.cameraColorTargetHandle);
    renderer.EnqueuePass(m_ScriptablePass);
}

// 自定义Pass类
public class VolumetricLightScatteringPass : ScriptableRenderPass {
    private RenderTargetHandle _colorTargetHandle;

    public void SetColorTarget(RenderTargetHandle targetHandle) {
        _colorTargetHandle = targetHandle;
    }

    public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) {
        RenderTargetIdentifier colorTarget = _colorTargetHandle.Identifier();
        SetCameraColorTarget(colorTarget);

        // 渲染逻辑...
    }
}

内容的提问来源于stack exchange,提问作者niklaswort

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:37:17