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

つくるの大好き。

つくるのが大好きな人の記録。

HoloLens用 Managed Pluginの作り方

ご無沙汰しております。ご無沙汰の間に家族がひとり増えちゃいました☆

 

さて、HoloLensアプリのUnityプロジェクトにおいて、一部のソースコードを非公開にしたいと思い、ManagedのPluginを作ろうとしたのですが思いのほかハマってしまったので作り方をご紹介します。

サンプルプロジェクト

PluginをビルドするためのVisual StudioソリューションとHoloLens用Unityプロジェクトを含むシンプルなサンプルプロジェクトを公開しています。
こちらを参考にコードを追加するなどしてご活用下さい。

github.com

Pluginソリューション構成

f:id:peugeot-106-s16:20170404222955p:plain

Pluginをビルドするためにソリューションには4つのプロジェクトを用意しました。

  1. Shared
    ソースコードを保持する共有プロジェクト。
  2. Package4UnityEditor
    UnityEditorでの実行時に利用される.NET3.5をランタイムとするDLLのプロジェクト。ソースは実体を含めず1のものをリンクしている。

    f:id:peugeot-106-s16:20170404223714p:plain

  3. Package4UWP
    HoloLens実機(UWP)での実行時に利用されるUWP用DLLのプロジェクト。ソースは実体を含めず1のものをリンクしている。

    f:id:peugeot-106-s16:20170404223828p:plain

  4. UWPUnitTest
    3の動作確認のためのUnitTestプロジェクト。

UnityでHoloLensアプリを開発をする場合、UnityEditorでの実行環境とHoloLens実機での実行環境が大きく異なるためプラグインもそれぞれの環境で用いるものが必要です。

またハマリどころとしては、UnityEditor用PluginとUWP用Pluginは同じインターフェイスを持っていないとWindowsStore形式にビルドする際にエラーとなります。
また、これに関連しては後述するPlaceholderの設定が重要です。

共有ソース

#if NETFX_CORE を利用して実行環境に応じたコードがビルドされるようにします。
(これ可読性が悪いのでどうにかならないですかねw)

f:id:peugeot-106-s16:20170404225303p:plain

単純に”Hello”という文字を返すメソッドを用意しました。
UWP用コードでは無意味ですがサンプルとしてUnityEditorでは利用できないasync/awaitを使っていますw

このソースをPackage4UnityEditor, Package4UWPでビルドすることでそれぞれの環境用に同一のインターフェイスを持ったDLLをビルドすることができます。

動作テスト

プラグインの動作テストはHoloLens実機で行うとUnityからビルド、実機デプロイ、、と時間のかかる手順を何度も行うはめになりますし、デバッグ効率も悪くなります。
基本的な動作についてはUWP用UnitTestプロジェクトで確認をしておくととても幸せになれます。

Unity側構成

UnityEditor用DLLをPlugins配下に、HoloLens実機用DLLをPlugins/WSA配下に配置します。
DLLには下記の設定を行います。

[UnityEditor用DLL]

f:id:peugeot-106-s16:20170404225917p:plain

[HoloLens用DLL]

f:id:peugeot-106-s16:20170404225932p:plain

ここで重要なのがPlaceholderの設定です。

どうもWindowsStore形式へのビルドプロセス内ではDLLが持つインターフェイスのチェックを行っているようなのですが、そのチェックにはHoloLens用DLLではなくUnityEditor用DLLが用いられるようです。

そのインターフェイスチェックを行うDLLの指定がPlaceholderの設定となります。

この理由からUnityEditor用DLLとHoloLens用DLLは全く同じインターフェイスとなっている必要があります。

まとめ

HoloLens用 Managed Pluginの作り方は以上となります。
また、HoloLensのUWPまわりのコードの開発効率を上げる方法として、HoloLens実機にDLLをデプロイする前に、UWPのUnitTestプロジェクトでデバッグと動作確認を行っておくというTipsについてもご紹介しました。

世界に次元を追加しよう! - WebVR文化祭で講演しました

2017年1月14日は産業技術大学院大学で開催されたhtml5j-Web プラットフォーム部のスピンアウト企画「シン・Web VRとか文化祭」に参加し、展示や講演をさせて頂きました!

html5j-webplat.connpass.com

 

WebVRとか文化祭は秋のイベントでもHoloLensアプリの開発方法をさらっとご紹介させて頂きました。

satoshi-maemoto.hatenablog.com

 

まずは受付。これはVRではありません。

