研发实践:为《Supernatural》添加MR模式的方法、挑战和经验
为《Supernatural》添加混合现实模式时的方法、挑战和经验
(映维网Nweon 2024年08月09日)《Supernatural》是Quest Store最成功的VR应用之一,以至于Meta一度开出4+亿美元的价格收购Within。除了正常的纯VR模式之外,这款健身体验同时提供了MR透视功能。
日前,团队的工程总监戴夫·考林(Dave Cowling)分享了他们是如何在为《Supernatural》添加混合现实模式时的方法、挑战和经验:
《Supernatural》最近推出了混合现实模式,并获得社区令人难以置信的积极反应。我们非常高兴能够拥抱硬件和软件堆栈的这一方面,一系列的用户都对周围环境的额外感知表示赞赏。
尽管玩家对MR模式反响积极,但这个应用的核心是沉浸在自然环境中的感觉。所以,保持这种沉浸感并提供MR的态势感知是一项有趣的技术挑战。我们是这样做的:
以传送门为中心
大多数《Supernatural》训练包括在一个完整的360度场景中锻炼。随着时间的推移,不同的传送门将动态打开,以指示目标的活跃“通道”。原型显示,通过允许我们的虚拟世界只出现在活跃通道周围,这可以提供一个非常好的平衡,虚拟世界沉浸感直接在焦点之内,而现实世界的情境意识在焦点之外。
alpha icosphere
underlay层允许我们通过framebuffer alpha控制透视可见性。这完美适合我们的用例,因为它提供了对过渡区域的逐像素控制,允许我们显示虚拟环境、透视或两者的混合。
为了实现这个功能,我们将渲染分为三个层,通过Unity渲染队列进行分割:
-
使用透视动态掩码的环境和相关对象
-
alpha icosphere
-
总是虚拟渲染的对象(手套和目标等)
第一层:环境和传送门按正常方式呈现。
第二层:alpha icosphere仅渲染到alpha通道。这是一个高度镶嵌的~10k顶点球体,覆盖framebuffer并写入alpha蒙版,在传送门可见的地方masking in像素,并在透视feed将出现的地方masking out像素。设计团队通过纹理曲线控制蒙版的衰减。
// Blend operation for the icosphere // Fragment shader returns (0, 0, 0, mask_amount) // Note the premultiplied alpha for the framebuffer color Blend One SrcAlpha, One Zero
第三层:我们渲染我们总是想要可见的虚拟对象。因为它们都是在icosphere之后渲染,所以可以编写一个适当的framebuffer alpha来覆盖icosphere已经设置的内容。
左图:图层1渲染后。中图:第2层icosphere渲染后(在线框中覆盖了icosphere的顶点密度)。右图:第3层对象渲染后。注意:透视masking区域已人为增加,并在这里显示为绿色。
充满挑战
尽管概念而言非常简单,但这种方法产生了特定的一阶和二阶挑战。
在《Supernatural》中浏览广泛的内容目录默认使用带有“大而远”元素的UI范例。这个UI在MR中的体验不佳,因为它会导致与现实世界中可以更接近的表面不协调。为了确保在MR中浏览内容的感觉尽可能舒适,我们实现了UI缩放,将虚拟元素移动到离camera更近的地方,从而降低出现在“墙内”的风险。
出于同样的原因,我们在热身和放松环节拉近了教练的距离。我们已经以2K播放立体教练视频,但教练距离的减少导致了一定的轻微像素化。为了保持质量,我们调到了3K,这使得教练在近距离时看起来更清晰。对HEVC embedded alpha的支持允许我们能够以两倍的效率使用视频帧区域,并且允许我们在没有视觉质量下降的情况下回到2K。
在Meta Quest 3运行MR限制了应用程序可用的CPU和GPU时钟速度。将最大可用GPU速度降低近20%要求我们认真考虑如何最好地确保我们保持帧速率,特别是考虑到MR从icosphere添加的额外渲染负载。
最终,我们选择在MR模式下将帧率从90fps降至80fps。对于我们的测试对象来说,这种帧率的下降几乎无法察觉,并且认为是额外GPU空间的合适权衡。我们希望,随着不断的优化,这种MR引起的极限可能会在未来降低。
另外,尽管透视的光子到光子延迟令人印象深刻,但它依然比控制器位置延迟大得多。当控制器快速移动时,这会导致虚拟世界和透视世界之间的边界明显不匹配。当然,与慢速运动的应用程序相比,快速运动的健身应用程序尤其会感受到这种延迟挑战。
我们投入了一定的时间来调整边界,尝试将过渡区域尽可能地推到运动范围之外,同时保持有用的外围通道。尽管我们对解决方案的结果感到满意,但问题依然存在。
对于特定应用,一个可能的延迟问题缓解方法是允许控制器编写本地化的alpha blob。一个合理大小的blob会动态地mask in控制器周围的虚拟世界中,并隐藏差异。
请注意,在报告的控制器位置(虚拟手套)和透视之间存在实质性的不匹配,这是由透视中的光子对光子延迟引起。
Quest 2
同时,我们的团队非常关心在可行情况下保持硬件生态系统的功能均等,所以在Meta Quest 2支持MR对我们来说很重要。遗憾的是,用于在《Supernatural》环境之间隐藏特定处理的短暂淡出周期在MR中不可能实现,这导致在GPU运行复杂的光照卷积内核时,Quest 2出现了明显的更新停滞。
我们的解决方案是重新构建这种计算,将处理摊销到可配置的帧数。在20帧的情况下,我们每帧只占用内核处理的5%。由此产生的GPU负载减少允许非常平滑的过渡,包括Quest 2。
重要的alpha
带有alpha punch-through的underlay意味着你必须仔细考虑在半透明第三层对象中使用framebuffer alpha。通常,这意味着扩展混合操作,为alpha通道指定一个单独的组合,以允许icosphere写入的alpha持久存在。我们最终不得不修改数个着色器来完成这个任务,而在某些情况下,我们不得不编写一个Unity标准着色器集的替代品,以提供我们需要的特定于alpha的控制。
// Standard additive blend that doesn’t separate alpha // and will break layer 3 object Blend SrcAlpha One // Standard additive blend for color, separately allow // icosphere-alpha to persist Blend SrcAlpha One, Zero One
总结和感谢
我非常感谢《Supernatural》团队的每个人,是他们实现了这个功能。