编辑:我不知道为什么有人提出这个问题,这显然是一个常见问题,但在 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 是完全不同的结构。我找不到通用管道的任何替代方案。
对于任何建议,我将不胜感激。谢谢。