f:id:peugeot-106-s16:20170227145300j:plain

 

展示ブースではいちおうHoloLens Zoneとのことでしたが、まだ日本出荷が始まっておらぬという諸般事情によりKINECTをつかったきゃらみらーを放置展示。
とにかくブースで同じことを説明するのがあまり好きではないので放置展示が好きなのですw
なおHoloLensは気が向いたときに静態展示としました。

f:id:peugeot-106-s16:20170227145541j:plain

きゃらみらーは割とアート系のバックグランドをもつ方に人気でしたね。

 

セッション会場の方はこのように縦長い会場の後ろまで満員。

f:id:peugeot-106-s16:20170227145811j:plain

こちらで「ARもVRもMRもまとめてドーン」というお話をさせて頂きました。
マルチデバイスというワードを出していますが、例えばよくあるようなアプリを一度書けばiOSでもAndroidでもWebでも使えますよ、という種類の話ではなく、マルチデバイスで共通の世界・座標系を定義し、共通の世界観の元様々なデバイスが協調して動作するにはどうすればよいのか、ということのさわりの部分をお話しました。
これにより現実世界に別次元を追加してパラレルワールドを構築することができます。

こちらのツイートで綺麗にまとめてくださっています。

 スライドはこちら。

www.slideshare.net

 

実際にこれはKINECTとHoloLensを使って一部実現できてきています。
これをもっと広いエリアへグルーバルに広げて行ければ良いなと思っています。

www.youtube.com

 

ご清聴頂いた皆様、ありがとうございました。

その後も数々のセッションを楽しんだり、展示会場でネットワークが広がったりと楽しい一日となりました。

 

また、オフィシャルイベントレポートがCodeIQさんからリリースされているのでこちらもぜひ!

codeiq.jp

株式会社ホロラボが先月爆誕

しばらくブログを書けていませんでした。今年初投稿です。

実は先月、HoloLensの日本発売に合わせてHoloLensの研究開発を軸としたスタートアップ、「株式会社ホロラボ」が誕生しました。

hololab.co.jp


facebookページ https://www.facebook.com/HoloLabInc/


このホロラボ、今有難いことに多くのお問い合わせを頂いておりバタバタとしていてブログが書けていませんでした。

このホロラボはKINECT好きをルーツにもつ飲み会コミュニティTMCNから生まれた企業で、創業者の過半数Microsoft MVPを受賞しています。

 

大写真撮影会

会社設立は結構急に思い立ってという感じで、HoloLensの日本発売日に間に合わせたいということで会社の登記、Webサイトのデザイン、構築、名刺作成と目まぐるしい作業が昼夜乱れ飛んだチャット上で進行。
朝目覚めると恐ろしい量の未読メッセージが届いているという祭り状態でしたねw

また、メンバーの写真については「集合写真家 武市真拓」さんに多大なるご協力を頂きました。
撮影スタジオとなったのはYahoo! JAPANさんの新しいコワーキングスペースLODGE」。とても綺麗な環境でプロの方に撮っていていただいくとはんぱないクオリティですね!

<撮影シーン>

f:id:peugeot-106-s16:20170224103700j:plain

f:id:peugeot-106-s16:20170224103937j:plain

f:id:peugeot-106-s16:20170224104012j:plain

<仕上がり>

f:id:peugeot-106-s16:20170224102706j:plain

f:id:peugeot-106-s16:20170224104036j:plain

f:id:peugeot-106-s16:20170224104205j:plain

 

なお、この大撮影会の裏というかすみません表ではLODGE新年会が行われており、そこでLTもさせて頂きました。
この時点ではまだ何のための撮影会かは伏せた状態でした。

www.slideshare.net

f:id:peugeot-106-s16:20170224104915j:plain

 

爆誕時の反応

様々なメディアに取り上げていただきありがとうございました。
田舎の親族一同に自慢したい。

ascii.jp

prtimes.jp

fabcross.jp

 

 

それでは、ぜひぜひ今後ともホロラボをよろしくおねがいします。

 

2016まとめ: 広島東京Mix計画 #ma_2016

今広島の実家に帰って食べて飲んで寝るデブスパイラルの合間にブログ書いてます。

昨年は一昨年から少しずつ進めていた広島東京Mix計画がかなり進展できました。

一昨年はTMCNの兄弟コミュニティHMCN(Hiroshima MotionControl Network)の立ち上げを全力で支援して勢いよく爆誕しましたねw

japanese.engadget.com

