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

在通用渲染管线 (URP) 上从主相机实现 Unity 渲染纹理

如何解决在通用渲染管线 (URP) 上从主相机实现 Unity 渲染纹理

编辑:我不知道为什么有人提出这个问题,这显然是一个常见问题,但尚未在 Android 或 VR 设备上找到解决方案。

这是一个与 Quest 2 Unity URP 相关的问题。我正在尝试将主相机视图保存为渲染纹理“SavedRenderTexture”以供以后使用。通过 OnRenderImage() 在标准渲染管道中很容易做到。

    private void OnRenderImage(RenderTexture source,RenderTexture destination)
    {
        Graphics.Blit(source,SavedRenderTexture);
        Graphics.Blit(source,destination);
    }

我尝试在 Unity 通用渲染管道中实现类似的结果,以下脚本在编辑器模式下运行良好。但它总是冻结我的 Quest 2 VR 屏幕视图。

    private void RenderPipelineManager_beginCameraRendering(ScriptableRenderContext context,Camera camera)
    {
        //OnPreRender();
        if (SavedRenderTexture == null)
        {
            sourceDescriptor = (UnityEngine.XR.XRSettings.enabled) ? UnityEngine.XR.XRSettings.eyeTextureDesc : new RenderTextureDescriptor(Screen.width,Screen.height,RenderTextureFormat.ARGB32);
            SavedRenderTexture = new RenderTexture(sourceDescriptor);
        }

        MainCam.targetTexture = SavedRenderTexture;
    }

    private void RenderPipelineManager_endCameraRendering(ScriptableRenderContext context,Camera camera)
    {
        //OnPostRender();
        MainCam.targetTexture = null;
        Graphics.Blit(SavedRenderTexture,null as RenderTexture);
    }

我猜冻结屏幕是由于这条线,也可能是硬件、gpu 相关的问题。

        Graphics.Blit(SavedRenderTexture,null as RenderTexture);

在标准管道中,我们可以认将源输出到目标。

然而,Universal Render Pipeline 是完全不同的结构。 我找不到通用管道的任何替代方案。

如果您有任何建议,我将不胜感激。谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。