为DK2应用程序迁移到Oculus CV1做好准备!
本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接:http://blog.csdn.net/cartzhang/article/details/50749637
作者:cartzhang
**
本文可作为那些有DK2没有CV1却想发布应用到CV1的开发者的移植指南。
说明:假定我们无法控制的事情比如驱动和Oculus的runtime——不会有重大变化(肯定会有)。
一、DK2 vs CV1的渲染
Dk2分辨率为1920X1080,刷新率为75帧。然而,VR应用的眼睛纹理(渲染目标)分辨率更高:2364x1461。在原始分辨率上乘以1.66倍的渲染缩放。这样做,以确保分辨率在畸变后显示1:1的纹理。
与DK2不同,CV1是2160X1200分辨率,固定刷新率为90帧,默认每秒渲染4亿像素,而DK2为每秒2.59亿像素。使用同样的1.66X 渲染缩放,估计CV1默认的渲染目标为 2830x1566像素。
从Dk2到CV1,每秒大致需要多渲染1.55倍像素。
二、使用DK2模拟CV1的渲染性能
下面有个简单方法,不用进入CV1硬件,来测试应用程序在CV1上的性能。
修改渲染比例,渲染更高的分辨率。以性能为代价来提高应用程序质量这非常不错。通过对更大渲染纹理进行超采样,会有更好的抗锯齿效果,且读取纹理变得简单。
为模拟CV1性能,在DK2上每秒渲染4亿像素。比如:一个2954x1800 渲染纹理,在75帧刷新率下大约每秒4亿像素。
在unity中,使用VRSettings.renderScale来修改渲染比例。renderScale 缺省为1.0f,是1:1纹理的像素比,创建一个2402X1464渲染纹理。若设置渲染比例为1.23f,Unity将渲染2954X1800渲染纹理。
VRSettings.renderScale = 1.23f
若在Unity中,使用1.23f的渲染比例,可到达75帧,那么在CV1上就可以达到90帧。
在OVRDisplay中测试渲染目标的分辨率。还有其它相关因素,但这个使用DK2硬件来模拟应用程序在CV1上性能。说明,此技术之测试渲染消耗。在CV1上,为保持每秒90帧,每帧绘制时间要在11.1毫秒以内。在Dk2上,测试帧率为75,绘制一帧时间为13.3毫秒,所以并不能完全反映应用程序在CV1上的性能。
三、用一行神奇代码提升应用在CV1上的性能
若当renderScale为1.23f时,帧率不能到达75fps,可以对代码和资源做诸多优化,从批处理、纹理集到遮挡剔除等等。
一个懒办法,使用降低渲染目标分辨率的方法来提高性能。虽然高分辨率可以提升视觉效果,但是伴随的是性能消耗。可以降低渲染比例为90fps,而不用每秒渲染4亿个像素。
若在DK2上可达到75fps,且没有时间做任何优化处理,可以通过在Unity中设置renderScale大约为0.66,就可以实现在CV1上达到90fps。这只是估计,但是总体原则是适用的:若达不到90fps,且不愿借助时间扭曲,可以降低渲染目标分辨率,用降低视觉逼真度换取性能。
最後
非常感謝COCO的校正修改!!!
原文發布於蠻牛論壇
地址:http://www.manew.com/thread-47547-1-1.html?_dsign=d0825f73
若有问题,请隨時聯繫!!!
非常感謝!!!
**