japanese.engadget.com

その後のHMCNは地元リーダー不在な感じがしててちょっとそこにはぼく的に昔から感じている内弁慶でシャイな県民性かなと思いつつ、まずカタチができたということで今後にとっても期待しています!
「楽しい駆動」になれば勝手に自転してゆくのかなと思いますが、それはそれで地域のカラーが出れば面白いなって思っています。

 

そして昨年、広島県さんMashupAwardsさんと意気投合(?)してMashupAwards2016の広島予選という位置づけでレッドハッカソンひろしまの企画・運営を支援させていただきました。

https://cdn-ak.f.st-hatena.com/images/fotolife/p/peugeot-106-s16/20161029/20161029204805.jpg

satoshi-maemoto.hatenablog.com

 

そしてこのハッカソン優勝チームはMashupAwardsでも「スポーツイベントの思い出アプリ」という作品で見事PayPal賞を受賞し、東京の予選、そして最終決戦の会場にもやってきました!
本当におめでとうございます!

mashupaward.jp

 

何よりぼく的に感慨深かったのは最後の懇親会。
会場は品川の日本マイクロソフト本社。
誰がここにカープのユニフォームを着た赤い勇士たちがやってくることを想像しえたであろうか。

広島の隠れた素敵開発者を東京のスポットライトに、という今年の目標がかなった瞬間でした。
本当に来てくださってありがとうございました!

f:id:peugeot-106-s16:20170102121753j:plain



広島と東京という都市を考えるときに広島の特色としては新幹線でも飛行機でも遠い、というのと経済的にそこそこの規模の街なので無理に外に出なくても一生そこでやってゆける可能性がある、というのが良い意味でも悪い意味でもガラパゴス化を生んでいるような気がしています。

ただぼくは東京に出てきたとき、自分が今まで見てきた世界は日本という国の47分の1に過ぎなかったんだなっていうことをすぐに肌で感じることができました。
そして東京の割と"意識高い"ほうの人たちは世界の数百ある国々の中の1つに過ぎない存在なんだっていう感覚で動いていることも知りました。
その目線で故郷を見るといろいろなものが見えてきます。

この感覚を知ってもらうために、まず一回外に出て空気を感じてもらうことを支援する何かができればなと思っており、同じような目的を持つ方々のご支援でそれを現実に目の当たりにできたことを大変感謝しています。

2017年も引き続きこういった面でもがんばりたいです!

2016まとめ:今年はパラレルワールドを作りたくなった

いきなり頭おかしんじゃね系タイトルですみません。
正真正銘今年の振り返りですw

2016年を振り返るときに、これまで手がけてきたことが繋がって本当にパラレルワールドを作れる条件が揃って実現できるようになったんです。

そしてこれが結局ぼくが厨二どころか子どものころからやりたかったことだったんだな、という事がクリアになってきました。

まずパラレルワールドとは、Wikipediaによると

 

パラレルワールド(parallel world)とは、ある世界(時空)から分岐し、それに並行して存在する別の世界(時空)を指す。 並行世界、並行宇宙、並行時空ともいう。 「異世界(異界)」、「魔界」、「四次元世界」などとは違い、パラレルワールドは我々の宇宙と同一の次元を持つ。

 

とのこと。

 

生まれながらの世界作りたい厨

ぼくは小学生の時鉄道模型(Nゲージ)にハマり、押入れをひとつ貰ってそこを改造しレイアウト作成に精を出していました。
それは小さいけども新しい平行世界を作り、そこを覗いてみたいという思いがあったようです。
下の写真はまだ押入れ改造に着手する前ですが畳すれすれの目線から列車を覗くのが大好きでしたw

f:id:peugeot-106-s16:20161230172945j:plain

時は経ってプログラミングを覚え、オブジェクト指向を使い学び始めるとどうしてもDogとかCatじゃなくてWorldクラスから作り始めてしまう。
これは生粋の世界作りたい厨ですね。

 

2016年は空間のスキャンをはじめた

これは今年のお仕事なのですが、複数台のKINECTで一つの対象物をリアルタイムトラッキングするということをやりました。

www.systemfriend.co.jp

 

ここで編み出したのが世界を作るのに重要な下記のしくみです。

  1. センサーの現実空間上での絶対位置と注視方向を求めるしくみ
  2. 複数センサー固有の座標系を単一の基準座標系に変換し統合するしくみ

