お金がない人のためのバーチャルキャスト環境(2018年当時)

<font color="red">**この記事は 2018年当時の情報を元に書かれています。**</font>
ニコニコのユーザーブロマガが2021年10月に終了するために記事を移行したものになります。現在となってはバーチャルキャストも機能増強が図られ、この通りとは行かないはずです。
https://ch.nicovideo.jp/kou1niko/blomaga/ar1579475

# 前書

2018/04/13のバーチャルキャスト発表、2018/04/27、2018/04/28の超会議でのバーチャルYoutu’BAR'でのデモ。
すごくバーチャルキャストは面白いもので、大変楽しそうに見えます。
やってみたいですね！

そこで思ったことがありました。

* バーチャルキャストは大変楽しそうに見える
* 基本、紹介する人はフルスペックのＶＲ環境を進める
    * 実際それは正しい！
    * <font color="red">**Vive買うべき**</font>
* ただし、いきなり約２０万円コースなのは腰が引けるのはわかる
* ちゃんとフルの体験をしないと謝った印象を得てしまう危険性は指摘されている
* フルの体験でないことを意識してほしい
* <font color="red">**Viveを買うのが一番（２回目）**</font>

<font color="red">**Viveを買うのが一番です(3回目)**</font>

しかし、予算の制約は新規参加者へのハードルではあります。そこに少しなんとか出来るのかもと調べ始めた話を以下に書きます。
主な内容は以下のとおりです。

1. 作ろうと思った経緯
2. 前提条件
3. 機材と予算
4. セットアップ
5. 使い方

# 作ろうと思った経緯

バーチャルキャストとVRChatを比較してみると以下のような感じに見えます

|要素|VRChat|バーチャルキャスト|
|:-------:|---------------------------|-----------------------------------|
|ワールド|広い所多数|部屋様の空間<br>ユーザ登録出来るのは360度jpeg画像|
|モデルと参加者|制限しない限り人は増える<br>ハイポリのモデルも多い？|最大6名(2018年06月現在)<br>プリセットのモデルは比較的低負荷|
|その他|制限は少なく|多量のコメントが降った場合は高付加？<br>ネットワークの負荷注意かも|

恐らく、バーチャルキャストは３Ｄ負荷は高くなくて、ネットワーク性能を要求するアプリなのでは？と思ったのが始まりです。

* VRreadyでなくても出来そうに見える
* ボトルネックのその1であるPCの値段は抑えられるのかも知れない
* だとすれば、何処まで安価に出来るか調べてみても良いはず！

上記想定があってるとしてそれを元に構成を考えて見ましょう。

## 1．前提条件

前提条件として以下を考えています。 比較的、すでに持っていることが多いものを変わりに使えれば、そのぶんお金を抑えられるかもしれません。

* Corei系のＰＣのデスクトップを持っている
    * 絵を描くとか、MMOなどで一応ＰＣは持っているけど、3Ｄ性能は高くないと言う人は多いと思う為
* 5インチ以上のスマートフォンを持っている
    * スマートフォンは持っていない人は少ないでしょう。今回、これをＨＭＤとして使います
* ブロードバンド環境
    * モバイルの環境は厳しいと思います。せめて有線でつながっているネットワーク環境が必要と思います。
* 高速WiFi
    * 優先でも良いですが、WiFiのほうが楽です。

## 2．機材と予算

いくらか試行錯誤した感じでは以下が必要なはずです。自分の入手方法は記載しますが、もっと良い入手方法があればそれを使ってください。

必要なハードウェア

