在 Oculus和 Gear VR上开发跨平台的 VR应用
本文章由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应用的更多相关文章
- 走进VR游戏开发的世界
http://geek.csdn.net/news/detail/76504 我们组在2014年下半年尝试开发了一款Xbox One平台的体感游戏,2015年上半年进行收尾工作的同时,结合之前积累的体 ...
- VR应用开发遍地走的日子还有多远
从上世纪60年代美国计算机科学家Ivan Sutherland发明的第一款真正意义上的虚拟现实头盔,到Facebook以20亿美元收购"虚拟现实之眼"Oculus Rift,大批厂 ...
- H5程序员如何利用cordova开发跨平台应用
什么是Cordova? Cordova以前也叫PhoneGap,它提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头.麦克风等.Cordova还 ...
- 【转】配置 VS 2015 开发跨平台手机应用
为了使用 VS 2015 开发跨平台手机应用,VS 2015 装了很多次,遇到了很多坑,才终于弄明白怎样配置才能正常使用C#开发手机应用,现把步骤分享给大家,以免大家少走弯路. 运行环境: Windo ...
- Sublime用户如何快速高效开发跨平台App
2015年9月15日,APICloud举办了一周年开源分享会,发布开源插件支持Sublime用户开发跨平台App,APICloud 开源技术负责人周兴海分享了Sublime关于插件方面相关的内容. S ...
- 配置 VS 2015 开发跨平台手机应用
为了使用 VS 2015 开发跨平台手机应用,VS 2015 装了很多次,遇到了很多坑,才终于弄明白怎样配置才能正常使用C#开发手机应用,现把步骤分享给大家,以免大家少走弯路. 运行环境: Windo ...
- uni-app — 一套前端开发跨平台应用的终极解决方案
uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS.Android.H5.小程序等多个平台. 今天有空就来介绍一下uni-app这个能够跨平台开发, ...
- 基于Vue.js的uni-app前端框架结合.net core开发跨平台project
一.由来 最近由于业务需要要开发一套公益的APP项目,因此结合所给出的需求最终采用uni-app这种跨平台前端框架以及.netcore快速搭建我们的项目,并且能做到一套代码跨多个平台. 当然在前期技术 ...
- 带你从零学ReactNative开发跨平台App开发(二)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
随机推荐
- Create schema error (unknown database schema '')
Andrey Devyatka 4 years ago Permalink Raw Message Hi,Please tell me, can I use the static library in ...
- vue 基础知识 随笔
window.localStorage.gettItem("someItem"||[])//如果localStorage中的someItem不存在就返回一个空数组 window.l ...
- 20. Extjs学习笔记——Ext.data.JsonStore使用说明
Ext.data.JsonStore继承于Ext.data.Store,使得从远程JSON数据创建stores更为方便的简单辅助类.JsonStore合成了Ext.data.HttpProxy与Ext ...
- vue学习笔记(1)
1.检测变化 <ul> <li v-for="item in list">{{item}}</li> </ul> <scrip ...
- [Swift通天遁地]一、超级工具-(12)使用Toaster制作简短提示语的吐司窗口
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- extjs grid禁止表格头部使用鼠标拖拽改变宽度
extjs6 经典版 表格头部使用鼠标拖动 禁止改变列的宽度 只需要给grid 设置属性enableColumnResize:false就可以啦 xtype:'grid', enableColumnR ...
- Elasticsearch--搜索
目录 基本知识 查询结果返回设置:版本值.得分限制.定制返回字段 搜索类型 搜索执行偏好 基本查询 过滤器类型 高亮 控制高亮的片段 验证查询 数据排序 查询重写 基本知识 查询结果返回设置:版本值. ...
- 关于Python多线程condition变量的应用
''' 所谓条件变量,即这种机制是在满足了特定的条件后,线程才可以访问相关的数据. 它使用Condition类来完成,由于它也可以像锁机制那样用,所以它也有acquire方法和release方法,而且 ...
- 防止按钮button重复提交,点击后失效,10秒后恢复
<script type="text/javascript"> $(function () {//页面完全加载完后执行 /*防止重复提交 10秒后恢复*/ var is ...
- 如何在Win8.1和Win2012上运用PowerShell快速生成、安装、导出自签名证书 (Self-Signed Certificate)
自签名证书用途很广,测试,开发,本地或者云端网站(比如Microsoft Azure Web Site)都会使用到.本文会介绍一种在Win8.1和Win2012 R2上使用PowerShell快速生成 ...