在 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开发 ...
随机推荐
- 33. Extjs中的tree节点的操作
转自:https://blog.csdn.net/masterShaw/article/details/51354351?utm_source=blogkpcl9 ext 树节点操作 tree ...
- 23. Ext xtype : "combo" 下拉选择框
转自:https://blog.csdn.net/majishushu/article/details/52601161
- 解决Error for wireless request "Set Mode" (8B06) 问题 (转载)
转自:http://blog.csdn.net/muge0913/article/details/17062871 在运行以下命令的时候,意外的出错,最后google了下,最终才确定了原因,因为在运行 ...
- tfs
安装Team Foundation Server 2012过程截图 专题图 1,下载Team Foundation Server 2012 官方下载: http://www.microsoft.co ...
- 源码阅读之ArrayList(JDK8)
ArrayList概述 ArrayList是一个的可变数组的实现,实现了所有可选列表操作,并允许包括 null 在内的所有元素.每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组 ...
- jmeter生成时间的函数
在一个接口测试中,需要提交的请求中要带时间,在看完jmeter帮忙文档,正好总结一下 1.需求 在一个http请求中请求数据要带有时间,如下: 2.实现 突然想到jmeter自带的函数助手好像是可以实 ...
- 367 Valid Perfect Square 有效的完全平方数
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False.注意:不要使用任何内置的库函数,如 sqrt.示例 1:输入: 16输出: True示例 ...
- MongoDB学习笔记~复杂条件拼接和正则的使用
在大叔lind框架里有日志组件logger,而在日志实现方式上有file,mongodb,sql,json等方式,对分布式日志处理上大叔推荐使用mongodb进行存储,除了它的高效写入,灵活的结构外, ...
- 专题十一:实现一个基于FTP协议的程序——文件上传下载器
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
- [ Nowcoder Contest 167 #D ] 重蹈覆辙
\(\\\) \(Description\) 用\(1\times 2\)的矩形和面积为\(3\)的\(L\)形去覆盖一个\(2\times N\) 的矩形,求方案数对\(10^4+7\)取模后的结果 ...