谷歌Daydream VR平台应用需求:如何设计VR应用

谷歌的Daydream平台已经推出了几个月了,上周谷歌宣布正式向开发者敞开大门,接受普通开发者的应用上架申请。作为平台方,谷歌也已经在官方页面上推出了对于Daydream平台应用申请在设计、功能、表现以及分发上的需求。IN2近期将官方的四大方面的需求编译为中文,有兴趣的开发者同学可以参考一下。同时,即便不是程序猿,看一下Daydream的要求,也能得到相当多关于VR应用的信息,获益匪浅。

今天将发布第一篇,包含了谷歌对Daydream平台应用在设计和功能方面的需求。对于英文技术细节存疑的同学,请点击谷歌官方页面查询

设计 Design

UX-D1:用户能聚焦在物体上并阅读所需文字

物体必须设置在足够远的距离, 以便用户能够聚焦在物体上而不至于看到重影。如果物体上有文本,文字的大小必须能让用户通过Daydream-Ready手机看清。

我们建议将物体设计在0.5米之外,并且确定每个字体尺寸能够至少占据用户1.5°的FOV。

UX-D2: 应用必须保持头部追踪

应用必须保持头部追踪功能,所有虚拟物体必须相对于虚拟环境锁定,而不是相对于用户的头部锁定。针对用户头部锁定的大型物体,会让用户产生自己头上绑了一个大银幕的感觉,而不是自己身在另一环境。

UX-D3: 应用必须含有稳定的地平线

应用必须不能出现突然的画面震动,以至于地平线意外移动。用户所在的地面必须是水平的,不能倾斜。上述的两个元素出现问题将会导致用户产生失去方向和眩晕。

UX-D4: 镜头移动必须是用户主导

应用不可以控制镜头(即用户)或者突然移动。必须让用户通过点击或者其他方式来进行镜头的移动,让他们控制自己的移动。例如,用户可以选择自己“瞬间转移”的地点,或者用触摸板来移动。

这个标准并不是要求用户一直掌握镜头移动的直接控制权,而是说他们在不拥有控制权的时候,必须能够自己来做决定。例如,用户必须要先选择点击过山车的体验,这时候过山车应用即可以从用户手中获得“移动控制权”。

注意:有一些应用会出于艺术设计上的需求,想要打破这个规则。此类应用需要在经过审核后申请特殊例外,同时应用的“动作激烈程度”会被定义为“剧烈运动”。

UX-D5: 应用不能干扰系统层面上的中心矫正行为

当用户长按Daydream控制器上的Home键进行中心位置矫正的时候,系统会重新定义中心位置,即控制器和头显面向的位置会被定义为“前方”。

应用不可以进行任何行为来干扰这一过程或者对光标位置进行补偿,当中心重定位后,以下必须为真:

1. 光标必须在用户正前方,没有任何补偿或者偏移。如果重定义中心后,光标渲染的位置不在前方,代表你没有将光标的位置搞清楚。

2. 重新定义中心后,用户的头显面向的方向就是用户的“前方”。以游戏为例,如果用户在驾驶舱,他的前方就是机头的方向。而如果应用是360°环境无所谓前后,那么用户在重新定义中心后,需要看到重新定义中心前能够看到的画面,应用需要对此进行补偿。需要注意的是,应用对此作出的补偿必须遵守上述所有设计规则(例如光标必须在用户的正前方)。

UX-D6: 重定义中心行为需要对应应用体验

如果应用像Youtube一样,有一个用户必须时时面对的中心UI,在重新定义中心后,应用的世界和UI应该在用户头显和控制器正前方。这个行为在SDK中是默认的,开发者只要将中心元素与Z轴排列在一线即可,上述的重新定向行为会自动完成。

如果应用没有明确哪个方向是“前方”(例如谷歌街景),用户在重新定义中心后,需要保持其启动定向行为之前的方向。

UX-D7: 应用的“前方”应该与平台的通用前方一致

当用户长按Home键进行重新定义中心位置后,控制器和Home的UI应该与Daydream平台的前方一致。

开发者可以自行测试,长按Home键重定向后,单击Home键回到Daydream平台主页,应该能够看到平台的主UI正在眼前;如果主UI在旁边或者身后,说明应用的“前方”未与平台的方向保持一致。

UX-D8: 应用使用颈部模型

应用应该使用SDK默认的颈部模型,如果开发者使用的是Unity或者Unreal来进行开发,引擎采用的是默认颈部模型。

颈部模型也因应用不同而改变,例如在观看360视频的时候,就需要禁止颈部模型;也有可能你想要重写或者修改已经默认的颈部模型,例如你想要渲染一个化身形象。

UX-D9: 应用不能意外进入2D模式

