2015年6月21日

Unity 5.1とGoogle Cardboard SDK for Unity v5.0を試す

タイトルと関係ありませんが突然の宣伝です。てくぶことTechBoosterがC88も当選されたとのことでおめでとうございます、youtenはC87ではやたらと後ろ向きな記事を書きましたが今回はCardboard SDKの話を中心にGear VRまで含めたスマホ向けVRの話を書こうと考えております。(無事に掲載されるかはさておいて)これを読んだAndroid開発者がVRの波動に目覚めて突然開発したくなるような記事にしたいと思います。全裸で。

さて本題に戻りまして、Unity 5.1が出たのでCardboard SDKがおかしなことにならないかを確認してみます。VR的にはUnity 5.1の目玉はVRのNative対応で、その中身はOculus Rift/Gear VR向けなOculusなSDKが組み込まれただけ、という認識なのですがちょっと自信ないです。

Unity 5.1.0p1 2015.06.12
https://unity3d.com/jp/unity/qa/patch-releases

Google Developers:Getting Started with Unity for Android
https://developers.google.com/cardboard/unity/get-started

イカ、作業メモ

u51-01.png
Unity 5.1を起動します。いきなりログインを求められましたがWork Offlineでも良さそうです。
New Projectを作成します。

u51-03.png
CardboardSDKForUnity_v5.0.unitypackageをimportします。"API Update Required"ダイアログが出ますが気にせずI Made a Backup. Go Ahead!を選択します。

Cardboard/DemoScene/DemoSceneを開きます。おもむろに再生します。いつものDemo Sceneが動作します。
u51-04.png

別名のMainというシーンで保存。Build Settingsを開いてAndroidにSwitch Platform。Add CurrentでMain.unityを追加、Development Buildチェックをonに。
Player Settingsを開いて、Company Nameを変更、Resolution and Presentation->OrientationをLandscape Leftに、Other Settings->Bundle Identifierを独自パッケージ名に変更。
Build Settingsに戻ってBuild And Runを選択。U51HelloCB.apkあたりの適当な名前をつけてSave。

v4.10からv5.0の差分を確認しておきます。
https://developers.google.com/cardboard/unity/release-notes

抜粋して紹介。
・iOSサポート。
・C++でヘッドトラッキングと樽型歪み補正を実装、JavaベースのコードはLegacyフォルダに移動。
・Cardboard.csとVRDeviceというクラスでリファクタ、Android, iOS, Unityエディタ上で同様に扱えるよ。
・新しいイベントtilt(横向きに傾ける、BackやExitの意)、trigger(Cardboard v2のトリガーが引かれた状態、タップと同義のはず)に対応
・Cardboard.SDK.BackButtonExitsApp「BACKボタンでアプリ終了」は廃止。
・Cardboard.SDK.IsInCardboard「今Cardboardにスマホが入っているのか」(おそらくmagnet判定だったのでCardboard v2の変更に伴って)は廃止。
・残念ながらDevelopment Build チェックまだは必要?(5.0.0f4で試した限りは、と書かれている。5.1.0p1では大丈夫な気配?)
・Multi-threaded renderingは今はまだサポートされていない。
・細かいですがDemoSceneの真下に出るMenuのVR ModeというButtonのEvent実行先がCardboard.ToggleVRModeからTeleport.ToggleVRModeにお引っ越しされてました。Cubeを消して下のメニューを使い回す際にはご注意ください。

Cardboard/Scripts/Cardboard.csに以下の様なメソッドを追加してやれば代用が効きます。
public void ToggleVRMode() {
VRModeEnabled = !vrModeEnabled;
}

u52-05.png
ちまちま他のこともしてみましたが、Cardboard SDK for Unity v5.0を使う分にはさしあたってUnity 5.1で困らなそうです。

そういえば、今日Cardboard v2触ったんですが適当にGalaxy S6突っ込んだらぜんぜん像が結べなくて3Dに見えなくて苦労しました。QRコードによるProfile調整必須です、Nexus5/Galaxy S6あたりにあわせてあるとダメです。DIVE pluginモノはN6とかiPhone 6plusならちょうどいいんじゃないのかな...。

つまり今後というか現時点ですでにCardboard互換品には例のQRコードが必須ということです。...Googleさん、もう少しアナウンスというか啓蒙がんばった方がいいと思うよ。

2015年6月 8日

