読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

Google VR SDK for Unity1.10.0 ではcardboardアプリを作る際にDaydream technical previewを使ったほうがいい

unity cardboard vr

概要

Unity5.5においてGoogle VR SDK for Unityを1.10.0にアップデートしたところ、Virtual Reality SDKsにcardboardが表示されなくなった
その解決策をまとめる

詳細

わかんなかったのでforumに投げた
結論はこれ
https://forum.unity3d.com/threads/can-i-use-cardboard-with-unity-5-5.445127/

つまりGoogle VR SDK for Unity1.10.0 ではcardboardアプリを作る際にDaydream technical previewを使ったほうがいい
理由としては、スクリプトが新しくなったらしくそれに対応しているのはDaydream technical preview版だけらしい
古いスクリプトを使うことにより対応させることはできるが、大変なのでやめたほうがいいとのこと

cardboardアプリを作るのにdaydream technical previewを使わなきゃいけないのがイマイチ腑に落ちないが、まぁ、仕方ない・・・
報告したしきっと対応してくれるはず

daydream demoの動かし方最新版

unity vr daydream

概要

daydreamの開発環境の作り方が変わっていたのでまとめる
また、googleのドキュメント通りにやってもdemoが動かないのでdemoを動かすところまでやる

2016/12/8現在の話であり、今後変わっていく可能性が大きいので注意

詳細

開発環境構築

Unity install&起動

Android SDK/NDK, JDK設定
f:id:tiro105:20161208235315p:plain

Google VR SDK import
f:id:tiro105:20161208235611p:plain

Demoアプリ作成

Get Started with Google VR in Unity  |  Google VR  |  Google Developers
が古いのでメモっておく、そのうち修正されるの期待

特に何も作らなくてもサンプルsceneが用意されている
GoogleVR/Demo/Scenes/GVRDemoにサンプルシーンがあるのでload

あとはビルド設定
File > Build > Player settings...
でこんな感じにパッケージ名とminSDKを設定
f:id:tiro105:20161209000250p:plain

次にDaydream用プロジェクトにする
Virtual Reality Supportedにチェックを入れDaydreamを選択する
f:id:tiro105:20161209000407p:plain

これでビルドが通る

PC上での動作確認

これまではGameViewが実行していないときも複眼になっていたが、現在は実行時のみ複眼になる
また、option + マウスで首の動作ができるのでデバッグも簡単

疑問点

本記事とは関係ないが、CardBoardアプリを作りたかったのでUnity 5.5とGoogle VRを組み合わせてCardboardアプリを作ろうとしたらVirtual Reality SupportedにCardboardが表示されない…
(2016/12/9追記)
Nexus5xではinstallしても二眼にならない・・・DaydreamReadyじゃないからか・・・昔はなったんだけどな

GoogleCloudPlatform料金上限設定

GoogleCloudPlatform

概要

普通にGCPを使っているとクラウド死する可能性が常につきまといストレスで死ぬ可能性がある
ので、GCPの料金上限設定方法についてまとめる

詳細

二種類の方法がある

  • 月ごとに規定の料金になったらアラートを飛ばす、アラート後の処理はユーザー次第
  • 日ごとに一定料金になったら完全に利用を止める、翌日からリセット

前者は月ごとにこれくらいの料金を超えたら気をつけよ、みたいな意味合いで使われるものだと思う
後者はとにかくいきなり料金が跳ね上がって突然死するのを防ぐために使われるものと思う

月ごとアラート

Billing Alertを設定して、クラウド死を防ごう! - Qiita
webだとこっちの情報がメイン
ただしこれだと前述の通り、メールが送られてきてそれからの判断となる
「いきなりサービスに大量のアクセスが来る➡️メールを見逃す=クラウド死」は防げない
目安とするべき

日ごと利用停止

App Engine の料金  |  App Engine Documentation  |  Google Cloud Platform
プロジェクトの作成と課金管理  |  App Engine standard environment for Python  |  Google Cloud Platform
こっちの情報はあまり無い
こっちだとクラウド死は逃れるが、以下の通りサービスがいきなり止まる可能性をはらんでいる

