デモ用に、キビキビ動いて、Cardboard的に正しい感じのTHETA写真ブラウザがほしい (Cardboard SDK編)

THETAのデモはインパクトある感じ

OcufesFinal, 上モノ, よこはま大さん橋フェスタと、THETAを使ったデモしてみたけど、結構ウケがよい感じ。
わかりやすいからかな。
ただ、見せるのに、いいAndroidアプリがない。
デモ用に、キビキビ動いて、Cardboard的に正しい感じのTHETAファイルブラウザがほしい。
THETAアプリでリモート撮影して、それをその場で見せられるくらいのがほしい。
THETAアプリでは、Cardboardモードの表示がおかしい。タオバイザーでうまく見れない。
タオ360は、表示はちゃんと見られるのだけど、どうにも動きがデモ向きじゃない。ファイルの選択は見にくいし、ロードにえらく時間かかるし、Back大きすぎて手渡す間だけでも反応しちゃう。

ないなら作るしか!

Unityで作ると楽かな?
とりあえず、プロジェクト作って、Androidにして、Cardboard SDK 0.6ののAndroidにいるとこだけ読み込む。
CardboardMainプレハブを追加して、MainCameraを削除する。
貼り込み用に、アセットにTHETAで撮影したjpegデータと、伊藤@warapuriさんの配布しているSherer100.fbxを取り込む。
Sherer100を階層に入れて、センターに配置。
スケールがデフォルト1ではかなり小さいのので、10,10,-10に変更する。
ShaderがデフォルトではStandardなので、Unlit/Textureに変更。
貼るテクスチャデータに、THETAの撮影データを指定する。
これで基本的な準備はOK。アプリとしてビルドしてみる。
Bundle Identifyを設定し、API Levelを19にする。
端末を接続して、Buld and Runする。
あれ?なんか超変な感じになった。
横固定入れてなかった。
Landscape Leftを設定。
再度ビルド。
うまくいった。
でも、これTHETAアプリの時みたいな見え方だな... orz
ダメじゃん。
イマイチだけど、まだ素なので調整とチューニングしてみるか。

サイズがおかしい気がするんだけど

Scaleの値が10ではダメかも。
100, 100, -100に変更。
ちょっと見え方が変わった。
スケール10倍になっても、あんまり変わらないのが拍子抜け。

Directional Lightを無効に

ライトなくても関係ないみたい。
サイズ削減に、削除してもいいかも。

タッチでも回転をコントロールできるように

すでに作られている人がいるので、これを使わせてもらう。
ライセンスが不明だな。コメント出しておこう。
CameraOrbit2.cs
http://qiita.com/SatoruNoda/items/f16ef506e09b6af30078
Sphere100へに追加。
あれ?
動かない...
Cardboard SDKの機能と何かぶつかっているのかな?
そっか、Cardboardv2で、タッチがボタン相当になったのでオーバーライドされているのかも。
CardboardMainのCardboard SettingsにあるTap is Triggerのチェックを外す。
動くのだけど、回転してしまうな。
軸の固定が左右だけになるといいのに。
スクリプトからyPivotの処理をコメントアウト
横向いている時に水平回転になればいいので、これでOKかな。
上下向いている時には、ぐるぐる回ってしまうけど。
上下方向は端末傾ければいいので、その場で動けなくてもできるから。

中線、設定ボタン、左上隅の矢印を消す

CardboardMainのUI Layer SettingsのAlignment Marker, Settings Buttonのチェックを外す、Back ButtonはOffを選ぶ。
棒と歯車マークと矢印が消えた。

パフォーマンス・チューニング

N5Xでジャダってるなぁ。
なんだこれ。
チューニングの余地はあるのかな?

開発者オプションで性能を引き出す。

端末の開発者オプションでGPU関係のアクセラレーションをのきなみONにしてみたが、なーんにも変わらず…

Occlusion Cullingが悪い?

http://docs.unity3d.com/Manual/OcclusionCulling.html
でも、球のオブジェクト1つだから効果あるんだろうか?
効果ないのに計算しているというとこが問題か?
MainCameraに設定されているのでチェックをオフにする。
Left/Rightのカメラのどちらにも設定されているので、これもオフにする。

Sherer100の調整

Sherer100にアタッチされたAnimatorいらない?

動画処理しないからオフでもいいんじゃない?
オフにして実行しても影響ない感じ。

Sherer100にアタッチされたMesh Renderのオプション

Cash shadowがOnだけど、オフでもよさげ。
Receive Shadowチェックついてるけど、外す。
Use Light Probesチェックついてるけど、外す。
Refrection ProbesがBlend Probesになっているけど、Offにする。
いずれも、オフにして実行しても影響ない感じ。


ビルドしてみた。
さっきよりマシな感じもするけど、実際のとこは変わらないのかも。

Distortion Correctionをオフにするといいかもという意見があった。

いわゆる樽型歪み作ってること。
Cardboard.SDK.nativeDistortionCorrection = false
CardboardスクリプトのGeneral SettingsにDistortionCorrectionがある。デフォはUnity。
他の選択は、NativeとNone。
Noneにしてみる。樽型歪みなくなった。
Nativeでは樽型はある。
Noneにすると、少し軽くなったが、まだ十分な速度になっている感じはない。
画像がキャッシュされるまでに、回転するとなんか波打ったような画像の変化があって、とても気持ち悪い。
しばらくすると消える。

ドローコールバッチング

Sherer100は動かないオブジェクトなので、スタティックバッチングしてやると描画命令が一回になって高速化するらしい。
Sherer100のInspectorのStaticチェックボックスをチェックする。
WebPlayerでは動作に差は出ない感じ。

Per-Layer Cull Disanceでカメラのレイヤ毎にカリング距離を手動で設定

オブジェクト1個しかないので、間引きの意味が無いので無駄だな。

貼り付け画像のシェーダーを変更

Unlit/Textureを選択しているが、Mobile系とか、Cardboard系とかも考慮の余地があるのかも。
Cardboard/UnlitTextureとMobile/Unlit(Supports Lightmap)が使えそう。
WebPlayerでは動作に差は出ない感じ。
Cardboard/UnlitTextureが気持ち早いような気もする。

fpsを表示させてみる

お手軽に有りもので、このスクリプトを使う。
murapong/unity-fpscounter: FPS counter for Unity
https://github.com/murapong/unity-fpscounter
ヲレヲレライセンスだ...
使うの、評価時だけって感じになりそうね。


Main Cameraにアタッチする。
フォントの指定や表示位置を決める。
61fpsという感じになった。
Distortion CorrectionをUnityに設定しても61fosだ。
変わらんじゃん... orz
Nativeにしても61fpsくらいの感じ。
出し方間違ってる?


ひょっとして、N5Xだと、61fps以上は出ないとかそういう制限あるのかな?
N5で試してみたら60fpsで張り付き。
GPU的なところではないようだ。
液晶のリフレッシュレートの上限に達しているのかも。
うむ、これ以上は、この方法では無理っぽい。


一応テクスチャコンプレッションをETC2にしてみたら、N5で僅かに61になることがあった感じ。
大勢に影響ないか。

思ったスピードにはならなかった

オリジナルのshaderが悪いとか、AndroidVRDevice.csでdebugDisableNativeDistortionCorrection = trueになってるのダメとか、いくつか出てくるけど、なんかどれも決定打じゃない。


やり方を変えるか。


デモ用に、キビキビ動いて、Cardboard的に正しい感じのTHETA写真ブラウザがほしい (Dive SDK編)
http://d.hatena.ne.jp/kinneko/20160304/p2