|名称|個数|金額|備考|
|:---------------------:|:-----:|:------:|----------------------------------------------------|
|デスクトップPC|1|−|これは持っていることを前提とします。|
|5インチ級<br>スマートフォン|1|−|これも持っていることを前提とします。|
|GeForceGT710|1|3980円|ケーズデンキでこの値段でした。|
|PSEye|2個|約4000円|Amazonの中古で2000円×2個でした。|
|PlayStationMove|2個|約8000円|中古で約4000円×2個です。|
|ピンポン球|1個|100円位|後ほど頭の位置を決めるのに使います。|
|LEDライト|1個|300円位|ピンポン球と組み合わせて頭の検知に使います。|
|USBBluetooth<br>ドングル|1個|1500円位|PlayStationMoveを使用するのに使います。恐らく今の市販のものは大丈夫と思います。|

## 3. 必要なソフトウェア

|名称|金額|備考|
|:-------------------:|:---------------:|-----------------------------------------------------------------------------------------------------|
|RriftCat|€12.50(約1700円)|スマートフォンをPC用のHMDにするためのソフトです。<br>連続で10分以内だったら0円なのでやってみて良さそうだったらお金を払ってください|
|PSMoveSteamVRBridge|-|HMDとコントローラの位置を特定するためのアプリになります。<br>本家PSmoveServiceにStaemVR接続用のパッチがあたった物です。コチラだけをダウンロードしてインストールすれば良いです。|
|FreePIE|ｰ|ReftCatでの位置の移動はFreeTrackという形式で連携できますが、PSMoveServiceが出す移動情報をReftCatに渡すために使用します。|
|Steam|ｰ|SteamVRをインストールするために必要です|
|SteamVR|−|VR系のハードウェアとソフトウェアの仲立をします。|
|バーチャルキャスト|ｰ|最終目標です。これをやるために一連のものを揃えるのですｗ。|

**合計18102円！(約)**

絞るだけ絞ってみた結果こんな感じになりました。 
如何でしょうか？手持ちのPCが使えること、高性能なスマートフォンは皆さん持っている可能性が高いのでコストをそちらに負担してもらう算段になります。

## ４．セットアップ

KAWAさんが先に既にまとめられているものがあります。
基本はここでやられている内容をそのままやっております。 
[PSVRのPC利用方法手順](https://www.nicovideo.jp/mylist/59515669)

正しい内容はこちらにあります。参考にさせていただいています。

### ハードウェアの入手

必要なハードウェアを手に入れましょう。

1.  グラフィックボード<br>今回は安価に出来ることがメインの目的なので、GT710を購入しました。もっと良いものが手に入れられればそれが良いです。予算と相談してください。
2.  PSEye<br>最低2個入手してください。当然新品では手に入りません。Amazonでは中古の入手が可能なようです。
3.  PlayStation Moveコントローラ<br>CECH-ZCM1J が必要です。PS3用のPlayStation Moveコントローラです。PS4用と思われる 、CECH-ZCM2J は使用できません。「2J」は駄目です。充電端子が mini-Bの物になります。PS4用の物が最新となっておりそれはmicro-Bとなっています。そちらは使えません。これをいかに安く手に入れるかが勝負です。
4.  ピンポン玉とLEDライト

### ハードウェアの設置と準備

基本は上記のKAWAさんの動画と、[PSMoveServiceの公式Wiki](https://github.com/cboulay/PSMoveService/wiki)が正しいです。


1.  グラフィックボード
とりあえず普通につけてくだい
2.  PSEye
    後述のドライバをインストールするまでは接続を待ってくださいKAWAさんの動画内でも説明ありますが、注意点。
    * 全面ポートが実は内臓のUSBハブを介して接続する方式になっていて、上手く動かないことがありました。通信速度を稼げる必要があるためです。<br>設置として、広い範囲を2つのカメラで射界に入っている必要があるので、できるだけ天井に近い箇所で、2個を話して設置する必要があります。自分はこんな感じでカーテンレールの両端に結束バンドで固定しています。
 ![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/1e190bde-c032-4ed9-2c84-2a80cc8e3ab7.png)
3.  PlayStation Moveコントローラ
セットアップ時にできるだけ満充電でないと確かに認識に失敗しがちです。PCからデバイスとして認識された状態でないと、充電が始まりませんでした。充電中はつけっぱなしのPCが必要かもしれません。
4.  ピンポン玉とLEDライト
LEDライトとピンポン玉をくっつけます。当初は穴を開けて、中から照らさないとダメかと思いましたが、そのまま貼り付けたほうが均一に光るようです。KAWAさんも書かれていましたが、エネループなどで動くものがよく、自分が買ったのは40ルーメンを超えるものになりました。明るいほどよいです。ついてる白いのはフリスクのフタ部分です。平らな所に貼り付けるためにこうしています。<br>
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/7711f111-4027-f137-1735-447c974775c4.png)
<br>
最終的にはこのような取り付けになります。<br>
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/f2e5121c-a1e7-a374-069d-3514e8f343f3.png)


