【HTC Vive】コントローラ2本でクロマキー合成をする方法
HTC Viveでクロマキー合成をするためにはカメラポジション算出の為コントローラがもう一本必要となります。
(合計3本のコントローラ)
アメリカではコントローラの単品販売が始まりましたが日本ではまだのようなので、クロマキー合成するにはHTC Viveをもう1セット購入する必要があります。
コントローラ2本でクロマキー合成をするための仮想空間内カメラ作成手順となります。
2本のコントローラでクロマキー合成をする原理
SteamVR内では3本目のコントローラにExternalCameraが割りあたってますので、仮想コントローラを作成してあたかも3本目のコントローラがあるかのように振る舞います。
やり方
1. Virtual Controller Driverのダウンロード&展開
http://secondreality.co.uk/MixedRealityTwoController-0-0-3.zip
ここからVirtual Controller Driverをダウンロードして展開します。
2. Virtual Controller Driverのセットアップ
展開すると中に【virtualcontroller】というフォルダーがありますので、フォルダーごとそのままSteamVRのドライバーが入ってるところにコピーします。
C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\
通常は上記のフォルダにドライバーがありますので、そのままコピーしてDLLは以下のパスに入ります。
C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\virtualcontroller\bin\win64\driver_virtualcontroller.dll
3. 【steamvr.vrsettings】を設定し【activateMultipleDrivers】をONにします
【steamvr.vrsettings】は通常は以下にあります。
C:\Program Files (x86)\Steam\config\steamvr.vrsettings
メモ帳か何かで開いて、最後に
"activateMultipleDrivers" : true
追加します。
(前の行の最後にカンマを忘れないこと、記述を間違えるとSteamVRが立ち上がらなくなります)
- サンプル
{
"camera" : {
"enableCamera" : true
},
"steamvr" : {
"background" : "C:\\Program Files (x86)\\Steam\\steamapps\\common\\SteamVR\\resources\\backgrounds\\viveNight.png",
"mirrorViewGeometry" : "0 0 1080 600",
"activateMultipleDrivers" : true
}
}
3. Virtual Controller Driverを認識させる
設定に問題がなければこれで認識します。
- 一度SteamVRを終了します
- SteamVRが終了している状態で2本のコントローラの電源を入れます
問題がなければ3本目のコントローラが出てきます。
4. 該当するUnityコンテンツのフォルダー内に【externalcamera.cfg】を作成して実行します
該当するUnityコンテンツのフォルダーに【externalcamera.cfg】を作成します
中身は下記のような感じです。
x=0
y=0
z=0
rx=0
ry=0
rz=0
fov=45
near=0.1
far=1000
【externalcamera.cfg】を作成後、Unityコンテンツを実行すると画面が4分割になり、左下が仮想空間内の仮想カメラとなります。
カメラの位置合わせ
3本目のカメラの原点はベースステーション1が基準となってます。
先ほど展開したMixedRealityTwoController-0-0-3.zipに【cameraAlign.exe】というUnityコンテンツがあり、このコンテンツで仮想空間内で【externalcamera.cfg】を作成できます。
- グリップを握れば放射線状に伸びるカメラの座標系が表示
- セーブをクリックすると、動的に【externalcamera.cfg】が作成
作成された【externalcamera.cfg】を該当するUnityコンテンツに持っていき、リアルと仮想のカメラのポジションを合わせることができます。
いちいち【externalcamera.cfg】を書き変えてコンテンツの再起動がめんどくさい
SteamVR_ExternalCamera.csを修正することで、動的にexternalcamera.cfgを読ませることが出来ます。
以下、ソース追加箇所です。
using System.IO;
・
・
・
bool configHasChanged = true;
void Start()
{
var root = Directory.GetParent(Application.dataPath).FullName;
FileSystemWatcher watcher = new FileSystemWatcher(root, "externalcamera.cfg");
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.EnableRaisingEvents = true;
watcher.Changed += (a, b) => { configHasChanged = true; };
}
void Update()
{
if (configHasChanged)
{
ReadConfig();
cam.fieldOfView = config.fov;
var offset = cam.transform;
offset.localPosition = new Vector3(config.x, config.y, config.z);
offset.localRotation = Quaternion.Euler(config.rx, config.ry, config.rz);
configHasChanged = false;
}
}
参考
https://steamcommunity.com/app/358720/discussions/0/405694031549662100
http://secondreality.co.uk/blog/how-to-create-mixed-reality-videos-for-the-vive-with-two-controllers/