在VR模式下,应用不可以展示任何2D图像。这其中包括通过请求对话框、初始画面、硬件音量控制和其他软件的对话框等等。例子如图。

虽然Daydream应用能够为用户提供独立的,自给自足的体验,但是也有少数情况,需要将用户从VR环境过渡到2D环境,然后再回到VR环境。

这样的情况非常少见,其中一个就是提示用户需要通过一个高危申请。非常不幸,现在的高危申请提醒,只能通过2D的对话框形式进行确认。我们只能在下一版系统中修正这个功能。另一个情况是第三方软件寻求联网。

当遇到这些情况,需要进行VR-2D-VR的过渡时:

1. 提示用户移除头显中的手机

2. 检查方向改变过渡到2D画面

3. 为用户设置一个按钮,能够重新回到VR中

我们推荐开发者将用户回到摘下头显前所在的VR环境和进度中,以便让这些过渡更加不易察觉。

注意:如果用户在2D环境中,没有点击回到VR的按钮,就把手机放回了头显中。一旦手机接触到NFC触点,系统将会默认到Daydream平台的起始页面,而不是此前的APP页面。

UX-C1: 点击UI目标时控制器可实现激光笔功能

当用户在VR中与传统UI进行交互时,控制器可作为激光笔使用,例如菜单、暂定等2D环境中存在的功能。这个标准在VR游戏中可不遵守,例如视线控制。

注意:我们不会反对开发者在应用中加入第三方控制器,例如手柄。但是所有应用必须能够完全由控制器来进行操控。

当与UI元素进行交互时,特定的控制器行为需要保持一致:

1. 使用手臂模型

手臂模型的设计目标是产生指向并让控制器接近元素的说明页面。

2. 将激光束向下调15°

这点对保持系统和应用一致十分重要,同时让用户在应用之间切换时保持肌肉记忆。

3. 在环境中渲染控制器(推荐)

并非强制,但是我们推荐开发者在VR环境中渲染出控制器的3D图像,理由如下:

· 通过将真实物体带入VR,增强沉浸感

· 让用户看清控制器上的按钮

· 提醒用户控制器上那些按钮可用

· 产生控制器按钮反馈

· 更好的利用平台一致性

4. 展示激光束(推荐)

始终展示控制器的激光束,好处如下:

· 相比于一个光标,激光束更好追踪

· 展示控制器如何控制激光束最好的方式

· 实时反馈

· 在完成其它交互模式后(例如驾驶/飞行),激光束能够清晰表明交互模式的改变

UX-C2: 应用使用用手习惯参考

Daydream平台对于用户左右手用手习惯,有系统层面的参考。在应用中使用手部模型时,需要遵守这些参考。另外,不可在应用中出现对于手部模型的设定和修改;如果出现,只可在应用内容内。

UX-C3: 出现大量元素时下拉只能由触摸板完成

当有大量元素出现并且可以向下拉的时候,只能通过触摸板的“下扫”行为实现。

UX-C4:光标和被选中目标处于相同深度

如果Daydream控制器的光标在画面中出现,必须与光标指向的物体处于同一深度。如果不这么做,则光标或者目标会呈现重影状态,取决于用户聚焦在哪个元素上。

UX-C5: 应用不得干扰系统层级的控制

应用不得干扰Home键和音量键的系统功能。

注意:我们不反对开发者引入第三方交互硬件,但是应用必须能由控制器来完成全部行为。当用户在开启应用时,Daydream控制器要求能够和VR Home页面进行交互,这样我们才能了解用户是有控制器的。

功能性上的问题 Functionality

FN-S1: 使用有支持的谷歌VR SDK

必须使用有支持版本的谷歌VR SDK来开发你的应用,目前的版本时1.10.0或者更新。

FN-S2: 应用使用Daydream API调用活动间过渡

对于Daydream应用来说,活动之间的过渡需要使用特殊的方法来处理,以保持头部追踪的连贯。简单来说,VR活动避免出现直接引出后续动作,反之,需要通过DaydreamApi的SDK方式来发起过渡动作。

例如,返回到Daydream Home的调用

daydreamApi.launchVrHomescreen();

启动另一个应用的调用

daydreamApi.launchInVr(componentName);

或者使用其它方式来形成和发送Intents

这些方法能够在活动之间保持头部追踪,提供平滑的过渡,所以应该在任何活动过渡中都使用。如果你想在2D UI中启动一个VR活动,也需要使用这种方式。

FN-M1: 应用的manifest不包含NFC申请

NFC只是用于Daydream平台对手机和头显进行配对,不能被应用使用。

FN-M2: 应用的manifest包含正确的VR活动设定

VR互动包括

· 阻止安卓系统默认的窗口管理器过渡动画

· 隐藏所有系统UI,包括导航栏、按钮以及键盘

· 运行Landscape方向,禁止方向改变

· 禁止多窗口支持

