さらに、振動子を外部にも引っ張り出せないものかと思っています。
HTC Viveはかの有名なiFixitによって、使用されているICなどは既に公開されています。
さらにケーブルの位置もわかるため分解は非常にスムーズに行きます。
しかし、内蔵されている振動子がどこにあるのかは記載されていませんでした。
一応、XboxOneのコントローラーに似ているSteamコントローラーのタッチパネル部とViveのタッチパネル部はほぼ一緒な基板といわれており、Steamコントローラー側の振動子の位置は公開されています。
ということで分解してみます。
まずは、裏面のねじを外します。
星形ネジのサイズは、T4サイズなので一致するドライバーを用意します。
ここに一つ隠れているのでこのネジも外します。
つぎに赤外線受光素子側のガワを剝いでいきます。
赤外線受光素子側のガワは上下にセパレートする機構になっています。また、コントローラー裏側のガワはツメで固定されています。
これを丁寧にとるとネジが出てくるのでこのネジも外します。
以上でコントローラー上部の分解は終了です。
次にコントローラー下部です。
天板と基板にかけて配線が出ているので気を付けないと切れてしまいます。
これを外すとコントローラーの全容が把握できます。
ここで振動子を探す作業に入るのですが、実際にコントローラーを振動させてみたところ天板が振動していることが分かりました。
天板の各部品をチェックすると、やはりSteamコントローラーと同様にタッチパネル部の裏側に振動子がありました。
(クリックで大きいサイズの画像が見れます)(iFixitのサイトから拝借)
画像右の基板上にある、鉄色の直方体が振動子で間違いなさそうです。
さらに調べると赤い丸で囲ったこの半田が電源ラインのようです。
テスターで測ってみるとそのまま他の振動子をつけても動きそうですね。
今回は振動子の交換が目的なのでここまでで分解を一時ストップします。
まだまだViveのコントローラーは分解のしがいがありそうな予感がします。
HTC ViveのUDP通信に成功しました。
初期の段階では、UNETを使うのかUDPを使うのか決まらず、どちらも試してみました。
UNETを試した際に、SteamVR pluginのGameObjectをそのまま生成すると、1つのシーンで2つ以上のSteamVRが存在してしまいます。
これによりデバイスの取り合いが起こり、そのままでは使用できません。また、この競合を回避しようにも大幅なレイテンシーにより実用とはいきませんでした。
よって、今回はUNETを使用するのではなくUDP通信によりお互いのViveのpositionとrotationを送りあうようにして解決しました。
注意しなければならないのが、お互いにデータを送り付けているだけなので、基本的には同期処理はしていません。
(今回はほとんど同スペックのPCをローカルの有線接続しているので、致命的なエラーは出ないだろうという考えです。ネット経由で使うときにはまた違ったやり方でないとレイテンシー問題があるかもしれません)
これにより送受信におけるデータ量と、受信のタイミングもこちらでコントロールできるので最終段階では100~120fpsで描画することに成功しました。
したがって、遅延は10ms以下となるので「ゼロレイテンシー」といえるのではないかと。
最後にViveコントローラーの位置に手のAssetをつけて、遊んでみました(通称:ゼロレイテンシー芸人)。
補足として、SteamVRのルームセットアップを的確に行うと、現実での位置とVR空間上の位置が一致するのですが、
それをしてしまうと、VR空間上で相手に触れたときに現実でも相手に触れてしまい、デバック中に怪我人が出てしまうので、今回はこんな感じで….
9/19 我妻追記
]]>