複数センサーの協調を行いにあたって重要なのはそれぞれのセンサーが物理的にどの位置にあり、どちらを向いているか、ということが正確にわかっていることです。
しかしこの現実世界で設置位置XYZを正確に固定するには位置関係の変わらない強固なスタンドなどを用意する必要があります。

まあそれはなかなか難しいし柔軟性がないので開発したのがセンサーが自分が見ている映像から自分の空間上の位置、注視方向を逆計算するしくみです。

f:id:peugeot-106-s16:20161230175506p:plain

 

さらにセンサーはそれぞれが原点Oとなってそれぞれの座標系で世界を見つめています。

f:id:peugeot-106-s16:20161230175859p:plain

 

これを世界の中心Oを中心とした基準座標系を定義し、各センサーの絶対位置を元にそれぞれのセンサー世界の座標を世界座標へ変換することよりひとつの世界を定義することができます。

f:id:peugeot-106-s16:20161230180000p:plain

ここで大きいのがこれまで世界の中心だったセンサーやデバイスが、ひとつの世界を覗く覗き窓に役割を買えたという事です。

 

HoloLensをはじめ様々デバイスで世界を覗く

f:id:peugeot-106-s16:20161230180810j:plain

今年の大変大きな出来事、それはHoloLensのデビューです。
このデバイスは空間認識をするので自分の位置、注視方向をリアルタイムに取得することができます。
ということは基準座標系への変換を仕込めば簡単にひとつの世界を覗く覗き窓になることができます。

ということでできたのがKINECTとHoloLensの連携です。
世界の中心と座標系を共有することでひとつの世界でぼくの体がトラッキングされています。

 

この連携は簡単に他のデバイスに広げることができるので、HTC VIVE, Oculus Rift, Tango, 精度は落ちそうだけど普通のスマホ、、全部を世界の覗き窓にできるなと思っています。

 

来年に向けて

今はセンサーがあるエリアでの狭いひとつの世界ですが、GPSと連動して世界通しのグローバル連携をすると本当に現実世界の裏に広がる広大な裏世界「パラレルワールド(厨二的口調で読んでください)」を作れます。
何気ない日常を裏世界への覗き窓デバイスで覗くと全く同じスケールで仮想世界がそこに広がっているわけです。うっひょう!

f:id:peugeot-106-s16:20161230181524p:plain

f:id:peugeot-106-s16:20161230181545p:plain

と、ここまできたところでこれって精度の良いポケGOじゃね?

って思ったんですけど自分で作るのが夢だし、三つ子の魂百までと言いますからきっとライフワーク的にこういうことをやっていくのだと思います。

今年はそれが現実にできるという環境や機材が手に入るようになった、というのが非常にセンセーショナルでした。

来年はどんどんこういうことやっていくぞ!

という意気込みの元今年のまとめのひとつとさせて頂きます。
皆様どうぞ良いお年をお迎えください。

ドンキの2万円PC「ジブン専用PC&タブレット」を買ってみた

今年もいよいよもうすぐで終わりですね。

この時期は年賀状の印刷をしますが、我が家はプリンターの近くにある奥さんのPCではがき印刷を行います。
このPCは7年ほど前に購入した少し古めのVAIO
ぼくのお古をネットブラウズとExcelで家計簿がつけられればOKな奥さんにあげた形です。

さて印刷をしましょうか、というときにWindows Updateの再起動要求がきたのでなんとなくポチっとな。

再起動 → Windowsロゴ → クルクルインジケーター待ち → 1時間経過 → クルクルインジケーター待ち...

おーいw!

その後色々調べて恐らくこの時落ちてきたグラフィックドライバが原因。
VAIONVIDIANVIDIAでも少しカスタムが入っているようで純正ドライバしかうけつけません。そこに純正がかぶせられたものだからアボーンなんだろうなという予想。

一応システムの復元で復活はしたもののまあ今後もWindows Updateでこのような事態が起こることは想定されるのでどうしようと思ったときにひらめいたのがチョー安いタブレットへの乗り換えです。
ネットができてExcelさえ使えれば良いのですから!

というわけでドン・キホーテの「ジブン専用PC&タブレット」を買いに行ってきました。
お値段なんと19,800円(税別)!

開封の儀

f:id:peugeot-106-s16:20161229164412j:plain

購入。普通にレジして普通にこのペラペラビニール袋にw
まるでポテチでも買ってきたような軽い気分です。

 

f:id:peugeot-106-s16:20161229164551j:plain

f:id:peugeot-106-s16:20161229164711j:plain

