見出し画像

カメラ2台で全身を操作するフルトラッキングでUSB延長ケーブルの3つの罠にはまって時間を無駄にした話 Mocapforall編 VRchatの壁シリーズ 第7話

こんにちは!hiroです。

今日からまたフルトラの話をします。実は以前アンケートをとって
どのネタがいいかって話をしたのですが

道頓堀だったんですが、道頓堀のネタを書こうと思ったら、膨大で現在進行形だったので、フルトラにしました。
ちなみに、前回の記事はこちら.

というのも、結構フルトラの記事読んでいる人がいるみたいで
WebcamMotionCaptureって指トラッキングの精度がかなり高いツール使っているQuest2の方から、お礼の返信をいただきました。
ありがとー。

今、さらっとお勧めツールをいっちゃったんですが、もし上半身だけで指を動かしたいという場合は、WebcamMotionCaptureはかなりお勧めです。

それにしても、僕、何かWebcamMotionCaptureの話したかなぁ?って感じですが、OpenCVの話をすれば、基本的に当てはまると思うので、まぁいいか。(笑)

ちなみにMocapForAllで指トラッキングやるとこんな感じです

実はMocapForAll、指トラッキングに関してはまだ実験機能。
(この前見たら、結構改善進んでいるみたいだけど、フルトラッキング+指トラッキングはもうちょっと先っぽい)

解像度高めで2台でとっているので、たった1台だけのWebcamMotionCaptureがどれくらいVtuber向けかよくわかるかと思います。ちなみに、Webcamはこちら。fpsは60位出ています。

これを見ると、MocapForAllは、まだまだとんでもない弱点というか穴がありまして、今日はそのあたりも書いていきたいと思います。


MocapForAllのfpsを上げるコツ その1:カメラ選定

いきなりですが、あなたのWebカメラ、fpsどれくらいですか?
実は、MocapForAllの動画を見ると、開発者の方は「スマホ」を使っています。スマホだと、高性能で60fpsは余裕で出ます。

しかし、実際のVRchatでの運用を考えると、スマホはとてもきついです。
長時間稼働が問題になり、解決できません!

なので、Webカメラが候補になるのですが、Webカメラのfpsは
スペック表だけではとても分かりにくいのです。というのも、そもそも

・通信方式が何か
・CCDかCMOSか
・モノクロかカラーか
・広角レンズかどうか


で通信速度がだいぶ変わってくるからです。
Mocapはカラーのカメラでないと動作できないので、モノクロで
情報量を減らして、fpsを増やす方法は使えません。

(もし、前処理で白黒にしているのなら教えて)

では、スマホの場合、なぜ早くなるのかというと
Wifiの規格が一番大きく、次に解像度がそこそこ低く設定できるからです。これらにこだわれば、webカメラよりもfps早くなります。大体120fps位出ます。

一般的に解像度が低いと、大量のfpsの動画が送れ、解像度が高いと低くなります。なので、解像度を低い設定にできれば、ものすごく早くなるでしょう。

MocapForAllは、「複数台」カメラをつけて運用するのですが、その複数台のカメラが同じ速度で遅延なく同期することが、重要になってくるのです。

しかし、このソフト。

マーカーを読ませるなどいろんな要素で、カメラ同士を離して使う必要があるため、どうしてもカメラ単体ではケーブルが足りなくなってくるのです。

そこで、ケーブルを買って対策しようと思って買ってしまうと、FPSがすごく下がります。

この現象については、産業用カメラのメーカーのHPにも載っています。産業用カメラの場合は、配線選びはとても重要なので、はっきり書いてあります。これがいわゆる「USB2.0」の壁ってやつです。

基本的に、まずは帯域で考えます。
1台の300万画素カメラを10fpsで動かす場合、3M×10fps=30Mバイト/秒です。(1画素:1バイト計算)

USB2.0の帯域は480Mbpsですが、最高速度が出せるバルク転送モードで上限が約52Mバイト/秒と仕様で決められています。
よって2台以上の同時使用は不可能になります。(30×2 > 52)

shodenshaサイトより引用

これを計算すると、30万画素カメラでも100fpsで不可能になるわけです。
つまり、USB2.0だと解像度をめちゃめちゃ下げないと高いFPSが出ない!というわけになります。

ちなみに、ハードウェア系フルトラの話では、ネム先生の

Valveが有名で下のようにとりつけるらしいのですが、

fpsはかなり出ると聞いています。
ちなみに、ハードウェアフルトラの人がどれくらいでて、どんな速度で使っているのかという調査を、Uni-motionさんのモーモー調査というものでやっています。

これを見ると長時間運用のために60Hzを使う人に目が行きがちですが、144Hzで運用している方が結構どころか、かなりいることがわかります。

VRchat上で144ヘルツ出すためには、MocapForAllの場合は、AIによる処理速度が144fps以上必要だということです。たぶん。

60~144位出ていれば、VRchat上ではそこそこ使えるということです。

では現状30から60くらいしかないものを、144までこの状態までfpsを上げるためには、どうすればよいのか?

そう考えると、解像度を下げるだけでなく、切り取りも正確に読み込むなどほかの要素も重要になってくるのですが、やっぱりUSBの長さを短くすることがとても大切なのです。

「USB2.0」の壁

USBの伝送速度は一番ネックです。

「同じ速度で遅延なく写真をとる」ために必要なことは、PCをカメラとカメラの間において、延長ケーブル「なし」か同じ品質、同じ長さのケーブル、同じメーカーのもので運用する必要があります。(もしくは、ほとんど減衰しないで、AC電源などにつなげて給電するような高いケーブルを買う)

僕は、これが重要だとたどり着くのに2か月かかりました。

というのも、USB2.0は理論値よりも少し低いぐらいだろーと思っていたからです。

でも実際は違いました。

とても遅かったのです。
USB2.0の延長ケーブルで運用していた時の記録がこちらです。

実は30-45fpsです。ここは一番軽いワールドのようなものなので、実際やると20位まで下がっちゃいます。

で、USB3.0の延長ケーブルを使っているときがこちら

見てわかりますか?足の動きが俊敏になっていませんか?
これがfpsの速さがわかるポイントです。

明らかにUSB3.0延長ケーブルを使っている方がなめらかじゃありません?

この映像は、長時間駆動して50fpsなので、USB2.0延長ケーブルを使うとどれくらい遅くなるのか分かったかと思います。

では、直でさすとどうなるのか?結果がこちらです。

で、もっともよい条件でやったのがこちら

また、指トラッキングをやった時の結果がこちら
1024×???の高い解像度でも60fps出ます。

といったように、fps換算すると、USBの接続方法を直刺しに変更するだけで、fpsが20→85位変わります。後はソフトの調整です。

しかし、さらっと書いてありますが、ここまで上げるのに部屋の掃除、改造、レイアウト変更ということが必要だったため、20→85までよりも、85→100までの方がはるかに時間がかかります。

で、105以上となると金銭的に何を投資するかが重要になってきます。

なので、まず、MocapForAllのfpsを上げることで一番大切なのは、USB2.0の規格を十分に理解し、直さしで運用することです。

それではまた!続きを書きます