Google Cloud Platform の他のリソースの使用量に対して課金される場合があります。複数のプロジェクトがある場合は、プロジェクトごとに費用制限を設定することをお勧めします。
費用制限を設定する場合には、リソース使用量の急増にも対応できるように設定してください。アプリケーションが毎日の費用制限を超えると、無料割り当て枠を超えた分のリソースを使用するオペレーションはすべて失敗します。


つまりクラウド死はしないが、サービス死はするということ
何も手を打たない場合サービス死から復旧できないので、バランスを考える
(これで利用停止した場合復旧する方法あるのかな・・・?)

まとめ

上記の二つを上手く使い分けてクラウド死を避けていきたい

Unity Collaborate雑まとめ

Unity

概要

Unity5.5からオープンベータとなった、Unityによるチーム開発管理ツールUnity Collaborateについて雑にまとめた
Unity - Unity Services - Collaborate

上記サイトからはオープンベータに参加するというボタンがあるがUnity5.5を普通にダウンロードすればUnity Collaborateはついてくるので普通にUnity5.5をダウンロードしよう
Unity - Download

詳細

ソース管理既存の問題点

Unityで開発していて困ったのがどのようにチーム開発を行うかということである
いくつかノウハウがあるようだが、色々めんどくさい・・・
Unity を Git でバージョン管理する - Qiita
Unity で GitHub しよう!


一番困るのがgitignoreの設定
適切に設定しないとプロジェクトの重さがあっという間にギガ超えしてしまい適切なgitignoreはどうしたらいいのか・・・と困っていた

またxcodeのstoryboard的な問題もあり、コンフリクト問題もあった

解決策

そこでUnity Collaborate

まず導入が簡単
Unity5.5ををインストールすると既に入っている、Unityにログインしているアカウントで自分のリポジトリを作ってくれている
なのでプロジェクトを開くと既にソースをプッシュできる状態になっている
f:id:tiro105:20161204000413p:plain

コメントも入力でき、プッシュするとソース管理が開始される
f:id:tiro105:20161204000522p:plain

ヒストリも見れる
f:id:tiro105:20161204000557p:plain

ソースを管理するチームメンバの追加もメールアドレスで追加できる
f:id:tiro105:20161204002006p:plain
追加したメンバーにはこんな感じにメールが届く
f:id:tiro105:20161204000854p:plain

ソースに変更が入った場合、このようにアイコンが変わり変更を反映できる
f:id:tiro105:20161204001000p:plain

感想

良いと思った点

まず導入が簡単
そしてメンバの追加も簡単
個人でソース管理する分にも今後必須になりそう
さらに無料でも使える(各プランにより容量の違いはあり)

疑問点

同じSceneを触りあってるとどんな感じになるのか?まだ試してないがやはり個人個人Sceneは分けて管理したほうがいい?
iOSなどをビルド対象にしているとプロジェクトはいかにxcodeプロジェクトとかできて容量がすごいことになるけどそこらへんの考慮はされているのか?
CI的なことはCloud Buildで行って、ソース管理はCollaborate出やると思っているのだがCollaborateにあげたら自動的にCloudBuildとかできるのか?
githubでソース簡単に公開できるのか?

まとめ

などなど疑問点もあるが、gitにこだわる理由がなければCollaborate使ったほうがいいんじゃね?というのが感想

ただし現在はオープンベータであること、以下のような制限はあるようなので注意
>Open Beta and supports teams up to 15 members in size.
公式のよくある質問参照のこと

現状でもとっても便利ですが何かバグがあったらUnityに報告などして、みんなでよいものにしていきたい

Unity5.5雑まとめ

Unity

概要

Unity5.5がリリースされたので、雑にまとめた
こっち見たほうが詳しいことわかるよ
blogs.unity3d.com

詳細

Microsoft Holographic (HoloLens) ready in 5.5

Unity5.5からHoloLensの開発が改善された
実際にHoloLensがなくてもUnityEditorから直接デザインのプロトタイプ、デバッグを行うことができる
詳しくはHolographic documentation参照

