在 Oculus和 Gear VR上开发跨平台的 VR应用
来源:互联网 发布:mac 思维导图 免费 编辑:程序博客网 时间:2024/05/15 14:56
本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接:http://blog.csdn.net/cartzhang/article/details/51433994
作者:cartzhang
说明:本文同步发于蛮牛论坛。http://www.manew.com/thread-89068-1-1.html?_dsign=09548ffa
**
我花了两个月时间开发了一款针对PC(Oculus头盔)和移动端(三星GearVR)的虚拟现实应用。使
用unity5版本,OculusPC(0.5.0.1-beta)和移动端(0.5.1)的SDK。下面是一些经验总结,以飨来者!
OculusPC和移动端SDK可以一起使用
在Unity中,可同时使用这两个SDK。移动端SDK在OVR>Moonlight 下(有趣的是:对GearVR工程来说Moonlight项目是内置的代码名)他们分享了很多资源,包括OVRCamera预制体。
比如说,若在场景中使用了OVRCameraRig,在PC或移动端都适用,不需要额外的工作来做。就是这么神奇。
设置单独的Unity工程文件夹
Unity存储特定平台的数据,像压缩的纹理在/Library中。Unity的纹理压缩是一个慢的,单线程处理。大纹理比如光照贴图需要花很长时间来压缩,且可能会导致Untiy挂机。
更糟糕的是,unity5并不为每个平台单独存放数据。当在构建设置中转换平台时,Unity为新平台重写平台相关数据。每次从PC切换到安卓构建,Unity都必须重新压缩每张纹理。这是一个超级低效的工作流程。
解决方案很简单:为每个目标平台创建单独的工程文件夹,/MyVRApp-PC和/MyVRApp-android,但是两个文件夹可以共享资源。你的/Assets 和/ProjectSettings同样针对每个平台。把它们放在同一个文件夹内,在 /MyVRApp-PC/中使用软链接共享接入到安卓文件夹。这样就不需要拷贝资源,但是两个项目都可以共享资源。假设在你的Mac上有这个文件夹叫做/MyVRApp-PC ,步骤如下:
mkdir MyVRApp-Android cd MyVRApp-Android ln -s ../MyVRApp-PC/AssetsAssets ln -s ../MyVRApp-PC
在Windows上,指令类似:
mklink /j Assets..\MyVRApp-PC\Assets mklink /j PlatformSettings..\MyVRApp-PC\Asset
现在,两个文件夹唯一不同之处就是Unity用来储存平台相关信息的Libray文件夹里。为测试不同平台,只需切换工程,而不是切换构建设置。
高画质光照
不像PC平台,实时光照-尤其是动态阴影-对GearVR来说太耗费性能了。一定要用光照烘培。若 遵照OculusMobileSDK接入说明,将OculusPlayersettings文件夹拷贝到Unity项目中,就带有了Oculus针对安卓系统的缺省画质设置。缺省的是没有阴影的。在目标为安卓平台时,要烘培光照,效果很差的。切换到PC平台来烘培光照,在烘培之前,确保画质设置;应该打开硬阴影和软阴影,且设置阴影质量到非常高分辨率(VeryHighResolution)。
当在PC和GearVR上建议都使用前向渲染,若你临时切换到延迟光照时会得到较好的结果。场景中的每个光照都作为逐像素点光照渲染,而在前向渲染的大多数光照是顶点渲染。逐像素光照是一种高要求,会产生基于像素效果像法线贴图和阴影。
然而,这是个计算密集型的过程,且应该避免实时使用(甚至是PC上)。在烘培过程中使用延迟光照,并且在搞定后切换回安卓项目。当切换回来后,Unity将重新压缩新的烘培贴图;这会消耗一些时间。
快速测试构建
我发现在测试构建中几个痛点。在PC上,在编辑器模式下很难测试一个VR应用。在Unity5.0.1f1中,没有办法测试Direct-to-Rift 模式。必须编译打包,然后外部测试。这是一个低效的地方。
你可以在编辑器中使用单屏或分别调试相机,但是这非常不便且容易误导。一个解决方案就是使用头盔的扩展模式,然后移动游戏窗口到那块扩展屏幕上。需要注意到是:在Unity5.1发布版本中将会得到缓解(当前在Unity Pro的beta版本中测试),直接将Oculus Rift集成到编辑器中。
另外, SteamVRUnityplugin插件可以让你直接在编辑器中测试头盔,多亏了Valve的分层合成的方法。相关推荐阅读一下JoshMcCormick博客中的合成器细节分析。
对GearVR,我安装了ADB来部署无线构建。对无线构建的说明可以在MattRatcliffe’sexcellentblogpostonGearVRdevelopment找到。然而,大的项目最后还是使用USB来部署。甚至大小100M的APK包只需要几分钟就可以通过WiFI来更新到设备上了。
GearVR上的分析
在PC上的性能优化很简洁明了——只需监测构建设置中的“autoconnect profiler”。而GearVR接管了手机USB口,且在运行应用时不能直接物理连接到设备上。
而是要设置和无线链接ADB。虽然上传大量构建到设备上显得不明智,但是这对分析非常有用。一旦ADB无线链接成功,Unity的分析器就可以连接到你手机的应用了。
接下来….性能优化
简单回顾梳理了一下,在Unity5上针对OC头盔和GearVR来跨平台开发的一些小技巧。接下来,你可以读下以往关于图形性能优化的博客。
作者:DARSHAN SHANKAR
原文链接:https://dshankar.svbtle.com/developing-crossplatform-vr-apps-for-oculus-rift-and-gearvr
若有问题,请随时联系!!
非常感谢!!!
- 在 Oculus和 Gear VR上开发跨平台的 VR应用
- Oculus Mobile 端Gear VR 开发
- 神了!React VR使得Oculus Home在Gear VR上运行更快更省电
- Gear VR在Unity下的开发与调试
- Oculus更新App 修复Gear VR应用安装卡死问题
- 虚幻4引擎Gear VR开发入门(上)
- 三星Gear VR与Oculus Rift DK2全方位比拼
- Oculus VR开发问题汇总
- VR系列——Oculus Publishing文档:二、发布过程:Oculus商店和Oculus试验平台
- 探索使用 Unity 开发 Gear VR App 遇到的坑
- 新款Gear VR和Galaxy Note 7一同登场,你需要知道的都在这里
- [VR] 应用开发入门基本知识(Oculus/GearVR/Cardboard)
- Unity开发Gear VR app走过的弯路VR开发心得
- 【VR开发】htc vive 和 oculus 初体验
- 《VR入门系列教程十四》---配置Oculus的开发环境
- VR系列——Oculus Publishing文档:八、发布过程和要求:Oculus Share平台
- 如何在VR平台上成功塑造您的品牌?
- Unity下Gear VR界面的实现
- Javascript 严格模式详解
- 小米兰亭字体_下载
- UI控件笔记(七):UI之五种传值方式 代理\单例\缓存\通知\正向
- Push时间过短引起程序Crash
- 数据库表分割技术浅析(水平分割/垂直分割/库表散列)
- 在 Oculus和 Gear VR上开发跨平台的 VR应用
- Android下拉刷新上拉加载控件,对所有View通用!
- 计算机视觉(Computer Vision)基本概念
- [Android] 带有输入框(EditText)的提示框(AlertDialog)
- 各种开源UI
- 系统之间通讯方式—SOAP(web service)
- 基于GIS变电站综自系统的可视化远程智能巡检系统的实现
- linux网络编程之socket(五):tcp流协议产生的粘包问题和解决方案
- Android ndk下载和环境配置