谷歌的VR SDK中含有以下主题,能够禁止窗口管理器的过渡动画、导航栏和标题栏

android:theme=”@style/VrActivityTheme”

另外,想要直接仅仅从Daydream Home开启活动或者另一应用,需要含有以下属性来启用快速过渡

android:enableVrMode=”@string/gvr_vr_mode_component”

下面是一个符合标准的VR应用的manifest

<application>

    <activity android:name=”<Your Activity Name Here>”

          android:screenOrientation=”landscape”

           android:configChanges=”orientation|keyboardHidden|screenSize”

           android:enableVrMode=”@string/gvr_vr_mode_component”

           android:resizeableActivity=”false”

           android:theme=”@style/VrActivityTheme”>

     </activity>

</application>

App manifest sets an intent type of ACTION_MAIN with category CATEGORY_DAYDREAM,例如:

<activity

    … >

    …

    <intent-filter>

        <action android:name=”android.intent.action.MAIN” />

        <category android:name=”com.google.intent.category.DAYDREAM”/>

    </intent-filter>

</activity>

对于那些不应该出现在VR Home中的活动(例如这是一个内部活动而非开启的目标),使用“android.intent.action.VIEW”这段代码来替换。

FN-M3: 应用manifest根据平台支持设定硬件功能

Daydream应用使用以下安卓功能

· android:glEsVersion=”0x00020000″
· android.hardware.sensor.gyroscope
· android.hardware.sensor.accelerometer
· android.hardware.vr.high_performance
· android.software.vr.mode

一个完整的Daydream应用必须含有这些功能,如果某些应用由纸盒眼镜Cardboard模式或者可选VR模式,可不含有某些功能。

注意:Unity和Unreal引擎都默认了上述功能。

功能需求

下面的表格说明了“android:required”属性下的合适值:

例子

只支持Daydream的应用

<uses-feature android:glEsVersion=”0x00020000″ android:required=”true” />

<uses-feature android:name=”android.hardware.sensor.accelerometer” android:required=”true” />

<uses-feature android:name=”android.hardware.sensor.gyroscope” android:required=”true” />

<uses-feature android:name=”android.hardware.vr.high_performance” android:required=”true” />

<uses-feature android:name=”android.software.vr.mode” android:required=”true” />

支持Daydream和Cardboard的应用

<uses-feature android:glEsVersion=”0x00020000″ android:required=”true” />

<uses-feature android:name=”android.hardware.sensor.accelerometer” android:required=”true” />

<uses-feature android:name=”android.hardware.sensor.gyroscope” android:required=”true” />

<uses-feature android:name=”android.hardware.vr.high_performance” android:required=”false” />

<uses-feature android:name=”android.software.vr.mode” android:required=”false” />

应用的VR模式可选

<uses-feature android:glEsVersion=”0x00020000″ android:required=”false” />

<uses-feature android:name=”android.hardware.sensor.accelerometer” android:required=”false” />

<uses-feature android:name=”android.hardware.sensor.gyroscope” android:required=”false” />

<uses-feature android:name=”android.hardware.vr.high_performance” android:required=”false” />

<uses-feature android:name=”android.software.vr.mode” android:required=”false” />

FN-U1: 在VR中应用隐藏状态栏和导航栏

应用在VR环境下不可以展示安卓系统的各种栏。

· 想知道如何抑制系统的状态栏,请点击官方网页:隐藏安卓4.1以上系统的状态栏(需翻墙)

· 想知道如何抑制系统的导航栏,请点击官方网页:隐藏导航栏(需翻墙)

FN-A1: 当用户退出VR模式时应用暂停

用户按下Home键或者在任何时间点取下手机都将使得应用暂停,包括正在播放的音频。用户和应用的情况都应被妥善处理。

并非强制,但是我们强烈建议开发者在用户离开前台或者返回导航的情况下保存用户状态和信息。这样,当用户重新回到前台的时候,可以看到状态改变前的游戏进度、视频或者菜单。例子如下:

· 当用户从“最近使用应用”中重新点开应用时,能够回到上次的状态中;

· 当用户从锁屏状态开启手机后,能够回到应用上次打开的状态;

· 当应用在Home或者“所有应用”中再次二次打开时,用户能够回到近似于上次的状态。

FN-A2: 应用在VR中正确关闭

当用户将手机从头显中取出时,点击左上方的关闭按钮,或者系统返回键都应该能退出应用。关闭按钮在应用中必须可见。如果是一个混合型的应用,关闭按钮应该将用户返回到2D应用画面。

相关阅读

向谷歌微软看齐 Oculus平台接入国际分级系统

帝国的“白日梦”:谷歌Daydream View头显研发故事(上)

[消息来源为Google IN2原创资讯转载请注明来源及链接]

 

Add a Comment