投稿者:

HTC Vive ゼロレイテンシー通信!?

2016年9月18日 (開発者日記)

こんにちは。
明るい家族計画の望月です。

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 我妻追記

コメントは受け付けていません。