Codeless IAP and extended platform support

プラットフォーム間におけるアプリ内購入(IAP)を管理することは難しい
新しいCodeless IAPにより、アプリ内購入を複数の環境に簡単に移植しフローをリアルタイムで自動化できる
Unity Appは、アップルのApp StoreGoogle PlayAmazonSamsungWindows Store、Tizen Storeなどに広げていくよ

Improved Particle System

particle Systemが色々と改善されたよ
これは本サイトの動画見たら直感的

Faster iteration in the Animation Window

アニメーションウィンドウはワークフローの改善とパフォーマンスが大幅に向上したよ
これは本サイトの動画見たら直感的

Better Line Renderer Component

レンダリングが大幅に改善
これは本サイトの画像見たら直感的

New Splash Screen Tools

独自Splashが簡単に設定できるようになった
ロゴのシーケンス、Made with Unityの共同ブランド、背景イメージ、アニメーションとかとかが設定できる

Look Dev for asset visualization & validation (Experimental)

Look Devっていう新しい照明ツールが出た
なんかすごいらしい(適当)
Unity - Manual: Introduction

Visual Studio Code & Unity

VisualStudioCodeの正式サポート開始
デバッグもできる、素晴らしい
Debugger for Unity - Visual Studio Marketplace

Unity Collaborate beta available for all in Unity 5.5

今までクローズβだったチーム管理ツールCollaborateが5.5からオープンβに
これは素晴らしい、一人だとしてもソース管理がUnity上でできるようになった、素晴らしい
Unity - Unity Services - Collaborate

Of course, there’s more features and improvements..

  • CPU Usage Profiler が詳しくなった
  • Mono C# compilerが優秀になった
  • Linear Color Space rendering が iOS and tvOS devices supporting Metal graphics API and Android devices with OpenGL ES 3.0サポート
  • GPU Instancing Android (with OpenGL ES 3.0 or newer) and iOS (with Metal)が使えるように
  • 低レベルGraphicsの改善
  • Unity’s Texture importer has been improved
  • Our physics engine has been updated from PhysX 3.3.1 to PhysX 3.3.3
  • New 2D Physics improvement new CapsuleCollider2D, and new properties for the Rigidbody2D physics component
  • New selection highlighting You can choose the color of the outline in the preferences of Unity, and it can be turned on/off in the Gizmos window

まとめ

個人的にはVisualStudioCodeとCollaborateとSplashが嬉しい!
がんばれUnity

ProjectTangoとはなんなのか、どうしたらいいのか

AR ProjectTango Android

前置き

この記事は
Androidその2 Advent Calendar 2016
の12/1の記事です
qiita.com

概要

ProjectTangoとは一体なんなのか
一言で言うなら
通常のスマホでは体験できないAR体験をいろいろなセンサーを搭載していることによって体験できる
端末である

ProjectTangoを以下の視点から考えてみるのが本記事の目的

目次

  • 現状
  • 得られる体験
  • 開発環境
  • 開発のやり方
  • Community

詳細

現状

ProjectTangoが発表されてだいぶ経つが、ようやくDevKitではない正式商品がLenovoから発売された(日本ではまだ未発売)
http://shopap.lenovo.com/jp/tango/

Tango対応アプリもいろいろ発表されている
ここではGoogle純正アプリのみ紹介しているがサードパーティによるアプリも多く公開されている
play.google.com

噂では11月下旬予約開始とあったが、まだ予約開始はされていない模様
www.itmedia.co.jp

追記12/2
Phab2Pro発売しました!!みんなTangoやろう!!
http://shopap.lenovo.com/jp/smartphones/phab-series/phab2-pro/

得られる体験

しのごの言うよりまずは動画を見ましょう
Tangoの全体的な紹介
www.youtube.com

家具設置アプリ
www.youtube.com

これらの体験を得るために以下の概念が使われている

  • MotionTracking
  • AreaLearning
  • DepthPerception
MotionTracking

