Googleが規定する品質要件から見るDaydreamプラットフォームの特徴

この記事は、AbemaTV Advent Calendar 2017 の4日目の記事です。
https://adventar.org/calendars/2216

今回は、現在AbemaTVでDaydreamアプリの開発をしている中地が担当します。

Daydreamプラットフォームには、Daydream App Quality Requirementsというソフトウェア品質要件が定められています。この記事では、品質要件から見えるプラットフォームの特徴を簡単に紹介したいと思います。

また、後半にはDaydreamの規定する品質要件の意訳を掲載します。Daydaream開発の際に役立てていただければと思います。

Daydream App Quality Requirements  |  Google VR  |  Google Developers
https://developers.google.com/vr/distribute/daydream/app-quality


# Daydreamとは

DaydreamとはGoogleが開発するAndroidのためのVRプラットフォームです。
Google I/O 2016にて発表され、OSレベルでサポートされる高品質なモバイルVRであることが謳われています。

Googleによってハードウェアの仕様が規定されており、それを満たす端末だけがDaydream-readyとして認定されます。

Daydream - Daydream 対応スマートフォン
https://vr.google.com/daydream/smartphonevr/phones/

また、専用ヘッドセットとしてDaydream Viewも販売されており(コントローラーも同梱)、Daydream ViewにDaydream-readyの端末をセットすることで快適なVR体験をすることができます。

Daydream対応端末についてはこちらの記事も参考にしてください。

Daydream対応端末 スペックまとめ - Qiita
https://qiita.com/splas_boomerang/items/e9d326f3bd0462eba897


# Daydreamプラットフォームの特徴

Daydreamプラットフォームの最大特徴は、プラットフォームの規定に即した品質が**強く**求められていることです。

VRアプリにはコンテンツ開発のためのベストプラクティスが数多く存在しますが、Daydreamの場合はこれらを要件として規定しているところがポイントになります。

DaydreamにはDaydream opt-in programというものがあり、この規定を満たすかどうかの審査を通過したアプリのみがGoogle Play上でDaydreamアプリとして配布することができます(通常のストアで配布自体は可能です)。Google Playはこの仕組みによってDaydreamユーザーに品質が担保されたアプリのみを提供できるということになります。

また、求められている品質は大きく二つに分けられると考えていて、一つはVRアプリとしての品質です。これは、快適でVR酔いしないことアプリであることを担保します。例えば、文字を読みやすい大きさにするための関する規定(UX-D1)や、視点の制御に関する規定(UX-D3,UX-D4,UX-D8)、パフォーマンスと安定性に関する規定(PS-)などが該当します。

もう一つが特徴的なのですが、それはプラットフォームの一貫性を保つための品質です。これは、主にインタラクティブな要素に関する規定で、噛み砕いていえば「ユーザーがどのアプリでも一貫してDaydreamらしい振る舞いを期待できる」ことを保証するためのものです。システムの挙動を妨げない規定(UX-D5,UX-C5)は他のプラットフォームでもよく見られますが、コントローラーの使い方に関する規定(UX-C1, UX-C3)などは非常に強い制約であると思います。

# まとめ

スマートフォンで体験できるモバイル向けのVRは、特徴であるその手軽と引き換えに、コンテンツの品質があまり高いとはいえない状況がありました。中には品質の低いコンテンツを体験してVRを見限ってしまうユーザーもいて、VR開発者にとって大きな課題になっていました。

それに対して、Daydreamプラットフォームはユーザーに高品質な体験を届けることを目指しています。高い基準によって開発は大変になりますが、ユーザーに一段上の体験を届けることができる可能性は大いに秘めていると感じています。1人の開発者として、是非普及して欲しいと願っています。

読んでいただきありがとうございました。

---

# Daydream App Quality Requirementsの意訳

(※分かりにくい箇所については補足を付け加えています)

Daydreamは、ユーザーに高品質でインタラクティブなVR体験を提供することを目指しています。VR用のアプリケーションを設計することは、他のプラットフォームとは大きく異なります。特に、アプリケーションやパフォーマンスの問題があまり設計されていないと、一部のユーザーが気分が悪くなる可能性があるからです。

これらのページは、デイドリームアプリの品質を評価するのに役立ちます。これは、高品質で快適なVR体験のためにデイドリームユーザーの期待に応えるのに役立ちます。

## Design requirements (設計要件)

### App Design

- UX-D1：ユーザーはオブジェクトに焦点を合わせることができ、必要なテキストを読むことができること
    - 推奨：0.5m以上離れた場所にオブジェクトを配置すること
    - 推奨：すべてのフォントサイズがユーザーの視野の1.5度以上になること
- UX-D22：ヘッドトラッキングを維持するアプリであること
- UX-D3：安定した地平線があること
- UX-D4：カメラの移動はユーザーきっかけであること
    - 常にユーザーが制御しなければならないのではない
    - 一部アプリはアーティスティックな理由によりこれを守らなくて良い場合があるが、その場合は特別な例外を探す必要があり、また移動の強度が“Intense Motion.”に設定される
