しばらくLookingGlassから離れていたら、僅か数ヶ月というのに随分とテックデモが充実していますね。
GWを使って遅ればせながら#るきはくや#るきみとを辿って情報収集をしています。
その中でも@koichi3さんの「ディスプレイ複数視点映像の未来」が素晴らしかったので、まずはLookingGlass+複数カメラで何かゲームが作れないかを考えつつ自分でも試してみました。
あと、LookingGlass以外ではハサミ型の力触覚デバイスも気になりました!
はじめに
やっていることは「ディスプレイ複数視点映像の未来」と全く同じです。
実装方法についてもほぼ同じ内容なので、まずは以下の資料を読むことをお勧めします。
検証環境はUnity2018.3.13f1+HoloPlaySDK-0.1.4 です。
(HoloPlaySDK-1.0.0だとLookingGlassが認識されないんです…)
結果
まずは結果から。
LookingGlassの左半分が現実空間、右半分が霊的空間で、それぞれの空間で出来ることをやってクリアしていく~みたいな内容を考えていたんですが、ネタ切れでゲーム自体は没に。
というか「別に切り替えはボタン操作でいいんじゃないの?」の一言で撃沈…
ちなみにQuilt画像はこんな感じになっています。
中央の黒部分は左右の画面が直接混ざらないようにするための緩衝領域です。
実装
没ったゲームは結構面倒な処理になっているのでシンプルなシーンで説明することにします。
LookingGlass上で実行するとこんな感じです。
分かりやすいようにカメラ毎に背景色を変えています。
シーン上のカメラ(Capture)はこんな感じでユニティちゃんの正面と左右の合計3個配置しています。
カメラ(Capture)の追加はQuiltのInspectorのボタンで出来ます。
Quilt内で各CaptureをレンダリングしQuilt画像上に配置します。
この配置を制御することで、LookingGlassを見る角度にあわせた表示を行えます。
この辺は公式資料の説明が分かりやすいです(いつのまにか日本語に!)
https://docs.lookingglassfactory.com/ja/Appendix/how-it-works/
もしカメラの切り替わり境界が気になる場合は黒画面等を入れることで緩和できます(3枚ぐらいあれば十分)
複数のCaptureをレンダリングする部分はQuilt.csのOnRenderImageメソッド内です。
やっていることは簡単で、出力するQuilt画像上の位置にあわせてif分でCaptureを切り替えているだけです。
今回はあくまでテストなので出力は45枚・Capture3個決め打ちのコードになっています
...
// render views
for (int i = 0; i < tiling.numViews; i++)
{
// broadcast the onViewRender action
if (onViewRender != null && Application.isPlaying)
onViewRender(i, tiling.numViews);
// タイル位置に合わせてCaptureを切り替える
var capture = captures[0];
if ( i >= 0 && i < 12)
// 左
else if (i >= 12 && i < 15)
continue; // 黒
else if ( i >= 12 && i < 30)
capture = captures[1]; // 中央
else if (i >= 30 && i < 33)
continue; // 黒
else if ( i >= 33)
capture = captures[2]; // 右
if (!capture || !capture.isActiveAndEnabled)
continue;
...
これだけで複数Capture対応のレンダリングが出来ました。
汎用的に使うのであれば、出力タイル枚数依存しない処理や設定するパラメータはInspectorに出した方がいいですね。
まとめ
なかなかLookingGlassを活かしたゲームを考えるのは難しいです。
まだHoloPlaySDK-1.0.0は使っていませんが、もしかしたらもっと簡単に複数カメラ対応出来るかもしれません。
© Unity Technologies Japan/UCL
http://unity-chan.com/contents/guideline/