MMDメモ

MMDについてメモ。

続きを読む "MMDメモ"

PMCA その1

別にお金を払いたくないわけでも3D-Unity(VR)で商用活動がしたいわけでもないのですが、自分で書いたライセンスを自分で守らない人とか、法律も作者の気持ちでどうにかなると思ってる人のことを想うとつらい気持ちになります。Figmyがぶっこみましたね。CC-BYのpmdが欲しい病を長く患っている自分にも少しだけ気持ちは分かりますが、ああなってはおしまいだと思います。

前置きはさておいて、PMCAというパーツPMDからモデルを組み立てるツールがありまして、ちょっと前に存在を知っていたのですが今更試してみることにします。

PMCAv0.0.6について
http://matosus304.blog106.fc2.com/blog-entry-215.html
りどみ.txtを読むとPMCA自体はPDとあるので生成pmdにライセンス制限はかからないことになります。(というかデフォルト設定でAuthorがmato氏のLicense PDという文字列が固定になってしまうのは良いのでしょうか...)

PMCAv0.0.6r10aWindows版
https://bowlroll.net/file/3714

Python実行環境同梱版をダウンロードして、zipを展開してrun.batで起動します。
pmca-01.png
pmca-02.png
適当にポチポチと選択してpmdを出力します。
ちょーかんたんお手軽1分でpmdができました。

pmca-03.png
ちょっとだけテクスチャの色合いだけいじってMMDに持っていきます。

pmca-05.png
なるほど。

Unityに持っていきます。

pmca-06.png
なるほど。

Carboard SDKを適当に放り込んでスマホに持っていきます。

pmca-07.png
なるほど。

これで色々な点が概ねいいんじゃないでしょうか。

2015年6月 3日

延命措置

体調不良につき...という拙作の適当アプリがあります。

用途はPlay側の説明を見ていただくとして、このアプリは2011.08.02に更新して約4年それっきりという、(普段の言動に対して)紺屋の白袴どころか紺屋の全裸みたいな案件です。

逆に言うとminSdkVersion="4"で作ったものが4年間完全放置でここまでもったAndroidよくできてんなという気分なのですが、Galaxy S6(5.0.2)でMENUキーのエミュレートがされなくなってついに死亡が確認されました。

ぶっちゃけ自分用アプリなのでちょっとぐらいおかしな動きをしてもいいだろう、と互換性に注力する気はないのですが、意外と気に入らない点が多くて単純な移植しかしていないにも関わらずイマイチ要素が満載のものになりました。今は寝かせてます。

<移植作業>
・Eclipse → Android Studio
・minSdkVersion 4(1.6) → 15(4.0.3)+AppCompat v7 22.1.1
・Activity → AppCompatActivity
・PreferenceActivity → PreferenceActivity(AppCompatDelegateではない)
・Launcher iconの新規起こし。(某ジェネレータのmipmap-フォルダに配置したが、minSdkVersion15だとダメっぽい?おとなしくdrawableに移動した方が無難そう。)
・AppCompatにしたがって無印とv21のthemeを作成、primary, primary dark, accent, button, navigation barあたりのcolorを設定。
・同じ仕組みでButtonのtext colorが変えられないので、ここを参考にWidget.Holo.Light.ButtonとWidget.Material.Light.Buttonをparentに指定したstyleを用意する。
・setHomeButtonEnabled(true)とかsetDisplayHomeAsUpEnabled(true)とかActionBarまわりを調整。スクロールするほどコンテンツないしToolBarは見送り。
・xml drawableはいったん全部捨て、一部primary colorを適用。

<どうにかしたい>
・WQHD端末なせいかフォントサイズが少し小さい気がする。
・マージンがアンバランス、全体的に足りない。これでもLinearLayoutに透明dividerは入れている。
・ボーダなしSpinnerと今の配置の相性が悪い。
・Spinnerのrowに複数行+自動改行が必要なものを入れるのがダメ。iOSのドリルダウンNavigation Controllerのような他ページでいい気がする。


M来たってのにLollipop時代の話と戦えてない感じです。もっとリハビリしないと話になりませんな。

2015年6月 1日

OcuBen #02 に参加して思ったことメモ

Oculus Rift勉強会 #02 【初心者歓迎】
https://ocuben.doorkeeper.jp/events/24708