- UX-D5： アプリがシステムの再センタリングを妨げないこと
    - コントローラのホームボタンを長押しするプロセスに干渉しないこと
    - 再センタリング後のカーソルはユーザーの正面にあること
- UX-D6：アプリは適切に再センタリングされること
    - Youtubeのような中心的なUIがある場合は、再センタリング後にユーザーの正面に表示されること
    - ストリートビューのような正面の概念がない場合は、再センタリング前後でユーザーの向きを維持すること
- UX-D7：アプリの前方向はプラットフォームの前方向と一致すること
    - アプリの前方向を見ながらホームボタンをシングルクリックした場合、正面にDaydreamのランチャーメニューが表示されること
- UX-D8：アプリはneck modelを使用すること
    - ※ neck modelとは両目の中心でなく首を中心とした自然な頭の回転をシミュレートするもの
        - https://developers.google.com/vr/android/reference/com/google/vr/sdk/base/GvrView.html#setNeckModelEnabled(boolean)
- UX-D9：アプリが突然2D画面に移行しないこと
    - VR画面ではアクセス許可ダイアログやスプラッシュ、音量調整スライダーなどの2D画面を表示しないこと
    - 2D画面を表示させる必要がある場合、以下を行わなければならない
        - ユーザーにスマートフォンを取り外させる
        - 2D画面に移行したことを検知する
        - VR画面に戻すボタンを表示させる

### Controller

- UX-C1：コントローラーは、UIターゲットをクリックするときにレーザーポインターとして使用できること
    - オプションとしてゲームパッドをサポートすることは問題ないが、その場合でもコントローラーのサポートは必須である
    - その際に以下のような動作をすること
        - arm modelを使用すること(※画像参照)
            - arm modelは一般的なポインティング動作を再現したものである
        - レーザー光線の角度と15度下げること
            - OSとアプリ間の一貫性を保ち、腕の筋肉の記憶を維持するため
        - (推奨) コントローラーの3Dモデルを描画すること
        - (推奨)　レーザー光線を描画すること
- UX-C2：アプリは手の設定を使用すること
    - Daydreamのユーザが右利きであるか左利きであるかのシステムレベルの設定を尊重すること
    - 独自のカスタムをしないこと
- UX-C3：大量のアイテムのスクロールはタッチパネルのスワイプ動作で行えること
- UX-C4：シーン上のカーソルはオブジェクトと同じ深度に表示すること
    - 異なる深度に表示しなければユーザーは焦点を合わせることができないため
- UX-C5：アプリがシステム制御に干渉しないこと
    - コントローラーのホームボタンと音量ボタンの機能を妨げてはならない

![ux-c1-elbow-model.png](https://qiita-image-store.s3.amazonaws.com/0/55365/1b6ccb37-9e29-8492-498a-fbf9fab6ed83.png)
https://developers.google.com/vr/images/publishing/ux-c1-elbow-model.png

## Functionality requirements (機能要件)

### SDK

- FN-S1：サポートされているバージョンのGoogle VR SDKを使用すること
- FN-S2：Daydream API呼び出しを使用してアクティビティ間を遷移すること

### Manifest

- FN-M1：NFCアクセス許可を要求しないこと
- FN-M2：正しいVRアクティビティスタイルを設定すること
- FN-M3：サポートされているプラットフォームに従ってハードウェア機能を設定すること

### UI

- FN-U1：VR内でステータスバーとナビゲーションバーを非表示にすること

### App state

- FN-A1：ユーザーがVRを終了すると、アプリは一時停止すること
- FN-A2：アプリはVRから正しく閉じること

## Performance and stability requirements (パフォーマンスと安定性の要件)

### Stability

- PS-S1：アプリはクラッシュすることなくインストールされ、実行されること

### Performance
- PS-P1：アプリの読み込みに3秒以上かかる場合は、すぐにアプリが読み込まれ、ユーザーにVRでフィードバックが提供されること
- PS-P2：アプリケーションは高性能を維持されること
- PS-P3：アプリケーションは30分間の使用中に熱警告が表示されないこと

### Visual quality

- PS-V1：予期しないレンダリングの歪みが発生しないこと

## Publishing requirements (公開要件)

### Publishing

- PB-P1：すべての既存のGoogle Playコンテンツポリシーに準拠していること
- PB-P2：VRアイコンが設定されていること
- PB-P3：360°ステレオ写真球が設定されていること
- PB-P4：コンテンツが説明と一致すること
- PB-P5：13歳以上のユーザー向けに設定されていること
- PB-P6：正しいモーションインテンシティレベルに設定されていること
- PB-P7：名前付けポリシーに準拠していること
- PB-P8：正しいプラットフォームの用語を使用していること
- PB-P9：Daydreamロゴを使用しないこと


(翻訳元)
Daydream App Quality Requirements  |  Google VR  |  Google Developers
https://developers.google.com/vr/distribute/daydream/app-quality