GearVR開発で

ボクが躓いた10の場所

桜花一門

MobileVRJam お疲れ様でした

そして日本人ファイナリスト出ず、残念でした

自分はこんな作品で応募してました

”Gliding Princess” → 滑空王女

1.登録方法が全部英語で解らない

この後、各種のWEB情報、JAM用の提出書類が英語で大変だった

→英語のできる知り合いにお世話になりました

→今後OculusHomeに出すときにも「英語でいかにダウンロードさせたくなる紹介文を書けるか」というのが重要になると思います

2.S6を買う

GearVRを使うにはS6を契約しないといけない。毎月5千円以上キャリア台がかかる

 →これはいやだ

S6をキャリア契約せずに買う

すでに買った人に、SIM抜いた状態でGearVRが動くか確認してもらう

→大丈夫

→中古で日本版S6を買えばキャリア契約無しで動く!

3.DK2からGearVRへ移植 (UNITY)

”MobileSDKをOculus”社HPから入手

・DK2用のPlugin、OVRフォルダをエクスプロラーで削除。MobileSDKをインストール

→OVR Cameraがプレハブなら、勝手に入れ替わる

プロジェクト設定をコピー →思わぬ罠

MobileSDKの中にあるProjectSettingフォルダを自分のプロジェクトの同名フォルダーに上書きする

・これでGearVRの最適な設定になる

・ただTAGなどの設定が吹っ飛ぶので注意が必要。あまりプロジェクト後半ではしないほうがいい

4.普通にやっかいな各種の設定

”AndroidSDK”を入手しインストール。

・途中でJavaSDKをインストールへ誘導される

・”システム環境変数のパス”で、JavaSDKのインストール先フォルダのbinフォルダをパスに入れる

S6とPCを接続する設定

”Samsung Android USB Driver for Windows”をインストール

Kies”をインストール

・これでS6とPCの接続ができるようになります

S6を開発機設定にする

「設定」 > 「端末情報」 > 「ビルド番号」を7回タップ

隠し機能の「開発者オプション」が出現するのでタップ>「USBデバッグ」をチェック

PCとS6をUSBケーブルで接続

”コマンドプロンプト”を起動

・「adb devices」と入力

→この時でてくるIDは後で使うのでメモ

・S6側に「デバックを許可しますか」と聞かれるので「OK」する

4.1.シグニチャーファイルの取得

https://developer.oculus.com/osig/

このWEBに先ほど「adb devices」でメモったデバイスIDを登録するとOSIGファイルがダウロードされる。

・ダウンしたファイルをUNITYプロジェクトの「Assets」>「Pulugins」>「Android」>「assets」にコピー

4.2.UNITYにSDKのフォルダを設定

UNITYエディターにAndroidSDKとJavaSDKのフォルダの場所を設定

・「Edit」>「Preferences」>「External」>「Android SDK Location」と「JDK Lcation」でそれぞれのSDKのインストールされたフォルダを設定

4.3..UNITYでAPKを作成

「Build Setting」でAndroidを選択

・Texture Compression を ETC2に

「Player Setting」 > 「Publish Setting」でKeyStoreを設定 

・Androidでアプリを公開するために必要な設定

・詳細は”KeyStore UNITY”で検索

これでやっとPCからS6にインストール

「adb install フォルダ名¥apkファイル名」と入力すると、ファイルの転送とインストールが始まります

5.テクスチャーが壊れる

一度でもスタンダートシェーダーが読み込まれると、その後VRAMが壊されたような挙動をみせる

(アンビエントGIとかも壊れているっぽい)

→プロジェクトを通してMobile系シェーダーとLegacy系シェーダーしか使わなければ解決

6.ライトマップのUVがずれる

FBX読込時に「Generate LightMap UVs」にチェックを入れていなかった

→GearVRはPCに比べて非力なので、今後焼付けデータの活用が大前提になる。この機会にライトマップ、次に説明するGI焼付など必須

7.GI設定

・焼き付けたいオブジェクトはStaticチェック

・左の設定を参考。低解像度方面にすることで、焼付け時間を短くする

・ライトのBakingを「Mixed」に

ここで実演

8.Inputの移植

タッチパネルのタップ

→Input.GetMouseButton(0)で取得可能

タッチパネルの指の位置

→Input.mousePositionで取得

自分のゲームはマウスの左クリックだけで遊べる設計だったので、なんの移植も必要無かった

9.フレームレート問題

アート・デザインの段階から低ポリゴン、低テクスチャーを心がけていたので、特に問題は無かった

ただエフェクト(竜巻)画面全体に映り込む時にだけ処理落ちをしていた

→ピクセル・フィルレートの問題

ピクセル・フィルレートって何?

半透明を描画するときドット単位で

  • 元あったドットの色を取得
  • 半透明の色を加算
  • 加算された色を書き込む

これを半透明が重なるドット全てに行われる

つまり

  • 半透明のポリゴン数が増えれば増えるほど重くなる

  • 半透明ポリゴンが描かれる面積が増えれば増えるほど重くなる

半透明物が画面全体に映らなければOK

アメリカ人の意外な解決方法

→竜巻に近づかなければ、竜巻がアップにならないじゃない

→竜巻のコリジョンを大きくしちゃいなよ

→解決

10.酔い問題

首を回すときに肩を入れて回転する人がいる

→首の位置が動く

→酔う

回転椅子推奨な理由

→首の位置が動かず回転できる

→でも回転椅子なんて無いよね

根本的な問題

そこまで首を曲げずに楽しめるコンテンツ

どうして首をそんなに曲げたいか?

→首を曲げたいユーザーの心に沿う

それでもまだ酔う

ぶつかった時の衝撃

→視界から過去の状況を予測し、衝撃を予測するが体には何も来ないので違和感が出る

ハードランディングよりもソフトランディング

→柔らかく減速すると上記の違和感を軽減

それでもそれでもまだ酔う

竜巻の上昇が酔う

→動きの予測を予めアドバタイズビデオで教える

→アイデア募集中

まとめ

  • DK2からGearVR移植は大変では無い
  • S6の設定とかSDK設定はやっかい
    • これを見てやれば安心
  • 速度を出すのはDK2よりがんばりましょう
  • 酔い対策はDK2と共通