・本当にVRについて勉強したい人が何百人も居るのか。
・みんな開発者やコンテンツ提供者というわけではなかったけど居た。
・Android開発経験者は結構居たけどGear VR持ってる人もそんなに多くなかったしGear VRで開発したことがある人は多くなかった。
・プログラミングしなくても開発ができるようになったのではなくて、誰もが楽しめるぐらいプログラミングの裾野が広がった。
・Cardboard・Gear VR向け、UnityでのAndroidアプリ開発環境にAndroid Studioは必須ではない。
・GalaxyのadbのためのUSB DriverのためにKiesは必須ではない。
・天球動画の再生環境としてGear VRがRift DK2を概ね凌駕するというのには同意。
・ま、まだ仲良くしといてあげるけどVR国がおっきくなったらあなた達みたいなリア充とは仲良くするつもりはないんだからねっ>実写動画

P.S.
きゅーこんさん歌うまいのでみんなカラオケに連れて行こう(次はファミコンバーでリア充と対決しましょう

2015年5月26日

Twitterで言語限定検索できるのを今更知りました

Gear VR lang:ja
https://twitter.com/search?f=realtime&q=Gear%20VR%20lang%3Aja&src=typd

Cardboard lang:ja -ダンボール
https://twitter.com/search?f=realtime&q=Cardboard%20lang%3Aja%20-%E3%83%80%E3%83%B3%E3%83%9C%E3%83%BC%E3%83%AB&src=typd

Cardboardの方はもう少し除外ワードを工夫しないとノイズが多いですね...。

2015年5月25日

【MMD】360度パノラマステレオ動画で嫁を召喚してみた【Gear VR】

mmm.png

MMDで全天球動画が作れるのを以前見かけて試そうと思っていたのですが、2回出して合成すればGear VRでなんとなくステレオで見られます。これはいいものだ。

【MME】360度パノラマ画像を作る
http://seiga.nicovideo.jp/seiga/im3844921

Panorama360.png

「Panorama360」を使用。カメラの位置を無視して、エフェクトの位置情報が使われている模様なので、以下の様にxyzいじってみます。xは左目が-0.03右目が0.03にしてみたがそもそもMMMの1.00はUnityみたいに1.00m保証は無い気がします。
x 0.03 y 10.0 z -15.0

※後述の追記時にはx 0.1(左目用は-0.1)y 13.0 z -12.0程度にしました。センターバイアスでモーションを同心円で収まる範囲にして、モーション範囲を中央に寄せてしまうのが勝利のカギの模様です。

以前書いたMMMの物理演算固定手順を守りつつ、左目用aviと右目用aviを出力してみます。

2160x1080 60fps
UtVideo YUV420 BT.709 (ULH0) DMO
mousou-L.avi
mousou-R.avi

kongou.png
開始位置が奥すぎたのでめっちゃ艤装に殴られまくりの動画になりました。目には優しく無いですが透明人間になった気分はそれはそれで面白かったです。

試しに1000フレーム程度でやってみて概ねうまくいきましたが、つんでれんこではビットレートがどうしても常識的な範囲に収まってしまう模様です。昔お世話になったx264guiExに久しぶりに頼ることにします。

aviutl-x264gui.png

AviUtlでMP4(H.264)にエンコードするためのインストールと設定方法
http://memorva.jp/internet/pc/soft_aviutl_mp4_h264_encode.php

2560x2560でやってみたらWin8.1でもGalaxy S6でも再生できない動画になりました。
2160x2160でProfileはHigh@5.1にしたら再生できました。サイズではなくてProfileの問題かも。

bt.png

実際に見てみるとかなり良い感じなのですが、2160x2160でも解像度がちょっと足りない(ボケた)感じになってしまいます。どこまで上げるのが妥当なのかは何度か試す必要がありそうです。(GearVRの公式doc的には推奨2048x2048@60fpsらしいです。ただの画質設定の話かも...)

続きを読む "【MMD】360度パノラマステレオ動画で嫁を召喚してみた【Gear VR】"

2015年5月24日

【Gear VR】自前のosigを追加して再sign

前述の通りosigまわりにあまり特殊な署名ガードはかかっていなそうだなと思っていたのですが、すかさんが自前osig追加再Signをやってたので自分もやってみました。

続きを読む "【Gear VR】自前のosigを追加して再sign"

2015年5月 8日

Gear VRで野良アプリエコシステムの妄想

メモ。

○osigファイル

Gear VR向け開発用ビルドには、osigファイルをapk(Androidアプリ本体)ファイルに含める必要があります。
osigファイルは(Smartphone側母艦の)Device Idから生成します。apkは実体はzipアーカイブですが、展開してみるとそのまま変換も何もなしに含まれているのでセキュアななんたらというのはない模様。

⇒第1の結論:開発者グループでosigファイルアップローダを作ってしまえば概ね良いと思います(そしてそれぐらいまではOculus/Samsung側も把握している)

○VR Jam用global sign

VR Jam向けapk生成Webサービスがある模様ですが、こちらでできたapkに「マスタosig」みたいなものは入っていませんでした。AndroidManifest.xmlにもそれらしい記載はなかったため、こちらは署名で見ている気がします。
つまりVR Jamが終わったら向こうの好きなタイミングでWebサービスも証明書もclose/expireできるということでおそらく長生きはしないと思っています。

○apkのrepackageとresign

Androidのapkの実体がzipなことは前述しましたが、その一意性も署名されているだけなので以下のアプリやライブラリの示すとおり、apkのビルドというのはAndroidアプリ内で実施が可能です。

AIDE- IDE for Android Java C++
https://play.google.com/store/apps/details?id=com.aide.ui
JavaIDEdroid
https://code.google.com/p/java-ide-droid/

(知りませんでしたが)どうやらadb devicesでとれるDevice Idはアプリからもとれるらしいので

SideloadVR DeviceID
https://play.google.com/store/apps/details?id=com.skyworxx.sideloadvrdeviceid

結論として以下の仕組みをもったGear VR野良apkマーケットアプリをつくることができそう、というのが現時点での見解です。

・osigファイルをローカルで生成/またはDevice Idからユーザに生成してもらう。
・apkをダウンロードする。
・apk(zip)を展開してosigファイルを追加してre-signする。
・3rd-partyアプリとしてインストールする。
・Oculus Homeには当然含まれないので、独自Homeアプリを作る。PackageManagerからAndroidManifest.xml中のmeta-data vr_onlyあたりを見る。

⇒第2の結論:ここまでやるのは面倒なのでOculus/Samsung側の様子を見るとして、「自分のosigが正しく入ったapk群を、Gear VRを外さずに切り替えられる独自ランチャーアプリ」あたりから着手すべき?

2015年5月 5日

Gear VRのトラックパッドでドラッグ

GearVRの入力を使う
http://tamagokobo.blogspot.jp/2015/05/gearvr.html

パッドのどの部分を触ってもまずはX:1280,Y:720の座標が返されます。 ドラッグで動かすと触った部分を起点として座標が変化します。 なのでタッチパッドのどの部分を触ったかという判定は取れないようです。

おおなるほど。

マウスやスマホ側のタッチパネル直接操作時との互換性を考えて、タッチした瞬間のXY座標を保持しておく作戦でドラッグを実装してみます。

続きを読む "Gear VRのトラックパッドでドラッグ"

2015年5月 4日

【MMD】かわいいよ摩耶様かわいいよ【Gear VR】

maya01.jpg
【MMD艦これ】摩耶様は一騎当千【モデル配布】
http://www.nicovideo.jp/watch/sm26159359

cham*さんの摩耶様改二が可愛かったのでGear VRで課題曲を踊っていただきました。

mayaicon.png

摩耶様「はぁ?」
摩耶様「お前、バカだろ」
摩耶様「しょーがねぇなぁ、一度だけだぞ?」

脳内余裕です。

続きを読む "【MMD】かわいいよ摩耶様かわいいよ【Gear VR】"

2015年5月 2日

Gear VRとGalaxy S6を買ったので原点に戻ってミクさんに踊っていただいた

racingmiku2015.jpg

○はじめに

一通り試したのでメモを残しておきます。
DK2も、AndroidどころかDive SDKもCardboard SDKも触ったことがない人にはちょっと大変かもしれませんが、それなりに知識がある人だったらセットアップ手順はいろいろな点で親切になっており、概ね誰でも(非プログラマーでも)嫁召喚はできると思われます。

Galaxy S6/S6 edge自体は5inchと小さ目で解像度は高く、パワーもありますので単眼ハコスコ・双眼Cardboard互換組にもオススメのデバイスと言えそうです。...フラッグシップと言えるのでお値段は決して安くありませんけどね!

Android開発環境とかUnity5.0.1pXでの対Androidの話は、以前に書いたエントリ【スマホVR】Unity 5 PersonalとCardboard SDKで嫁をAndroidに召喚する【MMD】 #JAGVRを参照ください。

続きを読む "Gear VRとGalaxy S6を買ったので原点に戻ってミクさんに踊っていただいた"

2015年4月27日

#DroidKaigi

すばらしいイベントでした。発表内容については若い人に任せるとして、いくつか雑談した話とか、雑感とか。


○デザイナーとデザインの関係についてとか

あんまり 昔から 課題が変わってないな、と感じました。


○ベルくん、きみにはBaseActivityはまだはやい

昔こういうものを書いて、

Activity - Service inter Android component communication sample. Activity-Service間のAndroidコンポーネント間通信のサンプルです。
https://github.com/youten/BService

onServiceConnectedとかをBaseActivityに埋める例を出したら、extends三段にされて「よし、お前以外はBaseActivityに触ってはいけない!見ないで分からなかったらBaseActivityが悪い!」ということになったりしました。

こんそめ論には諸手をあげて賛成です。


○CardboardとかVRとか

欲だけで資料は書いたのでハンズオンやりたい。

Gear VRは買うつもりですが、osigとか機種限とか少しAndroidの思想にかみ合わないラインがある気配があるので推すべきかどうかはまだ迷ってます。でもS6/S6 edgeともに日本発売になったのはとってもめでたい。


○IoTとかBLEとか

・闇、Advだけで暮らす分には平和ですが、それ以上をやるとそうでもないらしいですね。
だいたい このへんで書いたのでそこからあまりキモチは進んでいません。


○発表はともかく運営には参加すればよかったかなとか

プロジェクトが忙しい気配もあったのですが僕はABCの妄執をこじらせたままトラウマから復活してなかったので運営側には参加しませんでした。

次回があればもっと「バカなことをやりたい」というモチベーションで運営側に参加したいです。

2015年4月24日

4月入社の新人ITエンジニアがGWに読んでおくとよさげな良書11選

アイズ・ヴァレンシュタインさんがすきです。「無表情キャラ」として描かれますが、「無感情キャラではない」あたりがとても大好きです。

パク(ごめんなさいごめんなさい
・youtenはアニメ化された際に原作を全部読んでアニメを見ない、みたいなことをよくやります。
・とりあえず全部買ってみました。荒削りで方向性が揺れている印象ですが面白かったです。
・注意事項として、外伝となっているソード・オラトリオは、実は時系列がほぼ同一で、ロキ・ファミリアメンバの視点で書かれたもののため、同時に読んだ方が本編が面白いです。書籍としての発売日順が妥当と思われます。
・4月に本編7巻、5月に外伝4巻、6月に本編8巻と高密度で予定されているので今買うのはオススメです。
・下記リンクは未発売の外伝4巻だけ書籍で、他Kindleです

2015年4月20日

Cardboard SDK for UnityをMoverio BT-200にあわせてみる

cardboard-lat-bt200.png

Cardboard SDKの樽型歪み補正はoffできますので、BT-200に使えないかどうかいじってみました。
OMAP4じゃ流石にパワーの観点からもつらそうなのですが、FOVやアスペクト比判定まわりにまだまだ改善(というかバグとりのレベル)の余地がありそうです。

・Native Distortion Correction(樽型歪み補正)を外す。
・Build SettingsのDevelopment Buildチェックは逆に不要な模様なので外す。
・Plugins/Android/AndroidManifest.xmlのminSdkVersionを16(4.1)から15(4.0.3)に変更。
・FOVは60から30ぐらいにする。でもなんかおかしいのでもっと低い?
・CardboardEye.csの以下の箇所を変更する。でもまだ下端に余計な黒帯が出てるので改造が足りてません。

// float aspectFix = camera.rect.height / camera.rect.width / 2;
float aspectFix = camera.rect.height / camera.rect.width / 4;

// dir = dir.normalized * ipdScale;
dir = dir.normalized * 0.1f; // set fixed ipdScale

3Dモードには手動で切り替えてください。ちなみにDemoSceneはこんな感じになります。
cardboard-sdk-bt200.png

誰か続きをたのむ(投

Archives(記事一覧はこちら)