空間ファイル共有に関して
作った「空間ファイル共有」に関してコンセプトや技術面の説明とかです。
コンセプト
重力デスクトップと同じく
「VRでもARでもないけれど、現実を感じるもの」
なんだろ?現実付加?リアリティ?
作った理由
今のファイル共有って(その場で共有するのには)楽しくないし直感的じゃないから。
会議のときとか、友達とわいわいやるのに、もっと向いている方法があるはず。
ネットワーク上のフォルダに入れて、ファイルへのパスを教えて・・・って作業がめんどくさいというか直感的じゃないと思う。
物を渡すみたいに「ぽいっ」って渡せるってのが自然な感覚だとおもう。
携帯とかのデバイスでこういう交換の仕方ができたらいいなぁ。
デモの際の構成
- PC2台
- マルチユーザーサーバー
- PC2台のうちの片方がサーバー兼用
- ファイルサーバー
- LAN環境
めんどくさい所
お互いのPC向きが違うので、座標など色々なものを補正しないとならないとか
実装
ファイルの共有はドロップされた時点で、ファイルサーバーにアップされます。
その後、ファイルの情報(種類、幅、高さ、ファイルパス)などを相互通知しています。
ファイル自体はそのタイミングであらかじめ読み込んでます。
ファイルの情報をあらかじめ通知するのは、ファイルを読み込み終わる前でもダミーの矩形を使って処理できるようにする為
体感速度をあげる
HTTPやコメット(これもHTTPですね)のように、送るたびに切断するわけでなく、
ストリームの様に接続を維持するタイプのものなので、通信は結構早いです。
とはいえ全ての処理をサーバーを経由すると、通信を挟むのでかくかくになってしまうし、操作している感覚と結構ラグが発生します。
- 自分がドラッグしているものはとりあえずローカルで先に処理→接続ユーザーに通知
- ドラッグ後に慣性で動く部分(投げたりとか)は、アニメーションをスムーズにするため完全にお互いのローカルで処理。
- ただし完全に初動作の条件を一致させないとおたがいばらばらの動きになってしまう
- さまざまな情報(速度、角度、座標、初速、角速度等)を初めに補正しておくことで、完全にお互いで同じ計算がおこなわれるようにする
まぁそれ以外もやってるんですが、こういう細かい部分で体感速度はだいぶ違います。
デモ様に実装したのでエラー処理とかいろいろ省いてますorz
※この記事はあとで加筆する予定です