关于 PICO 串流测试中报错 IndexOutOfRangeException: renderPassIndex 的两个排障方法

本文来自群内反馈较为集中的一种故障

使用 PDC(PICO Developer Center)进行串流测试,是测试 PICO 项目的一种快捷手段。但是用过几次的开发者都知道,PICO 目前的方案依然不太稳定,时常会遇到各种意想不到的问题。其中一种高频报错会导致串流测试无法正常进行:测试时,Console 窗口会连续输出 IndexOutOfRangeException:renderPassIndex 报错,其堆栈指向 UnityEngine.XR.XRDisplaySubsystem:GetRenderPass,其症状如下图所示:

此时不妨试试以下两种解决方法:

方法一:测试之前确保不选中任何游戏对象(尤其是 Camera)

以下是易报错情况------测试前选中了某个游戏对象,尤其是包含了 Camera 的游戏对象。

以下是不易报错情况:测试前点击 Hierarchy 窗口空白处,确保没有选中任何游戏对象,然后再进行串流测试,此时报错大概率会消失并能正常进行串流测试。

如果执行以上操作后仍然报错,可尝试第二种方法。

方法二:确保 Scene 窗口和 Game 窗口不同时出现

如果窗口布局如下图所示,Scene 和 Game 窗口同时呈现在 Unity 编辑器中,也可能引发此类报错。

此时可尝试调整界面布局,确保 Scene 和 Game 窗口不同时呈现在编辑器中,如下图所示,将 Scene 和Game 窗口叠放,或者选择一种不会同时出现以上两个窗口的 Layout,比如 Default 布局。

调整以后再进行串流测试,报错随即消失,从而能够正常测试。

并不仅限于 PICO 和 XR

从报错堆栈可以看出,异常发生在 Unity XR 显示子系统获取 Render Pass 的环节。目前更合理的推测是:当 Unity 的多个渲染视图或预览状态同时活跃时------比如 Scene 与 Game 窗口并存、选中了带预览的对象,又叠加了 PDC 串流的渲染流程------就可能触发 Unity 编辑器或 XR 显示子系统的状态同步问题,从而导致请求的 renderPassIndex 与当前可用的 Render Pass 数量不一致。

两种方法的作用,本质上都是减少了同时活跃的渲染视图或预览状态,从而降低触发该同步问题的概率,但目前尚不能确认这就是 Unity 或 PDC 内部的确切实现机制。

另外,这一报错并非 XR 项目专属。在非 XR 项目中,如果 Console 也报出同样的错误但堆栈指向渲染管线,同样值得按上面两种方法进行排查。尤其是方法二,这一思路并非个例。杨栋老师在其著作《创造高清3D虚拟世界》中也有类似建议:烘焙光照贴图时可将 Scene 和 Game 窗口隐藏(如以 Tab 方式叠放),以减少同时渲染带来的开销(P281)。不同的是,杨老师是为了降低烘焙时的性能开销,本文是为了减少报错几率,场景不同,但"避免两个渲染窗口同时呈现"的做法是相通的。

需要说明的是,本文提到的方法并不是解决此类问题的唯一解法,只是尝试解决的手段之一。

最后,使用 PDC 进行 PICO 串流测试时,如果遭遇其它问题,可以参考官方文档中的《PDC问题排查指南》一节。本文涉及的问题和解决方案,目前尚未收录其中。

更多 PICO 开发的系统知识,均集中在以下视频课程中。

相关推荐
寂寞的船1 天前
【Unity知识速递】第8期 IL2CPP 托管堆内存碎片与原生堆交互机制深度解析
unity·游戏引擎·交互
寂寞的船2 天前
【Unity知识速递】第5期 Unity 6.2 深度解析:AI Assistant 登场,World Space UI 与 Sentis 全面升级
人工智能·ui·unity
寂寞的船2 天前
【Unity知识速递】第4期 MCP for Unity:用 AI 自然语言控制编辑器
人工智能·unity·编辑器
淡海水2 天前
09-04-内存-Unity原生对象生命周期
unity·c#·游戏引擎·gc
寂寞的船2 天前
【Unity知识速递】第6期 URP性能优化完全指南:从内存到GPU的三维调优
unity·性能优化·编辑器
寂寞的船2 天前
【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜
unity·c#·游戏引擎·bug
视+老张3 天前
戴上AR眼镜后,古建导览怎样把看建筑、听故事和继续走连成一条线?
ar·ar眼镜·增强现实·智慧景区·easyar
tealcwu4 天前
【Unity基础】为什么游戏需要物理按键映射?从 Unity Input Manager 到跨引擎输入设计
java·游戏·unity
tealcwu5 天前
【Unity高级】Unity URP:构建同时支持 2D 与 3D 场景的项目完全指南
3d·unity·游戏引擎
淡海水5 天前
10-01-互操作-C#与C++边界的内存管理
unity·c#·游戏引擎·.netcore·gc