1

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

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

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

我试图在 Unity Universal Render 管道中实现类似的结果,下面的脚本在编辑器模式下运行良好。但它总是冻结我的 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 是完全不同的结构。我找不到通用管道的任何替代方案。

对于任何建议,我将不胜感激。谢谢。

4

0 回答 0