All Articles

Webを通してLookingGlassの表示を操作してみる

先日、待ち焦がれていたLookingGlassというディスプレイが届き、それを用いて何か便利なものを作ってみよう!ということで、 「LookingGlassの表示をWebを通して操作する」というツール的なのを実装したので、そのアイデアやアーキテクチャなどを紹介します。

LookingGlassとは

LookingGlassはデスクトップ型ホログラムディスプレイであり、VR・ARヘッドセットなしで3Dコンテンツを眺めることができます。 VR・ARヘッドセットの場合は、それを装着している人にしか立体的な3Dコンテンツは見えていないのですが、LookingGlassの場合は、 デスクトップ型なので、複数人でワイワイ話しながら同じコンテンツを見ることができます。これはかなり画期的です。

以下が、紹介サイトです。

公式サイト

クラウドファンディングサービス「Makuake」での紹介

今回作成したもの

Webを通してLookingGlassの表示を操作できるようにしました。

Webを通して、操作コマンドが出せるのであらかじめ操作内容とそのためのUIを作成しておけば、スマホからでも操作できます。

(会社にあるGeforce1050を動作させていたので、かなり描画がカクカクしてます。ちなみに公式推奨スペックはGeforce1060以上です。)

こちらが自宅にあるGeforce1060で動作させたものです。

(Geforce1060だとサクサクスイスイ〜と操作可能です)

作成した経緯としては、操作指示に対しての不便さにあります。LookingGlassはあくまでもディスプレイなので、一応下にいくつか操作用のボタンがついてはいるのですが、あくまでも補助的な感じで、 このボタンで何か本格的な動作指示をするのは少しやりづらいです。

ブラウザなど他のソフトから操作指示ができれば、操作内容も自由にカスタマイズできるし、指示自体もやりやすそう!

しかも、Webを通せば、指示の起点となるものはなんでもよいので、今回はブラウザを起点としましたが、HololensのようなスマートグラスやIoTデバイスも起点となり得るので、使い方の幅がかなり増える!

アーキテクチャ

全体構成はこんな感じです。 architecture

イメージには「双方向通信」と記述がありますが、今回は操作指示をUnityアプリに対して一方的に行うだけので、一方向通信といえます。

「双方向通信」と記述したのは、今回通信プロトコルにWebSocketを使用したからです。

WebSocketはリアルタイム性の高い双方向通信を実現するプロトコルで、チャットサービスやゲームなんかでよく使用されています。 一方向通信でステートレス(毎回のやりとりが独立して行われる)なHTTPとは対照的にあるといえます。

今回はリアルタイム性さえあればよかったので、WebSocketの他に、Server-Sent events(ざっくりいうとHTTPでリアルタイム性を実現した技術、あくまでHTTPなので一方向通信)という選択肢がありましたが、 WebSocketの方がネット上に情報が多かったし、今後Unityアプリ側の状態通知を行いたくなるかもしれないという理由でWebSocketを選びました。

実装

使用したツールは以下の通りです。

webサーバ

  • Node.js
  • Express(Node.js Web Framework)
  • Socket.IO(WebSocketの通信部分を担ってくれるNode.jsライブラリ)

Unityアプリ

  • BestHttp(Web通信部分を担ってくれるアセット、WebSocket機能も含まれている)
  • HoloPlay Unity SDK(LookingGlassのUnity用SDK)
  • LeapMotionのUnity用SDK

見ての通り、WebSocket部分はライブラリやアセットに完全に任せました。 私が実装したのは、操作の実装(3Dモデルを写すカメラの操作や送信された文字を3Dテキストとして落とすなど)操作指示のUI作成操作コマンドの作成です。

参考記事 Node.js+Express+Socket.ioで簡易チャットを作ってみる

まとめ

一旦WebSocketを用いたシステムを構築しておくと、カスタマイズは容易です。

また、ブラウザからの操作は想像よりも快適だったので、LookingGlassを使った3Dコンテンツの展示や開発途中の動作確認などにオススメです!