Oculus Quest最佳开发实践:如何避免图形管道瓶颈

2019-06-11 11:20:00 映维网 分享

查看引用和消息源请点击:映维网

最佳开发实践和Quest商店方针

映维网 2019年05月04日)克里斯·普鲁厄特(Chris Pruett)是Oculus内容生态系统的负责人。他曾在今年三月举行的GDC大会发表了名为“Down the Rabbit Hole with Oculus Quest”的主题演讲,从开发商的角度简单概述了Oculus Quest。

延伸阅读:Oculus Quest软硬件设计细节:CPU、GPU、固定注视点、不对称扭曲

现在,普鲁厄特正通过两篇博文回顾介绍当时的演讲。昨天的博文与硬件/软件方面有关,而今天普鲁厄特则分享了与最佳开发实践和Quest商店方针的讯息。下面是映维网的具体整理:

1. 最佳开发实践

确定Quest的图形架构与PC视频卡的区别非常重要。Quest的大多数性能优化都是关于合理地格式化美术asset,而非编写更快的代码。所以,明确如何避免图形管道中的瓶颈十分关键。

在CPU方面,绘制调用是计算开销的常见来源。绘制调用这个命令主要用于绘制带有状态包的网格:网格,着色器,通常包含一定的纹理,以及任何需要绘制的其他数据。CPU的图形驱动程序必须为GPU的每次调用做好准备,而这种准备需要时间。最基本的优化之一是,减少绘制场景所需的绘制调用总数。

绘制调用值得我们深入探讨。绘制调用的关键一点是,它们在成本方面可能存在非常大差异。一些绘制调用的成本很低,另一些则很高。实际的计算开销来源并非绘制调用本身,而是绘制调用之间的状态更改。如果你反复使用相同的纹理和相同的着色器来绘制相同的对象,你会发现第一次调用的成本会很高,但所有后续调用的成本则很低,这是因为驱动程序缓存并重用了绘制网格所需的状态(着色器和纹理)。只有第一个调用会调用大量数据,后续调用只是重用已经准备好的数据。所以,优化的重点不是减少场景中绘制调用的总数,而是考虑每帧所需的状态更改总数。

假如场景中有10个对象,每个对象都有不同的纹理,则每个对象都需要包含单独数据集的单独绘制调用。不同的网格,不同的纹理,不同的着色器参数,甚至可能是不同的着色器。但如果将所有这些对象组合成单个纹理(“纹理图集”),并将对象的UV映射调整为指向单个纹理,则绘制调用的开销会降低,因为纹理只需要绑定一次就可绘制所有10个对象。如果你可以进一步使用相同的着色器和着色器参数,则可以显著降低场景的成本。例如对于Unity开发者来说,你可以使用相同的材质,为所有对象使用相同的着色器和相同的纹理。如果你可以它们标记为“批处理静态”,则甚至可以对所有对象使用相同的网格。下图概述了不同类型的绘制调用状态更改的相对成本(柱形越高,表示执行绘制调用所花费的时间越高):

我们从开发者的举措中看到了一些常见的,能够有效减少绘制调用和状态改动开销的方法,例如使用烘培照明,以及对环境网络使用智能静态批量处理等等。下面是《Dead and Buried》中的一个示例场景。开发者是从美术asset方面着手优化,并在Quest实现了优秀的运行效果:

至于GPU,Adreno 540的Binning架构的主要优势包括,4X MSAA的成本是每帧1.25 ms和1.54 ms之间,具体取决于片段着色器的复杂程度。为了最大限度地提高GPU的性能,你需要明白系统在处理全屏效果之前需要解析整个场景,所以这样做的成本非常昂贵。其他类型的相关渲染亦是如此,如实时镜像和反射。最后,在片段着色器中丢弃片段(如通过discard()或clip())会致使GPU重新渲染整个图块,所以你应该在所有着色器中避免使用。

由于Quest游戏渲染的分辨率非常高,所以即便是没有复杂片段着色器的场景,片段都有可能成为约束限制。最常见的“罪魁祸首”是彼此重叠的大型透明对象,并且最终在同一帧中多次触及相同的像素。例如,如果四边形具有显著重叠,同时导致大量像素被多次混合,这时在整个眼睛缓冲区中绘制大型透明四边形的粒子效果的成本可能要比预期昂贵。固定注视点渲染同样可以帮助降低帧的整体片段成本。

需要注意的是,增强眼睛纹理分辨率的成本同样非常昂贵,但这可以产生非常优秀的结果。如果你发现GPU不是瓶颈所在,请尝试增加眼睛纹理分辨率。

Quest游戏可以很大,但包含它们的数据需要以一种特别的方式进行组织。我们大发pk10的可APK文件为小于1GB,理想是小于100mb,同时可包括一个或多个扩展文件。扩展文件最大可以为4GB,并且可以是任何格式。对于Unity,你可以将所有场景放到Chunk-Compressed Asset Bundle。这可以帮助你轻松生成扩展文件,但同时会提高加载时间。Quest app可以是32位或64位,但我们大发pk1064位,这是为了减少内存碎片化,提升性能,减少加载时间,并且支持加载更大的扩展文件。

尽管Oculus Quest尚未发货,但我们已经看到VR一体机领域出现了全新的游戏设计模式。例如,Quest可以提升基于头部的导航,因为玩家可以自由地360度转动,无需担心线缆缠绕。尽管我们仍然大发pk10诸如瞬转等解决方案(考虑到玩家有可能是坐在旋转椅上,并且难以轻松转动),但在一个环境中打转时,单纯依靠基于头部的导航感觉效果非常出色。

声明:本站部分资源来源于网络,版权归原作者或者来源机构所有,如作者或来源机构不同意本站转载采用,请通知我们,我们将第一时间删除内容。本站刊载文章出于传递更多信息之目的,所刊文章观点仅代表作者本人观点,并不意味着本站赞同作者观点或证实其描述,其原创性及对文章内容的真实性、完整性、及时性本站亦不作任何保证或承诺,请读者仅作参考。
编辑: