在 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开发 ...
随机推荐
- Java中的经典算法之冒泡排序
原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...
- Java源码——String
最近在研究java的源代码,但是由于自己英语水平有限,所以想使用中文注释的方式把源码里的方法全部重写 一遍,下面是楼主整理出来的一小部分.我把整体的项目托管到GitHub上了,欢迎大家前去交流学习. ...
- 【css】回想下经典的布局
看到这张图相信大多数人都很熟悉,这曾经是一种经典的布局方式,一道经典的面试题,一般形如"实现一个布局,左右固定宽度,中间自适应".随着岁月的流转,时光的交替(颇有一种“天下风云出我 ...
- 题解报告:hdu 1015 Safecracker
Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Kl ...
- CentOS6.5磁盘分区和挂载操作记录
CentOS6.5磁盘分区和挂载操作记录. [root@CentOS ~]# fdisk -l Disk /dev/sda: bytes heads, sectors/track, cylinders ...
- Docker学习系列(二):Docker三十分钟快速入门(上)
一.背景 最近,Docker技术真是一片火热,它的出现也弥补了虚拟机资源消耗过高的问题,直接让虚拟化技术有了质的飞跃.那么本文我们来聊一聊Docker,和大家一起认识Docker,简单入门Dock ...
- Lind.DDD.DynamicModules动态模块化的设计
回到目录 在Lind.DDD框架里有Module,主要用于全局自动添加的模块,它类似于ABP系统里的Module,但有时过于自动化了可能使系统太死板,而有时将需要的模块手动载入可能对我们更合适,所以大 ...
- SQL server存储过程及触发器基础
存储过程:就像函数一样的会保存在数据库中-->可编程性 --> 存储过程-----------------------------------------------------创建存储过 ...
- IntelliJ IDEA jrebel 实现热部署
前提是能够访问登陆Facebook,有Facebook的账号(我注册了一个) 点击:https://my.jrebel.com 用Facebook登陆 之后按要求填写信息 然后获取激活码 打开 id ...
- opencv 检测图片中圆形物体(解决乱线问题)
2018-03-0418:03:12 整体代码如下: def detect_circle_demo (image): # 降噪处理 dst = cv.pyrMeanShiftFiltering(ima ...