【VR征文大赛】Unity索尼VR头显优化经验
发表于2016-11-20
一、Unity 如何支持VR
unity支持vr的方式有两种,首先是以插件的方式加入unity,由第三方硬件厂家提供相应的SDK,这种方式左右眼需要双倍的CPU/GPU渲染成本。另外就是unity原生支持vr,直接将第三方硬件的支持集成在unity中,这样可以在底层对设备进行渲染管线的优化可以尽量做到左右眼一起渲染。
二、PSVR优化经验
1、测试方面
vr测试可以实体测试,但是这样会很麻烦浪费时间体力,可以使用脚本用鼠标来模拟头盔移动
Horizontal field of view ~= 100 degrees
Game size (960x1080)
Omni camera controller
尽量多测试,早测试,对单个场景测试,如果代码量大可以打包成dll以避免长时间重编译
2、AssetBundle资源管理
建议开发阶段用Resources文件夹来动态加载资源
使用AssetGraph来管理AssetBundle打包
3、性能提升
CPU:不要同时呈现过多的GameObject
GPU Skinning来替代CPU Skinning
不要更新看不到的物体
简单动画可以用PlayableAPI来播放,而不需要创建一个只
有一个状态的Animator Controller
Fillrate / overdraw:可以通过 Material.renderQueue,控制物体的渲染次序
4、灯光和阴影
Lights:减少光源 (eg: <=2)
减小光源半径大小
动态灯光效果尽量只用在比如爆炸效果等地方
Shadows:使用Lightmap做烘焙
最好不要有动态阴影
可以在使用老式的阴影效果 (=decals贴花方式, vertex shader)
或者使用自定义的阴影 (可以参考AssetStore里面的BlackSmith角色资源)
5、VR里应用粒子效果
适合使用小规模粒子效果,大型粒子效果会看上去很假。
解决方法:使用DrawMesh或者Compute Shaders
6、改变场景或者物体的大小
不要缩放整个场景 (因为Unity是1个Unit对应1米,包括物理系统,NavMesh,GI等)
缩放摄像机的父物体,会增加两眼之间的距离,如果真要放要当心,因为可能会增加不适感