使用Google VR SDK为Daydream和Cardboard构建应用程序。本指南将向您介绍如何设置适用于Google VR开发的Android Studio,并使用Treasure Hunt示例应用程序。
设置你的开发环境
硬件要求:
-
Daydream:你需要一个Daydream电话 和一个Daydream视图。
-
纸板:您将需要运行Android 4.4“Kit Kat”(API级别19)或更高版本的Android设备以及Cardboard查看器。
软件要求:
-
Android Studio 版本2.3.3或更高版本。
-
Android SDK 7.1.1“牛轧糖”(API等级25)或更高。
在Android Studio中,转到 首选项 > 外观和行为 > 系统设置 > Android SDK以查看或更新已安装的SDK。 -
适用于Android的Google VR SDK 1.80.0或更高版本。
在Android Studio中打开Google VR SDK项目
-
将下载的Google VR SDK解压缩到方便的位置。
-
打开Android Studio并选择打开一个现有的Android Studio项目。
选择您提取Google VR SDK的目录。 -
在“ 项目”窗口中,查看gvr-android-sdk > samples中的示例gradle模块 :
样品 描述 SDK-treasurehunt VR示例应用程序,您可以在其中查找和收集对象。 SDK-controllerclient 显示如何接收和处理Daydream控制器输入的示例。 SDK-simplepanowidget 小工具从磁盘加载全景图像。 SDK-simplevideowidget 小部件呈现360度视频。 SDK-录像机 使用Asynchronous Reprojection Video Surface API进行视频播放的示例活动。
请参阅 Google VR NDK指南中的使用视频视口了解更多详细信息。
准备您的设备
-
启用开发者选项
-
启用USB调试
构建并运行示例应用程序
-
使用USB电缆将手机连接到本机。
-
在Android Studio中,选择“运行” > “运行...”,然后选择 samples-sdk-treasurehunt目标。Android Studio编译并在您的手机上运行应用程序。
-
把你的手机放入你的查看器并使用应用程序。
- 环顾四周的大立方体。
- Daydream:将控制器指向立方体,然后按下触摸板按钮收集。
纸板:看立方体,按下纸板按钮收集。 - 按下按钮后,多维数据集将移动到新的位置。
寻宝应用程序显示了Google VR SDK的以下核心功能:
特征 | 描述 |
---|---|
立体渲染 | 应用视图呈现立体效果,以创建3D效果。 |
空间音频 | 声音来自VR世界的不同领域,增加了现实感。 |
头部运动跟踪 | 用户可以移动头部来环顾VR世界。视图更新以响应头部移动。 |
用户输入 | 用户可以使用Daydream控制器或Cardboard按钮与应用程序进行交互。 |
在自己的项目中使用Google VR
要在您自己的项目中使用Google VR SDK或NDK,请设置Google VR依存关系。如果您 在应用程序中使用ProGuard,请添加规则以确保不会混淆任何SDK或NDK代码。
设置Google VR依赖关系
-
配置您的项目级别build.gradle文件:
- 确保声明了默认的
jcenter()
存储库位置。 -
声明Android Gradle插件依赖项:
Google VR SDK项目:使用gradle:2.3.3
或更高。
Google VR NDK项目:使用gradle-experimental:0.9.3
或更高。allprojects {
repositories {
jcenter()
}
}
dependencies {
// The Google VR SDK requires version 2.3.3 or higher.
classpath 'com.android.tools.build:gradle:2.3.3'
// The Google VR NDK requires experimental version 0.9.3 or higher.
// classpath 'com.android.tools.build:gradle-experimental:0.9.3'
}
- 确保声明了默认的
-
在您的模块级build.gradle 文件中添加Google VR SDK库依赖项。您可以在gvr-android-sdk > 库中看到可用的库及其版本 。
作为一个例子,请查看gvr-android-sdk > samples > sdk-treasurehunt > build.gradle中dependencies
为Treasure Hunt应用程序声明的内容。dependencies {
// Adds Google VR spatial audio support
compile 'com.google.vr:sdk-audio:1.80.0'
// Required for all Google VR apps
compile 'com.google.vr:sdk-base:1.80.0'
}有关更多信息,请参阅 Android Studio指南中的添加构建依赖关系。
配置ProGuard
如果您正在使用ProGuard来最小化您应用的APK文件,请确保ProGuard不会混淆任何Google VR SDK或NDK代码。这使得在发行版本中更容易调试堆栈跟踪。
将Google VR ProGuard proguard-gvr.txt 规则添加到您的模块级build.gradle文件中:
android {
...
buildTypes {
release {
minifyEnabled true
proguardFiles.add(file('../../proguard-gvr.txt'))
}
}
}
下一步
要详细了解Google VR SDK,请参阅以下资源。
- 寻宝示例代码演练
- Google VR SDK视频和全景图像示例应用程序演练
- 了解Daydream元素中的 Google VR设计和开发原则。
- Android的空间音频教程
- Google VR API参考
- Daydream:了解如何在您的应用中实施Daydream控制器用户互动:
- 在gvr-android-sdk > libraries > sdk-controller中查看控制器库。
- 另请参阅控制器库API参考。
----------------Android的Daydream元素
白日梦元素
- 目录
- 运动
- 对象交互
- 渲染和照明
- 菜单和虚拟控制
创造身临其境的交互式VR体验带来了一系列新的生理,人体工程学和技术挑战。你如何在VR中舒适地移动?如何从移动硬件中获得最高性能?
Daydream Elements是Unity技术演示的集合,展示了开发高质量VR体验的原则和最佳实践。每个演示中的核心机制都可以轻松配置,并且可以重用于您自己的应用程序。
元素目前涵盖以下VR原则:
- 运动
- 对象交互
- 渲染和照明
- 菜单和虚拟控制
元素在Play商店中以Android应用程序的形式提供。
从PLAY商店安装
运动
制作VR应用程序时,让玩家在虚拟环境中移动是非常重要的。为使导航的VR环境的技术被称为运动。有多种不同的方法来实现有效的运动,每个方法都有自己的权衡。
-
传送是运用第一人称视角的应用程序的移动技术,允许用户几乎即时移动到目标位置。这种技术减少了虚拟相机移动时许多用户感觉到的模拟器疾病。
-
隧道是一种与第一人称运动(例如步行)一起使用的技术,在运动过程中,摄像机被裁剪,并且在用户的周边视野中显示高对比度稳定的网格。这类似于在电视机上观看第一人称运动的用户。
-
追逐相机是一种用于第三人称运动的技术,用户正在控制角色。标准的第三人称相机实现在虚拟现实中存在问题,并导致模拟器疾病。追逐相机提供可预测的动作 - 相机旋转只发生在用户指导下,小角色动作根本不移动相机。
对象交互
在VR中漫步是非常重要的,对用户来说最重要的事情是能够与周围的环境进行交互。这给了用户一种代理感,并且在许多情况下将会在你的游戏或拼图设计中起到不可或缺的作用。我们提供了两个元素来突出对象交互的最佳实践。
- 对象操作范例在使VR感到身临其境的过程中扮演着至关重要的角色。在这个演示中,我们展示了如何模拟物体上的重量,使它们感觉更轻或更重,以及如何调整铰链和滑块,以便像打开门和关闭抽屉等常见的相互作用一样感觉自然。
- 手臂模型逼近虚拟现实中的Daydream控制器的物理位置,这样我们就可以用一个3DOF控制器实现6DOF式的控制器交互。这个演示包括三个模拟摆动,投掷和射击的自定义手臂模型,以及一个可以让您更改不同模型参数的运动场,以了解它们如何影响交互体验。
渲染和照明
性能对VR应用程序至关重要,但在移动GPU上可能尤其具有挑战性。许多常用的移动着色器和每像素照明解决方案提供了高质量的结果,但由于极高的分辨率,呈现多个视图,失真和一般的移动性能问题,在移动VR系统上表现不佳。
在渲染和照明演示使用白日梦渲染,展示渲染效果,这通常是难以实现的移动硬件。这个场景演示Daydream Renderer的功能,如每像素照明,切线空间法线贴图,动态阴影,实时高光反射和反射。
菜单和虚拟控制
Daydream控制器只向开发者公开两个按钮:可点击的触摸板和应用程序按钮。对于许多开发人员来说,两个独立的控件并不能为他们想要创建的游戏和应用程序提供足够丰富的命令。一个解决方案是向用户提供应用程序命令方案的虚拟控件。
-
单击菜单为用户提供菜单调用时从光标发出的命令的圆形菜单。因为用户必须直接点击选项,所以这个菜单设计通过控制离散点击来转换更多手势方法的速度,并且使用复杂的命令层次结构进行扩展。
-
滑动菜单利用Daydream控制器触摸板,允许用户在一小组命令之间快速选择。这个菜单交易效率的准确性,并不能很好地扩展到大量的命令。
-
Constellation Menu(星座菜单)演示了一种基于手势的交互模式,可以帮助用户以简单,快速的方式浏览深层信息层次结构。示例用例包括项目清单,文件目录以及其他具有大型功能或数据集的应用程序。
性能HUD
- 目录
- 启用HUD
- 显示指标
- 应用程序呈现指标
- Google VR SDK(GVR)指标
- 应用系统度量
Daydream Performance HUD是为使用Google VR SDK 1.60及更高版本构建的所有Daydream应用程序启用的性能覆盖。它提供了对使用VR应用程序时可能遇到的性能问题的快速了解。
如果您在VR内工作时尝试监视帧速率或异步重投影问题,则此工具非常有用。叠加层呈现立体声和头部锁定状态,因此您无需离开VR即可查看这些数据。
使用这个覆盖,你可以看到:
- 应用程序帧提交率以及帧是否在GPU上被阻止
- 异步重投影统计信息
- 处理内存使用情况
- 该设备与热节流有多少度(°C)
启用HUD
- 在启动Daydream应用程序后,点击手机屏幕右上方的齿轮图标,打开VR设置。
- 点击构建版本六次,使开发人员选项项目出现。
-
选择开发人员选项 - >启用性能抬头显示。启用此选项也隐式启用启用性能监视选项。
-
您现在应该在下次运行VR应用程序时看到重叠的性能。
显示指标
应用程序呈现指标
此图显示您正在运行的VR应用程序的行为。
-
提交:每秒提交的应用帧数,理想情况下与设备硬件帧速率匹配。
-
被阻止:提交被阻止的每秒帧数,等待GPU工作以前帧完成执行。通常情况下,如果您看到在GPU上阻止提交的帧数量相同,则您的应用程序是GPU绑定的。
Google VR SDK(GVR)指标
Google VR SDK使用异步reprojection管道来显示稳定性和用户舒适度。简而言之,专用的高优先级线程异步拾取从应用程序提交的帧,并根据需要应用失真和重投影。在没有来自应用程序的任何新帧的情况下,重投影管线将利用较旧的帧,使用来自系统传感器的关于头部旋转的更新信息重新投射旧帧。
- 新的应用程序框架(NAF):显示器再投影管线每秒从应用程序中拾取新框架的次数。理想的“新应用程序框架”速率是本机显示帧速率 - 例如Daydream手机设备上的60hz,这意味着屏幕的每次物理刷新都会更新应用程序数据。
- 重复使用的应用程序框架(RAF):显示器重投影管线每秒没有从应用程序获得新帧的次数,并且不得不重新映射先前提供的帧。此处的非零值表示对光子等待时间的输入增加,并且不断变化的重复使用的应用程序框架值可能会导致动画和运动不连续。
- VSync Misses(VMISS):这个值表示显示流水线无法及时为硬件的垂直同步期限重新投影任何帧。这通常不在开发人员的具体控制范围内,但可能是系统处于一般负担过重的状态。对于某些体系结构,这可能是顶点着色器过度工作,过多I / O或使用大型顶点缓冲区的指示。
应用系统度量
-
进程内存:进程正在使用的内存。
-
Temp to Throttling(节流温度):器件进入热关断状态以防止过热之前的近似温度(以摄氏度为单位)。设备的温度由多种因素驱动,例如CPU,GPU,网络等。应用程序通常使用“持续性能模式”来确保这些资源的上限,以防止热关断。
GAPID
- 目录
- 支持的平台和API
- GAPID界面
- 下载并开始使用GAPID
GAPID是一个图形API调试器。
在开发图形应用程序时,使用GAPID诊断GPU问题。
GAPID可让您捕获,检查和调整应用程序的图形驱动程序调用痕迹。这可以帮助您:
- 识别渲染问题,例如丢失的对象或对象大小和纹理问题。
- 检查由图形API加载的资源。
- 对诸如着色器或命令之类的资源进行调整,并实时观察结果。
支持的平台和API
Android的 | 视窗 | 苹果系统 | Linux的 | |
---|---|---|---|---|
OpenGL ES跟踪 | ✔ | |||
OpenGL ES重放 | ✔ | ✔ | ✔ | |
Vulkan跟踪 | ✔ | ✔ | ✔ | |
Vulkan重播 (必须在用于跟踪的相同设备上执行) |
✔ | ✔ | ✔ |
GAPID界面
在调查问题时,GAPID界面允许您分析资源和命令。
渲染上下文和框架
选择渲染上下文以在电影条视图中查看框架。
命令
查看应用程序所做的图形API调用,按框架分组并绘制调用或用户标记。
Framebuffer
通过查看当前绑定的帧缓冲区的内容来查明渲染错误的来源。
几何
查看所选绘图调用的预先转换的网格。旋转或放大模型。更改呈现模式以调查问题或将模型导出为.obj
文件。
纹理
查看所有创建到并包括选定命令的纹理资源。
着色
器在应用程序中查看和迭代着色器。查看全部:
- 程序创建的着色器
- 链接的顶点/片段程序
- 绑定的统一值
编辑着色器,并直接在GAPID中查看结果。
报告
查看问题日志,包括不正确的API使用情况或GAPID在重放图形跟踪时遇到的问题。
国
见执行选择的命令后,立即驾驶状态。
下载并开始使用GAPID
- 从GitHub上的GAPID发布页面下载GAPID 。
- 详细了解如何使用GAPID。
- 有关克隆和构建GAPID的详细信息,请参阅GitHub上的GAPID。
VR查看示例代码
- 目录
- VR查看示例应用程序
- 代码概述
此页面是VR View示例的演练,可以在下载适用于Android的Google VR SDK /samples
时在目录中找到这些示例 。
VR查看示例应用程序
有两个演示 SDK中VR视图功能的示例应用程序:simplepanowidget和simplevideowidget。这两种样品的是显示使用嵌入式全景图像或视频单个活动的应用程序VrPanoramaView
和VrVideoView
分别。
simplepanowidget和simplevideowidget以其嵌入模式下的VR视图进行采样。
它们允许用户通过旋转手机来查看全景的不同部分。该simplevideowidget示例还允许用户暂停,并通过轻触VR查看发挥自己的视频,并使用滑块通过视频寻求。样本 在VR View 中显示全屏模式和Cardboard模式按钮,允许用户更改模式。
全屏模式类似于嵌入模式,但是是沉浸式的。
Cardboard(纸板)模式允许用户像任何其他纸板应用程序一样在Cardboard设备中查看全景图。
这两个应用程序还具有通过adb使用自定义内容打开任意全景图的附加功能。Intents的语法记录在样本各自的活动中,这些Intents可以用来快速测试各种媒体格式。
代码概述
像任何其他Android视图一样,VR视图可以包含在布局中。这是simplepanowidget的重要部分res/layout/main_layout.xml
:
在Activity中,主要方法是 VrPanoramaView.loadImageFromBitmap()
。用一个标准的Android Bitmap
对象和一个可选的 VrPanoramaView.Options
对象来调用它。后者用于配置图像的格式。Activity还实现了一个VrPanoramaEventListener
在加载操作成功或失败时接收事件。
该simplevideowidget示例使用一个非常相似的流动simplepanowidget。主要的区别是VrVideoView
使用 loadVideoFromAsset
或者 loadVideo
。
在VrPanoramaView
要求调用者加载映像并传入配置信息时,VrVideoView
接受文件并从文件的空间媒体 元数据中读入配置 。
------------------Android下载
Google VR SDK for Android
Google VR SDK for Android可让您为Cardboard或Daydream创建VR Android应用程序。
Google VR SDK组件分布在 Bintray上,使用Maven时可通过JCenter存储库获得。有关如何将Google VR SDK作为Android Studio项目的依赖项添加的详细信息,请参阅 Android 入门指南。
如果您正在使用自己的构建系统,Google VR库也可以从gvr-android-sdk
位于libraries
目录中的存储库的 GitHub上获得。
适用于Android的Google VR代码示例
Cardboard和Daydream的Android SDK代码示例samples
位于存储库的 目录中。有关如何自行构建示例的更多信息,请参阅我们的入门指南。