www.youtube.com
Tangoデバイスが3D空間(現実空間)の中で自身の動きや方向を追跡できる機能
バイスを使って周りを歩き、前後左右に動かしたり、任意の方向に傾けたりすると、どこにあるのか、どの方向に向いているのかがわかる
これは、マウスの動作と似ているが、平面上を移動する代わりに、Tango空間のマウスパッドは現実世界みたいなイメージ

AreaLearning

www.youtube.com
MotionTrackingだけでは、デバイスは移動している領域の視覚的特徴を「認識」するが、「記憶」しない
AreaLearningをONにするとTangoデバイスは認識した内容を保存することができる
以前に保存した領域を入力すると、Tangoデバイスはその領域に以前来たことがあると認識することができる

DepthPerception

DepthPerceptionでは、奥行きを計測することによって、デバイスは周囲の形を解析することができる
仮想オブジェクトが実際の環境の一部であるように見えるだけでなく、その環境とやり取りすることができる「拡張現実感」を作成することができる
www.youtube.com
この動画では、3DObjectを現実空間にうまく配置している

開発環境

ProjectTangoでは上記の体験を開発するために、以下の開発言語がサポートされている

  • C
  • Java
  • Unity(C# or UnityScript)

C or Javaの場合AndroidStudioを使って開発することになる
Unityの場合、当然Unityを使うことになる

ProjectTangoを利用するケースではインタラクションなUIを求められるケースが多い
インタラクションUIを作るにはゲームエンジンであるUnityが非常に適している

またGooglePlayで公開されている多くのTangoAppもUnityで作られており、TangoAppはUnityで作ることがデファクトスタンダードになると考え、開発環境はUnityを使っていくのがベターだと考える

開発のやり方

今Tangoを学ぶ上で最適な登り方は以下だと思っている

Tango体験

GooglePlayでTangoアプリをいくつか落としてみて体験してみる
触ってみないとイメージができない
play.google.com

開発環境構築

触ってみて、イメージができたら開発環境を構築してみる
developers.google.com

MotionTracking, DepthPerceptionサンプル実装

まずは簡単な二つから
Unity Tutorial : Motion Tracking with Unity  |  Tango Unity SDK  |  Google Developers
Unity Tutorial : Depth Perception with Unity  |  Tango Unity SDK  |  Google Developers
この二つはスクリプトを書く必要がなく必要なprefabを配置していくだけなので、簡単にtangoを体験できる

AreaLearningサンプル実装

次にAreaLearningを実装してみる
Using Area Learning in Unity  |  Tango Unity SDK  |  Google Developers
こちらは少しスクリプトを動かす必要がある、かつ動きをわかっていないとアプリの操作ほうがわからないため少し頑張る必要がある

サンプル動かす

こちらにサンプルソースが公開されている
github.com

これらのprojectを実際にimportしてみて動かしてみる
そしてソースの難解さに頭を抱える

TangoConceptの各ページやUXページを読む

ここまでくるとTangoの深遠さが見えてくる
深遠さを理解したところでドキュメントを読んでいきましょう

まずpose, Frame, Coordinateなど必要な概念を見ていく
What Are Tango Poses?  |  Tango  |  Google Developers
Frames of Reference  |  Tango  |  Google Developers
Coordinate Systems  |  Tango  |  Google Developers

あとサンプルなどを動かしてみてご理解いただけたと思いますが、UXが洗練されていない
ですがUXのBestPracticeなどのページもあるので読んでいく
Using the Tango Unity UX Framework  |  Tango Unity SDK  |  Google Developers
Tango UX Best Practices  |  Tango  |  Google Developers

Community

上記を読んでもわからないことはたくさんあると思う
そんな時は以下に質問を投げてみましょう
plus.google.com
stackoverflow.com

だが見る限りあまり活発ではないので、正直一番早いのはTangoSDKのソースを読むことである
 UnityのTangoSDKはソースで提供されているため、どのように処理しているのか読むことができる

まだ正直バグっぽい動きもある
そんな時はissueをたててみよう
github.com

まとめ

上記ではまだまだ語れていない概念がたくさんある
LifeCycleであったり、Permissionであったり
User Permissions UX  |  Tango  |  Google Developers
Tango Permissions and Lifecycle in Unity  |  Tango Unity SDK  |  Google Developers

またTangoSDKはいまだに月に一回Updateが行なわれている
Release Notes  |  Tango  |  Google Developers
このアップデートにより急にアプリが動かなくなる現象がまだよく起こっているように感じる
特にAreaLearningまわりは管理デリケートに扱わないと簡単にアプリが落ちる

などなど問題点ばかりを上げる結果となってしまったが、TangoのMotionTrackingによるTrackingは最適な環境であれば数センチの誤差で観測できるし、DepthPerceptionは空間をそのままAR表現の対象とすることができるのでARのユーザー体験を考える上で非常に重要なデバイスになることは間違いない

我々がTangoを使うのではない、我々がTangoというUXを作っていくつもりでやっていきたい

ARとは結局なんなのか

AR 雑文

概要

AR(Argumented Reality)が何なのかわからなくなってきたので、考えをまとめてみる
全然まとまってないし、オチのない話なのでそういうのが嫌な人は帰ろう

詳細

きっかけ

先日、JapanVRSummit2に参加してきた
Japan VR Summit 2

その中の基調講演でNiantic野村さんからARについての考え方を聞くことができた
【JVRS2】非ゲームにおけるVRの可能性とは。「VR/ARはゲーム/エンタメから各産業へ花開く」レポート | VR Inside

この中でNianticはAR…というかテクノロジーが実生活に滲み出るようなことをしたいとずっと考えていて、その結果としてARという解を得た、みたいなことをおっしゃってた(あやふや)
ARは無限の可能性を秘めていているみたいなこともおっしゃっていた

それを聞くとポケモンGOみたいなARはあくまで狭義のARであって、ARという概念は実はもっとすごく広いものじゃないかと思った

ARへの疑問

これまで私はARとは、「現実世界を何か(ゴーグル?カメラ?コンタクトレンズ?)を通して見て、それに何か情報(文字?音楽?画像?)を表示して生活を豊かにするもの」と思っていた

だが、そうではなくて「現実世界に情報を付与して生活を豊かにする」ものは全てARなんじゃないか?と思い始めていた

例えば、塗り絵
絵という一種の仮想空間に、色という情報をユーザーが付与して楽しむというもの、これもARなんじゃないの?という感じだ
これは何の機器も使っていないし、現実世界に情報を付与して生活を豊かにしている

一種の解決?

結論から言うと私のこの疑問は現時点においてARを拡大解釈しすぎていて、Argumented Realityのよく言われる定義は
「技術の利用により拡充された現実の事。(スマートフォンのカメラなどのように)デジタル情報を加味するデバイスを通して現実世界を見ることにより実現される。」のような感じだ(つまり最初の解釈で間違っていなかった)

このページがすごいしっくりきた、現実世界に即した情報をきちんと表示しようね的な
正しい意味での「拡張現実」(Augmented Reality)とは? | ReadWrite[日本版]

ただこの著者も言っている通り、この記事も「私にとってのARの解釈」なのだ
この記事を持って行って「これがARなんですよ!!!」と言っても、明日か明後日の私は「いやoculusも一種のARじゃね?気温とか出してくれてるし、webからとってきているとしても現実の情報じゃん」とか多分いうのだ

そこでふと思った、実は、私もあなたもUnityもNianticもARの定義に大きな揺らぎがあるではないだろうか
ARのなにかするぞーーー!!といっても全然見えてるもの違ったりするのではないだろうか、それVRじゃね?とかなるんじゃないだろうか

まとめ

などなど最近考えていたのだが結局のところ開発元が「これはARだぜ!!」って言えば、よほどおかしなことを言ってない限り、それが「AR」になるのだと思う
「これってARじゃなくなくなくなくない??」なことを悩んでいる暇があるならAR的な新たなユーザー体験をとっとと生み出してプロトタイプを作る方が意味があるのだろう

これはARじゃない!!と叫ぶくらいなら新たなARを作ったぜ!!!の思考でいきたいものだ