Oculus Quest开发者分享Rift和Vive应用移植优化技巧
在Oculus Quest发售前,Oculus第三方内容主管曾表示,将PC内容移植到Oculus Quest更多的是格式化美术资源而非优化代码。
Quest第三方内容开发商Immerse曾在五周时间内实现了美术资源的再格式化,并将最初为PC开发的企业培训应用程序移植到了这款VR一体机上。他们究竟是如何做到的呢?
Immerse产品负责人Justin Parry解释说,他们自2019年年初开始一直在使用Quest开发套件,公司安排他们将为PCVR开发的DHL培训应用移植到VR一体机Quest上。Parry表示:“由于客户业务的性质,VR中的培训场景被设置在一个巨大明亮的仓库环境中。我们的任务十分简单:令这款应用能在Quest上运行,同时尽可能维持与PC版类似的体验。”
尽管Quest的房间规模(和仓库规模)Inside-Out追踪非常适合这种类型的应用,高端PC性能的缺乏也是他们面临的一个问题。开发者虽然可以通过标准的Unity设置瞬间实现部分资源的再格式化,但需要付出保真度方面的代价。Parry认为重写Unity的设置并采用其他多项技巧对于维持类似PC版的体验非常必要。
举个例子,Unity的标准着色器质量设置默认为“低”,在该设置下法线贴图是无法使用的。Parry建议开发者应该将该设置调整为“中”或“高”,以预览所有内容,然后再开始优化资源。Immerse同时注意到,简单的纹理格式改动会导致在Rift中清晰的纹理在Quest中显得模糊,但采用GPU原生格式(如RGBA 32位)通常可以解决问题,此外针对个别纹理进行额外设置调整也有助于改善清晰度。
开发者不应该简单地减少Quest模型资源的多边形数量来降低复杂性,减少模型的数量效果更好。换句话说,将一只箱子、一个桶、一块地板以及一张桌子合并成为一个模型会有显著的性能提升,因为程序不需要同时加载四个对象来获取所有数据。尽管开发者无法实现将场景中的所有物体合并到一个文件中,因为如此会阻止Quest剔除当前未被查看的对象,但创建相关物品的集群可以使情况大为改观。
Immerse同时通过Texture Atlas和UI Sprite Atlas来减少加载时间和Draw Call,他们将Sprite纹理大小设置成512像素或更低,并尽可能重用纹理以节省内存。为了最大化近处Sprite的视觉质量,Parry建议禁用近处Sprite的mip-mapping,但他强烈建议为所有其他纹理启用这一点,因为它是最接近抗锯齿的功能。对近处和远处纹理的优化可能需要单独设置,但最终视觉效果会更好。
PC版应用和Quest版应用最大的变化或许在于光照系统。Immerse指出,除了“绝对必要”的情况之外不要使用实时光照功能。开发者应该将光照预先烘焙到纹理中,这是Unity可以处理的过程。微调分辨率、填充、光照贴图的大小并调整每个对象的光照贴图的缩放,为高度可见物品设置更高优先级,为一般物品设置更低的优先级。这些举措将会带来最佳的自动处理结果,随后你可以通过Photoshop进一步处理纹理,并使它们到达你的设想效果。
从Immerse的经验中可以看出,Quest完全能够在不浪费有限的计算和内存资源的情况下提供引人入胜的VR体验。对物体、纹理、Sprite和光照进行调整能够达到与传统抛弃大型对象或缩减对象保真度的方法十分接近的优化效果。
只要经过正确的美术优化,仓库工人完全可以使用无线的Quest在一个仓库大小的空间内自由走动,不再受传统PCVR头显的线缆限制。这也正是Oculus希望通过VR一体机硬件为大家带来的一种体验。
【资讯编译自:vb】