### ソフトウェアのセットアップ

1.  グラフィックボード
とりあえず普通にドライバを入れてください。
2.  PSEye
[公式Wiki](https://github.com/psmoveservice/PSMoveService/wiki#initial-setup-documentation)に使用可能なドライバが複数書いてありますが、現在は「IPISoft PS3EYEDriver」で問題ないようです。<br>ドライバを1つ入れて複数のPSEyeが使えるようになるドライバは限られているとのことです。PS3EYEDriver をインストールした後にPSEyeをUSBに接続してください。<br>このあとの、PSMoveSteamVRBridgeのファイルを展開したら、test_camera.exe を使って必ず動作確認してください。<br>60fps出てないときは上記の通り、USBに指す箇所が悪い可能性が高いです。
3.  PSMoveSteamVRBridge
基本KAWAさんの動画([PSVRのPC利用方法手順Part01【PsMoveService設定編】](https://nico.ms/sm31612110))を元に実施しています。 

    1. GitHubからのダウンロード
        https://github.com/HipsterSloth/PSMoveSteamVRBridge からダウンロードします。GitHub系から何かをダウンロードすることも今後出てくると思いますが、上の「Release」と書いてあるところをたどるとダウンロードするところに移ることができます。2018/06/29現在の最新は、「PSMoveSteamVRBridge_1.4.2.zip」になります。
    2. Zipファイルの展開
       基本はZipを展開して、任意のフォルダに配置してください。セットアップ時に新規にファイルを作成する場合があるので、更新可能なフォルダに展開する必要があります。私は、一時期「C:\Program Files(x86)」以下に展開していましたが上手く行かなくなり、マイドキュメント以下に展開しました。
    3. PSMovieService.exe の起動
       こんな感じの画面が出てきます。これは背後で動くタイプのアプリなので特に画面は存在しません。背後で通信を行うので、UAIのセキュリティダイアログが出ます。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/93112c54-9b53-fbeb-10ef-fc09a699c7dd.png)

    4. 各種設定
        上記動画を元に実施していきます。
        1.  コントローラの設定
            05:56 周辺を元にやってみてください。
        2.  終了して、仮想HMDの設定
        3.  色のキャリブレーション
             15:47 周辺後半で「Video Filter Mode」を「Masked」にして確認しますが、PSMoveServiceでコントローラがマーキングされていると、バツ印がつく時があるので、それで色が欠ける場合もあります。自分はそれで上手く色が認識できてないと思いこんでハマりました。<span style="color:rgb(51,153,102);">**部屋の反射などでノイズ源は多数ある場合があります。何度かやって上手く認識できない場合、「部屋の明かりを消してやってみる」**</span> は自分の場合では大変有効な手段でした。ただし、部屋の明かりを消した状態で補正されるので、実際にやるときも部屋の灯を消すことになります。
        4.  キャリブレーションマットを使った、位置検知設定
            * キャリブレーションマットを元にコントローラの位置を指定することで、2つのカメラが空間に対してどの様な位置にあるか調べる処理になります。
            * 下の図の#0と#1の所にカメラがあると認識出来るようになります。
            * 「Looks Goood！」を押すと始まりますが、その前に「Next Tracker」を何回か押してみて光っている所にバツ印がついて認識されているか確認して下さい。
            * 上記の色のキャリブレーションに失敗していて、2個のカメラの内、１つでは認識されてないときがあります。その時は色のキャリブレーションをやり直してください。
            * ５箇所の位置を測定しますが、「コントローラを横にして待受」⇒「縦にして静止したら測定開始」⇒「終了したらまたコントローラを横にして待受」の繰り返しで５回実施します。
            * 終了後「Test Tracking Pose」で位置がちゃんと認識できているか確認します。
            * もし、荒ぶっている場合は色のキャリブレーションが上手く言ってない場合が多いでした。「Tracker Video」を見てみると、カメラでの認識内容がわかるのでどちらのカメラで認識出てきていないか調べてみましょう。
        5.  仮想HMDを設定してピンポン玉の光球を割り当てる
            本来はPSVRをHMDとして想定しているのですが、今回はスマートフォンをHMDとして使用します。なので、HMDにくっつけたピンポン玉をHMDとして認識させる必要があります。作業内容は PSMoveSeviceのVirtual-HMDs に一通りかかれてはいます。
            1.  動かしている、PSMovieService 関連のものを全て終了します。
            2.  上記Wikiの「Initial Setup」に準じて実施します。
                「C:\users\自分のユーザ名\AppData\Roaming\PSMoveService\HMDManagerConfig.json」を作成、または編集します。以下のような内容になるはずです。<br>```{ "version": "1", "virtual_hmd_count": "1"}```
                1.  一度、PSMoveServiceを起動します。 「C:\users\自分のユーザ\AppData\Roaming\PSMoveService\VirtualHMD__0.json」 が作成されます。
                2.  PSMoveSeviceを終了します。
                3.  上記のVirtualHMD__0.json をエディタで開いて、bulb_radius の値を 2 にしてください。ピンポン玉はPSMoveの白い玉より小さく、2cm位だからです。
                4.  PSMoveServiceを起動します。
                5.  PSMoveConfigTool.exeを起動して、HMD Settings に移動します。
                6.  Tracker Settings" から "Calibrate HMD Tracking Colors" に移動して、コントローラと同様に色のキャリブレーションを実施してください。白いピンポン玉をつけた場合は、昼白色なので、色は「yellow」か「orange」にして下さい。
                7.  ここまですると、「Tracker Setting」にHMDの「Test Tracking Pose」が使えるのでHMDの位置が検知できているか調べましょう。
       6.  PSMoveSteamVRBridgeのライブラリをSteamVRに登録します。
            1.  PSMoveServiceを展開したディレクトリにある、「SteamVR_InitialSetupWin64.bat」を起動して下さい。完了後に同じフォルダに「SteamVR_SetDriverVarsWin64.bat」というファイルが増えていることを確認して下さい。
            2.  SteamVR_ReinstallDriverWin64.bat を実行して下さい。「SteamVR_SetDriverVarsWin64.bat」が無いと正常終了しません。今後、PSMoveServiceの設定を変更したら都度、SteamVR_ReinstallDriverWin64.batを実行することになります。
        7.  FreePIEをインストールして下さい。
        8.  PSMoveFreepieBridge をインストールします
            1.  https://bitbucket.org/hawkinse/psmovefreepiebridge/downloads/ から最新のファイルをダウンロードします。
            2.  ダウンロードしたファイルを、ドキュメントフォルダで展開します。
        9.  ReftCat+VRidge
            https://riftcat.com/vridge からダウンロードして下さい。「Tranking source」を「Phone orientation and FreeTrack position」にすることを除けば基本は特にいじらずインストールしてください。Android上のGoogle Playから「VRidge」をインストールして下さい。
        10.  バーチャルキャストのインストール
             https://virtualcast.jp/ からインストールして下さい

## ５．使い方

ここまで来たら使い始めましょう。

1.  PSMoveSevrviceを起動する
    セットアップ時と同様にPSMoveService.exe を起動します。
2.  PSMoveFreepieBridge を起動する
    1.  PSMoveFreepieBridge.exe を起動します。
    2.  こんな画面が出ますので、HMDの「１」を指定したあと、0番の光源をHMDに設定しているはずなので0とします。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/97027936-d48c-e543-1dcb-680729934aa4.png)
3.  FreePIEを起動する
    1.  起動後に、Openから、PSMoveFreepieBridge の展開ディレクトリにある、「freepie example script.py」を選択します。<br>
        ![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/7fa801f4-96ba-23c3-7731-cf10ab9c9b24.png)
    2.  ScriptからRun scriptを選んで起動します<br>
        ![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/6b3899f9-af69-fbea-e50f-2e303862c90a.png)
4.  RiftCatを起動する
5.  スマートフォンでVRidgeを起動する
    1.  「Play SteamVR」を選択してStemaVRを起動して下さい。しばらく待っているとSteamVRの画面が下に出てきます。
        ![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/6c7a43c7-d8d1-816b-f3fb-d03132cf261f.png)

6.  StemaVRが自動で起動する
    1.  以下の画面のようにヘッドセット、コントローラ、カメラが認識されてる状態になっていれば問題ありません。
        ![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/45033951-b060-9062-3c3b-ce33751ff191.png)
    2.  大体、このあと、自動でSteamVR Homeが起動を始めますが、現在の構成にはいささか重いです。上にSteamVRって書いてあるところをクリックするとメニューが出てきます。「設定」に移行しましょう。
        ![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/1865cee6-389c-dc66-4cc3-a410b5d857a6.png)
    3.  一般の「SteamVRホームベータ」のチェックボックスを外します。
        1.  ヘッドセットに以下のような画像が出ているはずです。これは、ヘッドセットとコントローラの位置関係を設定する為の設定になります。これがずれると、コントローラを持った手を目一杯伸ばしても、アバターの手が伸びなくなります。手順は以下になります。これは2個のコントローラ双方でやる必要があります。
            ![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10406/53cd5a5f-de1e-2f5c-3282-f650559f8e79.png)
            1.  正面に相当するカメラの方を向きます。
            2.  コントローラの丸いところを、HMDの自分の目と目の中間あたりに持っていきます。
            3.  トリガーを自分から見て前方に向けます。
            4.  SelectとStartを同時押しします。

7.  バーチャルキャストを起動する
    1.  最初のキャリブレーション時にコントローラの左右が出てくると思うので注意して下さい。
    2.  キーコンフィグは以下のようです。
        1.  トリガー ⇒ 同じくトリガー
        2.  △ ⇒ バーチャルキャストのメニュー表示
        3.  START ⇒ 掴み カメラの視点切り替えや、○✕アイテムの音出し等
        4.  Moveボタン押し ⇒ タッチパッド操作開始
            1.  押しっぱなしでコントローラを前に ⇒ タッチパット上
            2.  押しっぱなしでコントローラを手前に ⇒ タッチパット下
            3.  押しっぱなしでコントローラを左に ⇒ タッチパット左
            4.  押しっぱなしでコントローラを右に ⇒ タッチパット右
    3.  バーチャルキャストを楽しみましょう！

# 最後に

これは「お金がない人の為のバーチャルキャスト環境」の作り方です。
解像度が足りなかったり、トラッキングが足りなかったりします。
微妙に不安定でもありますし、PS3用のPalyStation Moveを手に入れる必要があって大変です。
あくまでお金を出す前の実験ができればと書いてみました。


もう一度書きます。
<font color="red">**HTC Viveを買うのが一番正しいのです！**</font>
最後にこれではフルトラッキングでないためにできない土下座でみゅみゅ＝サンとHTC Japanの「にしかわいい」こと西川さんに土下座で締めたいと思います。
＿○／|＿ ゴメンナサイ