パッケージを開封するとタブレット部分とキーボード、あとACアダプタが入っています。以上。

f:id:peugeot-106-s16:20161229164800j:plain

少し画面の映り込みが強いかなと思いましたが普通にWindows10が起動。
ヘビーユースをしないという前提で特にストレスなどは感じませんでした。

 

注意点

ストレージの小ささ

f:id:peugeot-106-s16:20161229165102j:plain

全体のストレージとしては32GBのサイズがあり、初期状態で空きは17.8GBの空きがあります。
これは十分なようでWindowsの大型アップデートなどを適用するととたんに足りなくなってきます。
初期状態ではWindows10 ビルド1511が搭載されているためAniversary Updateをあてると空きが3GB程度まで減少します。
これはアップデート時に以前のWindowsに戻すオプションのためにバックアップが取られることによるものなので、不要であれば[設定]-[システム]-[ストレージ]-[PC]-[一時ファイル]より削除を行うと空き容量が復活します。

 

Excelはビューアーだった

このPCはあらかじめOffice Mobileがインストールされています。
このMobile版、起動してみたらビューアーでした(笑)
家計簿を記入する場合はOffice365を購入するか、手持ちのOfficeをインストールする必要があります。
Officeがまた空き容量を圧迫するのでいるものだけをインストールすると良いと思います。

f:id:peugeot-106-s16:20161229171000j:plain

 

まとめ

若干注意点はあったものの、普通の人が普通にネットしたりExcelを使ったりするには必要十分なものだと思いました。


ぼくは普段重量級ゲーミングノートG-Tuneを持ち歩いてミーティングしメモをとったりするし、スタバでもMacBook Airを開く没個性な一般ピープルたちを尻目にG-Tuneでドヤるのが好きだし、新幹線でもG-TuneでUnityなどを開いて作業することでとなりの人に圧迫感を与えることもよしとしているのだけれど、とにかく重たいしバッテリーもあっという間になくなってしまうので、脇差し的にこのタブレットをさっと開いてさっとメモをとるという方向にひよるのもアリかしらと思いました(笑)

Inkで手描きもサラサラできますよ。
子ども用PCとしてもいいんじゃないでしょうか。

f:id:peugeot-106-s16:20161229165042p:plain

オープンソースカンファレンスでオープンソースに関係ない話をしてきました

2016年11月27日はオープンソースカンファレンス広島でお話をさせて頂きました!

www.ospn.jp

 

オープンソースカンファレンスは初めて参加することになったのですが、右も左も空気もわからないまま、日本マイクロソフトさん枠での登壇です。

何か日本マイクロソフトさんからのお知らせ的なことを喋りましょうか?と確認しましたが、「前本さんの好きなことを喋ってもらうのが一番いいと思います」という事でしたので好きなことを好きなようにお話させていただくことにしました(笑)


というわけでセッションタイトル「Kinect やセンサーデバイスと連動した楽しいアプリ開発」!

ザ・オープンソース関係ない!

www.ospn.jp

 

まずは日曜の昼過ぎに広島に到着して会場へ。

f:id:peugeot-106-s16:20161227222459j:plain

ううむ。となり気になるなw

 

f:id:peugeot-106-s16:20161227222552j:plain

こちらがポスター。かわE。

 

f:id:peugeot-106-s16:20161227222621j:plain

展示ブースがあり、スポンサーブースとコミュニティブースといった構成でした。

 

f:id:peugeot-106-s16:20161227222655j:plain

ひと際興味深かったのがこのシャープ X68030

f:id:peugeot-106-s16:20161227222754j:plain

なんと適合する電源パーツを数年をかけて見つけて復活したそうです。
これはすごい!
ぼくも最近ハードディスクが逝ってしまった実家のFM-TOWNSをレストアしたくなりました。

 

その後セッションへ。
自分が話していたのでうっかり写真が全くないのですが全くオープンソース関係ないのにそこそこ話を聞きに来てくださって楽しんでもらえたようです。

スライドはこちら。
KINECTとUnityを使ったコンテンツ、リアルとバーチャルを重ね合わせるための基本のところ、おまけに最新の話題としてHoloLensの話を少々です。

 

 その後の打ち上げでは「きゃらみらー」を真似して作っています、という大学生と出会えたりして楽しかったです。

OSC広島お疲れ様でしたっ、 - Spherical Image - RICOH THETA

 

というわけで初めて参加したOSS広島、楽しかったです。
ありがとうございました!